From e2fc6b5d61a9d75035150e70dac7969cf16b705b Mon Sep 17 00:00:00 2001 From: ShaoHua <345265198@qqcom> Date: Mon, 29 Dec 2025 00:41:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=94=9F=E6=88=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 2 + .gitattributes | 1 + .gitignore | 274 + Directory.DotSettings | 23 + Hua.Abp.Demo.abpmdl | 109 + Hua.Abp.Demo.abpsln | 58 + Hua.Abp.Demo.slnx | 23 + NuGet.Config | 13 + README.md | 67 + angular/.editorconfig | 16 + angular/.eslintrc.json | 50 + angular/.gitignore | 47 + angular/.prettierrc | 5 + angular/.vscode/extensions.json | 13 + angular/Dockerfile | 15 + angular/Dockerfile.local | 5 + angular/README.md | 33 + angular/angular.json | 210 + angular/dynamic-env.json | 2 + angular/e2e/protractor.conf.js | 32 + angular/e2e/src/app.e2e-spec.ts | 28 + angular/e2e/src/app.po.ts | 11 + angular/e2e/tsconfig.json | 13 + angular/karma.conf.js | 43 + angular/nginx.conf | 30 + angular/package.json | 63 + angular/scripts/README.md | 199 + angular/scripts/remove-symlinks.ps1 | 50 + angular/scripts/setup-symlinks.ps1 | 106 + angular/scripts/symlink-config.ps1 | 33 + angular/src/app/app.component.ts | 13 + angular/src/app/app.config.ts | 42 + angular/src/app/app.routes.ts | 31 + angular/src/app/book/book.component.html | 140 + angular/src/app/book/book.component.ts | 152 + angular/src/app/home/home.component.html | 321 + angular/src/app/home/home.component.scss | 27 + angular/src/app/home/home.component.ts | 20 + angular/src/app/proxy/books/book-type.enum.ts | 15 + angular/src/app/proxy/books/book.service.ts | 56 + angular/src/app/proxy/books/index.ts | 3 + angular/src/app/proxy/books/models.ts | 20 + angular/src/app/route.provider.ts | 28 + angular/src/assets/.gitkeep | 0 .../images/getting-started/abp-blog-white.svg | 11 + .../images/getting-started/abp-blog.svg | 11 + .../getting-started/abp-community-white.svg | 11 + .../images/getting-started/abp-community.svg | 11 + .../getting-started/abp-support-white.svg | 11 + .../images/getting-started/abp-support.svg | 11 + .../assets/images/getting-started/bg-01.png | Bin 0 -> 27830 bytes .../assets/images/getting-started/book.png | Bin 0 -> 337312 bytes .../assets/images/getting-started/discord.svg | 7 + .../images/getting-started/img-blog.png | Bin 0 -> 42029 bytes .../images/getting-started/img-community.png | Bin 0 -> 65374 bytes .../images/getting-started/img-support.png | Bin 0 -> 33989 bytes .../images/getting-started/instagram.svg | 23 + .../images/getting-started/stack-overflow.svg | 4 + .../assets/images/getting-started/x-white.svg | 3 + .../src/assets/images/getting-started/x.svg | 3 + .../assets/images/getting-started/youtube.svg | 11 + .../assets/images/login/login-bg-img-dark.svg | 175 + .../assets/images/login/login-bg-img-dim.svg | 182 + .../images/login/login-bg-img-light.svg | 167 + angular/src/assets/images/logo/icon-lite.svg | 8 + angular/src/environments/environment.prod.ts | 35 + angular/src/environments/environment.ts | 31 + angular/src/favicon.ico | Bin 0 -> 102968 bytes angular/src/index.html | 13 + angular/src/main.ts | 12 + angular/src/polyfills.ts | 54 + angular/src/styles.scss | 40 + angular/src/test.ts | 16 + angular/start.ps1 | 2 + angular/tsconfig.app.json | 15 + angular/tsconfig.json | 23 + angular/tsconfig.spec.json | 18 + angular/web.config | 21 + angular/yarn.lock | 5552 +++++++++++++++++ common.props | 21 + .../run-profiles/Default.abprun.json | 42 + etc/scripts/initialize-solution.ps1 | 50 + etc/scripts/migrate-database.ps1 | 30 + .../Books/BookDto .cs | 15 + .../Books/CreateUpdateBookDto.cs | 21 + .../Books/IBookAppService.cs | 15 + .../DemoApplicationContractsModule.cs | 26 + .../DemoDtoExtensions.cs | 28 + .../Hua.Abp.Demo.Application.Contracts.abppkg | 3 + ....Application.Contracts.abppkg.analyze.json | 146 + .../Hua.Abp.Demo.Application.Contracts.csproj | 24 + .../DemoPermissionDefinitionProvider.cs | 26 + .../Permissions/DemoPermissions.cs | 18 + .../Books/BookAppService.cs | 69 + .../DemoAppService.cs | 14 + .../DemoApplicationMappers.cs | 21 + .../DemoApplicationModule.cs | 26 + .../Hua.Abp.Demo.Application.abppkg | 3 + ...a.Abp.Demo.Application.abppkg.analyze.json | 240 + .../Hua.Abp.Demo.Application.csproj | 25 + .../Properties/AssemblyInfo.cs | 2 + .../DbMigratorHostedService.cs | 51 + .../DemoDbMigratorModule.cs | 14 + src/Hua.Abp.Demo.DbMigrator/Dockerfile | 5 + src/Hua.Abp.Demo.DbMigrator/Dockerfile.local | 6 + .../Hua.Abp.Demo.DbMigrator.abppkg | 1 + .../Hua.Abp.Demo.DbMigrator.csproj | 47 + src/Hua.Abp.Demo.DbMigrator/Program.cs | 39 + src/Hua.Abp.Demo.DbMigrator/appsettings.json | 16 + .../appsettings.secrets.json | 2 + .../Books/BookType.cs | 14 + .../DemoDomainErrorCodes.cs | 6 + .../DemoDomainSharedModule.cs | 82 + .../DemoGlobalFeatureConfigurator.cs | 20 + .../DemoModuleExtensionConfigurator.cs | 71 + .../Hua.Abp.Demo.Domain.Shared.abppkg | 3 + ...Abp.Demo.Domain.Shared.abppkg.analyze.json | 118 + .../Hua.Abp.Demo.Domain.Shared.csproj | 37 + .../Localization/Demo/ar.json | 42 + .../Localization/Demo/cs.json | 38 + .../Localization/Demo/de-DE.json | 42 + .../Localization/Demo/en-GB.json | 38 + .../Localization/Demo/en.json | 38 + .../Localization/Demo/es.json | 42 + .../Localization/Demo/fi.json | 42 + .../Localization/Demo/fr.json | 42 + .../Localization/Demo/hi.json | 42 + .../Localization/Demo/hu.json | 42 + .../Localization/Demo/is.json | 38 + .../Localization/Demo/it.json | 42 + .../Localization/Demo/pt-BR.json | 42 + .../Localization/Demo/ro-RO.json | 38 + .../Localization/Demo/ru.json | 42 + .../Localization/Demo/sk.json | 42 + .../Localization/Demo/sv.json | 42 + .../Localization/Demo/tr.json | 42 + .../Localization/Demo/zh-Hans.json | 42 + .../Localization/Demo/zh-Hant.json | 38 + .../Localization/DemoResource.cs | 9 + .../MultiTenancy/MultiTenancyConsts.cs | 10 + .../BookStoreDataSeederContributor.cs | 47 + src/Hua.Abp.Demo.Domain/Books/Book.cs | 15 + .../Data/DemoDbMigrationService.cs | 226 + .../Data/IDemoDbSchemaMigrator.cs | 8 + .../Data/NullDemoDbSchemaMigrator.cs | 15 + src/Hua.Abp.Demo.Domain/DemoConsts.cs | 11 + src/Hua.Abp.Demo.Domain/DemoDomainModule.cs | 54 + .../Hua.Abp.Demo.Domain.abppkg | 3 + .../Hua.Abp.Demo.Domain.abppkg.analyze.json | 256 + .../Hua.Abp.Demo.Domain.csproj | 33 + ...PasswordPolicySettingDefinitionProvider.cs | 34 + .../OpenIddictDataSeedContributor.cs | 118 + .../Properties/AssemblyInfo.cs | 3 + .../Settings/DemoSettingDefinitionProvider.cs | 12 + .../Settings/DemoSettings.cs | 9 + .../EntityFrameworkCore/DemoDbContext.cs | 101 + .../DemoDbContextFactory.cs | 37 + .../DemoEfCoreEntityExtensionMappings.cs | 44 + .../DemoEntityFrameworkCoreModule.cs | 67 + ...EntityFrameworkCoreDemoDbSchemaMigrator.cs | 33 + .../Hua.Abp.Demo.EntityFrameworkCore.abppkg | 3 + ...mo.EntityFrameworkCore.abppkg.analyze.json | 233 + .../Hua.Abp.Demo.EntityFrameworkCore.csproj | 38 + .../20251228134317_Initial.Designer.cs | 2131 +++++++ .../Migrations/20251228134317_Initial.cs | 1248 ++++ .../Migrations/DemoDbContextModelSnapshot.cs | 2128 +++++++ .../Properties/AssemblyInfo.cs | 2 + .../DemoHttpApiClientModule.cs | 38 + .../Hua.Abp.Demo.HttpApi.Client.abppkg | 3 + ...bp.Demo.HttpApi.Client.abppkg.analyze.json | 118 + .../Hua.Abp.Demo.HttpApi.Client.csproj | 32 + .../DemoBrandingProvider.cs | 19 + .../DemoHttpApiHostModule.cs | 281 + src/Hua.Abp.Demo.HttpApi.Host/Dockerfile | 5 + .../Dockerfile.local | 18 + .../HealthChecks/DemoDatabaseCheck.cs | 32 + .../HealthChecksBuilderExtensions.cs | 76 + .../Hua.Abp.Demo.HttpApi.Host.abppkg | 4 + .../Hua.Abp.Demo.HttpApi.Host.csproj | 60 + .../Pages/Index.cshtml | 127 + .../Pages/Index.cshtml.cs | 35 + .../Pages/_ViewImports.cshtml | 4 + src/Hua.Abp.Demo.HttpApi.Host/Program.cs | 63 + .../Properties/launchSettings.json | 27 + .../abp.resourcemapping.js | 11 + .../appsettings.Development.json | 2 + .../appsettings.json | 21 + src/Hua.Abp.Demo.HttpApi.Host/package.json | 8 + src/Hua.Abp.Demo.HttpApi.Host/web.config | 18 + .../wwwroot/global-scripts.js | 1 + .../wwwroot/global-styles.css | 8 + .../wwwroot/images/clients/angular.svg | 1 + .../wwwroot/images/clients/aspnetcore.svg | 1 + .../wwwroot/images/clients/blazor.svg | 1 + .../wwwroot/images/clients/swagger.svg | 8 + .../logo/leptonxlite/logo-dark-thumbnail.png | Bin 0 -> 10695 bytes .../images/logo/leptonxlite/logo-dark.png | Bin 0 -> 38171 bytes .../logo/leptonxlite/logo-light-thumbnail.png | Bin 0 -> 9230 bytes .../images/logo/leptonxlite/logo-light.png | Bin 0 -> 33228 bytes src/Hua.Abp.Demo.HttpApi.Host/yarn.lock | 306 + .../Controllers/DemoController.cs | 14 + src/Hua.Abp.Demo.HttpApi/DemoHttpApiModule.cs | 41 + .../Hua.Abp.Demo.HttpApi.abppkg | 3 + .../Hua.Abp.Demo.HttpApi.abppkg.analyze.json | 118 + .../Hua.Abp.Demo.HttpApi.csproj | 27 + .../Models/Test/TestModel.cs | 10 + .../Books/BookAppService_Tests .cs | 73 + .../DemoApplicationTestBase.cs | 9 + .../DemoApplicationTestModule.cs | 12 + .../Hua.Abp.Demo.Application.Tests.abppkg | 3 + .../Hua.Abp.Demo.Application.Tests.csproj | 20 + .../Samples/SampleAppServiceTests.cs | 34 + .../DemoDomainTestBase.cs | 10 + .../DemoDomainTestModule.cs | 12 + .../Hua.Abp.Demo.Domain.Tests.abppkg | 3 + .../Hua.Abp.Demo.Domain.Tests.csproj | 20 + .../Samples/SampleDomainTests.cs | 46 + .../Books/EfCoreBookAppService_Tests.cs | 10 + .../EfCoreSampleAppServiceTests.cs | 10 + .../DemoEntityFrameworkCoreCollection.cs | 9 + ...ntityFrameworkCoreCollectionFixtureBase.cs | 9 + .../DemoEntityFrameworkCoreFixture.cs | 11 + .../DemoEntityFrameworkCoreTestBase.cs | 8 + .../DemoEntityFrameworkCoreTestModule.cs | 77 + .../Domains/EfCoreSampleDomainTests.cs | 10 + .../Samples/SampleRepositoryTests.cs | 40 + ....Abp.Demo.EntityFrameworkCore.Tests.abppkg | 3 + ....Abp.Demo.EntityFrameworkCore.Tests.csproj | 21 + .../ClientDemoService.cs | 38 + .../DemoConsoleApiClientModule.cs | 30 + ....Demo.HttpApi.Client.ConsoleTestApp.abppkg | 3 + ....Demo.HttpApi.Client.ConsoleTestApp.csproj | 42 + .../Program.cs | 33 + .../appsettings.json | 17 + .../appsettings.secrets.json | 2 + test/Hua.Abp.Demo.TestBase/DemoTestBase.cs | 67 + .../DemoTestBaseModule.cs | 47 + test/Hua.Abp.Demo.TestBase/DemoTestConsts.cs | 6 + .../DemoTestDataBuilder.cs | 26 + .../Hua.Abp.Demo.TestBase.abppkg | 3 + .../Hua.Abp.Demo.TestBase.csproj | 45 + .../Security/FakeCurrentPrincipalAccessor.cs | 26 + test/Hua.Abp.Demo.TestBase/appsettings.json | 3 + .../appsettings.secrets.json | 2 + 244 files changed, 20445 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Directory.DotSettings create mode 100644 Hua.Abp.Demo.abpmdl create mode 100644 Hua.Abp.Demo.abpsln create mode 100644 Hua.Abp.Demo.slnx create mode 100644 NuGet.Config create mode 100644 README.md create mode 100644 angular/.editorconfig create mode 100644 angular/.eslintrc.json create mode 100644 angular/.gitignore create mode 100644 angular/.prettierrc create mode 100644 angular/.vscode/extensions.json create mode 100644 angular/Dockerfile create mode 100644 angular/Dockerfile.local create mode 100644 angular/README.md create mode 100644 angular/angular.json create mode 100644 angular/dynamic-env.json create mode 100644 angular/e2e/protractor.conf.js create mode 100644 angular/e2e/src/app.e2e-spec.ts create mode 100644 angular/e2e/src/app.po.ts create mode 100644 angular/e2e/tsconfig.json create mode 100644 angular/karma.conf.js create mode 100644 angular/nginx.conf create mode 100644 angular/package.json create mode 100644 angular/scripts/README.md create mode 100644 angular/scripts/remove-symlinks.ps1 create mode 100644 angular/scripts/setup-symlinks.ps1 create mode 100644 angular/scripts/symlink-config.ps1 create mode 100644 angular/src/app/app.component.ts create mode 100644 angular/src/app/app.config.ts create mode 100644 angular/src/app/app.routes.ts create mode 100644 angular/src/app/book/book.component.html create mode 100644 angular/src/app/book/book.component.ts create mode 100644 angular/src/app/home/home.component.html create mode 100644 angular/src/app/home/home.component.scss create mode 100644 angular/src/app/home/home.component.ts create mode 100644 angular/src/app/proxy/books/book-type.enum.ts create mode 100644 angular/src/app/proxy/books/book.service.ts create mode 100644 angular/src/app/proxy/books/index.ts create mode 100644 angular/src/app/proxy/books/models.ts create mode 100644 angular/src/app/route.provider.ts create mode 100644 angular/src/assets/.gitkeep create mode 100644 angular/src/assets/images/getting-started/abp-blog-white.svg create mode 100644 angular/src/assets/images/getting-started/abp-blog.svg create mode 100644 angular/src/assets/images/getting-started/abp-community-white.svg create mode 100644 angular/src/assets/images/getting-started/abp-community.svg create mode 100644 angular/src/assets/images/getting-started/abp-support-white.svg create mode 100644 angular/src/assets/images/getting-started/abp-support.svg create mode 100644 angular/src/assets/images/getting-started/bg-01.png create mode 100644 angular/src/assets/images/getting-started/book.png create mode 100644 angular/src/assets/images/getting-started/discord.svg create mode 100644 angular/src/assets/images/getting-started/img-blog.png create mode 100644 angular/src/assets/images/getting-started/img-community.png create mode 100644 angular/src/assets/images/getting-started/img-support.png create mode 100644 angular/src/assets/images/getting-started/instagram.svg create mode 100644 angular/src/assets/images/getting-started/stack-overflow.svg create mode 100644 angular/src/assets/images/getting-started/x-white.svg create mode 100644 angular/src/assets/images/getting-started/x.svg create mode 100644 angular/src/assets/images/getting-started/youtube.svg create mode 100644 angular/src/assets/images/login/login-bg-img-dark.svg create mode 100644 angular/src/assets/images/login/login-bg-img-dim.svg create mode 100644 angular/src/assets/images/login/login-bg-img-light.svg create mode 100644 angular/src/assets/images/logo/icon-lite.svg create mode 100644 angular/src/environments/environment.prod.ts create mode 100644 angular/src/environments/environment.ts create mode 100644 angular/src/favicon.ico create mode 100644 angular/src/index.html create mode 100644 angular/src/main.ts create mode 100644 angular/src/polyfills.ts create mode 100644 angular/src/styles.scss create mode 100644 angular/src/test.ts create mode 100644 angular/start.ps1 create mode 100644 angular/tsconfig.app.json create mode 100644 angular/tsconfig.json create mode 100644 angular/tsconfig.spec.json create mode 100644 angular/web.config create mode 100644 angular/yarn.lock create mode 100644 common.props create mode 100644 etc/abp-studio/run-profiles/Default.abprun.json create mode 100644 etc/scripts/initialize-solution.ps1 create mode 100644 etc/scripts/migrate-database.ps1 create mode 100644 src/Hua.Abp.Demo.Application.Contracts/Books/BookDto .cs create mode 100644 src/Hua.Abp.Demo.Application.Contracts/Books/CreateUpdateBookDto.cs create mode 100644 src/Hua.Abp.Demo.Application.Contracts/Books/IBookAppService.cs create mode 100644 src/Hua.Abp.Demo.Application.Contracts/DemoApplicationContractsModule.cs create mode 100644 src/Hua.Abp.Demo.Application.Contracts/DemoDtoExtensions.cs create mode 100644 src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.abppkg create mode 100644 src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.abppkg.analyze.json create mode 100644 src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.csproj create mode 100644 src/Hua.Abp.Demo.Application.Contracts/Permissions/DemoPermissionDefinitionProvider.cs create mode 100644 src/Hua.Abp.Demo.Application.Contracts/Permissions/DemoPermissions.cs create mode 100644 src/Hua.Abp.Demo.Application/Books/BookAppService.cs create mode 100644 src/Hua.Abp.Demo.Application/DemoAppService.cs create mode 100644 src/Hua.Abp.Demo.Application/DemoApplicationMappers.cs create mode 100644 src/Hua.Abp.Demo.Application/DemoApplicationModule.cs create mode 100644 src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.abppkg create mode 100644 src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.abppkg.analyze.json create mode 100644 src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.csproj create mode 100644 src/Hua.Abp.Demo.Application/Properties/AssemblyInfo.cs create mode 100644 src/Hua.Abp.Demo.DbMigrator/DbMigratorHostedService.cs create mode 100644 src/Hua.Abp.Demo.DbMigrator/DemoDbMigratorModule.cs create mode 100644 src/Hua.Abp.Demo.DbMigrator/Dockerfile create mode 100644 src/Hua.Abp.Demo.DbMigrator/Dockerfile.local create mode 100644 src/Hua.Abp.Demo.DbMigrator/Hua.Abp.Demo.DbMigrator.abppkg create mode 100644 src/Hua.Abp.Demo.DbMigrator/Hua.Abp.Demo.DbMigrator.csproj create mode 100644 src/Hua.Abp.Demo.DbMigrator/Program.cs create mode 100644 src/Hua.Abp.Demo.DbMigrator/appsettings.json create mode 100644 src/Hua.Abp.Demo.DbMigrator/appsettings.secrets.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Books/BookType.cs create mode 100644 src/Hua.Abp.Demo.Domain.Shared/DemoDomainErrorCodes.cs create mode 100644 src/Hua.Abp.Demo.Domain.Shared/DemoDomainSharedModule.cs create mode 100644 src/Hua.Abp.Demo.Domain.Shared/DemoGlobalFeatureConfigurator.cs create mode 100644 src/Hua.Abp.Demo.Domain.Shared/DemoModuleExtensionConfigurator.cs create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.abppkg create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.abppkg.analyze.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.csproj create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ar.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/cs.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/de-DE.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/en-GB.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/en.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/es.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/fi.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/fr.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/hi.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/hu.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/is.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/it.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/pt-BR.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ro-RO.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ru.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/sk.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/sv.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/tr.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/zh-Hans.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/zh-Hant.json create mode 100644 src/Hua.Abp.Demo.Domain.Shared/Localization/DemoResource.cs create mode 100644 src/Hua.Abp.Demo.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs create mode 100644 src/Hua.Abp.Demo.Domain/BookStoreDataSeederContributor.cs create mode 100644 src/Hua.Abp.Demo.Domain/Books/Book.cs create mode 100644 src/Hua.Abp.Demo.Domain/Data/DemoDbMigrationService.cs create mode 100644 src/Hua.Abp.Demo.Domain/Data/IDemoDbSchemaMigrator.cs create mode 100644 src/Hua.Abp.Demo.Domain/Data/NullDemoDbSchemaMigrator.cs create mode 100644 src/Hua.Abp.Demo.Domain/DemoConsts.cs create mode 100644 src/Hua.Abp.Demo.Domain/DemoDomainModule.cs create mode 100644 src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.abppkg create mode 100644 src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.abppkg.analyze.json create mode 100644 src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.csproj create mode 100644 src/Hua.Abp.Demo.Domain/Identity/ChangeIdentityPasswordPolicySettingDefinitionProvider.cs create mode 100644 src/Hua.Abp.Demo.Domain/OpenIddict/OpenIddictDataSeedContributor.cs create mode 100644 src/Hua.Abp.Demo.Domain/Properties/AssemblyInfo.cs create mode 100644 src/Hua.Abp.Demo.Domain/Settings/DemoSettingDefinitionProvider.cs create mode 100644 src/Hua.Abp.Demo.Domain/Settings/DemoSettings.cs create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoDbContext.cs create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoDbContextFactory.cs create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoEfCoreEntityExtensionMappings.cs create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoEntityFrameworkCoreModule.cs create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreDemoDbSchemaMigrator.cs create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.abppkg create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.abppkg.analyze.json create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.csproj create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/20251228134317_Initial.Designer.cs create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/20251228134317_Initial.cs create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/DemoDbContextModelSnapshot.cs create mode 100644 src/Hua.Abp.Demo.EntityFrameworkCore/Properties/AssemblyInfo.cs create mode 100644 src/Hua.Abp.Demo.HttpApi.Client/DemoHttpApiClientModule.cs create mode 100644 src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.abppkg create mode 100644 src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.abppkg.analyze.json create mode 100644 src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.csproj create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/DemoBrandingProvider.cs create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/DemoHttpApiHostModule.cs create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/Dockerfile create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/Dockerfile.local create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/HealthChecks/DemoDatabaseCheck.cs create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/HealthChecks/HealthChecksBuilderExtensions.cs create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/Hua.Abp.Demo.HttpApi.Host.abppkg create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/Hua.Abp.Demo.HttpApi.Host.csproj create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/Pages/Index.cshtml create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/Pages/Index.cshtml.cs create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/Pages/_ViewImports.cshtml create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/Program.cs create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/Properties/launchSettings.json create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/abp.resourcemapping.js create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/appsettings.Development.json create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/appsettings.json create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/package.json create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/web.config create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/wwwroot/global-scripts.js create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/wwwroot/global-styles.css create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/angular.svg create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/aspnetcore.svg create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/blazor.svg create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/swagger.svg create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/logo/leptonxlite/logo-dark-thumbnail.png create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/logo/leptonxlite/logo-dark.png create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/logo/leptonxlite/logo-light-thumbnail.png create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/logo/leptonxlite/logo-light.png create mode 100644 src/Hua.Abp.Demo.HttpApi.Host/yarn.lock create mode 100644 src/Hua.Abp.Demo.HttpApi/Controllers/DemoController.cs create mode 100644 src/Hua.Abp.Demo.HttpApi/DemoHttpApiModule.cs create mode 100644 src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.abppkg create mode 100644 src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.abppkg.analyze.json create mode 100644 src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.csproj create mode 100644 src/Hua.Abp.Demo.HttpApi/Models/Test/TestModel.cs create mode 100644 test/Hua.Abp.Demo.Application.Tests/Books/BookAppService_Tests .cs create mode 100644 test/Hua.Abp.Demo.Application.Tests/DemoApplicationTestBase.cs create mode 100644 test/Hua.Abp.Demo.Application.Tests/DemoApplicationTestModule.cs create mode 100644 test/Hua.Abp.Demo.Application.Tests/Hua.Abp.Demo.Application.Tests.abppkg create mode 100644 test/Hua.Abp.Demo.Application.Tests/Hua.Abp.Demo.Application.Tests.csproj create mode 100644 test/Hua.Abp.Demo.Application.Tests/Samples/SampleAppServiceTests.cs create mode 100644 test/Hua.Abp.Demo.Domain.Tests/DemoDomainTestBase.cs create mode 100644 test/Hua.Abp.Demo.Domain.Tests/DemoDomainTestModule.cs create mode 100644 test/Hua.Abp.Demo.Domain.Tests/Hua.Abp.Demo.Domain.Tests.abppkg create mode 100644 test/Hua.Abp.Demo.Domain.Tests/Hua.Abp.Demo.Domain.Tests.csproj create mode 100644 test/Hua.Abp.Demo.Domain.Tests/Samples/SampleDomainTests.cs create mode 100644 test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/Books/EfCoreBookAppService_Tests.cs create mode 100644 test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppServiceTests.cs create mode 100644 test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreCollection.cs create mode 100644 test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreCollectionFixtureBase.cs create mode 100644 test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreFixture.cs create mode 100644 test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreTestBase.cs create mode 100644 test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreTestModule.cs create mode 100644 test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomainTests.cs create mode 100644 test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepositoryTests.cs create mode 100644 test/Hua.Abp.Demo.EntityFrameworkCore.Tests/Hua.Abp.Demo.EntityFrameworkCore.Tests.abppkg create mode 100644 test/Hua.Abp.Demo.EntityFrameworkCore.Tests/Hua.Abp.Demo.EntityFrameworkCore.Tests.csproj create mode 100644 test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs create mode 100644 test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/DemoConsoleApiClientModule.cs create mode 100644 test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp.abppkg create mode 100644 test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp.csproj create mode 100644 test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Program.cs create mode 100644 test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/appsettings.json create mode 100644 test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/appsettings.secrets.json create mode 100644 test/Hua.Abp.Demo.TestBase/DemoTestBase.cs create mode 100644 test/Hua.Abp.Demo.TestBase/DemoTestBaseModule.cs create mode 100644 test/Hua.Abp.Demo.TestBase/DemoTestConsts.cs create mode 100644 test/Hua.Abp.Demo.TestBase/DemoTestDataBuilder.cs create mode 100644 test/Hua.Abp.Demo.TestBase/Hua.Abp.Demo.TestBase.abppkg create mode 100644 test/Hua.Abp.Demo.TestBase/Hua.Abp.Demo.TestBase.csproj create mode 100644 test/Hua.Abp.Demo.TestBase/Security/FakeCurrentPrincipalAccessor.cs create mode 100644 test/Hua.Abp.Demo.TestBase/appsettings.json create mode 100644 test/Hua.Abp.Demo.TestBase/appsettings.secrets.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..3aa69ea --- /dev/null +++ b/.editorconfig @@ -0,0 +1,2 @@ +[*.csproj] +indent_size = 2 \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..c941e52 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +**/wwwroot/libs/** linguist-vendored diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7765f5f --- /dev/null +++ b/.gitignore @@ -0,0 +1,274 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +**/.idea/ +*.sln.iml + +# ABP Studio +**/.abpstudio/ + +# Demo +src/Hua.Abp.Demo.Web/Logs/* +src/Hua.Abp.Demo.Web.Host/Logs/* +src/Hua.Abp.Demo.Web.Public/Logs/* +src/Hua.Abp.Demo.Web.Public.Host/Logs/* +src/Hua.Abp.Demo.AuthServer/Logs/* +src/Hua.Abp.Demo.HttpApi.Host/Logs/* +src/Hua.Abp.Demo.HttpApi.Host/Logs/* +src/Hua.Abp.Demo.DbMigrator/Logs/* +src/Hua.Abp.Demo.Blazor.Server/Logs/* +src/Hua.Abp.Demo.Blazor.Server.Tiered/Logs/* + +# Use abp install-libs to restore. +**/wwwroot/libs/* + +# IdentityServer temp files +tempkey.rsa +tempkey.jwk \ No newline at end of file diff --git a/Directory.DotSettings b/Directory.DotSettings new file mode 100644 index 0000000..cb0b2c9 --- /dev/null +++ b/Directory.DotSettings @@ -0,0 +1,23 @@ + + True + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + Required + Required + Required + Required + False + True + False + False + True + False + False + SQL + \ No newline at end of file diff --git a/Hua.Abp.Demo.abpmdl b/Hua.Abp.Demo.abpmdl new file mode 100644 index 0000000..8f2ba4e --- /dev/null +++ b/Hua.Abp.Demo.abpmdl @@ -0,0 +1,109 @@ +{ + "template": "app", + "imports": { + "Volo.Abp.LeptonXLiteTheme": { + "version": "5.0.1", + "isInstalled": true, + "creationTime": "12/28/2025 13:43:05 +00:00" + }, + "Volo.Abp.Account": { + "version": "10.0.1", + "isInstalled": true, + "creationTime": "12/28/2025 13:43:05 +00:00" + }, + "Volo.Abp.OpenIddict": { + "version": "10.0.1", + "isInstalled": true, + "creationTime": "12/28/2025 13:43:05 +00:00" + }, + "Volo.Abp.Identity": { + "version": "10.0.1", + "isInstalled": true, + "creationTime": "12/28/2025 13:43:05 +00:00" + }, + "Volo.Abp.TenantManagement": { + "version": "10.0.1", + "isInstalled": true, + "creationTime": "12/28/2025 13:43:05 +00:00" + }, + "Volo.Abp.SettingManagement": { + "version": "10.0.1", + "isInstalled": true, + "creationTime": "12/28/2025 13:43:05 +00:00" + }, + "Volo.Abp.PermissionManagement": { + "version": "10.0.1", + "isInstalled": true, + "creationTime": "12/28/2025 13:43:05 +00:00" + }, + "Volo.Abp.FeatureManagement": { + "version": "10.0.1", + "isInstalled": true, + "creationTime": "12/28/2025 13:43:05 +00:00" + } + }, + "folders": { + "items": { + "src": {}, + "test": {} + } + }, + "packages": { + "Hua.Abp.Demo.Application": { + "path": "src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.abppkg", + "folder": "src" + }, + "Hua.Abp.Demo.Application.Tests": { + "path": "test/Hua.Abp.Demo.Application.Tests/Hua.Abp.Demo.Application.Tests.abppkg", + "folder": "test" + }, + "Hua.Abp.Demo.Domain.Shared": { + "path": "src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.abppkg", + "folder": "src" + }, + "Hua.Abp.Demo.Application.Contracts": { + "path": "src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.abppkg", + "folder": "src" + }, + "Hua.Abp.Demo.HttpApi": { + "path": "src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.abppkg", + "folder": "src" + }, + "Hua.Abp.Demo.HttpApi.Client": { + "path": "src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.abppkg", + "folder": "src" + }, + "Hua.Abp.Demo.EntityFrameworkCore.Tests": { + "path": "test/Hua.Abp.Demo.EntityFrameworkCore.Tests/Hua.Abp.Demo.EntityFrameworkCore.Tests.abppkg", + "folder": "test" + }, + "Hua.Abp.Demo.EntityFrameworkCore": { + "path": "src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.abppkg", + "folder": "src" + }, + "Hua.Abp.Demo.TestBase": { + "path": "test/Hua.Abp.Demo.TestBase/Hua.Abp.Demo.TestBase.abppkg", + "folder": "test" + }, + "Hua.Abp.Demo.Domain.Tests": { + "path": "test/Hua.Abp.Demo.Domain.Tests/Hua.Abp.Demo.Domain.Tests.abppkg", + "folder": "test" + }, + "Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp": { + "path": "test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp.abppkg", + "folder": "test" + }, + "Hua.Abp.Demo.DbMigrator": { + "path": "src/Hua.Abp.Demo.DbMigrator/Hua.Abp.Demo.DbMigrator.abppkg", + "folder": "src" + }, + "Hua.Abp.Demo.HttpApi.Host": { + "path": "src/Hua.Abp.Demo.HttpApi.Host/Hua.Abp.Demo.HttpApi.Host.abppkg", + "folder": "src" + }, + "Hua.Abp.Demo.Domain": { + "path": "src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.abppkg", + "folder": "src" + } + } +} \ No newline at end of file diff --git a/Hua.Abp.Demo.abpsln b/Hua.Abp.Demo.abpsln new file mode 100644 index 0000000..065bfd8 --- /dev/null +++ b/Hua.Abp.Demo.abpsln @@ -0,0 +1,58 @@ +{ + "id": "75e9aca6-80a8-487e-a26e-f50357a0309d", + "creationTime": "12/28/2025 13:43:05 +00:00", + "template": "app", + "versions": { + "AbpFramework": "10.0.1", + "AbpStudio": "2.1.3", + "TargetDotnetFramework": "net10.0" + }, + "modules": { + "Hua.Abp.Demo": { + "path": "Hua.Abp.Demo.abpmdl" + } + }, + "runProfiles": { + "Default": { + "path": "etc/abp-studio/run-profiles/Default.abprun.json" + } + }, + "options": { + "httpRequests": { + "ignoredUrls": [ + + ] + } + }, + "creatingStudioConfiguration": { + "template": "app", + "createdAbpStudioVersion": "2.1.3", + "creationTool": "ABP Studio CLI", + "tiered": "false", + "runInstallLibs": "true", + "useLocalReferences": "false", + "multiTenancy": "true", + "includeTests": "true", + "kubernetesConfiguration": "false", + "uiFramework": "angular", + "mobileFramework": "none", + "distributedEventBus": "none", + "databaseProvider": "ef", + "runDbMigrator": "", + "databaseManagementSystem": "postgresql", + "separateTenantSchema": "false", + "createInitialMigration": "", + "theme": "leptonx-lite", + "themeStyle": "", + "themeMenuPlacement": "", + "mobileFramework": "none", + "progressiveWebApp": "false", + "runProgressiveWebAppSupport": "false", + "publicWebsite": "false", + "socialLogin": "true", + "sampleCrudPage": "true", + "selectedLanguages": ["English", "Arabic", "Chinese (Simplified)", "Chinese (Traditional)", "Czech", "English (United Kingdom)", "Finnish", "French", "German (Germany)", "Hindi ", "Hungarian", "Icelandic", "Italian", "Portuguese (Brazil)", "Romanian (Romania)", "Russian", "Slovak", "Spanish", "Swedish", "Turkish", ], + "defaultLanguage": "English", + "createCommand": "abp new Hua.Abp.Demo -t app --ui-framework angular --database-provider ef --database-management-system postgresql --theme leptonx-lite --skip-migration --skip-migrator --without-cms-kit --sample-crud-page --dont-run-bundling -no-file-management" + } +} \ No newline at end of file diff --git a/Hua.Abp.Demo.slnx b/Hua.Abp.Demo.slnx new file mode 100644 index 0000000..a0d1154 --- /dev/null +++ b/Hua.Abp.Demo.slnx @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/NuGet.Config b/NuGet.Config new file mode 100644 index 0000000..5107236 --- /dev/null +++ b/NuGet.Config @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ffbe037 --- /dev/null +++ b/README.md @@ -0,0 +1,67 @@ +# Hua.Abp.Demo + +## About this solution + +This is a layered startup solution based on [Domain Driven Design (DDD)](https://abp.io/docs/latest/framework/architecture/domain-driven-design) practises. All the fundamental ABP modules are already installed. Check the [Application Startup Template](https://abp.io/docs/latest/solution-templates/layered-web-application) documentation for more info. + +### Pre-requirements + +* [.NET10.0+ SDK](https://dotnet.microsoft.com/download/dotnet) +* [Node v18 or 20](https://nodejs.org/en) + +### Configurations + +The solution comes with a default configuration that works out of the box. However, you may consider to change the following configuration before running your solution: + +* Check the `ConnectionStrings` in `appsettings.json` files under the `Hua.Abp.Demo.HttpApi.Host` and `Hua.Abp.Demo.DbMigrator` projects and change it if you need. + +### Before running the application + +* Run `abp install-libs` command on your solution folder to install client-side package dependencies. This step is automatically done when you create a new solution, if you didn't especially disabled it. However, you should run it yourself if you have first cloned this solution from your source control, or added a new client-side package dependency to your solution. +* Run `Hua.Abp.Demo.DbMigrator` to create the initial database. This step is also automatically done when you create a new solution, if you didn't especially disabled it. This should be done in the first run. It is also needed if a new database migration is added to the solution later. + +#### Generating a Signing Certificate + +In the production environment, you need to use a production signing certificate. ABP Framework sets up signing and encryption certificates in your application and expects an `openiddict.pfx` file in your application. + +To generate a signing certificate, you can use the following command: + +```bash +dotnet dev-certs https -v -ep openiddict.pfx -p a8dad6bd-08cf-40f9-baaf-873686b50b75 +``` + +> `a8dad6bd-08cf-40f9-baaf-873686b50b75` is the password of the certificate, you can change it to any password you want. + +It is recommended to use **two** RSA certificates, distinct from the certificate(s) used for HTTPS: one for encryption, one for signing. + +For more information, please refer to: [OpenIddict Certificate Configuration](https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html#registering-a-certificate-recommended-for-production-ready-scenarios) + +> Also, see the [Configuring OpenIddict](https://abp.io/docs/latest/Deployment/Configuring-OpenIddict#production-environment) documentation for more information. + +### Solution structure + +This is a layered monolith application that consists of the following applications: + +* `Hua.Abp.Demo.DbMigrator`: A console application which applies the migrations and also seeds the initial data. It is useful on development as well as on production environment. +* `Hua.Abp.Demo.HttpApi.Host`: ASP.NET Core API application that is used to expose the APIs to the clients. +* `angular`: Angular application. + + +## Deploying the application + +Deploying an ABP application follows the same process as deploying any .NET or ASP.NET Core application. However, there are important considerations to keep in mind. For detailed guidance, refer to ABP's [deployment documentation](https://abp.io/docs/latest/Deployment/Index). + +### Additional resources + + +#### Internal Resources + +You can find detailed setup and configuration guide(s) for your solution below: + +* [Angular](./angular/README.md) + +#### External Resources +You can see the following resources to learn more about your solution and the ABP Framework: + +* [Web Application Development Tutorial](https://abp.io/docs/latest/tutorials/book-store/part-1) +* [Application Startup Template](https://abp.io/docs/latest/startup-templates/application/index) diff --git a/angular/.editorconfig b/angular/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/angular/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/angular/.eslintrc.json b/angular/.eslintrc.json new file mode 100644 index 0000000..47c17dd --- /dev/null +++ b/angular/.eslintrc.json @@ -0,0 +1,50 @@ +{ + "root": true, + "ignorePatterns": [ + "projects/**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "tsconfig.json" + ], + "createDefaultProgram": true + }, + "extends": [ + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended" + ], + "rules": {} + } + ] +} diff --git a/angular/.gitignore b/angular/.gitignore new file mode 100644 index 0000000..62f9cb5 --- /dev/null +++ b/angular/.gitignore @@ -0,0 +1,47 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +/.suite +# compiled output +/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events*.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# misc +/.angular/cache +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db diff --git a/angular/.prettierrc b/angular/.prettierrc new file mode 100644 index 0000000..d029317 --- /dev/null +++ b/angular/.prettierrc @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "printWidth": 100, + "arrowParens": "avoid" +} diff --git a/angular/.vscode/extensions.json b/angular/.vscode/extensions.json new file mode 100644 index 0000000..9926bc5 --- /dev/null +++ b/angular/.vscode/extensions.json @@ -0,0 +1,13 @@ +{ + "recommendations": [ + "angular.ng-template", + "esbenp.prettier-vscode", + "visualstudioexptteam.vscodeintellicode", + "christian-kohler.path-intellisense", + "christian-kohler.npm-intellisense", + "Mikael.Angular-BeastCode", + "xabikos.JavaScriptSnippets", + "donjayamanne.githistory", + "oderwat.indent-rainbow" + ] +} diff --git a/angular/Dockerfile b/angular/Dockerfile new file mode 100644 index 0000000..0f82c91 --- /dev/null +++ b/angular/Dockerfile @@ -0,0 +1,15 @@ +FROM node:18-alpine AS build + +WORKDIR /app +COPY package*.json /app/ + +RUN yarn +COPY . /app + +RUN yarn build:prod + +FROM nginx:alpine +COPY dynamic-env.json /usr/share/nginx/html +COPY nginx.conf /etc/nginx/conf.d/default.conf + +COPY --from=build /app/dist/Demo /usr/share/nginx/html diff --git a/angular/Dockerfile.local b/angular/Dockerfile.local new file mode 100644 index 0000000..77b138d --- /dev/null +++ b/angular/Dockerfile.local @@ -0,0 +1,5 @@ +FROM nginx:alpine +WORKDIR /app +COPY dist/Demo /usr/share/nginx/html +COPY dynamic-env.json /usr/share/nginx/html +COPY /nginx.conf /etc/nginx/conf.d/default.conf \ No newline at end of file diff --git a/angular/README.md b/angular/README.md new file mode 100644 index 0000000..2be7a18 --- /dev/null +++ b/angular/README.md @@ -0,0 +1,33 @@ +# Demo + +This is a startup project based on the ABP framework. For more information, visit abp.io + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. + +## Remote Environment + +The application provides a remote environment for production. we use `dynamic-env.json` file to set the environment variables and configured web server's `getEnvConfig` endpoint by default. + +See [Environment](https://abp.io/docs/latest/framework/ui/angular/environment) for more information. \ No newline at end of file diff --git a/angular/angular.json b/angular/angular.json new file mode 100644 index 0000000..1a49075 --- /dev/null +++ b/angular/angular.json @@ -0,0 +1,210 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false, + "schematicCollections": ["@angular-eslint/schematics"] + }, + "version": 1, + "newProjectRoot": "projects", + "projects": { + "Demo": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular/build:application", + "options": { + "outputPath": { + "base": "dist/Demo" + }, + "index": "src/index.html", + "polyfills": [ + "src/polyfills.ts" + ], + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "allowedCommonJsDependencies": ["chart.js", "js-sha256"], + "assets": [ + "src/favicon.ico", + "src/assets", + { + "glob": "web.config", + "input": ".", + "output": "." + }, + { + "glob": "dynamic-env.json", + "input": ".", + "output": "." + } + ], + "styles": [ + { + "input": "node_modules/@fortawesome/fontawesome-free/css/all.min.css", + "inject": true, + "bundleName": "fontawesome-all.min" + }, + { + "input": "node_modules/@fortawesome/fontawesome-free/css/v4-shims.min.css", + "inject": true, + "bundleName": "fontawesome-v4-shims.min" + }, + { + "input": "node_modules/ng-zorro-antd/tree/style/index.min.css", + "inject": false, + "bundleName": "ng-zorro-antd-tree" + }, + { + "input": "node_modules/@swimlane/ngx-datatable/index.css", + "inject": true, + "bundleName": "ngx-datatable-index" + }, + { + "input": "node_modules/@swimlane/ngx-datatable/assets/icons.css", + "inject": true, + "bundleName": "ngx-datatable-icons" + }, + { + "input": "node_modules/@swimlane/ngx-datatable/themes/material.css", + "inject": true, + "bundleName": "ngx-datatable-material" + }, + { + "input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/bootstrap-dim.css", + "inject": false, + "bundleName": "bootstrap-dim" + }, + { + "input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/ng-bundle.css", + "inject": false, + "bundleName": "ng-bundle" + }, + { + "input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/side-menu/layout-bundle.css", + "inject": false, + "bundleName": "layout-bundle" + }, + { + "input": "node_modules/@abp/ng.theme.lepton-x/assets/css/abp-bundle.css", + "inject": false, + "bundleName": "abp-bundle" + }, + { + "input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/bootstrap-dim.rtl.css", + "inject": false, + "bundleName": "bootstrap-dim.rtl" + }, + { + "input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/font-bundle.css", + "inject": false, + "bundleName": "font-bundle" + }, + { + "input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/font-bundle.rtl.css", + "inject": false, + "bundleName": "font-bundle.rtl" + }, + { + "input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/ng-bundle.rtl.css", + "inject": false, + "bundleName": "ng-bundle.rtl" + }, + { + "input": "node_modules/@volo/ngx-lepton-x.lite/assets/css/side-menu/layout-bundle.rtl.css", + "inject": false, + "bundleName": "layout-bundle.rtl" + }, + { + "input": "node_modules/@abp/ng.theme.lepton-x/assets/css/abp-bundle.rtl.css", + "inject": false, + "bundleName": "abp-bundle.rtl" + }, + { + "input": "node_modules/bootstrap-icons/font/bootstrap-icons.css", + "inject": true, + "bundleName": "bootstrap-icons" + }, + "src/styles.scss" + ], + "scripts": [], + "browser": "src/main.ts" + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "2.5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "100kb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular/build:dev-server", + "configurations": { + "production": { + "buildTarget": "Demo:build:production" + }, + "development": { + "buildTarget": "Demo:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular/build:extract-i18n", + "options": { + "buildTarget": "Demo:build" + } + }, + "test": { + "builder": "@angular/build:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "inlineStyleLanguage": "scss", + "assets": ["src/favicon.ico", "src/assets"], + "styles": ["src/styles.scss"], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"] + } + } + } + } + } +} diff --git a/angular/dynamic-env.json b/angular/dynamic-env.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/angular/dynamic-env.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/angular/e2e/protractor.conf.js b/angular/e2e/protractor.conf.js new file mode 100644 index 0000000..7c798cf --- /dev/null +++ b/angular/e2e/protractor.conf.js @@ -0,0 +1,32 @@ +// @ts-check +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +/** + * @type { import("protractor").Config } + */ +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + browserName: 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; \ No newline at end of file diff --git a/angular/e2e/src/app.e2e-spec.ts b/angular/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000..0e67b66 --- /dev/null +++ b/angular/e2e/src/app.e2e-spec.ts @@ -0,0 +1,28 @@ +import { AppPage } from "./app.po"; +import { browser, logging } from "protractor"; + +describe("workspace-project App", () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it("should display welcome message", () => { + page.navigateTo(); + expect(page.getTitleText()).toEqual("Demo app is running!"); + }); + + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser + .manage() + .logs() + .get(logging.Type.BROWSER); + expect(logs).not.toContain( + jasmine.objectContaining({ + level: logging.Level.SEVERE + } as logging.Entry) + ); + }); +}); diff --git a/angular/e2e/src/app.po.ts b/angular/e2e/src/app.po.ts new file mode 100644 index 0000000..b68475e --- /dev/null +++ b/angular/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + navigateTo(): Promise { + return browser.get(browser.baseUrl) as Promise; + } + + getTitleText(): Promise { + return element(by.css('app-root .content span')).getText() as Promise; + } +} diff --git a/angular/e2e/tsconfig.json b/angular/e2e/tsconfig.json new file mode 100644 index 0000000..c92199c --- /dev/null +++ b/angular/e2e/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es2018", + "types": [ + "jasmine", + "jasminewd2", + "node" + ] + } +} diff --git a/angular/karma.conf.js b/angular/karma.conf.js new file mode 100644 index 0000000..52a4a81 --- /dev/null +++ b/angular/karma.conf.js @@ -0,0 +1,43 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, './coverage/Demo'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/angular/nginx.conf b/angular/nginx.conf new file mode 100644 index 0000000..11f9847 --- /dev/null +++ b/angular/nginx.conf @@ -0,0 +1,30 @@ +server { + listen 80; + listen [::]:80; + server_name _; + + #access_log /var/log/nginx/host.access.log main; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html =404; + } + + location /getEnvConfig { + default_type 'application/json'; + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + add_header 'Content-Type' 'application/json'; + try_files $uri /dynamic-env.json; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} \ No newline at end of file diff --git a/angular/package.json b/angular/package.json new file mode 100644 index 0000000..5b440a3 --- /dev/null +++ b/angular/package.json @@ -0,0 +1,63 @@ +{ + "name": "Demo", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "build:prod": "ng build --configuration production", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "lint": "ng lint", + "symlinks:setup": "cd scripts && pwsh ./setup-symlinks.ps1", + "symlinks:remove": "cd scripts && pwsh ./remove-symlinks.ps1" + }, + "private": true, + "dependencies": { + "@abp/ng.components": "~10.0.1", + "@abp/ng.core": "~10.0.1", + "@abp/ng.oauth": "~10.0.1", + "@abp/ng.setting-management": "~10.0.1", + "@abp/ng.theme.shared": "~10.0.1", + "@abp/ng.feature-management": "~10.0.1", + "@abp/ng.tenant-management": "~10.0.1", + "@abp/ng.identity": "~10.0.1", + "@abp/ng.account": "~10.0.1", + "@abp/ng.theme.lepton-x": "~5.0.1", + "@angular/animations": "~20.0.0", + "@angular/common": "~20.0.0", + "@angular/compiler": "~20.0.0", + "@angular/core": "~20.0.0", + "@angular/forms": "~20.0.0", + "@angular/localize": "~20.0.0", + "@angular/platform-browser-dynamic": "~20.0.0", + "@angular/platform-browser": "~20.0.0", + "@angular/router": "~20.0.0", + "rxjs": "~7.8.0", + "tslib": "^2.0.0", + "zone.js": "~0.15.0" + }, + "devDependencies": { + "@abp/ng.schematics": "~10.0.1", + "@angular-eslint/builder": "~20.0.0", + "@angular-eslint/eslint-plugin": "~20.0.0", + "@angular-eslint/eslint-plugin-template": "~20.0.0", + "@angular-eslint/schematics": "~20.0.0", + "@angular-eslint/template-parser": "~20.0.0", + "@angular/cli": "~20.0.0", + "@angular/compiler-cli": "~20.0.0", + "@angular/language-service": "~20.0.0", + "@angular/build": "^20.0.0", + "@types/jasmine": "~3.6.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.0.0", + "jasmine-core": "~4.0.0", + "karma": "~6.3.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.1.0", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "^1.0.0", + "typescript": "~5.8.0" + } +} diff --git a/angular/scripts/README.md b/angular/scripts/README.md new file mode 100644 index 0000000..47db8f7 --- /dev/null +++ b/angular/scripts/README.md @@ -0,0 +1,199 @@ +# Symlink Management Scripts + +This directory contains PowerShell scripts for managing symbolic links between package directories in the Lepton project. These scripts help optimize development workflow by creating symlinks to shared dependencies instead of duplicating them across multiple package directories. + +You will need to run these scripts if you need to reference an installed package on the main angular application. + +## 📁 Files Overview + +| File | Purpose | Description | +| --------------------- | ------------- | ------------------------------------------------------------------------------ | +| `symlink-config.ps1` | Configuration | Shared configuration file defining package directories and packages to symlink | +| `setup-symlinks.ps1` | Setup | Creates selective symlinks for specific packages across library directories | +| `remove-symlinks.ps1` | Cleanup | Removes all symlinked node_modules directories | + +## 🚀 Quick Start + +### Prerequisites + +1. **PowerShell**: Ensure you have PowerShell Core (pwsh) installed +2. **Dependencies**: Run `yarn install` in the main demo app directory first (`Demo/angular`) +3. **Permissions**: On Windows, you may need to run PowerShell as Administrator for symlink creation + +### Basic Usage + +```powershell +# Navigate to the scripts directory +cd Demo/angular/scripts + +# Setup symlinks (run this first) +./setup-symlinks.ps1 + +# Remove symlinks when done +./remove-symlinks.ps1 +``` + +## 📋 Detailed Script Documentation + +### 🔧 symlink-config.ps1 + +**Purpose**: Centralized configuration for all symlink operations. + +**Configuration**: + +- **Package Directories**: Defines all library directories that need symlink management +- **Packages to Symlink**: Lists specific npm packages that should be symlinked + +**Key Variables**: + +- `$script:PackageDirectories`: Array of relative paths to library directories +- `$script:PackagesToSymlink`: Array of package names to symlink + +**Functions**: + +- `Get-PackageDirectories()`: Returns the list of package directories +- `Get-PackagesToSymlink()`: Returns the list of packages to symlink + +### 🔗 setup-symlinks.ps1 + +**Purpose**: Creates selective symlinks for shared dependencies across library directories. + +**What it does**: + +1. Reads configuration from `symlink-config.ps1` +2. Identifies the main app's `node_modules` directory +3. For each library directory: + - Creates a `node_modules` directory if it doesn't exist + - Creates symlinks for each configured package + - Skips packages that don't exist in the main `node_modules` + - Avoids circular symlinks + +**Example Output**: + +``` +🔗 Setting up selective symlinks for specific packages... + +📦 Packages to symlink: + • @angular + • @abp + • @volo + • @volosoft + • @ngx-validate + • @swimlane + • rxjs + • cropperjs + • angularx-qrcode + • qrcode + +📁 Processing ./../modules/Volo.Abp.Identity.Pro/angular/projects/account.. + ✅ Linked @angular + ✅ Linked @abp + ✅ Linked @volo + ... + +🎉 Symlinks completed! Linked: 45, Skipped: 3 +``` + +### 🗑️ remove-symlinks.ps1 + +**Purpose**: Removes all symlinked `node_modules` directories to clean up the workspace. + +**What it does**: + +1. Reads configuration from `symlink-config.ps1` +2. For each library directory: + - Locates the `node_modules` directory + - Removes the entire directory (which contains symlinks) + - Reports success/failure for each operation + +**Example Output**: + +``` +🗑️ Removing symlinks from library directories... + +📁 Processing ../../modules/Volo.Abp.Identity.Pro/angular/projects/account... + ✅ Removed node_modules directory + +📁 Processing ./../modules/Volo.Abp.Identity.Pro/angular/projects/account... + ✅ Removed node_modules directory + +🎉 Cleanup completed! Removed: 8, Skipped: 0 +💡 Libraries will now use their own local dependencies (if any) +``` + +## ⚙️ Configuration + +### Adding New Package Directories + +Edit `symlink-config.ps1` and add new paths to the `$script:PackageDirectories` array: + +```powershell +$script:PackageDirectories = @( + "./../modules/Volo.Abp.Identity.Pro/angular" + # Add your new directory here +) +``` + +### Adding New Packages to Symlink + +Edit `symlink-config.ps1` and add package names to the `$script:PackagesToSymlink` array: + +```powershell +$script:PackagesToSymlink = @( + "@angular", + "@abp", + # Add your new package here + "your-new-package" +) +``` + +## 🚨 Troubleshooting + +### Common Issues + +**Error: "Export-ModuleMember can only be called from inside a module"** + +- ✅ **Fixed**: This was resolved by removing the `Export-ModuleMember` line from `symlink-config.ps1` + +**Error: "Main app node_modules not found"** + +- **Solution**: Run `yarn install` in the main demo app directory first + +**Error: "Access denied" on Windows** + +- **Solution**: Run PowerShell as Administrator + +**Symlinks not working on Windows** + +- **Solution**: Enable Developer Mode in Windows Settings, or run as Administrator + +### Platform-Specific Notes + +**Windows**: + +- Uses `cmd /c "mklink /J"` for directory junctions +- May require Administrator privileges +- Consider enabling Developer Mode for easier symlink creation + +**macOS/Linux**: + +- Uses `New-Item -ItemType SymbolicLink` +- Generally works without special permissions +- May require `ln -s` if PowerShell symlinks don't work + +## 📝 Notes + +- These scripts are designed for development environments +- Always run `remove-symlinks.ps1` before committing changes +- The scripts use relative paths, so they must be run from the scripts directory +- Symlinks are automatically detected and handled by most development tools +- Consider adding symlinked directories to `.gitignore` if needed + +## 🤝 Contributing + +When modifying these scripts: + +1. Test on both Windows and macOS/Linux +2. Update this README if you change functionality +3. Ensure error handling is robust +4. Maintain backward compatibility with existing configurations diff --git a/angular/scripts/remove-symlinks.ps1 b/angular/scripts/remove-symlinks.ps1 new file mode 100644 index 0000000..1e79c55 --- /dev/null +++ b/angular/scripts/remove-symlinks.ps1 @@ -0,0 +1,50 @@ +#!/usr/bin/env pwsh + +# Import shared configuration +. "$PSScriptRoot/symlink-config.ps1" + +# Get configuration from shared module +$packageDirectories = Get-PackageDirectories + +function Remove-Symlinks { + Write-Host "🗑️ Removing symlinks from library directories...`n" -ForegroundColor Cyan + + $totalRemoved = 0 + $totalSkipped = 0 + + foreach ($packageDir in $packageDirectories) { + $resolvedPath = Resolve-Path $packageDir -ErrorAction SilentlyContinue + $targetNodeModules = Join-Path $resolvedPath "node_modules" + + if (-not $targetNodeModules) { + Write-Host "⚠️ Skipping $packageDir (directory not found)" -ForegroundColor Yellow + $totalSkipped++ + continue + } + + Write-Host "📁 Processing $packageDir..." -ForegroundColor Cyan + + if (-not (Test-Path $targetNodeModules)) { + Write-Host " ⚠️ No node_modules directory found" -ForegroundColor Yellow + $totalSkipped++ + continue + } + + try { + # Remove the entire node_modules directory (which contains symlinks) + Remove-Item $targetNodeModules -Recurse -Force + Write-Host " ✅ Removed node_modules directory" -ForegroundColor Green + $totalRemoved++ + } + catch { + Write-Host " ❌ Failed to remove $targetNodeModules`: $($_.Exception.Message)" -ForegroundColor Red + $totalSkipped++ + } + } + + Write-Host "`n🎉 Cleanup completed! Removed: $totalRemoved, Skipped: $totalSkipped" -ForegroundColor Green + Write-Host "💡 Libraries will now use their own local dependencies (if any)" -ForegroundColor Cyan +} + +# Run the cleanup +Remove-Symlinks \ No newline at end of file diff --git a/angular/scripts/setup-symlinks.ps1 b/angular/scripts/setup-symlinks.ps1 new file mode 100644 index 0000000..aee22a8 --- /dev/null +++ b/angular/scripts/setup-symlinks.ps1 @@ -0,0 +1,106 @@ +#!/usr/bin/env pwsh + +# Import shared configuration +. "$PSScriptRoot/symlink-config.ps1" + +# Get configuration from shared module +$packagesToSymlink = Get-PackagesToSymlink +$packageDirectories = Get-PackageDirectories + +# Global variables for interactive mode +$scriptPath = $PSCommandPath + +function Setup-SelectiveSymlinks { + Write-Host "🔗 Setting up selective symlinks for specific packages...`n" -ForegroundColor Cyan + + $mainNodeModules = Resolve-Path "./../node_modules" -ErrorAction SilentlyContinue + + Write-Host " • $mainNodeModules" -ForegroundColor Gray + + + if (-not $mainNodeModules) { + Write-Host "❌ Main app node_modules not found. Run npm install first." -ForegroundColor Red + exit 1 + } + + + if ($packagesToSymlink.Count -eq 0 -or $packageDirectories.Count -eq 0) { + Write-Host "✅ You are all set. There are no packages to symlink." -ForegroundColor Green + exit 1 + } + + + Write-Host "📦 Packages to symlink:" -ForegroundColor Yellow + foreach ($package in $packagesToSymlink) { + Write-Host " • $package" -ForegroundColor Gray + } + Write-Host "" + + $totalLinked = 0 + $totalSkipped = 0 + + foreach ($packageDir in $packageDirectories) { + $resolvedPath = Resolve-Path $packageDir + $targetNodeModules = Join-Path $resolvedPath "node_modules" + + Write-Host "📁 Processing $packageDir..." -ForegroundColor Cyan + + # Skip if this is the main node_modules directory (avoid circular symlinks) + if ($targetNodeModules -eq $mainNodeModules) { + Write-Host " ⚠️ Skipping main node_modules directory" -ForegroundColor Yellow + continue + } + + # Create node_modules directory if it doesn't exist + if (-not (Test-Path $targetNodeModules)) { + New-Item -ItemType Directory -Path $targetNodeModules -Force | Out-Null + Write-Host " 📁 Created node_modules directory" -ForegroundColor Gray + } + + foreach ($package in $packagesToSymlink) { + $sourcePackage = Join-Path $mainNodeModules $package + $targetPackage = Join-Path $targetNodeModules $package + + # Skip if trying to symlink to the same location (avoid circular symlinks) + if ($sourcePackage -eq $targetPackage) { + Write-Host " ⚠️ Skipping $package (would create circular symlink)" -ForegroundColor Yellow + $totalSkipped++ + continue + } + + # Check if source package exists + if (-not (Test-Path $sourcePackage)) { + Write-Host " ⚠️ Package $package not found in main node_modules" -ForegroundColor Yellow + $totalSkipped++ + continue + } + + try { + # Remove existing symlink/folder if it exists + if (Test-Path $targetPackage) { + Remove-Item $targetPackage -Recurse -Force + } + + # Create symlink for the specific package + if ($IsWindows) { + cmd /c "mklink /J `"$targetPackage`" `"$sourcePackage`"" + } else { + New-Item -ItemType SymbolicLink -Path $targetPackage -Target $sourcePackage | Out-Null + } + + Write-Host " ✅ Linked $package" -ForegroundColor Green + $totalLinked++ + } + catch { + Write-Host " ❌ Failed to link $package`: $($_.Exception.Message)" -ForegroundColor Red + $totalSkipped++ + } + } + Write-Host "" + } + + Write-Host "🎉 Symlinks completed! Linked: $totalLinked, Skipped: $totalSkipped" -ForegroundColor Green +} + +# Main execution +Setup-SelectiveSymlinks \ No newline at end of file diff --git a/angular/scripts/symlink-config.ps1 b/angular/scripts/symlink-config.ps1 new file mode 100644 index 0000000..3f83f61 --- /dev/null +++ b/angular/scripts/symlink-config.ps1 @@ -0,0 +1,33 @@ +# Symlink Configuration +# Shared configuration for symlink management scripts + +# Define the package directories that need symlink management +# example: "../../modules/Volo.Abp.Identity.Pro/angular" +$script:PackageDirectories = @() + +# Define packages that should be symlinked +$script:PackagesToSymlink = @( + "@angular", + "@abp", + "@volo", + "@volosoft", + "@swimlane", + "@ngx-validate", + "@ng-bootstrap", + "rxjs", + "cropperjs", + "angularx-qrcode", + "qrcode" +) + +# Helper function to get package directories +function Get-PackageDirectories { + return $script:PackageDirectories +} + +# Helper function to get packages to symlink +function Get-PackagesToSymlink { + return $script:PackagesToSymlink +} + +# Functions are available when script is dot-sourced \ No newline at end of file diff --git a/angular/src/app/app.component.ts b/angular/src/app/app.component.ts new file mode 100644 index 0000000..ca1fb3a --- /dev/null +++ b/angular/src/app/app.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { DynamicLayoutComponent } from '@abp/ng.core'; +import { LoaderBarComponent } from '@abp/ng.theme.shared'; + +@Component({ + selector: 'app-root', + template: ` + + + `, + imports: [LoaderBarComponent, DynamicLayoutComponent], +}) +export class AppComponent {} diff --git a/angular/src/app/app.config.ts b/angular/src/app/app.config.ts new file mode 100644 index 0000000..58afea4 --- /dev/null +++ b/angular/src/app/app.config.ts @@ -0,0 +1,42 @@ +import { provideAbpCore, withOptions } from '@abp/ng.core'; +import { provideAbpOAuth } from '@abp/ng.oauth'; +import { provideSettingManagementConfig } from '@abp/ng.setting-management/config'; +import { provideFeatureManagementConfig } from '@abp/ng.feature-management'; +import { provideAbpThemeShared,} from '@abp/ng.theme.shared'; +import { provideIdentityConfig } from '@abp/ng.identity/config'; +import { provideAccountConfig } from '@abp/ng.account/config'; +import { provideTenantManagementConfig } from '@abp/ng.tenant-management/config'; +import { registerLocaleForEsBuild } from '@abp/ng.core/locale'; +import { provideThemeLeptonX } from '@abp/ng.theme.lepton-x'; +import { provideSideMenuLayout } from '@abp/ng.theme.lepton-x/layouts'; +import { provideLogo, withEnvironmentOptions } from "@abp/ng.theme.shared"; +import { ApplicationConfig } from '@angular/core'; +import { provideAnimations } from '@angular/platform-browser/animations'; +import { provideRouter } from '@angular/router'; +import { environment } from '../environments/environment'; +import { APP_ROUTES } from './app.routes'; +import { APP_ROUTE_PROVIDER } from './route.provider'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter(APP_ROUTES), + APP_ROUTE_PROVIDER, + provideAnimations(), + provideAbpCore( + withOptions({ + environment, + registerLocaleFn: registerLocaleForEsBuild(), + }), + ), + provideAbpOAuth(), + provideIdentityConfig(), + provideSettingManagementConfig(), + provideFeatureManagementConfig(), + provideThemeLeptonX(), + provideSideMenuLayout(), + provideLogo(withEnvironmentOptions(environment)), + provideAccountConfig(), + provideTenantManagementConfig(), + provideAbpThemeShared(), + ] +}; diff --git a/angular/src/app/app.routes.ts b/angular/src/app/app.routes.ts new file mode 100644 index 0000000..1e5a6db --- /dev/null +++ b/angular/src/app/app.routes.ts @@ -0,0 +1,31 @@ +import { authGuard, permissionGuard } from '@abp/ng.core'; +import { Routes } from '@angular/router'; + +export const APP_ROUTES: Routes = [ + { + path: '', + pathMatch: 'full', + loadComponent: () => import('./home/home.component').then(c => c.HomeComponent), + }, + { + path: 'account', + loadChildren: () => import('@abp/ng.account').then(c => c.createRoutes()), + }, + { + path: 'identity', + loadChildren: () => import('@abp/ng.identity').then(c => c.createRoutes()), + }, + { + path: 'tenant-management', + loadChildren: () => import('@abp/ng.tenant-management').then(c => c.createRoutes()), + }, + { + path: 'setting-management', + loadChildren: () => import('@abp/ng.setting-management').then(c => c.createRoutes()), + }, + { + path: 'books', + loadComponent: () => import('./book/book.component').then(c => c.BookComponent), + canActivate: [authGuard, permissionGuard], + }, +]; diff --git a/angular/src/app/book/book.component.html b/angular/src/app/book/book.component.html new file mode 100644 index 0000000..b4b0242 --- /dev/null +++ b/angular/src/app/book/book.component.html @@ -0,0 +1,140 @@ +
+
+
+
+
+ {{ '::Menu:Books' | abpLocalization }} +
+
+
+ +
+ +
+
+
+
+
+ + + +
+ +
+ + +
+
+
+
+ + + + {{ '::Enum:BookType.' + row.type | abpLocalization }} + + + + + {{ row.publishDate | date }} + + + + + {{ row.price | currency }} + + +
+
+
+ + + + +

{{ (selectedBook.id ? '::Edit' : '::NewBook' ) | abpLocalization }}

+
+ + +
+
+ * + +
+ +
+ * + +
+ +
+ * + +
+ +
+ * +
+ + +
+
+
+
+ + + + + + + +
\ No newline at end of file diff --git a/angular/src/app/book/book.component.ts b/angular/src/app/book/book.component.ts new file mode 100644 index 0000000..072e109 --- /dev/null +++ b/angular/src/app/book/book.component.ts @@ -0,0 +1,152 @@ +import { + FormGroup, + FormBuilder, + Validators, + FormsModule, + ReactiveFormsModule +} from '@angular/forms'; +import { Component, inject, OnInit } from '@angular/core'; +import { DatePipe, CurrencyPipe, formatDate } from '@angular/common'; +import { NgbDatepickerModule, NgbDateStruct, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgxDatatableModule } from '@swimlane/ngx-datatable'; +import { + ListService, + PagedResultDto, + LocalizationPipe, + PermissionDirective, + AutofocusDirective +} from '@abp/ng.core'; +import { + ConfirmationService, + Confirmation, + NgxDatatableDefaultDirective, + NgxDatatableListDirective, + ModalCloseDirective, + ModalComponent +} from '@abp/ng.theme.shared'; +import { BookService, BookDto, bookTypeOptions } from '../proxy/books'; + +@Component({ + selector: 'app-book', + templateUrl: './book.component.html', + imports: [ + FormsModule, + ReactiveFormsModule, + NgbDatepickerModule, + NgxDatatableModule, + NgbDropdownModule, + ModalComponent, + AutofocusDirective, + NgxDatatableListDirective, + NgxDatatableDefaultDirective, + PermissionDirective, + ModalCloseDirective, + LocalizationPipe, + DatePipe, + CurrencyPipe + ], + providers: [ListService], +}) +export class BookComponent implements OnInit { + public readonly list = inject(ListService); + private bookService = inject(BookService); + private fb = inject(FormBuilder); + private confirmation = inject(ConfirmationService); + + book = { items: [], totalCount: 0 } as PagedResultDto; + selectedBook = {} as BookDto; // declare selectedBook + form: FormGroup; + bookTypes = bookTypeOptions; + isModalOpen = false; + + ngOnInit() { + const bookStreamCreator = query => this.bookService.getList(query); + + this.list.hookToQuery(bookStreamCreator).subscribe(response => { + this.book = response; + }); + } + + createBook() { + this.selectedBook = {} as BookDto; + this.buildForm(); + this.isModalOpen = true; + } + + editBook(id: string) { + this.bookService.get(id).subscribe(book => { + this.selectedBook = book; + this.buildForm(); + this.isModalOpen = true; + }); + } + + delete(id: string) { + this.confirmation.warn('::AreYouSureToDelete', '::AreYouSure').subscribe(status => { + if (status === Confirmation.Status.confirm) { + this.bookService.delete(id).subscribe(() => this.list.get()); + } + }); + } + + buildForm() { + this.form = this.fb.group({ + name: [this.selectedBook.name || '', Validators.required], + type: [this.selectedBook.type || null, Validators.required], + publishDate: [ + this.selectedBook.publishDate ? this.parseDate(this.selectedBook.publishDate) : null, + Validators.required, + ], + price: [this.selectedBook.price || null, Validators.required], + }); + } + + save() { + if (this.form.invalid) { + return; + } + + const formValue = this.form.value; + const requestData = { + ...formValue, + publishDate: this.formatDate(formValue.publishDate), + }; + + let request = this.bookService.create(requestData); + if (this.selectedBook.id) { + request = this.bookService.update(this.selectedBook.id, requestData); + } + + request.subscribe(() => { + this.isModalOpen = false; + this.form.reset(); + this.list.get(); + }); + } + + private parseDate(value: string | Date): NgbDateStruct | null { + if (!value) { + return null; + } + + const date = new Date(value); + if (isNaN(date.getTime())) { + return null; + } + + return { + year: date.getFullYear(), + month: date.getMonth() + 1, + day: date.getDate(), + }; + } + + private formatDate(dateStruct: NgbDateStruct | null): string { + if (!dateStruct) { + return ''; + } + + const date = new Date(dateStruct.year, dateStruct.month - 1, dateStruct.day); + return formatDate(date, 'yyyy-MM-dd', 'en'); + } +} \ No newline at end of file diff --git a/angular/src/app/home/home.component.html b/angular/src/app/home/home.component.html new file mode 100644 index 0000000..6d1e9d0 --- /dev/null +++ b/angular/src/app/home/home.component.html @@ -0,0 +1,321 @@ +
+
+
+
+
+ @if(!hasLoggedIn){ +

Welcome

+

+ {{ '::LongWelcomeMessage' | abpLocalization }} +

+ + + {{ 'AbpAccount::Login' | abpLocalization }} + + } + +

Getting Started

+

+ Learn how to create and run a new web application using the application startup + template. +

+ + Getting Started + + +

Web Application Development Tutorial

+

+ Learn how to build an ABP based web application named Acme.BookStore. +

+ + Explore Tutorial + +
+ +
+
+
+
+
+
+
+
+ +

+ You can check for similar problems and solutions, or open a new topic to discuss your + specific issue. +

+ + Visit Support + + +
+
+
+
+
+
+ +

+ You can find content on .NET development, cross-platform, ASP.NET application + templates, ABP-related news, and more. +

+ + Visit Blog + + +
+
+
+
+
+
+
+
+ +

+ A unique community platform for ABP Lovers! +

+

+ Explore all ABP users' experiences with the ABP Framework, discover articles and videos on + how to use ABP, and join raffles for a chance to win surprise gifts! +

+ + Join ABP Community + +
+ +
+
+
+ +
+
+
+
+
More from ABP.IO
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
Latest Release Logs
+
+ + + +
+
+ +
+
Video Courses
+
+ + + +
+
+ +
+
Samples
+
+ + + +
+
+ +
+
Books
+
+ + + +
+
+ +
+
FAQ
+
+ + + +
+
+
+
+
+
+
+
+
+
+

THE OFFICIAL GUIDE

+

Mastering ABP Framework

+

+ Written by the creator of the ABP Framework, this book will help you gain a complete + understanding of the framework and modern web application development techniques. +

+ +
+
+ +
+
+
+
+
+
+
+
+
Follow us on Social Media
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+
X.com
+
+ + + +
+ +
Discord
+
+ + + +
+ +
Stack Overflow
+
+ + + +
+ +
YouTube
+
+ + + +
+ +
Instagram
+
+ + + +
+
+
+
+
+
diff --git a/angular/src/app/home/home.component.scss b/angular/src/app/home/home.component.scss new file mode 100644 index 0000000..c5bd877 --- /dev/null +++ b/angular/src/app/home/home.component.scss @@ -0,0 +1,27 @@ +/* Styles for the home component */ +.card-bg-image { + position: absolute; + width: 630px; + height: auto; + bottom: 0; + right: 0; + z-index: 1; +} + +.starting-content { + position: relative; + z-index: 2; +} + + +@media (min-width: 1199px) { + .h-lg-100 { + height: 100% !important; + } +} + +@media (min-width: 768px) { + .h-md-100 { + height: 100% !important; + } +} diff --git a/angular/src/app/home/home.component.ts b/angular/src/app/home/home.component.ts new file mode 100644 index 0000000..09ec722 --- /dev/null +++ b/angular/src/app/home/home.component.ts @@ -0,0 +1,20 @@ +import { Component, inject } from '@angular/core'; +import { AuthService, LocalizationPipe } from '@abp/ng.core'; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.scss'], + imports: [LocalizationPipe] +}) +export class HomeComponent { + private authService = inject(AuthService); + + get hasLoggedIn(): boolean { + return this.authService.isAuthenticated + } + + login() { + this.authService.navigateToLogin(); + } +} diff --git a/angular/src/app/proxy/books/book-type.enum.ts b/angular/src/app/proxy/books/book-type.enum.ts new file mode 100644 index 0000000..61d168f --- /dev/null +++ b/angular/src/app/proxy/books/book-type.enum.ts @@ -0,0 +1,15 @@ +import { mapEnumToOptions } from '@abp/ng.core'; + +export enum BookType { + Undefined = 0, + Adventure = 1, + Biography = 2, + Dystopia = 3, + Fantastic = 4, + Horror = 5, + Science = 6, + ScienceFiction = 7, + Poetry = 8, +} + +export const bookTypeOptions = mapEnumToOptions(BookType); diff --git a/angular/src/app/proxy/books/book.service.ts b/angular/src/app/proxy/books/book.service.ts new file mode 100644 index 0000000..197ef05 --- /dev/null +++ b/angular/src/app/proxy/books/book.service.ts @@ -0,0 +1,56 @@ +import type { AuthorLookupDto, BookDto, CreateUpdateBookDto } from './models'; +import { RestService } from '@abp/ng.core'; +import type { ListResultDto, PagedAndSortedResultRequestDto, PagedResultDto } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class BookService { + apiName = 'Default'; + + + create = (input: CreateUpdateBookDto) => + this.restService.request({ + method: 'POST', + url: '/api/app/book', + body: input, + }, + { apiName: this.apiName }); + + + delete = (id: string) => + this.restService.request({ + method: 'DELETE', + url: `/api/app/book/${id}`, + }, + { apiName: this.apiName }); + + + get = (id: string) => + this.restService.request({ + method: 'GET', + url: `/api/app/book/${id}`, + }, + { apiName: this.apiName }); + + + getList = (input: PagedAndSortedResultRequestDto) => + this.restService.request>({ + method: 'GET', + url: '/api/app/book', + params: { sorting: input.sorting, skipCount: input.skipCount, maxResultCount: input.maxResultCount }, + }, + { apiName: this.apiName }); + + + update = (id: string, input: CreateUpdateBookDto) => + this.restService.request({ + method: 'PUT', + url: `/api/app/book/${id}`, + body: input, + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/angular/src/app/proxy/books/index.ts b/angular/src/app/proxy/books/index.ts new file mode 100644 index 0000000..f536b8f --- /dev/null +++ b/angular/src/app/proxy/books/index.ts @@ -0,0 +1,3 @@ +export * from './book-type.enum'; +export * from './book.service'; +export * from './models'; diff --git a/angular/src/app/proxy/books/models.ts b/angular/src/app/proxy/books/models.ts new file mode 100644 index 0000000..a15977d --- /dev/null +++ b/angular/src/app/proxy/books/models.ts @@ -0,0 +1,20 @@ +import type { AuditedEntityDto, EntityDto } from '@abp/ng.core'; +import type { BookType } from './book-type.enum'; + +export interface AuthorLookupDto extends EntityDto { + name?: string; +} + +export interface BookDto extends AuditedEntityDto { + name?: string; + type: BookType; + publishDate?: string; + price: number; +} + +export interface CreateUpdateBookDto { + name: string; + type: BookType; + publishDate: string; + price: number; +} diff --git a/angular/src/app/route.provider.ts b/angular/src/app/route.provider.ts new file mode 100644 index 0000000..d4a68c0 --- /dev/null +++ b/angular/src/app/route.provider.ts @@ -0,0 +1,28 @@ +import { RoutesService, eLayoutType } from '@abp/ng.core'; +import { inject, provideAppInitializer } from '@angular/core'; + +export const APP_ROUTE_PROVIDER = [ + provideAppInitializer(() => { + configureRoutes(); + }), +]; + +function configureRoutes() { + const routes = inject(RoutesService); + routes.add([ + { + path: '/', + name: '::Menu:Home', + iconClass: 'fas fa-home', + order: 1, + layout: eLayoutType.application, + }, + { + path: '/books', + name: '::Menu:Books', + iconClass: 'fas fa-book', + layout: eLayoutType.application, + requiredPolicy: 'Demo.Books', + }, + ]); +} diff --git a/angular/src/assets/.gitkeep b/angular/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/assets/images/getting-started/abp-blog-white.svg b/angular/src/assets/images/getting-started/abp-blog-white.svg new file mode 100644 index 0000000..6d85edb --- /dev/null +++ b/angular/src/assets/images/getting-started/abp-blog-white.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/assets/images/getting-started/abp-blog.svg b/angular/src/assets/images/getting-started/abp-blog.svg new file mode 100644 index 0000000..881609e --- /dev/null +++ b/angular/src/assets/images/getting-started/abp-blog.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/assets/images/getting-started/abp-community-white.svg b/angular/src/assets/images/getting-started/abp-community-white.svg new file mode 100644 index 0000000..59aa29f --- /dev/null +++ b/angular/src/assets/images/getting-started/abp-community-white.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/assets/images/getting-started/abp-community.svg b/angular/src/assets/images/getting-started/abp-community.svg new file mode 100644 index 0000000..5260071 --- /dev/null +++ b/angular/src/assets/images/getting-started/abp-community.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/assets/images/getting-started/abp-support-white.svg b/angular/src/assets/images/getting-started/abp-support-white.svg new file mode 100644 index 0000000..8de6a4c --- /dev/null +++ b/angular/src/assets/images/getting-started/abp-support-white.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/assets/images/getting-started/abp-support.svg b/angular/src/assets/images/getting-started/abp-support.svg new file mode 100644 index 0000000..774bca6 --- /dev/null +++ b/angular/src/assets/images/getting-started/abp-support.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/assets/images/getting-started/bg-01.png b/angular/src/assets/images/getting-started/bg-01.png new file mode 100644 index 0000000000000000000000000000000000000000..ac6b323aa9572d615d559b8c4dc3c8b5507b0e65 GIT binary patch literal 27830 zcmeFZXIN9)w?4|=?k#pisvsbsC`c6)=}J{80RnA6b3QF-LjFJH}eUni?wS&#;`KqM|zg z=%J!E71dvvz`qx#P6B%#4ApW2|DAsI@ToHu72|cvzds&nU;7E{{KHvWMV_j#=gJbW z@t5TT^#@c`#gS(Zp8rin^-}eb;sYIzKUSt3-Wx6WjP6c5uNlS1#P-X7rpp!j`1X2R zDu%%{w(FWGDeL+*_qn@p`Nxt9(WReW;3^Bv{1fYo&Ci_W%QjK^OQyWlQ-PoU!|*+} z(~0##aMds0QXDN4gBjCjS_-V5$GYVf*j?7-rX5_XTUe3^HL^J^=wB0B=iXbjyOlxH zQ|C_eiCVvI!`-*nnF|=_|J~12ADB25m9WmV-}C}uVB>Z(F(zbLuDZPZ!xP5B)_-UL znNU%^TWR@WNjM3&C-bW?`SVU*4~ZDNeO$3wGYBl5EJDHnBm(UxIG_GE#o9AP#%eHDgb~ z#B)Jh&RN3Xe$b!5Ma-W$-{uuO!6GoI&MiND89FXA*ujMTCwdLH z2{+bHYXSGBQW*YpvCR6qQuX_hCutl*pJg~HN@Ci^!jf5T5LQ+u+IT_xcur+k742AT z-XBloqY@`JZdoSV%$0axOpO8M{yk88uJ$4v&g9_zeT=R+P)+d<;AZFg%M#x1x%{lh zU>d^Qs>g$WHNAH5op+k#rh|syGVLR$%`wn#9Joi@DSkoDd99`EU$w~-;86S@bWJZi zLBsNYz!s9s|r3gZEW|{E{OvAubq=urLeDf~AwP2cM3K20qlSh6BgoFvBtKf9S28V?iB+~Na zdkw{=bM&8inbqVVK@r|R`%-Yht8O46l#2}(#cuQSc748Xn53I+7<7Mw#g=Ys3@QA& zcWahsA)ZTy9C1X}>$UfVZd^JVo_0vw6Qd(L6-uT>Sgi6A<9r|~_=`BslGE~G&bpft zQ`zKfEDLc`s-Bde#t3R%OV@mi&e*yTeUygc2_0ISr;x(I)z2QUZM^N{<8|d}QhqNP zgCzH^w?^+k>UP?B_NOS(T2}cW=2$!A?WD~eIJF%ml_AxQH%;m!W}4J%rYx8R0T*4R zqWT`bdsMRLf>m2`VF=4boPri>*e)TWnpt5~>M=Ni?*i}2++#om{W9TwLuhJl2BwOABsic?)N6jLm^`k*90Hzh z!p8`DeDCB@cdz2yrlD(c711_so?;ZA7V7djV9KtF`UM4PSuAz>;ALnLdGdl{0@}@ac^H%Pdsm- zn(~Yvny_``nH+*EWYF0%-2|EXSu~)tY3&r3wY(13w9^bnaBj~ zb*t=|x~PHv%F7vUAJ2%PoI7q+h27!}>4XpMPji&qcLnsUM2rTwyXi$;@5I7?2R3wK zI0`cdHY&SI2iOgQV^Ep=_1_}(4Gg3`WDGPw2~>tl%DQrC=sd`~0CO%*)2_c*Rr#~b znYvd+6aO+U+# zVG}s4efWgvF3WcQITyuAGJA0(HQXIgC3Q;7SgB>k^b$K~22?|-i&|wtd-gBhDcKr{ zh|~Qiq&@ykb+nHO*3z0CxKOxUb`w^Z0;q{okY*VYgKJJpIV$lCgV$QsMRuDcJ*^?R z)GnEd7i!>LR(6?a3Y#u^+E9kuXTwTM&<@hvozWD+3pKw7m+XGNE-k^(HSzS?qlkF& zBHc8}`&<+_#{0Ho$=aprV#aQW7L7yWD$jLMKStG?|cAlwX~;RsQp=* z_hY6#+68yIGS#`H_g>%2 zh0z0(K{UzdoVH&6=x#I<(=?q|Gkgn}mH(5cs^quKj{l77zuBE@c3w|qQ~C#MWOz_~ zGpj^@UhJ9Ax~K>;5Q})e)`YWTFb5UKDm>geFJI)bMBH8!yNQ8x<)!@>h<02C7e16b zHKKaBcj?Bi4JiY3XX$tD=4L40SXgK%|FuTFD=I&PT{lT9jFa%m!#$K%UNEJ_W9kw^ zZqrf_N$J0N=nO)Rhl!DQ@0eA5WRD+OR$wkhqt$9Q`B-O?2OYQ0YQDHQ zjS2IQdaY%+Rxvdct;5ATtn(!0DN|^+s-%S}8?7!J!UP2lJtogWYcX4(>?f#vb-_FL zJT3MKOc@^}N|b#f;w?HP!nFGkGTl>B-Ge<5LYY-+ zqi<^9mUHo-UG`bYN%^f>O(wTpPP|h5Ez*qBATJGG7;yvJ&?w`;FgT)ow{i=ci?hv#D$hT>qrA?dU}6I4137)4ibrP{-a{3 zk)by%JBENh5NQ6HP2Vg-=7-KICZO@n7g2aS{&p!=gsIPK<24$0KECF_h4~|CH&tjN zwu`XNPLlToI^(X7>qcw-rziYFerV=YWMp2|=yk|^KI)uvcxo(jURSx88F6i>#z;w` z>!NOR_KejEq<&(08Z{B@?$J&LEGX+dbwJvf68gr8TYNbWIUKFD90Wq4rK ziGDrg^m{XpegSjHcXC_n!zxrsR$*1t?7ylc=Z0E89TrZ98$nXfH3;U+`*Wlp7z?6K zdOd){OClus9rNVoy|=SOOM~+| zCM(zIh;%Blth@`ejYu2guiPc?V#b9M^r zTKVVZ(V+JBP53zTPrLG*UCzGhjkU`rXcQ?UJictTInvIOg_=s zPkMtV0@H$qbS`+YU~wEa*1+l%`mrAyyu`wmh$7KgixNHQ?1(+oGw7o=xyaj0&I+mT zI)>zi&5ohJRjEb{lUZf%h_)<~z@6R5BLyGH(MP1W%%6QDo@F4GIgt)x7;iTZG& zdO11B=~w3&=cb|11splrG4j}dR%~RK=P=hV-F6ka z<)IWh^A8;9%S+%-gWCO~qtzIv#IyKwR)!XsFdEqVLg52+k*~kX#xjBRwQ{f}qIP5`@ki#wTmIY8xLe&W^B$&?3M8 zq$BdIZmc!ZU7^q8_T!OOGJZ6wm`c%A%X9lQ8@Yi=8VqMWD;2> zOtb=fVi0yT<;SiRo7Ry$k8N1CM3nwvV?@rbCG2xRI45`~inN{_9;4CXi+Q8dz@J*g z)r}uL;n0Fct{UK`smd}4n%0N53m1Gje@ADHI!k!erW3nk9564BxQ9u35`QZlAl&5QgxP{4EM%oY9gE2p(j4sTRceX#Sd1|pVv}~>y*HE zYB8erY4xy?Ps*PSKUv?`Nmx?6QqZdvqr#0w9%0DgFjl9gGQJQWE9+C8G;b;SMS9te zPcY83(BVp1f>k*-2Y;iX`d8`#;*|6q3M#fL@TEU1VRk*SAk_sRFckCn6a+5Zl0P=E zvN%Q>V}h+i@sKGFZ0_m2>07 zd-IHj8wS=sSIJ8R7cA^;kzl>$gRt>pLkalX+M=dY9w1y3ej>a1%YGb{r;(Zf zSP}i~0l{d5N?3J%6mWxMFi9G(;z%me?%ew7wsT#62vT6ga@N-L(>C6e3wL$TW4#Y% zW+GD}eIR2)td1VIYvjbFhMq=oAAW8l`)yOKFT{rngy{$e`@`M{M$A5*@1L%wxpn|K z8_sVB=QIc0Dvn$M<40IsPIH4nU_3Q9{;bGTr#d|VQOlK2(_$?^XcT`l`m=*h9la2K zGq_0La8xgo6VzzanJxgLE@gWc`d*&3^f`m&XiflbJCgMPI&8+4bQDT@*t{e%CWSqt zSsasjwC!vE(Dw!e{x=ACr1|3;1}xcx?lwK`?6*ZJQor6>34@ZqYA-mltSm8|dDT_) zKHjCAW8-bEK;uLNDCJk7?}Wx|4=&YCK z333g!MkUWYWO$nEP_?2lb=_gB{V}lQ-YX4p;Eoe#4%x=Ztiv#jd)o>iP}n)bctr# zg?f=YL?S^N-mpX=5UEy*In>zlsMBSi-N1DBhER6-%WMbGNVD=bFI^!G4);Pq!nC(` z1HQa3pVDDYnk+B@jgo4VjuqCHw5sUsQ&Tj-O-Zc$y~^>YJ((Qb!)3s`HOFa|M?pGKXZrQG1ZgI(E+~87Xn~QD*;j5jHyj|(asIYPwNKAs5A2}K z!Bl?g*OwAnb6J@#-n;@R$ydar1?hPTI~AhSEtJb%^n9bt%>T4Vhq=du2xxP{^P64r zK9awX4MzamptwQ@@ooqk?)&Nuj^DquCvRc+{!%|qTd7*QS}xTl)DBBAC^?!noX{z# z4uo)$soKkz^0Fi9%}b+!GU@i{u-ac)(+6d(pkMT7tT87|ZSd_}2|vl}>^ZMu;$@TJ zD*&!TX_tlfo^ge9X{v9BuD8v7Vkuj(gL1L*amc}qrdIY<)>Ol`dhbN6sDb!qmq zHgYp`>j(3ef(~R&5aU_pv5LmCfy@#-<2>4F$3rj<8x|uM6>ZJVAIbmuSooj*J>d)kl%+0*_EhHFi z_i>#%wi7maG!9pFuZDOF<`1mEiuxpWV(wis_soOSuVWGL%OV3U-%AUm_?v5VL9EFf zaytik%Bnu-9<35BzGY!n__7Y{0gxUqx!3O4T2hl`Aaj$7-pUdCPCxhr+B`AV{hz7BJ`lwBp$&Yy%_^@^g*`LcGM!Q<;rR2NIjm56}5E#*OaGx!Bku|Ea}G>gvHWjQ`VkG#vUK>E*ucfA>^dD`hM|-`czF5a zdD}<00__M7!6KN6IuCS(e!d>N)MW|fs;FOIjf;13;x$1r3P%xqGPIlI!*DC(`H{Y| zJP^O8mMkehHOa)c-W$E*l#E1>7E~mHhfYD4I94~0qf|rmhWr-Z)yUdSu zdyCFPnA3mUWKi1scFoQhV(#e>s~rfmO05Km4IiXHHd~#^Zps7GH#$=pc_rhZlh{AI zhcqOJ8DcdaGA;2S2WGl*M?!vx(4L3uZqFl+N&6^*t8Du5j*PsW$OP+_IT9l25&25A z1a;QV?TDPQ=2&J?Xqa)sX%Qpo;qC5bh6t#55f+O~%Q3cG?bQ7zF_bYMq4RVeb|v12 z

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 z z`Y4n#kpoQp6gu2>(&_jy`hxs}kyxf!P|2dFwuzA`;=-}RsfuYtQF^pM?vgw=Mf?_p zI1$PFIT(vl35w^+(US=K{pc9#hal;8n_hKGe?S8w^j`_b8uEi1VB*kp<;tg9nD3n5 z;w;=2fH?+Xk`Pd93pNUHepMKxLpn;WPm3jwPFnxcd5I02q{Dz{G=lzh z$LK6cL33biMVkCkWV4apv>X^!eC=wb4yL@ynUzxJ6K( ztnO*jwd&7bV2YNT+|$puPt__x&IdVzz8d$vclN_$ZCua)Sp*&B@+#l11=0u_c!af^ z)JZ?ZFlzg;-0;1XJgpSo{w*)@3d2`7quZkvLo7sFY4_})>1MA-BTK>2tYQXCtc79P zW?7M|&7$``-3Q+g2s*Ldtt04~WeHj5-0yg6c?f=#2^f`lJf*uoFOq)pJM6d(vo-jt zAOX0f4(`ZDGi`3x7#lz}3=^4aKA+gS@GQ2sXXTS+1kitOeqJh4<5ymc-%d|bjVzNy zMuw}Lx{tT)8Jypx@2(T2L}{OLgV~Fy9%mJ6zPn= z%LpzDzZOxS8_+T6?HXN%mYKXoD!ZK%qo$;ZLLTwL@7a#dNDF>cP@5nv&EL1Wf4AsP zFEe2(ZbE9D`loX4g0%lx+TH|`^J|_D@)F~>(4$-0^3MUahE?EC%SOFPSmG<@f$bM~{H>B3J>s?Y_39Z>8T zvv>dGAAtPvjqAsZokOPIVeTFOdsM|gTIf`Jdiufr>c*BNlODAt5MN0#Rr_3~7bC+8 z{%SarlaqSphFI^k=(CeJizRa;4&JZX21x7t__3;@MUm7ffnEC{J23-p=U3xWqLj!Q1+4h0=Y1@^$fAaIe|I!jLnI4bVswW_CuNg^%=3wglqrpD zHZXX}(Pslb^cGCa+f-O1o0yob?KfW3W+J2L`0R(eKgnm9zSyf}Fb^?~(LW;=7dtC` zB>ASM1MsC*hcuc9c3vR46f;|;Sg#eA5(?b)7)vdSP$M?KzqEu98x?(6N=NGR8fM%1a7LgkjZQn^6DsRhqY#7A}dWE^Gw3E7Q@gVba0WnX7wWf6C2wjFI@Z8FO?6`|4(DE$E_Yb;jnaC>V79c@Bw| zuA$*4!T8vj*|Oc@XJ0iFgujH}AF-)&OxoIaM1aZnK~e7>PO~VjN4J}zr~l1lW{qhYUV~&N&cSr^ zra<6KOv=XoSXSgAzPVK!Ulxh|riZH;u9${x+D-@!<>10i1YS?=G+0fS|+!W>c&iG}w}=7&MhAx2CxZR->a<~KDeV%f{h zgbl~#N2O_90Z5uEttbKnKlQ+iPABP1!plT*Pq7viA=Y8NIN=g`>3tf!+FV+WL2>oL z;K3r*kF8>70lU(DWoEyy1XjL>B^|ooomoAG73g3XM`2W|5Ub*IU}$5!h%Ej|-gNaM zy2WJ9{=1=k{8B5q=BlJV`r(3eM^`_RaqQy34LJvFIktcT~oozS){XMXJKUWH^VUHnA}djr~odaxx) z(x)zIbULZD@q?I3!a4pc&c)$IY@J@CQ%R?m&+wq7zt4b7^Z96sgYOc(vyureZel=^ zeHnDUrw~4~6dEydK0jBCro}R(|Nl_+pV4stQM)*-juM>_M2~JFQG@6;A;D-fL>Qt) zix9n+5JWFQh!zZn8ALaX2+>=V=skMx1pn{vKKFUnbKYcD-Xv?8?X&m3%D!UuSjXt} zGik}W7cy51%bUWnb#Bbt@H-5+2Ga`AsL0U`5jm!%v|YRn^82 zPDl3F?{Asy1v`51G6XLK7xd?g10x6o3Eju9F0a(u=y3U=Mnqmo_}}QDUy%w8^!-DF zeJuT(;~s)${_$tN{eD&C72oI>oNovw-dcohwVK3@l1YteeZC;o2O;%|b4j7Kd3jpn zeKnHkNdJiWCzkT$dw)W&>mIECYe(;8gRk%3n+;i~Qu9L0?Bc@C6ii(g`-lz2@5BVB zeva&$G5cn1yW~(xfO<~}&tSpy#6%CV?kZWn<*4utke;8569-{TOv@8&92_YOS3xuLGOUzFwfX4;vMLL!zg0Y6Nl0GX~6}yLc z7M0NH`NbEg1;0};7N&u%S~WMB6MlIE#_vVK3Ry7rE^8agrLgDDpAR`xg+Vc(MkR1e z`8#jlAzUgHZK`su&;8zm@(s1|H-HKXpNc6AfE!lwlv;Kak7#J72$!2fyXkIIpSgVw z43|35ij38-u{v7&d16uEbY>$+;`=rQ7f|ywq8E?Rt|G(Fy?|6&{a1r_5TJc7x;<{J=+f1z~ zgW#QSM5Uz0QuQn~waSY3l@8eE;!TztC8g|fQ_(8)HOJuZ1Sdr0F}jxj}k5sT*7J<+zN>k5}{a6??QxBuoID?>?~CQ^+R)U)y~cY zCdZbv7@hAD%S^rDR-Q1SG|^_wzFi8oa$5DRW@F5NuXFIK%dd9^e4`2|s8HI2sx~D2 z$|J+|?du1gG7bqdALvpAB(L>F85suS?54t3h0MbJlZ8L?=>;*Sm|QBkoO~_HcVrjV5)Y02{UC3)Rf3iKownjRhwAjYauF(XyKA;u4~n zTr-hru8OAZ*Y;cN;o8r4KRdCb9wvO(_o-Zh4Xxj7AfH1F7#WaNsl?^D#LSd)d@5C12v1iRcIQhfE(E^@+Ajal(f>M2+OilD(gyQ3`LLKHp#J z9}%S>fK7c8!KkNp2=Jd?@Er~UfmjMqS~C51J}$O!cHw&%@WCBENf(Yge^Yrji_ zlbxu*i%~!s5SYA>9v%@8O0)6wl13Q-*G}Q_gdR20Q+n}t*zbyX&*lRW*J9=n;VR`z zdW}%cH{QjQuX@7!6UDfeS=2flP}O+CPgv7Na-(c$_Kc)IS$#Q+c77++WQ0Vn{5PKh z#~FP)PNhHDxl&WLEBYG{8b>NI8UTSQr-M=&&7Z}KEjPX}-rmT2en-FD{8k158%*LFyg50@er(jGt zbJ{0V?=#6Ya7}JC`oHKS2A66h2vl| zXSFFcO2fbIVsF)Y*zOTysAd`k&JSB>6kpHWSjOHg4YPgxuX5Pak6gz~dABN8x{dx^ z@3L2oTK0TpWhM7pJ*lGqH5;Q`Ba`CK9JP+2NBaJOW^N4~kscN0 zl*QAgs}gxgc)!k2jC!>nQPp$nu%3>kXDXM#2}vIyO9Sw~7Rmq=- zf*m<%*SHK3goH{)ocnLJ6#z_&ztku+7&40GDY#$N$4ht^lc&MHOf&Z{7~B9wW%vE8XO0DUNy0f@ z!FnLCQW!YU!&fg;_UZ|=9Wfj{fF&2iS&V4T@^14`rtFD#f?u>|; zy<0XTZDK%9jd61U`(3Py*>S_Wwk>@jMj-FS zhgy#MYE!?{zsB5dy=B*&wbzXpIx%tbRTN4o(u!yacPL8wbrRpNdP zKXDjB!tU==#B)l^5uD*TwN$c&;D(<`CfzZ7Gm(u{wLhVi6g6z}0#rnaduIh*9Kk## zBpQ%#`7O?I`*$Ddu- z54;k-n}!&T^gL7|?p2fei8gEzRslwubLKb^ST1jbmv*1dgR;`F)*qGMWJNs|{kv+Z*+wqjJHYrV$kwG4!&doy7eRYGMt(h@og z1t>CxE^d3;s_0!GT6OW8@T@n3_vJnB>GM}nJWY?r8B7s*ynyR(eMt=b#rI8j#tHlD z>id&XY~vhJpom8(0qVN$;VJeQ?Y_%g7X&Y8_5QEr0f=A2t%72}Nzw_t#x+~OV6a0z z{!UZZYr?;ZRixB|H(rp8CWb5BEX@I>R_|{~FSDd)M?M`n zmjlysgn_fO^yCkqc(UxJ5^P|VDT~<&9SmN!)~}9zU5D2yd&2GHU5MeIf@yGKiIn|M z9p0+wH|bZds98D|SX;5Vyus)&R2g=ep_ZK=bZwE|k1S><#&GkKOnLzk)NZ~*YT^QW zsbaO%`8Imltk!RaI*_V z!Mq4{_b2TNVU}bUkfX>pIxatI7M#`uBDHNs7){RDf9jp6T|csE6f(iyPotFhkaJG> zwaeOBRY|n~ECkc{+yzY*-tot!Z-+>jukHy!=ZwxtDU1P#B6McEw!cG-82E@n9qT zy#p;~g@Io};ODf+xDvm;O7eY^g(TIU$g%0OeAk{k0-pjHJHnBEH#`YO{)0Js@6Tcc zTCQ}f_$JPpKQ3)NELiw@H&JrO4s{VbT{8k65NoomeD z7_u*VvIm0OP0opH)VIESvjD;TziqN}hf41K{A<_*WHMMXX8d)>Kcn>9eU;{;&Ze#h zU8=S^QsmL(2mN<}B2pLvIK3&Xwg^dPlCevM76>^ECsD zVa61@t%G0u_n%zw$_95RC-UW(0LQ33Ze&ilccubQTPr+-W@MIqLq2^o&v(^Go`kp} zJ)n?NShIa>Fm^|)A;}(Op`-<*)Mpxmffd*wrC1nnm7bdxa2-x>PrN#t4FiGQjZyZv;Qxl z#V61Qu48>k3!&6dnj_Zeq8t1UadU#aQXn!u@m*b`NXCtr*6!lbXFa#U-h?Y=bne3L z-9(v-H_+k{ekZj~wwDQ(_$ib~KAQZ|0PDX^FB1j^pD#3nedwi@zswJK$e+ZE2R?SW z#b^W_{I|0M%h}mr;L6ez@4ZUf0}#rz9;Ce{(w_7y&1#SON)K)t{!sCXC5Gc==tVr_ zXa29W#VC?BL7c3o4qi-#(YAd0pP7#ZIwVW?OsL*3ymzP9iJ8Qzm%v|4?Ta+Pd$zyg z>Oq8XbKtTG2Kb8QT(V9u0Xk1~Lw0kxiY&~lp7rZUlXgl@ z-lG<%KcufPG||KBO#zuOO1O5oz0!+ysGTGWPxyPNwWplwS7-{vXZH-brmmi}9kWV+ zyjGi{)2FrH54O?K_bwQ0rXH9d9Or7ez&3XH(v(v{en0(IDNeNi_%LH zFiP3GF*5O@-$sBq#-?o$rRF8t_&bdEMtHR?$t^F+VW`~w4{2sG5w*xA&6~HpZ61Y0 zi&>`UBSMP}Q2e*#nnW1yy(TEt4;m6MKNZJ3Hg9~ihBALe{zya--7=AR;$<@bOsPqw zri_5i=mFC%$ItlN5<;ySAUuo*dWSYa%rQ$des~Xg_C6!AP&JKIy-hz@JzY$R_mNE) zq~c0<;)ho)6(u@H?H~Z1w?1%J&+SZGAmb()F9ny3kMuK#ZvD1U7DU_7e6QE(@+B_( zefuei8O`Z6b*Jm&Y=lGz@%5szLn^`UZVJ_=Uod>(Wbh`F?G=isS6G&{(c1%MUC23Po~$_ z7lxB77#Sj-7;au7lf$x+>(&^7{+(F@IPG4lRIMZKP!G$(o_L5roEPDx1-ZgM?SLC4 zkcMRm1ROzl7cIeAjNb_v17LI+2)vj=WlFdq8iI54OXSYWH$>YzO?2-luuKPZ9SnID zHp3{G9!T($kiAz(BRLs7aNHYXs*jfNu-!F^TrpSwZ##H?QhJXZ$gCdr0z=VLPe>Ma z*(2)gh%$~58+3VDJfjcXQOV&1CWe(vletC^LFzyuAY9UDDf6LT%qqn=pIVSFP0tM< z;G=$}EgX=nSuWm>!92b|=>snX6itN5WTDjs_io^EZDHEEay@1?5=Iu^%_{Jh4CnbW z$dbZO+yW-o+Tb|Zy>}t}Op}HS_akYmR1ouU z!rC29P5sf-yV0?QWUvCfm{Phcyf^|#c99N_T!=Wv*;QX7m87O2yDeX$PFo^O_wjqF zIbmWL5y~ovw5U=%0JbUxfUp1qLCA(oq!px=<$)WvfxpNC(30#`4*?3lUiNBngFRH2 zaNII;#)LhEF7N9`YgK$|PE7Z!5_rzS{z&{g`{79G+ZlFg-Bs?CS0q8EU{b?Y3AF~X zA!}Pg-F!De8!hGEOnOyVyRW@x8G{EG={Z}vCBYWKW%`1)kA-MNY`&>-xNI_<-!gxX zxFumS=t(O?WS4z-9HnPe2*TeAZ&5Ib#eD#M5BMB%c)^ix-4m1lG<86a+;H*}?EZqp zvQdf&9aZ=%n%ga6U=uS~C-qvP)XcWk*?57l;LL~|4(%D=XfJN`wt zHGbH_EJcCgr{`|KL`)I0CSt^^A_VWYOPH9C|84#_$@F`uI#`=CCU-2CtBgI8WsA4t zI{bGOeZCbfCM8-O$L;#+z{iz$;kS*7jVC`MDtgs2LyvN~Bk5FTM@O`|?ERSrtEDxe z5#+0YlP%%8Z5_4K1R_pwIo6w!caz4va!fkmZ+{X(=n00{BU z2|sh$(@0Jssqy9gdx|fk{Pd(}tfVKbl57(MgR3trp9`%J7xp!*Mn&rPTez-*?zfAF+$&vyHpXpu2; zF{q53Rje^pkcOnMDbvQIe_l#kK?K5uZn3iJU36Ud!X~QVwoNtgzhl$vvdCK}HrBUU zD&43Fq6$(#_dIGQw4kOWwiPZgUE^ahc-RumWcfTk1D%%@mMeKAnbPM^+3-6szAt?T zL8cen6Iw1EQoeOti+|VURfKk(NPEZ2G_!0=xrHz0q2%GtH~)D zm54tFzf?e2biiYpo)UG=YLG&xp=lvVxGCBu>_Hm&MI13=6WdCn2Ksa!cP;Pn%BH;g z=)2ar%*rcb-y6dg`i8Wee!7(!x9}L2VUF#er1T57VF8rCQb3WvW^VgF7wU3T#V-`4 z&s<3&j6Q~B^LgHOn-V>g`jM>{vFYrmCw8Hpa=i;q>G!9!5tk;_AmW~`Q5vy0ep1jD zwMU<|;!dES=y;O7=}rWhJMt5@ZHdbV#u2|mokH^$f1{G z!J81Vg^1yQ1HZ%M)a%p9jk&=PLimfPPQ$@KP;dGy8Jtpj=~04FylR{*FajCtzm|`C zESoSi#OW|@M36R5l1BdUg2KAt-CV)%Srfidp|k@lHaq(DQ$8LozBKwzP6=Xpr@*r_ zK!cH$P4O*sM++TyD-$sG?|5Lb_S<#_cB@zi@LnoFKLLo#B44A+jlin1oh}+_%xtds zr<6|(8Y=%Kp=_<4Ww;!CFm5~_OsLEa>Jy~W^fZ;mUK|5`-&FlABP0zVRZZ|kh9|D{bE=0+<1|ZN` zQVw&2(;AJ>Qr(jD@ZqUuUp(-|%C!UqxLE}`_1#y#B6uAC$*|=9doz|Od3|K_!cd&j zxT<0$Lp~k5%la{RO_b`<)=(pBYKfK1R9qOxX)&{9R!t!8JmqxofdiuVH4p( z9{qk$jQ87d+Z$r=Wy}8V=LEJZ3VlAOAFI>Gi%SoP%D@E11n@eM&o!T>#}}sO`(lOQ z%V({r>u&+s%sQ1T$?lhT^D>}MRnO~f+gPBL#)B63U26gtSq>~81o=0lklnp)5}{S7 zdWt`;)LMw(eS?d(du>-N3-wMB0%R^vwv_8-ISZ&XS+)}Y=tV9MXnX_xt7kusNdg2i zB0!e4`CXtFJp^{jsdvrU5nh?I8BwchDos*Nby7?AWkU2UxO@kjp0IGhwd|2s8aY?S zPR8iG8T0*Tr5~E9pN6TSBmk!Brj>9&wh=CT@QOHLP13dS8a8D=01*P3M%0-Wp0+Pl zRa=z^H7Gr(gFYY|Sr`hY2z#WC(>hCsgIaOm0%kWkb0Zd>KHvz+E9Pm+uF6XB{vG8< zS3SW-A6ivwI%w-+9}6k%gf0}!n41LT-X8aWGU3pYuEH8v~TxBk}@T5HX5 zNq-bSW`4_!L=@)P|J@=_B8o^^;z{7iReQR0Gy#V6Fa2vI)&^HIs6q3@CJwLviA-0! zUCdbMNp7K$>DPR2Me>oow;JMCVrDHi#3J*J++y^#F0bNHFDLZc9K0_l#P|MRDr=7U zEc>M{&~(V|R^Ts2-;~uHO(3pACE+J4T7_2quPPW&Bx|n^?#EOF0m)5oJBVR)W-Sg;^|juNoz49dRnHb3M4cDFZuw!}K> zuJ)JNNvg=jf^A)-AxeXFn4fI0@g;A0c8hRP?e9?+MH!?U8fkv=GB3X(kE=dHqObHKh@x_Q}MLl{mw)Qm1SZ4D( z;)f8J&lfRwCCzq5xVa>*RztoffzwQQW;c+^eCkJOOmr{go`=aSClHA2=1-}yBJ?vd31!Ls;ZHOBti4I_(Z?nmVYNySUl&#g=WrS$YeIItwLeu z-yla})G-Exv=D0-#<8^R?>`FsHyzJJdcy5mOO>ZDPtsa)bXhM|lBZ=trQmCJ;yWDhm)SEtx^dyo*kuhq&YA#Bs= z6_Or8YujLi6HrwLBYePSKF?pl zUy+hmHWY=hW%DSRJ%*R z#hp)*Vi2#@hgmFcs`bKfZA24BQrS=;~<*kZ-x^ zpV{2Gl?|{ue(3bS6vDeELX9@lU&sjcvP#g04c<1(je%?<>dt&VpxD;=h@9-71{`#}GqpsoI%)h18o!)svnTbJ3btKIqGZ^(|HL zF=2cZ*LMSKeqO)|-_#`ul!l@tO){LVljoyv$6>B)za}ofKS#{8hjr>(|`nd2cTjAEJo*9d`NMN_3goY14?f zex#@k#6TcSV)n#o-|Y)Fp@5$C|)OEitZ z2!_F=PVw=h&cQhLaEZXL?ql1Jp)y-97@l7dioKS)?+%njr<0m(AD^T3i=`8dZ!b*a z%j(dbV0@HOS5p9?!qrJZYT2!258Lu7wd3*K`2VA-aNYYvGEi<&MVpU!U?!{p$()|( zw+N%WGfsvmw>BgM1NaJJ4gmVYW#F2+A45F`*1*J3{A4A-z>1>FGsgUk1mt-45S3&ZC{K7*?L0W-;)%~QT! zx>N)q!~&1^CRnPj?AQ}pP7n?$7ozq4-iCDn2>Ff}-Ue8sTvu`!1rx6sGcM_C7y+zQ z4%rOrYtg?33Ht{X%Q0=M-S?xak`Oqc(7~5|{z66X+<~~oHf=|ZOSp&D7 zdC*q7W5v?V>x5?BE*zNy47vAPY4fstiJ?R#C{v>9O_U!#H=teu@uHG5Rd zE+4BvK}}^DK4~)k?8nE)F}y!=ZsuF_ise7{d``v$4R9PBj7szL|GOXkw>hM7@@;-J zp1Ncdo&+cwIoUEo=elW+)c4d6phlW zq0LB^;)-#Vd{a#zqVhR-f{)bx#Z-98lX2}o_H#R12M1`53bTLIUTXNlmln_eM|BhE zwJ^7FmQzTgEeLnScyh_Z%fLXXM2_iJ5aGvYc-0PNoDC5`e5^%JS!Lq>-QbfVYNQiq zMv#UOL3*)L%l8>WR3?$EvVam$CkKLR4*^hp!)k}hU(lFYk1^>@L zJnA;urb+Lv17UU-u+QM9Ww8Qqi#!8DJ)imcpmLeq`khS#v>b84&^1PcG%tZiR0aT> z`sW#8DEd;;?Bv-lSRVe#MsH4-V4S8oJB;)=?qg``3!K&S_7U9#%*tzPte48ar-tP! zlPBb|L`f3Cq!@eBD)gQ2`)q{{wE9G-KGfoKPK}@eC7OB4Sd(Ns6Em2rb$>W-#g-jW zVFGH>PGMs2dddCTrPlecWRL~6Gvl^GNrUZ2M?Vwk`x1djju-xfl)LRqZI>HCw|9L_ z36Z{nWRbf;WE?N%BB+Zy7q|R8mwL7p3mi^gBELKv62ttwcwtDFM!`e&d_&Sl12HmK zZud6NVf^K0b@h1wsJ6aHV=T){PwZOKdbWWOs1$BtTk$GVqvX*na5b;nL%{id|B3CL z5q@WlMYfmwK&_MlTD|k@Al}O_|D)Awy&OaD<^&ilX zZnJ;;D%&zB{N61v^|&Y$^L{~qOPjwj{sBF^rAS);c3^@~nkqgZef29eLvoenftohU zDvMiKq6R=__HV0A*VUTg&WJ`ox0m8c(^+D4lGc^Z13q3)*7L+VJ>P5|v&78*UoF7Q z?>m{(+1J-}{hY<1$cV-D9rZND;4Sut`Xy$x75;&b;<$bngT{o@$cQoTA%xmt09t>f zDhfAT(9$_NP_v)`AHRwsiD?lYyQ8-t^i2+alIIe_Nx-N}GZK@!1E_dQ#-*qH)LTD$ zV^VIllyv+s_D*$4(N5wmgBH%84HMp%LzWFJ(&A;}=rat>2GQgn*m8kzya| zCHb#wO+#_b&tDUZUepM7?#sk4s&usu7ARx4Jc@IsvUA5Ox1}~ua}KGw>bD1?(e5lX zOGA4^)%Q5>7qct-{2lTe4*u#3xLrWsc%IIKwLi408e%9Aymt@*a=cVIIzTu@amQlV zo9W7+&b>tWE058EzT05(AE^&hIp9z&w9-YQ{eKj{ z{(Hg1aP0|I{BctoSGy?JVOf-q71$WyHP|qxKwk#Eo7?L+sI{fRBz*ybTazOTr~e96 zH$^#fS_^`=5=3Z6B0DNu^BAv4O(?_5O}F15+jb*Z{4HP~upVP0gZs^8uju}3)Cws2 z9cO7iesYg}BtFWR!1x}JoyKdJ0@$97A5Jd`0KTM-TIpl^*?sSKv&&G|)sq-s^?9R+ z_#0s(?r&#WZs<;L^mc^%GiN)-)bMDbdZ9B-z#R*y{Q(3G3$v97Z-U-iry-6BR^J2b zQVE^(ppyalFaVhVzaMHyU8>B^0lupq-4h|yKUhAZau31J1QD8qLGG~B=SSNBR+1Xu zLS1UHvmS4Bb2i~VJ;pbJcK4q09PG2J=q|~33n5kAXEC@`97vgWI+!G{BRIxn!VzRn zD*JcpGAp1TsbyP^Z|O7mkAm2YKxfk5HVAD#w|b>`^(pXSR{PmWYd@ZW4x#rZ6i?_^ zo^ns%pyYIy2PaPfZJt@0rq5slZJU#jFV*|Bn!K{%n2@=^f5*2-(1<=a1MwCU)$Ey= zLPiy3j?Sz|!pXsRHgB&@DgXCp2GXKiyeR`dcTTG3m1BcxL%Nmd@M9jGND0}w1!{gh zXkcj$B1skZxuq(#ExXz@*~|Amy%NZ|U_306Lu-X3O9>`KPdX3+bPxf&5`?Vfo^CWA zBzrmLwe$0Fot!!C2_kmy_GNx+ziA=ncLZC!$8`enSJ;=s38IrJ0)Bm zxv`Zz>ItwtkUvAyky%PKFf$kJ2Cb7z;Jd>`Cv+Tgs;ZZmS3VekyEh%P9+w0L=bJ;J zNi9GkuMs+fjkyWeNM64CgGCVFM zXMy@G@7Rz^4kq--Y*FJ6E&?AsKp@Pb(pf?8V7-s^4Phphu+4T%+|m<4k2QsJ;TKti zbKaw{c|yZCvm!luc4S_0@1)PK)P?-xiiwN$i?0XQW+yG7e8s^A(whBwX2nVj$~}0g z{v53a3KJg(e%OY`yd3g{aM(QL&s*FoTX*x`U!D*A5wsMfeU)9R$kuL&kCOJ6dVxRA zZ{S60AMi+$>g|i^h_^+GF=f>^1VTEL)${5#!3>rgub2sp!;5A1gg!2v1c{ffHAimx zDJpFoPb3CR80gdW<*|U9UX&RSK~z${zOLouw=JWn9`G}FA1G`DSA!*?IF_?pwAy1p zjxfyji1$a~7mVcw2=x+qh#nt!8Fq36d%gU_g8(kfVG#$`h5V}em1eo9dZ&$Uu_CNn zfQbpGo}7lgH}pdL)-L)j44l9y6AYzSQJN% zmZuxF{4HKawa3WfB z9**#6ThctOGB^OshGrAMB-=#ThKG19b3F1yR>Tma<@nk;oDdrKCIWyn^7U~T@^nks zOy#Kq_8}R0CK;KouVF^uFy{Lk8WedRRA~Y``|XUsXYY*Mi4h5&8~@Z>h7dY z+DK=6Rg&ZmeNhdAS4xYT#fNXOKS4@^$BvKUoh&sNU71+14r(BET@7P6) z`XBLKhRq@aFNmn-ujmxMG*jjPD&lkNDNlbnkI3_?xy(lJp3Zb!nD|Zbj7-pn<+(Gc z;#vT{hzjh)DRj&a`SnPIRIk~1`PC?Va9(`}%kk08=>1u5S6r;>>9_u_s7Xdohu$3{LFv+5mzq-l)!4^fT>WgwRq=d~ZTm

uCa*26FF~|Zlkjl#xEm_dJ*dY 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%0DbBoo1p9gWu$#S;P0wxN<0sa#78*oPc*s6wVQ$ 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 + + + + + + diff --git a/angular/src/assets/images/getting-started/img-blog.png b/angular/src/assets/images/getting-started/img-blog.png new file mode 100644 index 0000000000000000000000000000000000000000..37fc5be0e03e6d59a60d559d74d6fdfa51e10482 GIT binary patch literal 42029 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 literal 0 HcmV?d00001 diff --git a/angular/src/assets/images/getting-started/img-support.png b/angular/src/assets/images/getting-started/img-support.png new file mode 100644 index 0000000000000000000000000000000000000000..27f4f13b22c1036c269b6e2b17d29e287e2ef26a GIT binary patch literal 33989 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 StuUzo0000 + + + + + + + + + + + + + + + + + + + + + + diff --git a/angular/src/assets/images/getting-started/stack-overflow.svg b/angular/src/assets/images/getting-started/stack-overflow.svg new file mode 100644 index 0000000..2b09789 --- /dev/null +++ b/angular/src/assets/images/getting-started/stack-overflow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/angular/src/assets/images/getting-started/x-white.svg b/angular/src/assets/images/getting-started/x-white.svg new file mode 100644 index 0000000..38b09ee --- /dev/null +++ b/angular/src/assets/images/getting-started/x-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/angular/src/assets/images/getting-started/x.svg b/angular/src/assets/images/getting-started/x.svg new file mode 100644 index 0000000..422e2de --- /dev/null +++ b/angular/src/assets/images/getting-started/x.svg @@ -0,0 +1,3 @@ + + + diff --git a/angular/src/assets/images/getting-started/youtube.svg b/angular/src/assets/images/getting-started/youtube.svg new file mode 100644 index 0000000..1d38b17 --- /dev/null +++ b/angular/src/assets/images/getting-started/youtube.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/assets/images/login/login-bg-img-dark.svg b/angular/src/assets/images/login/login-bg-img-dark.svg new file mode 100644 index 0000000..69f3511 --- /dev/null +++ b/angular/src/assets/images/login/login-bg-img-dark.svg @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/angular/src/assets/images/login/login-bg-img-dim.svg b/angular/src/assets/images/login/login-bg-img-dim.svg new file mode 100644 index 0000000..61cb357 --- /dev/null +++ b/angular/src/assets/images/login/login-bg-img-dim.svg @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/angular/src/assets/images/login/login-bg-img-light.svg b/angular/src/assets/images/login/login-bg-img-light.svg new file mode 100644 index 0000000..5edf938 --- /dev/null +++ b/angular/src/assets/images/login/login-bg-img-light.svg @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/angular/src/assets/images/logo/icon-lite.svg b/angular/src/assets/images/logo/icon-lite.svg new file mode 100644 index 0000000..9603f57 --- /dev/null +++ b/angular/src/assets/images/logo/icon-lite.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/angular/src/environments/environment.prod.ts b/angular/src/environments/environment.prod.ts new file mode 100644 index 0000000..612544f --- /dev/null +++ b/angular/src/environments/environment.prod.ts @@ -0,0 +1,35 @@ +import { Environment } from '@abp/ng.core'; + +const baseUrl = 'http://localhost:4200'; + +const oAuthConfig = { + issuer: 'https://localhost:44322/', + redirectUri: baseUrl, + clientId: 'Demo_App', + responseType: 'code', + scope: 'offline_access Demo', + requireHttps: true, +}; + +export const environment = { + production: true, + application: { + baseUrl, + name: 'Demo', + }, + oAuthConfig, + apis: { + default: { + url: 'https://localhost:44322', + rootNamespace: 'Hua.Abp.Demo', + }, + AbpAccountPublic: { + url: oAuthConfig.issuer, + rootNamespace: 'AbpAccountPublic', + }, + }, + remoteEnv: { + url: '/getEnvConfig', + mergeStrategy: 'deepmerge' + } +} as Environment; diff --git a/angular/src/environments/environment.ts b/angular/src/environments/environment.ts new file mode 100644 index 0000000..a2e0d09 --- /dev/null +++ b/angular/src/environments/environment.ts @@ -0,0 +1,31 @@ +import { Environment } from '@abp/ng.core'; + +const baseUrl = 'http://localhost:4200'; + +const oAuthConfig = { + issuer: 'https://localhost:44322/', + redirectUri: baseUrl, + clientId: 'Demo_App', + responseType: 'code', + scope: 'offline_access Demo', + requireHttps: true, +}; + +export const environment = { + production: false, + application: { + baseUrl, + name: 'Demo', + }, + oAuthConfig, + apis: { + default: { + url: 'https://localhost:44322', + rootNamespace: 'Hua.Abp.Demo', + }, + AbpAccountPublic: { + url: oAuthConfig.issuer, + rootNamespace: 'AbpAccountPublic', + }, + }, +} as Environment; diff --git a/angular/src/favicon.ico b/angular/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..39695854d21146f87f3c65b27b9baef29b609255 GIT binary patch literal 102968 zcmeI537pq+{>Q&#(w&J=Nlo~pW0Qn59Wxb$bSNuPvRT%hqf4s;ZCSZ(OWK-7Y)i-r zZEQ`BWU(4$h17J>bWX=~%{0yb`I^3;@t%*GgB-i_?eTc}yx-r?{dphX@9!Ex5EGOS z^e-l;AAC?X2(CpQHEO@!pkhpLdbJ=(N(%M%L2%hITswWg{Go3(h~chiXMdP2K1AzcFXkM=vQ{WM`>iK5IQHnHPQRzt zxkvx;s7jSiY*7E1QRg0e@=fmruisv=!i!UmiT(7r-c?Q>^;)%O7fpC5@2#Ahhc^GJ zc5>$0C7GKhH6QZVg@0M|&$Vr0QyMMH=rZ<+jg^Mi%Dysf$mp&MT9hAtOjga5#7eo% zGP;fLU+3RXrM>z31*vgKJ@U>8o_Y89phy2Bf`-j1jQZ1)u}K$x6jT4?v(qwTGiKeA zHD<-h+f$OuP5Lb6qfu?Y7@Ji-V?ffhLFHz3NS$`{((5kWxw^xI2B+jSed3wQ-T>bO zj~sPJaQ+{=WDg3KW!zk;Y3|K(S*CgxBl++`JUy(6z(p?=ty|YGk=d|n7^S(%X_z(L|&WIn=HLt>ZQ_|ydUtr;T zdSyLY#Igrv4-by~9>>cSTZimE4LMSznFLY?oLkyLnpE zd)n5`UYXYPwE4GW&AoEptxvsn@modAv*ozES`5p2szyqSw75|tnh*SPR_=#sv+f=d zlXd;YV<*Sw)yg_Kt>4{U6VqF!?Yg&ZTtb^&qtfoEaN6A?nq)0b=~sSu#q5NPDi{9! z!EeU=ZAI;GUCnMqo>=FOrrDd*)+MxBwy?{Rtv608KRhmDU~0~B8C6pH#SZWN_11rn z?wXu8krq2UO-Zga>9YxGcN}@zg9(ZE&aIL)qusQ%NBpJl{mU}iT*ApMeBzBF40H2G z38NlQ!Drq%XJp*HX>X3t?6zw|a)sPpY3pXk^lG0TpRjB|w++Fi?MIf&ZaO77Cih_~ zf>*n)XrIxoL*9`Czsy{9b=vilKB#oog0)3#D0W%KC)=0CkLtRx6MnPg?*s0>vemnn zcIX%69+C08c0|)_Ip6GBS~+82-MnELucp8AHIBA#e%ix#cU`h>#+a@f`qUdcVqn8z z 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 Kp#2tJdH+9GLJime literal 0 HcmV?d00001 diff --git a/angular/src/index.html b/angular/src/index.html new file mode 100644 index 0000000..2900e6b --- /dev/null +++ b/angular/src/index.html @@ -0,0 +1,13 @@ + + + + + Demo + + + + + + + + diff --git a/angular/src/main.ts b/angular/src/main.ts new file mode 100644 index 0000000..587ce78 --- /dev/null +++ b/angular/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { bootstrapApplication } from '@angular/platform-browser'; + +import { AppComponent } from './app/app.component'; +import { appConfig } from './app/app.config'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +bootstrapApplication(AppComponent, appConfig).catch(err => console.error(err)); diff --git a/angular/src/polyfills.ts b/angular/src/polyfills.ts new file mode 100644 index 0000000..1a05fd5 --- /dev/null +++ b/angular/src/polyfills.ts @@ -0,0 +1,54 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ +/*************************************************************************************************** + * BROWSER POLYFILLS + */ +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js'; // Included with Angular CLI. + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ + +/****************************************************************** + * Load `$localize` - used if i18n tags appear in Angular templates. + */ + import '@angular/localize/init'; \ No newline at end of file diff --git a/angular/src/styles.scss b/angular/src/styles.scss new file mode 100644 index 0000000..f8114d5 --- /dev/null +++ b/angular/src/styles.scss @@ -0,0 +1,40 @@ +/* You can add global styles to this file, and also import other style files */ + + +:root { + --lpx-theme-light-bg: url('assets/images/login/login-bg-img-light.svg'); + --lpx-theme-dim-bg: url('assets/images/login/login-bg-img-dim.svg'); + --lpx-theme-dark-bg: url('assets/images/login/login-bg-img-dark.svg'); + + --lpx-logo-icon: url('assets/images/logo/icon-lite.svg'); + --lpx-logo-url: var(--lpx-logo-icon); + --lpx-logo: var(--lpx-logo-icon); + + .abp-logo { + background-repeat: no-repeat; + } + + .abp-support { + width: 178px; + height: 30px; + background-image: url('assets/images/getting-started/abp-support.svg'); + } + + .abp-community { + width: 215px; + height: 30px; + background-image: url('assets/images/getting-started/abp-community.svg'); + } + + .abp-blog { + width: 142px; + height: 30px; + background-image: url('assets/images/getting-started/abp-blog.svg'); + } + + .logo-x { + width: 20px; + height: 20px; + background-image: url('assets/images/getting-started/x.svg'); + } +} diff --git a/angular/src/test.ts b/angular/src/test.ts new file mode 100644 index 0000000..e98cf6e --- /dev/null +++ b/angular/src/test.ts @@ -0,0 +1,16 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting, +} from '@angular/platform-browser-dynamic/testing'; +import 'zone.js/testing'; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false } +} +); diff --git a/angular/start.ps1 b/angular/start.ps1 new file mode 100644 index 0000000..581a5b6 --- /dev/null +++ b/angular/start.ps1 @@ -0,0 +1,2 @@ +npx yarn +npx yarn start diff --git a/angular/tsconfig.app.json b/angular/tsconfig.app.json new file mode 100644 index 0000000..82d91dc --- /dev/null +++ b/angular/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/angular/tsconfig.json b/angular/tsconfig.json new file mode 100644 index 0000000..c32c680 --- /dev/null +++ b/angular/tsconfig.json @@ -0,0 +1,23 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "esModuleInterop": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "es2020", + "lib": ["es2018", "dom"], + "paths": { + }, + "useDefineForClassFields": false + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false + } +} diff --git a/angular/tsconfig.spec.json b/angular/tsconfig.spec.json new file mode 100644 index 0000000..092345b --- /dev/null +++ b/angular/tsconfig.spec.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/angular/web.config b/angular/web.config new file mode 100644 index 0000000..ed1d104 --- /dev/null +++ b/angular/web.config @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/angular/yarn.lock b/angular/yarn.lock new file mode 100644 index 0000000..21f697e --- /dev/null +++ b/angular/yarn.lock @@ -0,0 +1,5552 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@abp/ng.account.core@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.account.core/-/ng.account.core-10.0.1.tgz#a1cff3bdad5dbc829dfaffae0d2d1c170306bd6a" + integrity sha512-bDewRTJaWz1z2x94iR4WOaKox05Ob4h/lMLIzMC2U7n0+Ua4iP6bUULBucDibzGi7o31zXqqA6szsLBYTBgpZA== + dependencies: + "@abp/ng.core" "~10.0.1" + "@abp/ng.theme.shared" "~10.0.1" + tslib "^2.0.0" + +"@abp/ng.account@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-10.0.1.tgz#68b00ae2dad3ba7ec2ab646f9875f4e14096ef4e" + integrity sha512-XnLOpimZYB3H/9NRnRC8nhZUYgomn3TX2771MdrptLHR+Mo28yQaa+bTZ4SU6fMtmcVJKYqz8KLDelWGGzjrqw== + dependencies: + "@abp/ng.account.core" "~10.0.1" + "@abp/ng.theme.shared" "~10.0.1" + tslib "^2.0.0" + +"@abp/ng.components@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.components/-/ng.components-10.0.1.tgz#ac7a5c22868902c7e98e147b790f0ec44e7b4de4" + integrity sha512-ylmwBrjRGiQiskKrnz6X6LOac4W8lXZ1kudBUfY+K8ie0DxTtXXz3pETK2ZZcAiQ4VKLLQp+5PsMZg4qHYKIYA== + dependencies: + "@ctrl/tinycolor" "^4.0.0" + chart.js "^3.5.1" + ng-zorro-antd "~20.0.0" + tslib "^2.0.0" + +"@abp/ng.core@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-10.0.1.tgz#08b69cbf3a73adcca9674eae3f0c0d135c20fcb7" + integrity sha512-+i8ABdbGkyHf5rxyBnuvJhREZLkqe5WKWgozcUcDyoVNbz2gUJnKsRGgFQx8noGii7u1Fe3HZIO5NFVamRDE4A== + dependencies: + "@abp/utils" "~10.0.1" + just-clone "^6.0.0" + just-compare "^2.0.0" + luxon "^3.0.0" + ts-toolbelt "^9.0.0" + tslib "^2.0.0" + +"@abp/ng.feature-management@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-10.0.1.tgz#ad27bc95a6e5cec2e1eaf452220600a28082b7f6" + integrity sha512-F/8K4FRn1cSZiekIFaMu4Ty1FlTPo4oKlQzNWv2iOVO3BkrskEHtokLFEdkmALup9Y5BxDOZ2YosjKGQ3g1NUA== + dependencies: + "@abp/ng.theme.shared" "~10.0.1" + tslib "^2.0.0" + +"@abp/ng.identity@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-10.0.1.tgz#edd3a450e36400aef1ae6177d13b57e86f3be32b" + integrity sha512-LHkiNZd3hwec5SN1FThnQEBMo5jQWM0JrYKpYniUpmxE7KtA6oA8GEsbaEcbaQyQYD0iMuFi007LAyJXoKnJ7A== + dependencies: + "@abp/ng.components" "~10.0.1" + "@abp/ng.permission-management" "~10.0.1" + "@abp/ng.theme.shared" "~10.0.1" + tslib "^2.0.0" + +"@abp/ng.oauth@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.oauth/-/ng.oauth-10.0.1.tgz#f2b607810d1bc2f32ee6a30e0daa745c751ea4d9" + integrity sha512-iB5TF9Flgfu0GrOCSR+wkGiuv3cLuIBEWlyDV1zTHWZ05jfXytavrJ2Nhs3bv/M6LVr00HvPH5cDdrLA3Q84nQ== + dependencies: + "@abp/ng.core" "~10.0.1" + "@abp/utils" "~10.0.1" + angular-oauth2-oidc "^20.0.0" + just-clone "^6.0.0" + just-compare "^2.0.0" + tslib "^2.0.0" + +"@abp/ng.permission-management@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-10.0.1.tgz#37cbbb6bad564d9f2b4e7ce6f11f74367d0db816" + integrity sha512-MH4V3lReGbzx8NlL3L1a6gmx+k24uCFG+gntK9jjW98z5FapCT5HjgT/EwCzZDvqdEgbE426pDD9l7GS9qDyzg== + dependencies: + "@abp/ng.theme.shared" "~10.0.1" + tslib "^2.0.0" + +"@abp/ng.schematics@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-10.0.1.tgz#22183ee8e9f9726e9fcf54ac3595bae7982dbf62" + integrity sha512-jqQyzJ8ed5/kzDTj4OH2GDSx4CfuZuD/Oj9Km1qcBR0Wto29HqP+iws89OSmN2wJKDqMJfN6Zx0o2zHPUh2DGg== + dependencies: + "@angular-devkit/core" "~20.0.0" + "@angular-devkit/schematics" "~20.0.0" + "@angular/cli" "~20.0.0" + got "^11.5.2" + jsonc-parser "^2.3.0" + should-quote "^1.0.0" + typescript "~5.8.0" + +"@abp/ng.setting-management@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-10.0.1.tgz#6bce299522e35f820d6f1950e76acfece74e3988" + integrity sha512-mtOTfNkT5vttwLiGOylhlNy4y4VlhwKlz6GNj3Mxz+kBDQO00u0lMcoYzhigGAUNQh590JC3w3OhKV9vBRnTew== + dependencies: + "@abp/ng.components" "~10.0.1" + "@abp/ng.theme.shared" "~10.0.1" + tslib "^2.0.0" + +"@abp/ng.tenant-management@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-10.0.1.tgz#c4f8e0a08d8190db9f1a193f607bd9af07c26d08" + integrity sha512-9NyL1NmGchJl25RDUeWYcK8zqGdVDzovzWMgMjivNP1eiFCVhQsSwZOf5qPrxmVzxpnj4IkR3qgHeLwcRv9h5Q== + dependencies: + "@abp/ng.feature-management" "~10.0.1" + "@abp/ng.theme.shared" "~10.0.1" + tslib "^2.0.0" + +"@abp/ng.theme.lepton-x@~5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.lepton-x/-/ng.theme.lepton-x-5.0.1.tgz#2c21fe168179433a2904353ee86cef2af4811d20" + integrity sha512-+vfxIBRRxJqY6y47Y3fU/01uMLOwA+icTRRF+zoTjC9g23warZTNdI3vPCv6UWzNk4CovMxb0+Jf33aTrPMkQg== + dependencies: + "@volo/abp.ng.lepton-x.core" "5.0.1" + "@volo/ngx-lepton-x.lite" "5.0.1" + tslib "^2.3.0" + +"@abp/ng.theme.shared@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-10.0.1.tgz#07c9d25832915f7172d2680f3366a1e82e0842d8" + integrity sha512-FjteTOwfZW7DKR75r/l3xGEgcwyB8Qokky24iQKQOPgNfmDDhY9VTesQUrZdEs5zceKjuSu08iZti2oaNSJnFQ== + dependencies: + "@abp/ng.core" "~10.0.1" + "@fortawesome/fontawesome-free" "^6.0.0" + "@ng-bootstrap/ng-bootstrap" "~19.0.0" + "@ngx-validate/core" "^0.2.0" + "@popperjs/core" "~2.11.0" + "@swimlane/ngx-datatable" "^21.0.0" + bootstrap "^5.0.0" + tslib "^2.0.0" + +"@abp/utils@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.0.1.tgz#0db8713481cb781c3c4d07a150b7f45a65466b50" + integrity sha512-YGXgco/qYSxGaQfNTHDIMU1MyEuVDe3FayIZWPW5+p+elwp4DPFD4rvD+6ZLM0Jr30k5UdKT4IFAsw7wduQWrw== + dependencies: + just-compare "^2.3.0" + +"@ampproject/remapping@2.3.0", "@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@angular-devkit/architect@0.2000.6": + version "0.2000.6" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.2000.6.tgz#847bb109d6a7d67bb75a9d3b750d188b5f186698" + integrity sha512-LvXYe7hqEgkBKzDy4VKTgCg2E2nAl8vC986n1+snzt2zMjo2l8wFl6BWal3AtaKGhPlp8/57Y53MdG2TIgUJNA== + dependencies: + "@angular-devkit/core" "20.0.6" + rxjs "7.8.2" + +"@angular-devkit/architect@0.2003.13", "@angular-devkit/architect@>= 0.2000.0 < 0.2100.0": + version "0.2003.13" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.2003.13.tgz#0f4f527cfe7952c3bc680fe32ab6f3a293ee9872" + integrity sha512-JyH6Af6PNC1IHJToColFk1RaXDU87mpPjz7M5sWDfn8bC+KBipw6dSdRkCEuw0D9HY1lZkC9EBV9k9GhpvHjCQ== + dependencies: + "@angular-devkit/core" "20.3.13" + rxjs "7.8.2" + +"@angular-devkit/core@20.0.6", "@angular-devkit/core@~20.0.0": + version "20.0.6" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-20.0.6.tgz#a68439c0f62b7f9167d6f3617553c419cc47634b" + integrity sha512-kalYqR/soAMPgYdaKJL3iOMCubiq0gljpbQFzS+Uey/P1nn+MDY8V0zzc9cBNhKKkAxCXPN/NIEKC7ICOfaJbg== + dependencies: + ajv "8.17.1" + ajv-formats "3.0.1" + jsonc-parser "3.3.1" + picomatch "4.0.2" + rxjs "7.8.2" + source-map "0.7.4" + +"@angular-devkit/core@20.3.13", "@angular-devkit/core@>= 20.0.0 < 21.0.0": + version "20.3.13" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-20.3.13.tgz#7a8faec8ceb49a4e9379229983db6b9b704b784f" + integrity sha512-/D84T1Caxll3I2sRihPDR9UaWBhF50M+tAX15PdP6uSh/TxwAlLl9p7Rm1bD0mPjPercqaEKA+h9a9qLP16hug== + dependencies: + ajv "8.17.1" + ajv-formats "3.0.1" + jsonc-parser "3.3.1" + picomatch "4.0.3" + rxjs "7.8.2" + source-map "0.7.6" + +"@angular-devkit/schematics@20.0.6", "@angular-devkit/schematics@~20.0.0": + version "20.0.6" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-20.0.6.tgz#69031eed5d72f3e1ccd01f88b2ef0ddaefb209d0" + integrity sha512-4YjAJVN6bPL7d46Jb4Rok703av5UHlHQBhfJfkPVrUV45mwUboBhBrl0WzlKuUN6JhE44xFO48LApxdT1rbYRA== + dependencies: + "@angular-devkit/core" "20.0.6" + jsonc-parser "3.3.1" + magic-string "0.30.17" + ora "8.2.0" + rxjs "7.8.2" + +"@angular-devkit/schematics@>= 20.0.0 < 21.0.0": + version "20.3.13" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-20.3.13.tgz#1e0f2ba9ce9084d05d5b9feb0800b8c75000ea5f" + integrity sha512-hdMKY4rUTko8xqeWYGnwwDYDomkeOoLsYsP6SdaHWK7hpGvzWsT6Q/aIv8J8NrCYkLu+M+5nLiKOooweUZu3GQ== + dependencies: + "@angular-devkit/core" "20.3.13" + jsonc-parser "3.3.1" + magic-string "0.30.17" + ora "8.2.0" + rxjs "7.8.2" + +"@angular-eslint/builder@~20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/builder/-/builder-20.0.0.tgz#ac92670310e10c8ddb1911706e88161fe66cdfce" + integrity sha512-9jS3VvY+K+EHw9pofsdwKxDirKuTuRBnjMZdaKoUfLoYy5eS1XGJBXoMdaQiM+mSlTv113+L0SK4U565xiBLHQ== + dependencies: + "@angular-devkit/architect" ">= 0.2000.0 < 0.2100.0" + "@angular-devkit/core" ">= 20.0.0 < 21.0.0" + +"@angular-eslint/bundled-angular-compiler@20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-20.0.0.tgz#dd694e6311b8ecb0b053c6a00ac504d65f2ce08b" + integrity sha512-mDXMQd08s11q9fC6Ps3ffZmvXop9eLuAAXexofHhA7uuoQAoUWS2zoOSNTWtDR6oxMcqEeMnALCjjFeJVBSVmg== + +"@angular-eslint/eslint-plugin-template@20.0.0", "@angular-eslint/eslint-plugin-template@~20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-20.0.0.tgz#7237f57f7f9f4753406060ceca7946a1db745cc3" + integrity sha512-QoGgrawU5JFcaj0TjXHKC6fiZkxBeGVRj/TWJtTo/x+c5TVoV5k9pI7Uxdmo9kr4SkPXmt80ZklvExSA510gyw== + dependencies: + "@angular-eslint/bundled-angular-compiler" "20.0.0" + "@angular-eslint/utils" "20.0.0" + aria-query "5.3.2" + axobject-query "4.1.0" + +"@angular-eslint/eslint-plugin@20.0.0", "@angular-eslint/eslint-plugin@~20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin/-/eslint-plugin-20.0.0.tgz#bf91c54c6da95c24950b53af4855c79ef4c5a511" + integrity sha512-xzaLj2yEn43DH0bE9Gw3GrmC+jivIS5/Hbh3bDj3ctw3mUUrD8hrS7kBo1neZ0gnoVLoo/mwIldG+xs5NDY66A== + dependencies: + "@angular-eslint/bundled-angular-compiler" "20.0.0" + "@angular-eslint/utils" "20.0.0" + +"@angular-eslint/schematics@~20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/schematics/-/schematics-20.0.0.tgz#3fba14a7d3121a5e70bcca63b2d9719f61227c04" + integrity sha512-VL3Sb6Df+iiUSPaQG8NxMPLx0dFRtRGSzsfe6CWYW7FUFP5dYEjpB63gKSAiIBLjPgnG6PMAzrRtfN4nDaTM+g== + dependencies: + "@angular-devkit/core" ">= 20.0.0 < 21.0.0" + "@angular-devkit/schematics" ">= 20.0.0 < 21.0.0" + "@angular-eslint/eslint-plugin" "20.0.0" + "@angular-eslint/eslint-plugin-template" "20.0.0" + ignore "7.0.5" + semver "7.7.2" + strip-json-comments "3.1.1" + +"@angular-eslint/template-parser@~20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/template-parser/-/template-parser-20.0.0.tgz#be8cae43017ffc8ff4dd4bbaa97da1be56792694" + integrity sha512-5y9hxH/z+9rIOJp1FwRBSgJ6xt8/pgRfBF+eEIPyIHKl5mV0cVzlQiD7j1LMYTcxJZLHAoryomvSBDpmbtAlWg== + dependencies: + "@angular-eslint/bundled-angular-compiler" "20.0.0" + eslint-scope "^8.0.2" + +"@angular-eslint/utils@20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@angular-eslint/utils/-/utils-20.0.0.tgz#9a430d75942d254387aa365121132fb89c07ba7e" + integrity sha512-3wsx0iX5f/IQgcTwXIzQq2VPHSjYXJasKNSfgMyKXn4MJGljaSNj+A0ao/5zjnwWVpL0vK5PQsk7EIuMcgAdrg== + dependencies: + "@angular-eslint/bundled-angular-compiler" "20.0.0" + +"@angular/animations@~20.0.0": + version "20.0.7" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-20.0.7.tgz#f019dd4a7108c8d22a7baa4b5a79fbc2bb7bd512" + integrity sha512-8qGGm7EcqvUHS1fbKOsWp7t+TLb9P782154h5PWDUqhnOlCeCDaIVf7Vbs8ux37zTDv+/CAWUTEArF5sEOBHHw== + dependencies: + tslib "^2.3.0" + +"@angular/build@^20.0.0": + version "20.3.13" + resolved "https://registry.yarnpkg.com/@angular/build/-/build-20.3.13.tgz#e64703cd3004165f5ef5ce526a0c41ec865d6688" + integrity sha512-/5pM3ZS+lLkZgA+n6TMmNV8I6t9Ow1C6Vkj6bXqWeOgFDH5LwnIEZFAKzEDBkCGos0m2gPKPcREcDD5tfp9h4g== + dependencies: + "@ampproject/remapping" "2.3.0" + "@angular-devkit/architect" "0.2003.13" + "@babel/core" "7.28.3" + "@babel/helper-annotate-as-pure" "7.27.3" + "@babel/helper-split-export-declaration" "7.24.7" + "@inquirer/confirm" "5.1.14" + "@vitejs/plugin-basic-ssl" "2.1.0" + beasties "0.3.5" + browserslist "^4.23.0" + esbuild "0.25.9" + https-proxy-agent "7.0.6" + istanbul-lib-instrument "6.0.3" + jsonc-parser "3.3.1" + listr2 "9.0.1" + magic-string "0.30.17" + mrmime "2.0.1" + parse5-html-rewriting-stream "8.0.0" + picomatch "4.0.3" + piscina "5.1.3" + rollup "4.52.3" + sass "1.90.0" + semver "7.7.2" + source-map-support "0.5.21" + tinyglobby "0.2.14" + vite "7.1.11" + watchpack "2.4.4" + optionalDependencies: + lmdb "3.4.2" + +"@angular/cdk@^20.0.0": + version "20.2.14" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-20.2.14.tgz#5da8d29a0688cf0c6f58db77aee8afa0a05faaea" + integrity sha512-7bZxc01URbiPiIBWThQ69XwOxVduqEKN4PhpbF2AAyfMc/W8Hcr4VoIJOwL0O1Nkq5beS8pCAqoOeIgFyXd/kg== + dependencies: + parse5 "^8.0.0" + tslib "^2.3.0" + +"@angular/cli@~20.0.0": + version "20.0.6" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-20.0.6.tgz#86d78dc76a062bd9a4c36596cfb4685725b04af5" + integrity sha512-d7E3QgYQR42pxzvLOHryqxfEvFdcz6OKhskASQdNGdyH8lIXSKE08U/8KpaeMASTksJ8TmLu31N4JCiCSv29HA== + dependencies: + "@angular-devkit/architect" "0.2000.6" + "@angular-devkit/core" "20.0.6" + "@angular-devkit/schematics" "20.0.6" + "@inquirer/prompts" "7.5.1" + "@listr2/prompt-adapter-inquirer" "2.0.22" + "@schematics/angular" "20.0.6" + "@yarnpkg/lockfile" "1.1.0" + ini "5.0.0" + jsonc-parser "3.3.1" + listr2 "8.3.3" + npm-package-arg "12.0.2" + npm-pick-manifest "10.0.0" + pacote "21.0.0" + resolve "1.22.10" + semver "7.7.2" + yargs "17.7.2" + +"@angular/common@~20.0.0": + version "20.0.7" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-20.0.7.tgz#f813b2a4f96dd6411ed25cc28d105a5be3b2dfe4" + integrity sha512-1LQrpLqTeB4K9LYrDI91SbN+BaLkTnw4905ZQJrySJzX7s37eB2uJdtY8RKS8VgNithGpknoCtPYRDVX+At75Q== + dependencies: + tslib "^2.3.0" + +"@angular/compiler-cli@~20.0.0": + version "20.0.7" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-20.0.7.tgz#8ac5ccbba512a564440019542c45120dbf35ecbe" + integrity sha512-t4B18mE2iX6oFwLmVKLAeTnJgFQwXXKciqfUL4EvKBAEm+Q2vMCefVkEnqLUg+eceHZNK3+0biVxoL5TcCoEAw== + dependencies: + "@babel/core" "7.27.7" + "@jridgewell/sourcemap-codec" "^1.4.14" + chokidar "^4.0.0" + convert-source-map "^1.5.1" + reflect-metadata "^0.2.0" + semver "^7.0.0" + tslib "^2.3.0" + yargs "^18.0.0" + +"@angular/compiler@~20.0.0": + version "20.0.7" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-20.0.7.tgz#78d8e93a5f46a9f6440f89048aaea097889c3c80" + integrity sha512-dy3QWLIgx4I9Ds1AHp/xuPlJK4ZAoctRw96r7KS6KPsnfJBVqrCMLk+n7ObgeAYUIRSCmpO4E4+Y5N+ugwy9iQ== + dependencies: + tslib "^2.3.0" + +"@angular/core@~20.0.0": + version "20.0.7" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-20.0.7.tgz#53c49a519dfde3c62cd394212b46cee535752d08" + integrity sha512-bIG2oD9G/dH5RoGeJZX+hEpyXcgWDAUYo2KxTJ7hrOFzL4gqjtsroqJlrvqjqiHRamcGdfnIaKKInsnszvZ+nw== + dependencies: + tslib "^2.3.0" + +"@angular/forms@~20.0.0": + version "20.0.7" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-20.0.7.tgz#3f533733625840eb985ac78a4c5c0aaeafd8caeb" + integrity sha512-NJVOSFF1oM59lPM7QuxKzPFiDn9aJ4Q2SIWYWHLmTwC+QADgHPoUXPzjMG35FKfdF8QSDLQye40dNPoWKA1wng== + dependencies: + tslib "^2.3.0" + +"@angular/language-service@~20.0.0": + version "20.0.7" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-20.0.7.tgz#d5ac628cdaaadda2104b09f4999b1c66ea8818ff" + integrity sha512-gNhkZhcOtUmeMzVopxS9RSBZAFeDe24NupPyT+oXGj5oKeZQKZ4m9C/e4u1Jo4QF1RCUPCkABj9ZjKEdk8gMfQ== + +"@angular/localize@~20.0.0": + version "20.0.7" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-20.0.7.tgz#d7d83eb933c176587c8307c3f24674c382e94c69" + integrity sha512-y6jCYhZ7ZJ/spkVM17eIuFuYTyVhJw48fF/E5HqzvKXb44bNBK2J5/IruN06GZOSzCdkI/NF2tgxrrornrEobQ== + dependencies: + "@babel/core" "7.27.7" + "@types/babel__core" "7.20.5" + tinyglobby "^0.2.12" + yargs "^18.0.0" + +"@angular/platform-browser-dynamic@~20.0.0": + version "20.0.7" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.0.7.tgz#85fb99c583f72d6d26a1eaf35260936408d2cc17" + integrity sha512-tMfuYU6ud0lAzazE/7x8DEx2thqcafpdx53pj3/Kz8JVvidWf6ep18D0AVkUJpptS2OczgeWzyOn06jLMmdf7w== + dependencies: + tslib "^2.3.0" + +"@angular/platform-browser@~20.0.0": + version "20.0.7" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-20.0.7.tgz#ddeb22f34a051a7dcfb1e88b87fa07f3c20f7efe" + integrity sha512-oEkNs7Qp0VAiCfpDf15FmISMc+HUq/acvKiI2btKCL0rBkSyBA+nbqdOkwrygi311S8LL0KhaXKr25/Evdh2XQ== + dependencies: + tslib "^2.3.0" + +"@angular/router@~20.0.0": + version "20.0.7" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-20.0.7.tgz#f4def81f4122db8359548e66439ad1bc90bec6ad" + integrity sha512-ku4gPPx2FzltNiRIui5M7a+dgU9PLrgHxk5w0QUnzaZc7VVDD+1mWxPZo/Yqnk0uKp/iTwbaX7NmxXn0sCbRlg== + dependencies: + tslib "^2.3.0" + +"@ant-design/colors@^7.0.0": + version "7.2.1" + resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-7.2.1.tgz#3bbc1c6c18550020d1622a0067ff03492318df98" + integrity sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ== + dependencies: + "@ant-design/fast-color" "^2.0.6" + +"@ant-design/fast-color@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@ant-design/fast-color/-/fast-color-2.0.6.tgz#ab4d4455c1542c9017d367c2fa8ca3e4215d0ba2" + integrity sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA== + dependencies: + "@babel/runtime" "^7.24.7" + +"@ant-design/icons-angular@^20.0.0": + version "20.0.0" + resolved "https://registry.yarnpkg.com/@ant-design/icons-angular/-/icons-angular-20.0.0.tgz#67eee0b399e37a9ed6f699eb0ce49ae8f029d46b" + integrity sha512-KMTytjYxprCI/oOEs0KoxNUsT5g+DVCp5JMMgDOSlSpyTpWg5P54kea0398v8urr4QJFpoCucJshFZ8+uv67cA== + dependencies: + "@ant-design/colors" "^7.0.0" + tslib "^2.0.0" + +"@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.27.2": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== + +"@babel/core@7.27.7": + version "7.27.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.7.tgz#0ddeab1e7b17317dad8c3c3a887716f66b5c4428" + integrity sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.27.3" + "@babel/helpers" "^7.27.6" + "@babel/parser" "^7.27.7" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.27.7" + "@babel/types" "^7.27.7" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/core@7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.3.tgz#aceddde69c5d1def69b839d09efa3e3ff59c97cb" + integrity sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.3" + "@babel/parser" "^7.28.3" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.3" + "@babel/types" "^7.28.2" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/core@^7.23.9", "@babel/core@^7.7.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" + integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.27.5", "@babel/generator@^7.28.3", "@babel/generator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== + dependencies: + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== + dependencies: + "@babel/types" "^7.27.3" + +"@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== + dependencies: + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-transforms@^7.27.3", "@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.28.3" + +"@babel/helper-split-export-declaration@7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" + integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helpers@^7.27.6", "@babel/helpers@^7.28.3", "@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" + +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.27.7", "@babel/parser@^7.28.3", "@babel/parser@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== + dependencies: + "@babel/types" "^7.28.5" + +"@babel/runtime@^7.21.0", "@babel/runtime@^7.24.7": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" + integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== + +"@babel/template@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1", "@babel/traverse@^7.27.7", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.5" + debug "^4.3.1" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.27.7", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@ctrl/tinycolor@^3.6.0": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31" + integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== + +"@ctrl/tinycolor@^4.0.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz#ba5d0b917303c0b3d3c14c4865cdc6ded25ac05f" + integrity sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A== + +"@esbuild/aix-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz#80fcbe36130e58b7670511e888b8e88a259ed76c" + integrity sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA== + +"@esbuild/aix-ppc64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz#bef96351f16520055c947aba28802eede3c9e9a9" + integrity sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA== + +"@esbuild/android-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz#8aa4965f8d0a7982dc21734bf6601323a66da752" + integrity sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg== + +"@esbuild/android-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz#d2e70be7d51a529425422091e0dcb90374c1546c" + integrity sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg== + +"@esbuild/android-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz#300712101f7f50f1d2627a162e6e09b109b6767a" + integrity sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg== + +"@esbuild/android-arm@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.9.tgz#d2a753fe2a4c73b79437d0ba1480e2d760097419" + integrity sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ== + +"@esbuild/android-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz#87dfb27161202bdc958ef48bb61b09c758faee16" + integrity sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg== + +"@esbuild/android-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.9.tgz#5278836e3c7ae75761626962f902a0d55352e683" + integrity sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw== + +"@esbuild/darwin-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz#79197898ec1ff745d21c071e1c7cc3c802f0c1fd" + integrity sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg== + +"@esbuild/darwin-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz#f1513eaf9ec8fa15dcaf4c341b0f005d3e8b47ae" + integrity sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg== + +"@esbuild/darwin-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz#146400a8562133f45c4d2eadcf37ddd09718079e" + integrity sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA== + +"@esbuild/darwin-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz#e27dbc3b507b3a1cea3b9280a04b8b6b725f82be" + integrity sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ== + +"@esbuild/freebsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz#1c5f9ba7206e158fd2b24c59fa2d2c8bb47ca0fe" + integrity sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg== + +"@esbuild/freebsd-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz#364e3e5b7a1fd45d92be08c6cc5d890ca75908ca" + integrity sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q== + +"@esbuild/freebsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz#ea631f4a36beaac4b9279fa0fcc6ca29eaeeb2b3" + integrity sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ== + +"@esbuild/freebsd-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz#7c869b45faeb3df668e19ace07335a0711ec56ab" + integrity sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg== + +"@esbuild/linux-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz#e1066bce58394f1b1141deec8557a5f0a22f5977" + integrity sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ== + +"@esbuild/linux-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz#48d42861758c940b61abea43ba9a29b186d6cb8b" + integrity sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw== + +"@esbuild/linux-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz#452cd66b20932d08bdc53a8b61c0e30baf4348b9" + integrity sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw== + +"@esbuild/linux-arm@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz#6ce4b9cabf148274101701d112b89dc67cc52f37" + integrity sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw== + +"@esbuild/linux-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz#b24f8acc45bcf54192c7f2f3be1b53e6551eafe0" + integrity sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA== + +"@esbuild/linux-ia32@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz#207e54899b79cac9c26c323fc1caa32e3143f1c4" + integrity sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A== + +"@esbuild/linux-loong64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz#f9cfffa7fc8322571fbc4c8b3268caf15bd81ad0" + integrity sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng== + +"@esbuild/linux-loong64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz#0ba48a127159a8f6abb5827f21198b999ffd1fc0" + integrity sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ== + +"@esbuild/linux-mips64el@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz#575a14bd74644ffab891adc7d7e60d275296f2cd" + integrity sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw== + +"@esbuild/linux-mips64el@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz#a4d4cc693d185f66a6afde94f772b38ce5d64eb5" + integrity sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA== + +"@esbuild/linux-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz#75b99c70a95fbd5f7739d7692befe60601591869" + integrity sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA== + +"@esbuild/linux-ppc64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz#0f5805c1c6d6435a1dafdc043cb07a19050357db" + integrity sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w== + +"@esbuild/linux-riscv64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz#2e3259440321a44e79ddf7535c325057da875cd6" + integrity sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w== + +"@esbuild/linux-riscv64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz#6776edece0f8fca79f3386398b5183ff2a827547" + integrity sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg== + +"@esbuild/linux-s390x@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz#17676cabbfe5928da5b2a0d6df5d58cd08db2663" + integrity sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg== + +"@esbuild/linux-s390x@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz#3f6f29ef036938447c2218d309dc875225861830" + integrity sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA== + +"@esbuild/linux-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz#0583775685ca82066d04c3507f09524d3cd7a306" + integrity sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw== + +"@esbuild/linux-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz#831fe0b0e1a80a8b8391224ea2377d5520e1527f" + integrity sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg== + +"@esbuild/netbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz#f04c4049cb2e252fe96b16fed90f70746b13f4a4" + integrity sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg== + +"@esbuild/netbsd-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz#06f99d7eebe035fbbe43de01c9d7e98d2a0aa548" + integrity sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q== + +"@esbuild/netbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz#77da0d0a0d826d7c921eea3d40292548b258a076" + integrity sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ== + +"@esbuild/netbsd-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz#db99858e6bed6e73911f92a88e4edd3a8c429a52" + integrity sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g== + +"@esbuild/openbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz#6296f5867aedef28a81b22ab2009c786a952dccd" + integrity sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A== + +"@esbuild/openbsd-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz#afb886c867e36f9d86bb21e878e1185f5d5a0935" + integrity sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ== + +"@esbuild/openbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz#f8d23303360e27b16cf065b23bbff43c14142679" + integrity sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw== + +"@esbuild/openbsd-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz#30855c9f8381fac6a0ef5b5f31ac6e7108a66ecf" + integrity sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA== + +"@esbuild/openharmony-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz#49e0b768744a3924be0d7fd97dd6ce9b2923d88d" + integrity sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg== + +"@esbuild/openharmony-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz#2f2144af31e67adc2a8e3705c20c2bd97bd88314" + integrity sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg== + +"@esbuild/sunos-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz#a6ed7d6778d67e528c81fb165b23f4911b9b13d6" + integrity sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w== + +"@esbuild/sunos-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz#69b99a9b5bd226c9eb9c6a73f990fddd497d732e" + integrity sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw== + +"@esbuild/win32-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz#9ac14c378e1b653af17d08e7d3ce34caef587323" + integrity sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg== + +"@esbuild/win32-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz#d789330a712af916c88325f4ffe465f885719c6b" + integrity sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ== + +"@esbuild/win32-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz#918942dcbbb35cc14fca39afb91b5e6a3d127267" + integrity sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ== + +"@esbuild/win32-ia32@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz#52fc735406bd49688253e74e4e837ac2ba0789e3" + integrity sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww== + +"@esbuild/win32-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz#9bdad8176be7811ad148d1f8772359041f46c6c5" + integrity sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA== + +"@esbuild/win32-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz#585624dc829cfb6e7c0aa6c3ca7d7e6daa87e34f" + integrity sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" + integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== + +"@fortawesome/fontawesome-free@^6.0.0": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.2.tgz#8249de9b7e22fcb3ceb5e66090c30a1d5492b81a" + integrity sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA== + +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@inquirer/ansi@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.2.tgz#674a4c4d81ad460695cb2a1fc69d78cd187f337e" + integrity sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ== + +"@inquirer/checkbox@^4.1.6": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.3.2.tgz#e1483e6519d6ffef97281a54d2a5baa0d81b3f3b" + integrity sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/confirm@5.1.14": + version "5.1.14" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.14.tgz#e6321edf51a3a5f54dc548b80ef6ba89891351ad" + integrity sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" + +"@inquirer/confirm@^5.1.10": + version "5.1.21" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.21.tgz#610c4acd7797d94890a6e2dde2c98eb1e891dd12" + integrity sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/core@^10.1.15", "@inquirer/core@^10.3.2": + version "10.3.2" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.3.2.tgz#535979ff3ff4fe1e7cc4f83e2320504c743b7e20" + integrity sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + cli-width "^4.1.0" + mute-stream "^2.0.0" + signal-exit "^4.1.0" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.3" + +"@inquirer/editor@^4.2.11": + version "4.2.23" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.23.tgz#fe046a3bfdae931262de98c1052437d794322e0b" + integrity sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/external-editor" "^1.0.3" + "@inquirer/type" "^3.0.10" + +"@inquirer/expand@^4.0.13": + version "4.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.23.tgz#a38b5f32226d75717c370bdfed792313b92bdc05" + integrity sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/external-editor@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.3.tgz#c23988291ee676290fdab3fd306e64010a6d13b8" + integrity sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA== + dependencies: + chardet "^2.1.1" + iconv-lite "^0.7.0" + +"@inquirer/figures@^1.0.15": + version "1.0.15" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.15.tgz#dbb49ed80df11df74268023b496ac5d9acd22b3a" + integrity sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g== + +"@inquirer/input@^4.1.10": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.3.1.tgz#778683b4c4c4d95d05d4b05c4a854964b73565b4" + integrity sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/number@^3.0.13": + version "3.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.23.tgz#3fdec2540d642093fd7526818fd8d4bdc7335094" + integrity sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/password@^4.0.13": + version "4.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.23.tgz#b9f5187c8c92fd7aa9eceb9d8f2ead0d7e7b000d" + integrity sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/prompts@7.5.1": + version "7.5.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.5.1.tgz#44e70dacfe20314d233c61410618ceef29a8482f" + integrity sha512-5AOrZPf2/GxZ+SDRZ5WFplCA2TAQgK3OYrXCYmJL5NaTu4ECcoWFlfUZuw7Es++6Njv7iu/8vpYJhuzxUH76Vg== + dependencies: + "@inquirer/checkbox" "^4.1.6" + "@inquirer/confirm" "^5.1.10" + "@inquirer/editor" "^4.2.11" + "@inquirer/expand" "^4.0.13" + "@inquirer/input" "^4.1.10" + "@inquirer/number" "^3.0.13" + "@inquirer/password" "^4.0.13" + "@inquirer/rawlist" "^4.1.1" + "@inquirer/search" "^3.0.13" + "@inquirer/select" "^4.2.1" + +"@inquirer/rawlist@^4.1.1": + version "4.1.11" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.11.tgz#313c8c3ffccb7d41e990c606465726b4a898a033" + integrity sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/search@^3.0.13": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.2.2.tgz#4cc6fd574dcd434e4399badc37c742c3fd534ac8" + integrity sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/select@^4.2.1": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.4.2.tgz#2ac8fca960913f18f1d1b35323ed8fcd27d89323" + integrity sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/type@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.5.5.tgz#303ea04ce7ad2e585b921b662b3be36ef7b4f09b" + integrity sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA== + dependencies: + mute-stream "^1.0.0" + +"@inquirer/type@^3.0.10", "@inquirer/type@^3.0.8": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.10.tgz#11ed564ec78432a200ea2601a212d24af8150d50" + integrity sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA== + +"@isaacs/balanced-match@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" + integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== + +"@isaacs/brace-expansion@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3" + integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA== + dependencies: + "@isaacs/balanced-match" "^4.0.1" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@listr2/prompt-adapter-inquirer@2.0.22": + version "2.0.22" + resolved "https://registry.yarnpkg.com/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.22.tgz#95f7730de62089be79a87a80aa333f5f4644f3c5" + integrity sha512-hV36ZoY+xKL6pYOt1nPNnkciFkn89KZwqLhAFzJvYysAvL5uBQdiADZx/8bIDXIukzzwG0QlPYolgMzQUtKgpQ== + dependencies: + "@inquirer/type" "^1.5.5" + +"@lmdb/lmdb-darwin-arm64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.4.2.tgz#316848b41e26cf0ddb379fad193d49052f09d7df" + integrity sha512-NK80WwDoODyPaSazKbzd3NEJ3ygePrkERilZshxBViBARNz21rmediktGHExoj9n5t9+ChlgLlxecdFKLCuCKg== + +"@lmdb/lmdb-darwin-x64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.4.2.tgz#c2048ad9d4c4c23e420f8fb2f3c418f713715cb7" + integrity sha512-zevaowQNmrp3U7Fz1s9pls5aIgpKRsKb3dZWDINtLiozh3jZI9fBrI19lYYBxqdyiIyNdlyiidPnwPShj4aK+w== + +"@lmdb/lmdb-linux-arm64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.4.2.tgz#382a820e422c189feb0b64ce6ab2ad379ba7b097" + integrity sha512-ZBEfbNZdkneebvZs98Lq30jMY8V9IJzckVeigGivV7nTHJc+89Ctomp1kAIWKlwIG0ovCDrFI448GzFPORANYg== + +"@lmdb/lmdb-linux-arm@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.4.2.tgz#a3dbb70e1a1e999d7c82ccff3d6c938872241acd" + integrity sha512-OmHCULY17rkx/RoCoXlzU7LyR8xqrksgdYWwtYa14l/sseezZ8seKWXcogHcjulBddER5NnEFV4L/Jtr2nyxeg== + +"@lmdb/lmdb-linux-x64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.4.2.tgz#aa073eac33ede369d51afd0314b2e2af06a368e0" + integrity sha512-vL9nM17C77lohPYE4YaAQvfZCSVJSryE4fXdi8M7uWPBnU+9DJabgKVAeyDb84ZM2vcFseoBE4/AagVtJeRE7g== + +"@lmdb/lmdb-win32-arm64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.4.2.tgz#7e73500f0c81ca269a6ad9290fb1e7bf7137863d" + integrity sha512-SXWjdBfNDze4ZPeLtYIzsIeDJDJ/SdsA0pEXcUBayUIMO0FQBHfVZZyHXQjjHr4cvOAzANBgIiqaXRwfMhzmLw== + +"@lmdb/lmdb-win32-x64@3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.4.2.tgz#99caf114bb74d39c9e1baca99b907353ad8bf461" + integrity sha512-IY+r3bxKW6Q6sIPiMC0L533DEfRJSXibjSI3Ft/w9Q8KQBNqEIvUFXt+09wV8S5BRk0a8uSF19YWxuRwEfI90g== + +"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz#9edec61b22c3082018a79f6d1c30289ddf3d9d11" + integrity sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw== + +"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz#33677a275204898ad8acbf62734fc4dc0b6a4855" + integrity sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw== + +"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz#19edf7cdc2e7063ee328403c1d895a86dd28f4bb" + integrity sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg== + +"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz#94fb0543ba2e28766c3fc439cabbe0440ae70159" + integrity sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw== + +"@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz#4a0609ab5fe44d07c9c60a11e4484d3c38bbd6e3" + integrity sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg== + +"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz#0aa5502d547b57abfc4ac492de68e2006e417242" + integrity sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ== + +"@napi-rs/nice-android-arm-eabi@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz#4ebd966821cd6c2cc7cc020eb468de397bb9b40f" + integrity sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw== + +"@napi-rs/nice-android-arm64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz#e183ba874512bc005852daab8b78c63e0a4288a8" + integrity sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw== + +"@napi-rs/nice-darwin-arm64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz#64b1585809774cbb8bf95cea3d4c8827c9897394" + integrity sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A== + +"@napi-rs/nice-darwin-x64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz#99c0c7f62cb1e23ca76881bb29cc6000aeccc6f0" + integrity sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ== + +"@napi-rs/nice-freebsd-x64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz#9a5ca0e3ced86207887c98a5a560de8cde5a909e" + integrity sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ== + +"@napi-rs/nice-linux-arm-gnueabihf@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz#b8a6a1bc88d0de3e99ac3fdea69980dc6e20b502" + integrity sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg== + +"@napi-rs/nice-linux-arm64-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz#226f1ef30fcb80fa40370e843b75cc86e39e1183" + integrity sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ== + +"@napi-rs/nice-linux-arm64-musl@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz#01345c3db79210ba5406c8729e8db75ed11c5f14" + integrity sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg== + +"@napi-rs/nice-linux-ppc64-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz#ce7a1025227daab491ded40784b561394d688fcb" + integrity sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg== + +"@napi-rs/nice-linux-riscv64-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz#9bef5dc89a0425d03163853b4968dbb686d98fd5" + integrity sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw== + +"@napi-rs/nice-linux-s390x-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz#247c8c7c45876877bdb337cfeb290ff4fd82de62" + integrity sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ== + +"@napi-rs/nice-linux-x64-gnu@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz#7fd1f5e037cb44ab4f5f95a3b3225a99e3248f12" + integrity sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg== + +"@napi-rs/nice-linux-x64-musl@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz#d447cd7157ae5da5c0b15fc618bf61f0c344ff6f" + integrity sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw== + +"@napi-rs/nice-openharmony-arm64@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz#1120e457d2cc6b2bc86ef0a697faefe2e194dfce" + integrity sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ== + +"@napi-rs/nice-win32-arm64-msvc@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz#91e4cfecf339b43fa7934f0c8b19d04f4cdd9bc0" + integrity sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA== + +"@napi-rs/nice-win32-ia32-msvc@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz#ed9300bba074d3e3b0a077d6b157f2b4ff70af0e" + integrity sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug== + +"@napi-rs/nice-win32-x64-msvc@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz#8292b82fb46458618ccff5b8130f78974349541e" + integrity sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ== + +"@napi-rs/nice@^1.0.4": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice/-/nice-1.1.1.tgz#c1aacd631ecd4c500c959e3e7cfedd5c73bffe2a" + integrity sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw== + optionalDependencies: + "@napi-rs/nice-android-arm-eabi" "1.1.1" + "@napi-rs/nice-android-arm64" "1.1.1" + "@napi-rs/nice-darwin-arm64" "1.1.1" + "@napi-rs/nice-darwin-x64" "1.1.1" + "@napi-rs/nice-freebsd-x64" "1.1.1" + "@napi-rs/nice-linux-arm-gnueabihf" "1.1.1" + "@napi-rs/nice-linux-arm64-gnu" "1.1.1" + "@napi-rs/nice-linux-arm64-musl" "1.1.1" + "@napi-rs/nice-linux-ppc64-gnu" "1.1.1" + "@napi-rs/nice-linux-riscv64-gnu" "1.1.1" + "@napi-rs/nice-linux-s390x-gnu" "1.1.1" + "@napi-rs/nice-linux-x64-gnu" "1.1.1" + "@napi-rs/nice-linux-x64-musl" "1.1.1" + "@napi-rs/nice-openharmony-arm64" "1.1.1" + "@napi-rs/nice-win32-arm64-msvc" "1.1.1" + "@napi-rs/nice-win32-ia32-msvc" "1.1.1" + "@napi-rs/nice-win32-x64-msvc" "1.1.1" + +"@ng-bootstrap/ng-bootstrap@~19.0.0": + version "19.0.1" + resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-19.0.1.tgz#a9d962f590012e0a6f731b5c5069c70c6ae8cb7f" + integrity sha512-1lErAkwh0F+gWkzpiddViY4GfA9LVXkwLpgBsV9Mb3IC0zo6WNkY8WxCC+LqajirBTu20DCkZSqeRzrwaVLpZw== + dependencies: + tslib "^2.3.0" + +"@ngx-validate/core@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@ngx-validate/core/-/core-0.2.0.tgz#5b3d9bb963c2fcb5cb6d745ca2f553d411082a3f" + integrity sha512-04iGHPCXyFCykAyCGehxetziOt69Lhk/6yWifhC/vc8PZJ0S8m3hIn6tI63pEdVoV95+Hc1GQ1K/wMRtRD0uLQ== + dependencies: + tslib "^2.0.0" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/agent@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-3.0.0.tgz#1685b1fbd4a1b7bb4f930cbb68ce801edfe7aa44" + integrity sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q== + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.3" + +"@npmcli/fs@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-4.0.0.tgz#a1eb1aeddefd2a4a347eca0fab30bc62c0e1c0f2" + integrity sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q== + dependencies: + semver "^7.3.5" + +"@npmcli/git@^6.0.0": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-6.0.3.tgz#966cbb228514372877de5244db285b199836f3aa" + integrity sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ== + dependencies: + "@npmcli/promise-spawn" "^8.0.0" + ini "^5.0.0" + lru-cache "^10.0.1" + npm-pick-manifest "^10.0.0" + proc-log "^5.0.0" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^5.0.0" + +"@npmcli/installed-package-contents@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz#2c1170ff4f70f68af125e2842e1853a93223e4d1" + integrity sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q== + dependencies: + npm-bundled "^4.0.0" + npm-normalize-package-bin "^4.0.0" + +"@npmcli/node-gyp@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz#01f900bae62f0f27f9a5a127b40d443ddfb9d4c6" + integrity sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA== + +"@npmcli/package-json@^6.0.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-6.2.0.tgz#7c7e61e466eefdf729cb87a34c3adc15d76e2f97" + integrity sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA== + dependencies: + "@npmcli/git" "^6.0.0" + glob "^10.2.2" + hosted-git-info "^8.0.0" + json-parse-even-better-errors "^4.0.0" + proc-log "^5.0.0" + semver "^7.5.3" + validate-npm-package-license "^3.0.4" + +"@npmcli/promise-spawn@^8.0.0": + version "8.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz#08c5e4c1cab7ff848e442e4b19bbf0ee699d133f" + integrity sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg== + dependencies: + which "^5.0.0" + +"@npmcli/redact@^3.0.0": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-3.2.2.tgz#4a6745e0ae269120ad223780ce374d6c59ae34cd" + integrity sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg== + +"@npmcli/run-script@^9.0.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-9.1.0.tgz#6168c2be4703fe5ed31acb08a2151cb620ed30a4" + integrity sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg== + dependencies: + "@npmcli/node-gyp" "^4.0.0" + "@npmcli/package-json" "^6.0.0" + "@npmcli/promise-spawn" "^8.0.0" + node-gyp "^11.0.0" + proc-log "^5.0.0" + which "^5.0.0" + +"@parcel/watcher-android-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" + integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA== + +"@parcel/watcher-darwin-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67" + integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw== + +"@parcel/watcher-darwin-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8" + integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg== + +"@parcel/watcher-freebsd-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b" + integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ== + +"@parcel/watcher-linux-arm-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1" + integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA== + +"@parcel/watcher-linux-arm-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e" + integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q== + +"@parcel/watcher-linux-arm64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30" + integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w== + +"@parcel/watcher-linux-arm64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2" + integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg== + +"@parcel/watcher-linux-x64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e" + integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A== + +"@parcel/watcher-linux-x64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee" + integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg== + +"@parcel/watcher-win32-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243" + integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw== + +"@parcel/watcher-win32-ia32@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6" + integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ== + +"@parcel/watcher-win32-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947" + integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA== + +"@parcel/watcher@^2.4.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200" + integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.1" + "@parcel/watcher-darwin-arm64" "2.5.1" + "@parcel/watcher-darwin-x64" "2.5.1" + "@parcel/watcher-freebsd-x64" "2.5.1" + "@parcel/watcher-linux-arm-glibc" "2.5.1" + "@parcel/watcher-linux-arm-musl" "2.5.1" + "@parcel/watcher-linux-arm64-glibc" "2.5.1" + "@parcel/watcher-linux-arm64-musl" "2.5.1" + "@parcel/watcher-linux-x64-glibc" "2.5.1" + "@parcel/watcher-linux-x64-musl" "2.5.1" + "@parcel/watcher-win32-arm64" "2.5.1" + "@parcel/watcher-win32-ia32" "2.5.1" + "@parcel/watcher-win32-x64" "2.5.1" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@popperjs/core@~2.11.0": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@rollup/rollup-android-arm-eabi@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz#7050c2acdc1214a730058e21f613ab0e1fe1ced9" + integrity sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw== + +"@rollup/rollup-android-arm-eabi@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz#f3ff5dbde305c4fa994d49aeb0a5db5305eff03b" + integrity sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng== + +"@rollup/rollup-android-arm64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz#3f5b2afbfcbe9021649701cf6ff0d54b1fb7e4a5" + integrity sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw== + +"@rollup/rollup-android-arm64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz#c97d6ee47846a7ab1cd38e968adce25444a90a19" + integrity sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw== + +"@rollup/rollup-darwin-arm64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz#70a1679fb4393ba7bafb730ee56a5278cbcdafb0" + integrity sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg== + +"@rollup/rollup-darwin-arm64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz#a13fc2d82e01eaf8ac823634a3f5f76fd9d0f938" + integrity sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw== + +"@rollup/rollup-darwin-x64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz#ae75aec88fa72069de9bca3a3ec22bf4e6a962bf" + integrity sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A== + +"@rollup/rollup-darwin-x64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz#db4fa8b2b76d86f7e9b68ce4661fafe9767adf9b" + integrity sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A== + +"@rollup/rollup-freebsd-arm64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz#8a2bda997faa1d7e335ce1961ce71d1a76ac6288" + integrity sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ== + +"@rollup/rollup-freebsd-arm64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz#b2c6039de4b75efd3f29417fcb1a795c75a4e3ee" + integrity sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA== + +"@rollup/rollup-freebsd-x64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz#fc287bcc39b9a9c0df97336d68fd5f4458f87977" + integrity sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A== + +"@rollup/rollup-freebsd-x64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz#9ae2a216c94f87912a596a3b3a2ec5199a689ba5" + integrity sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz#5b5a2a55dffaa64d7c7a231e80e491219e33d4f3" + integrity sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA== + +"@rollup/rollup-linux-arm-gnueabihf@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz#69d5de7f781132f138514f2b900c523e38e2461f" + integrity sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ== + +"@rollup/rollup-linux-arm-musleabihf@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz#979eab95003c21837ea0fdd8a721aa3e69fa4aa3" + integrity sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA== + +"@rollup/rollup-linux-arm-musleabihf@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz#b6431e5699747f285306ffe8c1194d7af74f801f" + integrity sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA== + +"@rollup/rollup-linux-arm64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz#53b89f1289cbeca5ed9b6ca1602a6fe1a29dd4e2" + integrity sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ== + +"@rollup/rollup-linux-arm64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz#a32931baec8a0fa7b3288afb72d400ae735112c2" + integrity sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng== + +"@rollup/rollup-linux-arm64-musl@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz#3bbcf5e13c09d0c4c55bd9c75ec6a7aeee56fe28" + integrity sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw== + +"@rollup/rollup-linux-arm64-musl@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz#0ad72572b01eb946c0b1a7a6f17ab3be6689a963" + integrity sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg== + +"@rollup/rollup-linux-loong64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz#1cc71838465a8297f92ccc5cc9c29756b71f6e73" + integrity sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg== + +"@rollup/rollup-linux-loong64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz#05681f000310906512279944b5bef38c0cd4d326" + integrity sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw== + +"@rollup/rollup-linux-ppc64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz#fe3fdf2ef57dc2d58fedd4f1e0678660772c843a" + integrity sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw== + +"@rollup/rollup-linux-ppc64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz#9847a8c9dd76d687c3bdbe38d7f5f32c6b2743c8" + integrity sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA== + +"@rollup/rollup-linux-riscv64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz#eebc99e75832891d58532501879ca749b1592f93" + integrity sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg== + +"@rollup/rollup-linux-riscv64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz#173f20c278ac770ae3e969663a27d172a4545e87" + integrity sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ== + +"@rollup/rollup-linux-riscv64-musl@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz#9a2df234d61763a44601eba17c36844a18f20539" + integrity sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg== + +"@rollup/rollup-linux-riscv64-musl@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz#db70c2377ae1ef61ef8673354d107ecb3fa7ffed" + integrity sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A== + +"@rollup/rollup-linux-s390x-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz#f0e45ea7e41ee473c85458b1ec8fab9572cc1834" + integrity sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg== + +"@rollup/rollup-linux-s390x-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz#b2c461778add1c2ee70ec07d1788611548647962" + integrity sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ== + +"@rollup/rollup-linux-x64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz#ed63dec576799fa5571eee5b2040f65faa82b49b" + integrity sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA== + +"@rollup/rollup-linux-x64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz#ab140b356569601f57ab8727bd7306463841894f" + integrity sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ== + +"@rollup/rollup-linux-x64-musl@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz#755c56ac79b17fbdf0359bce7e2293a11de30ad0" + integrity sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw== + +"@rollup/rollup-linux-x64-musl@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz#810134b4a9d0d88576938f2eed38999a653814a1" + integrity sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw== + +"@rollup/rollup-openharmony-arm64@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz#84b4170fe28c2b41e406add6ccf8513bf91195ea" + integrity sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA== + +"@rollup/rollup-openharmony-arm64@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz#0182bae7a54e748be806acef7a7f726f6949213c" + integrity sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg== + +"@rollup/rollup-win32-arm64-msvc@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz#4fb0cd004183da819bec804eba70f1ef6936ccbf" + integrity sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA== + +"@rollup/rollup-win32-arm64-msvc@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz#1f19349bd1c5e454d03e4508a9277b6354985b9d" + integrity sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw== + +"@rollup/rollup-win32-ia32-msvc@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz#1788ba80313477a31e6214390906201604ee38eb" + integrity sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g== + +"@rollup/rollup-win32-ia32-msvc@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz#234ff739993539f64efac6c2e59704a691a309c2" + integrity sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ== + +"@rollup/rollup-win32-x64-gnu@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz#867222f288a9557487900c7836998123ebbadc9d" + integrity sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ== + +"@rollup/rollup-win32-x64-gnu@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz#a4df0507c3be09c152a795cfc0c4f0c225765c5c" + integrity sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ== + +"@rollup/rollup-win32-x64-msvc@4.52.3": + version "4.52.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz#3f55b6e8fe809a7d29959d6bc686cce1804581f0" + integrity sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA== + +"@rollup/rollup-win32-x64-msvc@4.54.0": + version "4.54.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz#beacb356412eef5dc0164e9edfee51c563732054" + integrity sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg== + +"@schematics/angular@20.0.6": + version "20.0.6" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-20.0.6.tgz#d8252e246179e68692e3d81f0ead720035e0e873" + integrity sha512-aAGHku+Aka8gNLBdgGOnofx2Do8bQoZbzfA4OGtrxrYR8C2wrES3fKmFbQO2aRyUjzX31w2oSOy9BNN/L3gnIA== + dependencies: + "@angular-devkit/core" "20.0.6" + "@angular-devkit/schematics" "20.0.6" + jsonc-parser "3.3.1" + +"@sigstore/bundle@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-3.1.0.tgz#74f8f3787148400ddd364be8a9a9212174c66646" + integrity sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag== + dependencies: + "@sigstore/protobuf-specs" "^0.4.0" + +"@sigstore/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-2.0.0.tgz#f888a8e4c8fdaa27848514a281920b6fd8eca955" + integrity sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg== + +"@sigstore/protobuf-specs@^0.4.0", "@sigstore/protobuf-specs@^0.4.1": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz#5d974eb16c0a1d44a3f0af6e3e7219b35ac57953" + integrity sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA== + +"@sigstore/sign@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-3.1.0.tgz#5d098d4d2b59a279e9ac9b51c794104cda0c649e" + integrity sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw== + dependencies: + "@sigstore/bundle" "^3.1.0" + "@sigstore/core" "^2.0.0" + "@sigstore/protobuf-specs" "^0.4.0" + make-fetch-happen "^14.0.2" + proc-log "^5.0.0" + promise-retry "^2.0.1" + +"@sigstore/tuf@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-3.1.1.tgz#b01b261288f646e0da57737782893e7d2695c52e" + integrity sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg== + dependencies: + "@sigstore/protobuf-specs" "^0.4.1" + tuf-js "^3.0.1" + +"@sigstore/verify@^2.1.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-2.1.1.tgz#f67730012cd474f595044c3717f32ac2a1e9d2bc" + integrity sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w== + dependencies: + "@sigstore/bundle" "^3.1.0" + "@sigstore/core" "^2.0.0" + "@sigstore/protobuf-specs" "^0.4.1" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@socket.io/component-emitter@~3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" + integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== + +"@swimlane/ngx-datatable@^21.0.0": + version "21.1.0" + resolved "https://registry.yarnpkg.com/@swimlane/ngx-datatable/-/ngx-datatable-21.1.0.tgz#74bfa4a36c8842d68d2ad8d69aa39e373190918d" + integrity sha512-JSlMJh9Kat7HnLTx9gFLVZnjn4nPKUCv+U0VzuvPY3lxL+EwsMf0ch3ugbmBROwTYZFIrClj72fdKQ8VaK3jZw== + dependencies: + tslib "^2.0.0" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== + +"@tufjs/models@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-3.0.1.tgz#5aebb782ebb9e06f071ae7831c1f35b462b0319c" + integrity sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA== + dependencies: + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.5" + +"@types/babel__core@7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== + dependencies: + "@babel/types" "^7.28.2" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/cors@^2.8.12": + version "2.8.19" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" + integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== + dependencies: + "@types/node" "*" + +"@types/estree@1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/http-cache-semantics@*": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/jasmine@~3.6.0": + version "3.6.11" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.6.11.tgz#4b1d77aa9dfc757407cb9e277216d8e83553f09d" + integrity sha512-S6pvzQDvMZHrkBz2Mcn/8Du7cpr76PlRJBAoHnSDNbulULsH5dp0Gns+WRyNX5LHejz/ljxK4/vIHK/caHt6SQ== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@>=10.0.0": + version "25.0.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.3.tgz#79b9ac8318f373fbfaaf6e2784893efa9701f269" + integrity sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA== + dependencies: + undici-types "~7.16.0" + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^7.0.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@^7.0.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== + dependencies: + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== + +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== + dependencies: + "@typescript-eslint/types" "7.18.0" + eslint-visitor-keys "^3.4.3" + +"@ungap/structured-clone@^1.2.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@vitejs/plugin-basic-ssl@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz#c70d2a922bc437f154089d7ef0505db4b383eb7b" + integrity sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA== + +"@volo/abp.ng.lepton-x.core@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@volo/abp.ng.lepton-x.core/-/abp.ng.lepton-x.core-5.0.1.tgz#d85b1cbbf4f2b1ea36d4a7ebc608ec9344a7c978" + integrity sha512-fGjd18xU0j6ZLDfIs/iu4rMWJ2AKR0vZG+opgOZt+Q2CwaQqYbZzDzsDus/mQG7GUtwxtfTbqTQWbCxjy5dY9w== + dependencies: + "@volo/ngx-lepton-x.core" "5.0.1" + tslib "^2.3.0" + +"@volo/ngx-lepton-x.core@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@volo/ngx-lepton-x.core/-/ngx-lepton-x.core-5.0.1.tgz#8beca694ea28999855185d5d31658a62b8e04cbe" + integrity sha512-8uDD1Bv4O1Q8axIEd2mYgpUe26Z9CbGjIlglOT/EiUUj2/6Z2o1qmLLEYtDiKI4JwGPBewPOb6mferDWn3fUYw== + dependencies: + ts-toolbelt "^9.0.0" + tslib "^2.3.0" + +"@volo/ngx-lepton-x.lite@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@volo/ngx-lepton-x.lite/-/ngx-lepton-x.lite-5.0.1.tgz#5e636a58091d3107d857c13d8098ff452099cf02" + integrity sha512-zyZ8VxHCRYNYzRtsF9VwpGpXrzud7N+53slY6i0FJDWLOYLCoMGNvJQbQ4/b6H68GPHVZpmdnVAUaIe+FTMa6Q== + dependencies: + "@ng-bootstrap/ng-bootstrap" "~19.0.0" + "@volo/ngx-lepton-x.core" "5.0.1" + bootstrap-icons "~1.7.2" + tslib "^2.3.0" + +"@yarnpkg/lockfile@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +abbrev@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-3.0.1.tgz#8ac8b3b5024d31464fe2a5feeea9f4536bf44025" + integrity sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg== + +accepts@~1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.9.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== + +ajv-formats@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + +ajv@8.17.1, ajv@^8.0.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +angular-oauth2-oidc@^20.0.0: + version "20.0.2" + resolved "https://registry.yarnpkg.com/angular-oauth2-oidc/-/angular-oauth2-oidc-20.0.2.tgz#fd107bda3a72496f8f333e4c750d7bb5f8cbaf52" + integrity sha512-bMSXEQIuvgq8yqnsIatZggAvCJvY+pm7G8MK0tWCHR93UpFuNN+L5B6pY9CzRg8Ys+VVhkLIBx4zEHbJnv9icg== + dependencies: + tslib "^2.5.2" + +ansi-escapes@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.2.0.tgz#31b25afa3edd3efc09d98c2fee831d460ff06b49" + integrity sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw== + dependencies: + environment "^1.0.0" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" + integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +axobject-query@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64id@2.0.0, base64id@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + +baseline-browser-mapping@^2.9.0: + version "2.9.11" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz#53724708c8db5f97206517ecfe362dbe5181deea" + integrity sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ== + +beasties@0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/beasties/-/beasties-0.3.5.tgz#a52abea4ead105c1aded66b1a01a74e96585dc81" + integrity sha512-NaWu+f4YrJxEttJSm16AzMIFtVldCvaJ68b1L098KpqXmxt9xOLtKoLkKxb8ekhOrLqEJAbvT6n6SEvB/sac7A== + dependencies: + css-select "^6.0.0" + css-what "^7.0.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + htmlparser2 "^10.0.0" + picocolors "^1.1.1" + postcss "^8.4.49" + postcss-media-query-parser "^0.2.3" + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +body-parser@^1.19.0: + version "1.20.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== + dependencies: + bytes "~3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.14.0" + raw-body "~2.5.3" + type-is "~1.6.18" + unpipe "~1.0.0" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +bootstrap-icons@~1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/bootstrap-icons/-/bootstrap-icons-1.7.2.tgz#4024e081e2c850602552e1fed6451e682d09322a" + integrity sha512-NiR2PqC73AQOPdVSu6GJfnk+hN2z6powcistXk1JgPnKuoV2FSdSl26w931Oz9HYbKCcKUSB6ncZTYJAYJl3QQ== + +bootstrap@^5.0.0: + version "5.3.8" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.8.tgz#6401a10057a22752d21f4e19055508980656aeed" + integrity sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg== + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.23.0, browserslist@^4.24.0: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== + dependencies: + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bytes@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^19.0.0, cacache@^19.0.1: + version "19.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-19.0.1.tgz#3370cc28a758434c85c2585008bd5bdcff17d6cd" + integrity sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ== + dependencies: + "@npmcli/fs" "^4.0.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^7.0.2" + ssri "^12.0.0" + tar "^7.4.3" + unique-filename "^4.0.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bound@^1.0.2, call-bound@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001759: + version "1.0.30001761" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001761.tgz#4ca4c6e3792b24e8e2214baa568fc0e43de28191" + integrity sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^5.3.0: + version "5.6.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== + +chardet@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.1.tgz#5c75593704a642f71ee53717df234031e65373c8" + integrity sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ== + +chart.js@^3.5.1: + version "3.9.1" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.9.1.tgz#3abf2c775169c4c71217a107163ac708515924b8" + integrity sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w== + +chokidar@^3.5.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== + +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== + dependencies: + restore-cursor "^5.0.0" + +cli-spinners@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-truncate@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" + integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== + dependencies: + slice-ansi "^5.0.0" + string-width "^7.0.0" + +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +cliui@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-9.0.1.tgz#6f7890f386f6f1f79953adc1f78dec46fcc2d291" + integrity sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w== + dependencies: + string-width "^7.2.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.5.1: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie@~0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + +cors@~2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cross-spawn@^7.0.2, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-select@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-6.0.0.tgz#7e63f09881ad118084091048ed543786dad96644" + integrity sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw== + dependencies: + boolbase "^1.0.0" + css-what "^7.0.0" + domhandler "^5.0.3" + domutils "^3.2.2" + nth-check "^2.1.1" + +css-what@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-7.0.0.tgz#5796fbebd43571d73c60ba0dd7a6e75dd0d22fe4" + integrity sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ== + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== + +date-fns@^2.16.1: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +date-format@^4.0.14: + version "4.0.14" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" + integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.1, debug@~4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +depd@2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + +detect-libc@^2.0.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-serialize@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.2.1, domutils@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.5.263: + version "1.5.267" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7" + integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw== + +emoji-regex@^10.3.0: + version "10.6.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.6.0.tgz#bf3d6e8f7f8fd22a65d9703475bc0147357a6b0d" + integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0: + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== + dependencies: + once "^1.4.0" + +engine.io-parser@~5.2.1: + version "5.2.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" + integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== + +engine.io@~6.6.0: + version "6.6.5" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.5.tgz#a009522f5d5628109781b46722014349859269d2" + integrity sha512-2RZdgEbXmp5+dVbRm0P7HQUImZpICccJy7rN7Tv+SFa55pH+lxnuw6/K1ZxxBfHoYpSkHLAO92oa8O4SwFXA2A== + dependencies: + "@types/cors" "^2.8.12" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.7.2" + cors "~2.8.5" + debug "~4.4.1" + engine.io-parser "~5.2.1" + ws "~8.18.3" + +ent@~2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.2.tgz#22a5ed2fd7ce0cbcff1d1474cf4909a44bdb6e85" + integrity sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + punycode "^1.4.1" + safe-regex-test "^1.1.0" + +entities@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +entities@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +environment@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" + integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +esbuild@0.25.9: + version "0.25.9" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.9.tgz#15ab8e39ae6cdc64c24ff8a2c0aef5b3fd9fa976" + integrity sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.9" + "@esbuild/android-arm" "0.25.9" + "@esbuild/android-arm64" "0.25.9" + "@esbuild/android-x64" "0.25.9" + "@esbuild/darwin-arm64" "0.25.9" + "@esbuild/darwin-x64" "0.25.9" + "@esbuild/freebsd-arm64" "0.25.9" + "@esbuild/freebsd-x64" "0.25.9" + "@esbuild/linux-arm" "0.25.9" + "@esbuild/linux-arm64" "0.25.9" + "@esbuild/linux-ia32" "0.25.9" + "@esbuild/linux-loong64" "0.25.9" + "@esbuild/linux-mips64el" "0.25.9" + "@esbuild/linux-ppc64" "0.25.9" + "@esbuild/linux-riscv64" "0.25.9" + "@esbuild/linux-s390x" "0.25.9" + "@esbuild/linux-x64" "0.25.9" + "@esbuild/netbsd-arm64" "0.25.9" + "@esbuild/netbsd-x64" "0.25.9" + "@esbuild/openbsd-arm64" "0.25.9" + "@esbuild/openbsd-x64" "0.25.9" + "@esbuild/openharmony-arm64" "0.25.9" + "@esbuild/sunos-x64" "0.25.9" + "@esbuild/win32-arm64" "0.25.9" + "@esbuild/win32-ia32" "0.25.9" + "@esbuild/win32-x64" "0.25.9" + +esbuild@^0.25.0: + version "0.25.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.12.tgz#97a1d041f4ab00c2fce2f838d2b9969a2d2a97a5" + integrity sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.12" + "@esbuild/android-arm" "0.25.12" + "@esbuild/android-arm64" "0.25.12" + "@esbuild/android-x64" "0.25.12" + "@esbuild/darwin-arm64" "0.25.12" + "@esbuild/darwin-x64" "0.25.12" + "@esbuild/freebsd-arm64" "0.25.12" + "@esbuild/freebsd-x64" "0.25.12" + "@esbuild/linux-arm" "0.25.12" + "@esbuild/linux-arm64" "0.25.12" + "@esbuild/linux-ia32" "0.25.12" + "@esbuild/linux-loong64" "0.25.12" + "@esbuild/linux-mips64el" "0.25.12" + "@esbuild/linux-ppc64" "0.25.12" + "@esbuild/linux-riscv64" "0.25.12" + "@esbuild/linux-s390x" "0.25.12" + "@esbuild/linux-x64" "0.25.12" + "@esbuild/netbsd-arm64" "0.25.12" + "@esbuild/netbsd-x64" "0.25.12" + "@esbuild/openbsd-arm64" "0.25.12" + "@esbuild/openbsd-x64" "0.25.12" + "@esbuild/openharmony-arm64" "0.25.12" + "@esbuild/sunos-x64" "0.25.12" + "@esbuild/win32-arm64" "0.25.12" + "@esbuild/win32-ia32" "0.25.12" + "@esbuild/win32-x64" "0.25.12" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-scope@^8.0.2: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.0.0: + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +exponential-backoff@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6" + integrity sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA== + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-uri@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== + +fastq@^1.6.0: + version "1.20.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== + dependencies: + reusify "^1.0.4" + +fdir@^6.4.4, fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.7, flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + +follow-redirects@^1.0.0: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-east-asian-width@^1.0.0, get-east-asian-width@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz#9bc4caa131702b4b61729cb7e42735bc550c9ee6" + integrity sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q== + +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^10.2.2: + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^7.1.3, glob@^7.1.7: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +got@^11.5.2: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hosted-git-info@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-8.1.0.tgz#153cd84c03c6721481e16a5709eb74b1a0ab2ed0" + integrity sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw== + dependencies: + lru-cache "^10.0.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +htmlparser2@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-10.0.0.tgz#77ad249037b66bf8cc99c6e286ef73b83aeb621d" + integrity sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.2.1" + entities "^6.0.0" + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== + +http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@7.0.6, https-proxy-agent@^7.0.1: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.1.tgz#d4af1d2092f2bb05aab6296e5e7cd286d2f15432" + integrity sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@~0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-8.0.0.tgz#380c173badc3a18c57ff33440753f0052f572b14" + integrity sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A== + dependencies: + minimatch "^10.0.3" + +ignore@7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +immutable@^5.0.2: + version "5.1.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.4.tgz#e3f8c1fe7b567d56cf26698f31918c241dae8c1f" + integrity sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA== + +import-fresh@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@5.0.0, ini@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-5.0.0.tgz#a7a4615339843d9a8ccc2d85c9d81cf93ffbc638" + integrity sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw== + +ip-address@^10.0.1: + version "10.1.0" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" + integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-fullwidth-code-point@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz#046b2a6d4f6b156b2233d3207d4b5a9783999b98" + integrity sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ== + dependencies: + get-east-asian-width "^1.3.1" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" + integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-unicode-supported@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== + +is-unicode-supported@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== + +isbinaryfile@^4.0.8: + version "4.0.10" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.5: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jasmine-core@^3.6.0: + version "3.99.1" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.99.1.tgz#5bfa4b2d76618868bfac4c8ff08bb26fffa4120d" + integrity sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg== + +jasmine-core@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-4.0.1.tgz#ea4b0495d82155023bd56c25181d9f9b623f61b8" + integrity sha512-w+JDABxQCkxbGGxg+a2hUVZyqUS2JKngvIyLGu/xiw2ZwgsoSB0iiecLQsQORSeaKQ6iGrCyWG86RfNDuoA7Lg== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + dependencies: + argparse "^2.0.1" + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz#d3f67bd5925e81d3e31aa466acc821c8375cec43" + integrity sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz#f2a524b4f7fd11e3d791e559977ad60b98b798b4" + integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== + +jsonc-parser@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" + integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +just-clone@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/just-clone/-/just-clone-6.2.0.tgz#a4614d9bf7e4bbdcae7f9ba904aea5ea9cae8ae5" + integrity sha512-1IynUYEc/HAwxhi3WDpIpxJbZpMCvvrrmZVqvj9EhpvbH8lls7HhdhiByjL7DkAaWlLIzpC0Xc/VPvy/UxLNjA== + +just-compare@^2.0.0, just-compare@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-2.3.0.tgz#a2adcc1d1940536263275f5a1ef1298bcacfeda7" + integrity sha512-6shoR7HDT+fzfL3gBahx1jZG3hWLrhPAf+l7nCwahDdT9XDtosB9kIF0ZrzUp5QY8dJWfQVr5rnsPqsbvflDzg== + +karma-chrome-launcher@~3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz#baca9cc071b1562a1db241827257bfe5cab597ea" + integrity sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ== + dependencies: + which "^1.2.1" + +karma-coverage@~2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-2.1.1.tgz#7434f8736841e08de3e6c302632e8d239634f388" + integrity sha512-oxeOSBVK/jdZsiX03LhHQkO4eISSQb5GbHi6Nsw3Mw7G4u6yUgacBAftnO7q+emPBLMsrNbz1pGIrj+Jb3z17A== + dependencies: + istanbul-lib-coverage "^3.2.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.1" + istanbul-reports "^3.0.5" + minimatch "^3.0.4" + +karma-jasmine-html-reporter@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz#52c489a74d760934a1089bfa5ea4a8fcb84cc28b" + integrity sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ== + +karma-jasmine@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-4.0.2.tgz#386db2a3e1acc0af5265c711f673f78f1e4938de" + integrity sha512-ggi84RMNQffSDmWSyyt4zxzh2CQGwsxvYYsprgyR1j8ikzIduEdOlcLvXjZGwXG/0j41KUXOWsUCBfbEHPWP9g== + dependencies: + jasmine-core "^3.6.0" + +karma@~6.3.0: + version "6.3.20" + resolved "https://registry.yarnpkg.com/karma/-/karma-6.3.20.tgz#12f5c3b0e68f204607cb0a3a78d4751b42ef61a8" + integrity sha512-HRNQhMuKOwKpjYlWiJP0DUrJOh+QjaI/DTaD8b9rEm4Il3tJ8MijutVZH4ts10LuUFst/CedwTS6vieCN8yTSw== + dependencies: + "@colors/colors" "1.5.0" + body-parser "^1.19.0" + braces "^3.0.2" + chokidar "^3.5.1" + connect "^3.7.0" + di "^0.0.1" + dom-serialize "^2.2.1" + glob "^7.1.7" + graceful-fs "^4.2.6" + http-proxy "^1.18.1" + isbinaryfile "^4.0.8" + lodash "^4.17.21" + log4js "^6.4.1" + mime "^2.5.2" + minimatch "^3.0.4" + mkdirp "^0.5.5" + qjobs "^1.2.0" + range-parser "^1.2.1" + rimraf "^3.0.2" + socket.io "^4.4.1" + source-map "^0.6.1" + tmp "^0.2.1" + ua-parser-js "^0.7.30" + yargs "^16.1.1" + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +listr2@8.3.3: + version "8.3.3" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.3.3.tgz#815fc8f738260ff220981bf9e866b3e11e8121bf" + integrity sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ== + dependencies: + cli-truncate "^4.0.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^6.1.0" + rfdc "^1.4.1" + wrap-ansi "^9.0.0" + +listr2@9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.1.tgz#3cad12d81d998f8024621d9b35c969dba5da4103" + integrity sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g== + dependencies: + cli-truncate "^4.0.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^6.1.0" + rfdc "^1.4.1" + wrap-ansi "^9.0.0" + +lmdb@3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-3.4.2.tgz#8d90d12ec9a575052d30262e69b0a02a3d103ceb" + integrity sha512-nwVGUfTBUwJKXd6lRV8pFNfnrCC1+l49ESJRM19t/tFb/97QfJEixe5DYRvug5JO7DSFKoKaVy7oGMt5rVqZvg== + dependencies: + msgpackr "^1.11.2" + node-addon-api "^6.1.0" + node-gyp-build-optional-packages "5.2.2" + ordered-binary "^1.5.3" + weak-lru-cache "^1.2.2" + optionalDependencies: + "@lmdb/lmdb-darwin-arm64" "3.4.2" + "@lmdb/lmdb-darwin-x64" "3.4.2" + "@lmdb/lmdb-linux-arm" "3.4.2" + "@lmdb/lmdb-linux-arm64" "3.4.2" + "@lmdb/lmdb-linux-x64" "3.4.2" + "@lmdb/lmdb-win32-arm64" "3.4.2" + "@lmdb/lmdb-win32-x64" "3.4.2" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-6.0.0.tgz#bb95e5f05322651cac30c0feb6404f9f2a8a9439" + integrity sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw== + dependencies: + chalk "^5.3.0" + is-unicode-supported "^1.3.0" + +log-update@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4" + integrity sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== + dependencies: + ansi-escapes "^7.0.0" + cli-cursor "^5.0.0" + slice-ansi "^7.1.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" + +log4js@^6.4.1: + version "6.9.1" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" + integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== + dependencies: + date-format "^4.0.14" + debug "^4.3.4" + flatted "^3.2.7" + rfdc "^1.3.0" + streamroller "^3.1.5" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^10.0.1, lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +luxon@^3.0.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba" + integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew== + +magic-string@0.30.17: + version "0.30.17" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-fetch-happen@^14.0.0, make-fetch-happen@^14.0.2, make-fetch-happen@^14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz#d74c3ecb0028f08ab604011e0bc6baed483fcdcd" + integrity sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ== + dependencies: + "@npmcli/agent" "^3.0.0" + cacache "^19.0.1" + http-cache-semantics "^4.1.1" + minipass "^7.0.2" + minipass-fetch "^4.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^1.0.0" + proc-log "^5.0.0" + promise-retry "^2.0.1" + ssri "^12.0.0" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.5, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^10.0.3: + version "10.1.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55" + integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== + dependencies: + "@isaacs/brace-expansion" "^5.0.0" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.4, minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== + dependencies: + minipass "^7.0.3" + +minipass-fetch@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-4.0.1.tgz#f2d717d5a418ad0b1a7274f9b913515d3e78f9e5" + integrity sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^3.0.1" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +minizlib@^3.0.1, minizlib@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" + integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== + dependencies: + minipass "^7.1.2" + +mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mrmime@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc" + integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +msgpackr-extract@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz#e9d87023de39ce714872f9e9504e3c1996d61012" + integrity sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA== + dependencies: + node-gyp-build-optional-packages "5.2.2" + optionalDependencies: + "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.3" + "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.3" + "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.3" + "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.3" + "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.3" + "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.3" + +msgpackr@^1.11.2: + version "1.11.8" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.11.8.tgz#8283c79eb6e5d488f6fb3fac4996006baa390614" + integrity sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA== + optionalDependencies: + msgpackr-extract "^3.0.2" + +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +negotiator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" + integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== + +ng-zorro-antd@~20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/ng-zorro-antd/-/ng-zorro-antd-20.0.0.tgz#d0093f1499ca5dedb9f3893575afe723cf2f8f49" + integrity sha512-12cQq+JaoBdMtKO+JsDHXdfzFIiF0ocDJ4KSsypzupsUTVJa8/jpfPKnW8b8HZ5aY6scPtnPWKJ/uIrJ/Bwn6A== + dependencies: + "@angular/cdk" "^20.0.0" + "@ant-design/icons-angular" "^20.0.0" + "@ctrl/tinycolor" "^3.6.0" + date-fns "^2.16.1" + tslib "^2.3.0" + +node-addon-api@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + +node-gyp-build-optional-packages@5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz#522f50c2d53134d7f3a76cd7255de4ab6c96a3a4" + integrity sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw== + dependencies: + detect-libc "^2.0.1" + +node-gyp@^11.0.0: + version "11.5.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-11.5.0.tgz#82661b5f40647a7361efe918e3cea76d297fcc56" + integrity sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + graceful-fs "^4.2.6" + make-fetch-happen "^14.0.3" + nopt "^8.0.0" + proc-log "^5.0.0" + semver "^7.3.5" + tar "^7.4.3" + tinyglobby "^0.2.12" + which "^5.0.0" + +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== + +nopt@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-8.1.0.tgz#b11d38caf0f8643ce885818518064127f602eae3" + integrity sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A== + dependencies: + abbrev "^3.0.0" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-bundled@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-4.0.0.tgz#f5b983f053fe7c61566cf07241fab2d4e9d513d3" + integrity sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA== + dependencies: + npm-normalize-package-bin "^4.0.0" + +npm-install-checks@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-7.1.2.tgz#e338d333930ee18e0fb0be6bd8b67af98be3d2fa" + integrity sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz#df79e70cd0a113b77c02d1fe243c96b8e618acb1" + integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w== + +npm-package-arg@12.0.2, npm-package-arg@^12.0.0: + version "12.0.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-12.0.2.tgz#3b1e04ebe651cc45028e298664e8c15ce9c0ca40" + integrity sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA== + dependencies: + hosted-git-info "^8.0.0" + proc-log "^5.0.0" + semver "^7.3.5" + validate-npm-package-name "^6.0.0" + +npm-packlist@^10.0.0: + version "10.0.3" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.3.tgz#e22c039357faf81a75d1b0cdf53dd113f2bed9c7" + integrity sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg== + dependencies: + ignore-walk "^8.0.0" + proc-log "^6.0.0" + +npm-pick-manifest@10.0.0, npm-pick-manifest@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz#6cc120c6473ceea56dfead500f00735b2b892851" + integrity sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ== + dependencies: + npm-install-checks "^7.1.0" + npm-normalize-package-bin "^4.0.0" + npm-package-arg "^12.0.0" + semver "^7.3.5" + +npm-registry-fetch@^18.0.0: + version "18.0.2" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz#340432f56b5a8b1af068df91aae0435d2de646b5" + integrity sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ== + dependencies: + "@npmcli/redact" "^3.0.0" + jsonparse "^1.3.1" + make-fetch-happen "^14.0.0" + minipass "^7.0.2" + minipass-fetch "^4.0.0" + minizlib "^3.0.1" + npm-package-arg "^12.0.0" + proc-log "^5.0.0" + +nth-check@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +on-finished@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + dependencies: + mimic-function "^5.0.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +ora@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-8.2.0.tgz#8fbbb7151afe33b540dd153f171ffa8bd38e9861" + integrity sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw== + dependencies: + chalk "^5.3.0" + cli-cursor "^5.0.0" + cli-spinners "^2.9.2" + is-interactive "^2.0.0" + is-unicode-supported "^2.0.0" + log-symbols "^6.0.0" + stdin-discarder "^0.2.2" + string-width "^7.2.0" + strip-ansi "^7.1.0" + +ordered-binary@^1.5.3: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.6.0.tgz#9c490dadc0b1336ca6917d8d41dd474b8c0bff32" + integrity sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.4.tgz#b81814255f542e252d5729dca4d66e5ec14935b8" + integrity sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ== + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +pacote@21.0.0: + version "21.0.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-21.0.0.tgz#5fe3878a9f808ca5c455c4c1d8ca46eb13351f7b" + integrity sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA== + dependencies: + "@npmcli/git" "^6.0.0" + "@npmcli/installed-package-contents" "^3.0.0" + "@npmcli/package-json" "^6.0.0" + "@npmcli/promise-spawn" "^8.0.0" + "@npmcli/run-script" "^9.0.0" + cacache "^19.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^12.0.0" + npm-packlist "^10.0.0" + npm-pick-manifest "^10.0.0" + npm-registry-fetch "^18.0.0" + proc-log "^5.0.0" + promise-retry "^2.0.1" + sigstore "^3.0.0" + ssri "^12.0.0" + tar "^6.1.11" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse5-html-rewriting-stream@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz#3f442e5b5811a5456e2a56b68ea44ef153b44d92" + integrity sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw== + dependencies: + entities "^6.0.0" + parse5 "^8.0.0" + parse5-sax-parser "^8.0.0" + +parse5-sax-parser@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz#49755efbd2b63846c7b908a297a874af00760715" + integrity sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw== + dependencies: + parse5 "^8.0.0" + +parse5@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-8.0.0.tgz#aceb267f6b15f9b6e6ba9e35bfdd481fc2167b12" + integrity sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA== + dependencies: + entities "^6.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +picomatch@4.0.3, picomatch@^4.0.2, picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +piscina@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/piscina/-/piscina-5.1.3.tgz#30a460500a08770fc97d622e63857a5978dfc466" + integrity sha512-0u3N7H4+hbr40KjuVn2uNhOcthu/9usKhnw5vT3J7ply79v3D3M8naI00el9Klcy16x557VsEkkUQaHCWFXC/g== + optionalDependencies: + "@napi-rs/nice" "^1.0.4" + +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== + +postcss@^8.4.49, postcss@^8.5.6: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +proc-log@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-5.0.0.tgz#e6c93cf37aef33f835c53485f314f50ea906a9d8" + integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ== + +proc-log@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-6.1.0.tgz#18519482a37d5198e231133a70144a50f21f0215" + integrity sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +pump@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" + integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +qjobs@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qs@~6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + dependencies: + side-channel "^1.1.0" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +range-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== + dependencies: + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" + +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reflect-metadata@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" + integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@1.22.10: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== + dependencies: + onetime "^7.0.0" + signal-exit "^4.1.0" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rfdc@^1.3.0, rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup@4.52.3: + version "4.52.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.52.3.tgz#cc5c28d772b022ce48b235a97b347ccd9d88c1a3" + integrity sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A== + dependencies: + "@types/estree" "1.0.8" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.52.3" + "@rollup/rollup-android-arm64" "4.52.3" + "@rollup/rollup-darwin-arm64" "4.52.3" + "@rollup/rollup-darwin-x64" "4.52.3" + "@rollup/rollup-freebsd-arm64" "4.52.3" + "@rollup/rollup-freebsd-x64" "4.52.3" + "@rollup/rollup-linux-arm-gnueabihf" "4.52.3" + "@rollup/rollup-linux-arm-musleabihf" "4.52.3" + "@rollup/rollup-linux-arm64-gnu" "4.52.3" + "@rollup/rollup-linux-arm64-musl" "4.52.3" + "@rollup/rollup-linux-loong64-gnu" "4.52.3" + "@rollup/rollup-linux-ppc64-gnu" "4.52.3" + "@rollup/rollup-linux-riscv64-gnu" "4.52.3" + "@rollup/rollup-linux-riscv64-musl" "4.52.3" + "@rollup/rollup-linux-s390x-gnu" "4.52.3" + "@rollup/rollup-linux-x64-gnu" "4.52.3" + "@rollup/rollup-linux-x64-musl" "4.52.3" + "@rollup/rollup-openharmony-arm64" "4.52.3" + "@rollup/rollup-win32-arm64-msvc" "4.52.3" + "@rollup/rollup-win32-ia32-msvc" "4.52.3" + "@rollup/rollup-win32-x64-gnu" "4.52.3" + "@rollup/rollup-win32-x64-msvc" "4.52.3" + fsevents "~2.3.2" + +rollup@^4.43.0: + version "4.54.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.54.0.tgz#930f4dfc41ff94d720006f9f62503612a6c319b8" + integrity sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw== + dependencies: + "@types/estree" "1.0.8" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.54.0" + "@rollup/rollup-android-arm64" "4.54.0" + "@rollup/rollup-darwin-arm64" "4.54.0" + "@rollup/rollup-darwin-x64" "4.54.0" + "@rollup/rollup-freebsd-arm64" "4.54.0" + "@rollup/rollup-freebsd-x64" "4.54.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.54.0" + "@rollup/rollup-linux-arm-musleabihf" "4.54.0" + "@rollup/rollup-linux-arm64-gnu" "4.54.0" + "@rollup/rollup-linux-arm64-musl" "4.54.0" + "@rollup/rollup-linux-loong64-gnu" "4.54.0" + "@rollup/rollup-linux-ppc64-gnu" "4.54.0" + "@rollup/rollup-linux-riscv64-gnu" "4.54.0" + "@rollup/rollup-linux-riscv64-musl" "4.54.0" + "@rollup/rollup-linux-s390x-gnu" "4.54.0" + "@rollup/rollup-linux-x64-gnu" "4.54.0" + "@rollup/rollup-linux-x64-musl" "4.54.0" + "@rollup/rollup-openharmony-arm64" "4.54.0" + "@rollup/rollup-win32-arm64-msvc" "4.54.0" + "@rollup/rollup-win32-ia32-msvc" "4.54.0" + "@rollup/rollup-win32-x64-gnu" "4.54.0" + "@rollup/rollup-win32-x64-msvc" "4.54.0" + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@7.8.2, rxjs@~7.8.0: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass@1.90.0: + version "1.90.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.90.0.tgz#d6fc2be49c7c086ce86ea0b231a35bf9e33cb84b" + integrity sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q== + dependencies: + chokidar "^4.0.0" + immutable "^5.0.2" + source-map-js ">=0.6.2 <2.0.0" + optionalDependencies: + "@parcel/watcher" "^2.4.1" + +semver@7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + +setprototypeof@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +should-quote@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/should-quote/-/should-quote-1.0.0.tgz#18e58cb92a3fecb6e163cf92c8158847058589d7" + integrity sha512-mQN5Meec3CTPmykzwXfDGWDpi75HUD8NT21wRWaJ7oqxpFIhXq80Hiy4ziccUNOwzhWeFkT9/kNSZbaugL9jsA== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sigstore@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-3.1.0.tgz#08dc6c0c425263e9fdab85ffdb6477550e2c511d" + integrity sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q== + dependencies: + "@sigstore/bundle" "^3.1.0" + "@sigstore/core" "^2.0.0" + "@sigstore/protobuf-specs" "^0.4.0" + "@sigstore/sign" "^3.1.0" + "@sigstore/tuf" "^3.1.0" + "@sigstore/verify" "^2.1.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +slice-ansi@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.2.tgz#adf7be70aa6d72162d907cd0e6d5c11f507b5403" + integrity sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w== + dependencies: + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socket.io-adapter@~2.5.2: + version "2.5.6" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.6.tgz#c697f609d36a676a46749782274607d8df52c1d8" + integrity sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ== + dependencies: + debug "~4.4.1" + ws "~8.18.3" + +socket.io-parser@~4.2.4: + version "4.2.5" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.5.tgz#3f41b8d369129a93268f2abecba94b5292850099" + integrity sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.4.1" + +socket.io@^4.4.1: + version "4.8.3" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.3.tgz#ca6ba1431c69532e1e0a6f496deebeb601dbc4df" + integrity sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A== + dependencies: + accepts "~1.3.4" + base64id "~2.0.0" + cors "~2.8.5" + debug "~4.4.1" + engine.io "~6.6.0" + socket.io-adapter "~2.5.2" + socket.io-parser "~4.2.4" + +socks-proxy-agent@^8.0.3: + version "8.0.5" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz#b9cdb4e7e998509d7659d689ce7697ac21645bee" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.7" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" + integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== + dependencies: + ip-address "^10.0.1" + smart-buffer "^4.2.0" + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map-support@0.5.21: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +source-map@0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.22" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz#abf5a08a6f5d7279559b669f47f0a43e8f3464ef" + integrity sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ== + +ssri@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-12.0.0.tgz#bcb4258417c702472f8191981d3c8a771fee6832" + integrity sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ== + dependencies: + minipass "^7.0.3" + +statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + +stdin-discarder@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.2.2.tgz#390037f44c4ae1a1ae535c5fe38dc3aba8d997be" + integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ== + +streamroller@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff" + integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== + dependencies: + date-format "^4.0.14" + debug "^4.3.4" + fs-extra "^8.1.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string-width@^7.0.0, string-width@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" + integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== + dependencies: + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1, strip-ansi@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" + integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== + dependencies: + ansi-regex "^6.0.1" + +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tar@^6.1.11: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +tar@^7.4.3: + version "7.5.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.2.tgz#115c061495ec51ff3c6745ff8f6d0871c5b1dedc" + integrity sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.1.0" + yallist "^5.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tinyglobby@0.2.14: + version "0.2.14" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" + +tinyglobby@^0.2.12, tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + +tmp@^0.2.1: + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +ts-toolbelt@^9.0.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" + integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== + +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.5.2: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tuf-js@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-3.1.0.tgz#61b847fe9aa86a7d5bda655a4647e026aa73a1be" + integrity sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg== + dependencies: + "@tufjs/models" "3.0.1" + debug "^4.4.1" + make-fetch-happen "^14.0.3" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typescript@~5.8.0: + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== + +ua-parser-js@^0.7.30: + version "0.7.41" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.41.tgz#9f6dee58c389e8afababa62a4a2dc22edb69a452" + integrity sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg== + +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== + +unique-filename@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-4.0.0.tgz#a06534d370e7c977a939cd1d11f7f0ab8f1fed13" + integrity sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ== + dependencies: + unique-slug "^5.0.0" + +unique-slug@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-5.0.0.tgz#ca72af03ad0dbab4dad8aa683f633878b1accda8" + integrity sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz#4e8d2c4d939975a73dd1b7a65e8f08d44c85df96" + integrity sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ== + +vary@^1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vite@7.1.11: + version "7.1.11" + resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.11.tgz#4d006746112fee056df64985191e846ebfb6007e" + integrity sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg== + dependencies: + esbuild "^0.25.0" + fdir "^6.5.0" + picomatch "^4.0.3" + postcss "^8.5.6" + rollup "^4.43.0" + tinyglobby "^0.2.15" + optionalDependencies: + fsevents "~2.3.3" + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== + +watchpack@2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" + integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +weak-lru-cache@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz#fdbb6741f36bae9540d12f480ce8254060dccd19" + integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== + +which@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-5.0.0.tgz#d93f2d93f79834d4363c7d0c23e00d07c466c8d6" + integrity sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ== + dependencies: + isexe "^3.1.1" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrap-ansi@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz#956832dea9494306e6d209eb871643bb873d7c98" + integrity sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@~8.18.3: + version "8.18.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-parser@^22.0.0: + version "22.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-22.0.0.tgz#87b82094051b0567717346ecd00fd14804b357c8" + integrity sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw== + +yargs@17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yargs@^16.1.1: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-18.0.0.tgz#6c84259806273a746b09f579087b68a3c2d25bd1" + integrity sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg== + dependencies: + cliui "^9.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + string-width "^7.2.0" + y18n "^5.0.5" + yargs-parser "^22.0.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yoctocolors-cjs@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" + integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== + +zone.js@~0.15.0: + version "0.15.1" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.15.1.tgz#1e109adb75f80e9e004ee8e0d4a0a52e0a336481" + integrity sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w== diff --git a/common.props b/common.props new file mode 100644 index 0000000..a45f5bb --- /dev/null +++ b/common.props @@ -0,0 +1,21 @@ + + + latest + 1.0.0 + $(NoWarn);CS1591 + app + + + + + $(NoWarn);0436 + + + + + + + + + + \ No newline at end of file diff --git a/etc/abp-studio/run-profiles/Default.abprun.json b/etc/abp-studio/run-profiles/Default.abprun.json new file mode 100644 index 0000000..0f2d6ae --- /dev/null +++ b/etc/abp-studio/run-profiles/Default.abprun.json @@ -0,0 +1,42 @@ +{ + "applications": { + "Hua.Abp.Demo.HttpApi.Host": { + "type": "dotnet-project", + "launchUrl": "https://localhost:44322", + "path": "../../../src/Hua.Abp.Demo.HttpApi.Host/Hua.Abp.Demo.HttpApi.Host.csproj", + "kubernetesService": ".*-httpapihost$", + "healthCheckEndpoint": "/health-status", + "healthUiEndpoint": "/health-ui", + "execution": { + "order": 4 + } + }, + "Hua.Abp.Demo.Angular": { + "type": "cli", + "workingDirectory": "../../../angular", + "startCommand": "./start.ps1", + "launchUrl": "http://localhost:4200", + "kubernetesService": ".*-angular$", + "execution": { + "order": 2 + } + } + }, + "containers": { + "serviceName": "Demo-Containers", + }, + "tasks":{ + "Initialize Solution":{ + "behaviour": 2, + "startCommand": "./initialize-solution.ps1", + "workingDirectory": "../../scripts", + "shortDescription": "Installs required UI libraries, creates required certificates and seeds the database." + }, + "Migrate Database":{ + "behaviour": 0, + "startCommand": "./migrate-database.ps1", + "workingDirectory": "../../scripts", + "shortDescription": "Migrates the database to the latest version." + } + } +} \ No newline at end of file diff --git a/etc/scripts/initialize-solution.ps1 b/etc/scripts/initialize-solution.ps1 new file mode 100644 index 0000000..575fdc3 --- /dev/null +++ b/etc/scripts/initialize-solution.ps1 @@ -0,0 +1,50 @@ +$scriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Path + +$jobs = @() + +$jobs += Start-Job -Name "InstallLibs" -ScriptBlock { + $ErrorActionPreference = "Stop" + Set-Location (Join-Path $using:scriptRoot "../../") + abp install-libs + + if ($LASTEXITCODE -ne 0) { + throw "abp install-libs exited with code $LASTEXITCODE" + } +} + +$jobs += Start-Job -Name "DbMigrator" -ScriptBlock { + $ErrorActionPreference = "Stop" + Set-Location (Join-Path $using:scriptRoot "../../src/Hua.Abp.Demo.DbMigrator") + dotnet run + + if ($LASTEXITCODE -ne 0) { + throw "dotnet run (DbMigrator) exited with code $LASTEXITCODE" + } +} + +$jobs += Start-Job -Name "DevCert" -ScriptBlock { + $ErrorActionPreference = "Stop" + Set-Location (Join-Path $using:scriptRoot "../../src/Hua.Abp.Demo.HttpApi.Host") + dotnet dev-certs https -v -ep openiddict.pfx -p a8dad6bd-08cf-40f9-baaf-873686b50b75 + + if ($LASTEXITCODE -ne 0) { + throw "dotnet dev-certs exited with code $LASTEXITCODE" + } +} + +Wait-Job $jobs | Out-Null + +$failed = $jobs | Where-Object { $_.State -eq 'Failed' } +$hasError = $failed.Count -gt 0 + +if ($hasError) { + foreach ($job in $failed) { + [Console]::Error.WriteLine("Job '$($job.Name)' FAILED") + } + + Remove-Job $jobs | Out-Null + exit -1 +} + +Remove-Job $jobs | Out-Null +exit 0 \ No newline at end of file diff --git a/etc/scripts/migrate-database.ps1 b/etc/scripts/migrate-database.ps1 new file mode 100644 index 0000000..c892954 --- /dev/null +++ b/etc/scripts/migrate-database.ps1 @@ -0,0 +1,30 @@ +$scriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Path + +$jobs = @() + +$jobs += Start-Job -Name "DbMigrator" -ScriptBlock { + $ErrorActionPreference = "Stop" + Set-Location (Join-Path $using:scriptRoot "../../src/Hua.Abp.Demo.DbMigrator") + dotnet run + + if ($LASTEXITCODE -ne 0) { + throw "dotnet run (DbMigrator) exited with code $LASTEXITCODE" + } +} + +Wait-Job $jobs | Out-Null + +$failed = $jobs | Where-Object { $_.State -eq 'Failed' } +$hasError = $failed.Count -gt 0 + +if ($hasError) { + foreach ($job in $failed) { + [Console]::Error.WriteLine("Job '$($job.Name)' FAILED") + } + + Remove-Job $jobs | Out-Null + exit -1 +} + +Remove-Job $jobs | Out-Null +exit 0 \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Application.Contracts/Books/BookDto .cs b/src/Hua.Abp.Demo.Application.Contracts/Books/BookDto .cs new file mode 100644 index 0000000..82570f8 --- /dev/null +++ b/src/Hua.Abp.Demo.Application.Contracts/Books/BookDto .cs @@ -0,0 +1,15 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Hua.Abp.Demo.Books; + +public class BookDto : AuditedEntityDto +{ + public string Name { get; set; } + + public BookType Type { get; set; } + + public DateTime PublishDate { get; set; } + + public float Price { get; set; } +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Application.Contracts/Books/CreateUpdateBookDto.cs b/src/Hua.Abp.Demo.Application.Contracts/Books/CreateUpdateBookDto.cs new file mode 100644 index 0000000..bc03f95 --- /dev/null +++ b/src/Hua.Abp.Demo.Application.Contracts/Books/CreateUpdateBookDto.cs @@ -0,0 +1,21 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace Hua.Abp.Demo.Books; + +public class CreateUpdateBookDto +{ + [Required] + [StringLength(128)] + public string Name { get; set; } = string.Empty; + + [Required] + public BookType Type { get; set; } = BookType.Undefined; + + [Required] + [DataType(DataType.Date)] + public DateTime PublishDate { get; set; } = DateTime.Now; + + [Required] + public float Price { get; set; } +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Application.Contracts/Books/IBookAppService.cs b/src/Hua.Abp.Demo.Application.Contracts/Books/IBookAppService.cs new file mode 100644 index 0000000..4fd6782 --- /dev/null +++ b/src/Hua.Abp.Demo.Application.Contracts/Books/IBookAppService.cs @@ -0,0 +1,15 @@ +using System; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace Hua.Abp.Demo.Books; + +public interface IBookAppService : + ICrudAppService< //Defines CRUD methods + BookDto, //Used to show books + Guid, //Primary key of the book entity + PagedAndSortedResultRequestDto, //Used for paging/sorting + CreateUpdateBookDto> //Used to create/update a book +{ + +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Application.Contracts/DemoApplicationContractsModule.cs b/src/Hua.Abp.Demo.Application.Contracts/DemoApplicationContractsModule.cs new file mode 100644 index 0000000..260b995 --- /dev/null +++ b/src/Hua.Abp.Demo.Application.Contracts/DemoApplicationContractsModule.cs @@ -0,0 +1,26 @@ +using Volo.Abp.Account; +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement; +using Volo.Abp.SettingManagement; +using Volo.Abp.FeatureManagement; +using Volo.Abp.Identity; +using Volo.Abp.TenantManagement; + +namespace Hua.Abp.Demo; + +[DependsOn( + typeof(DemoDomainSharedModule), + typeof(AbpFeatureManagementApplicationContractsModule), + typeof(AbpSettingManagementApplicationContractsModule), + typeof(AbpIdentityApplicationContractsModule), + typeof(AbpAccountApplicationContractsModule), + typeof(AbpTenantManagementApplicationContractsModule), + typeof(AbpPermissionManagementApplicationContractsModule) +)] +public class DemoApplicationContractsModule : AbpModule +{ + public override void PreConfigureServices(ServiceConfigurationContext context) + { + DemoDtoExtensions.Configure(); + } +} diff --git a/src/Hua.Abp.Demo.Application.Contracts/DemoDtoExtensions.cs b/src/Hua.Abp.Demo.Application.Contracts/DemoDtoExtensions.cs new file mode 100644 index 0000000..e8b92d3 --- /dev/null +++ b/src/Hua.Abp.Demo.Application.Contracts/DemoDtoExtensions.cs @@ -0,0 +1,28 @@ +using Volo.Abp.Identity; +using Volo.Abp.ObjectExtending; +using Volo.Abp.Threading; + +namespace Hua.Abp.Demo; + +public static class DemoDtoExtensions +{ + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public static void Configure() + { + OneTimeRunner.Run(() => + { + /* You can add extension properties to DTOs + * defined in the depended modules. + * + * Example: + * + * ObjectExtensionManager.Instance + * .AddOrUpdateProperty("Title"); + * + * See the documentation for more: + * https://docs.abp.io/en/abp/latest/Object-Extensions + */ + }); + } +} diff --git a/src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.abppkg b/src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.abppkg new file mode 100644 index 0000000..4903279 --- /dev/null +++ b/src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.application-contracts" +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.abppkg.analyze.json b/src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.abppkg.analyze.json new file mode 100644 index 0000000..464b7cc --- /dev/null +++ b/src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.abppkg.analyze.json @@ -0,0 +1,146 @@ +{ + "name": "Hua.Abp.Demo.Application.Contracts", + "hash": "", + "contents": [ + { + "namespace": "Hua.Abp.Demo", + "dependsOnModules": [ + { + "declaringAssemblyName": "Hua.Abp.Demo.Domain.Shared", + "namespace": "Hua.Abp.Demo", + "name": "DemoDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.FeatureManagement.Application.Contracts", + "namespace": "Volo.Abp.FeatureManagement", + "name": "AbpFeatureManagementApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.Application.Contracts", + "namespace": "Volo.Abp.SettingManagement", + "name": "AbpSettingManagementApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Identity.Pro.Application.Contracts", + "namespace": "Volo.Abp.Identity", + "name": "AbpIdentityApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Account.Pro.Public.Application.Contracts", + "namespace": "Volo.Abp.Account", + "name": "AbpAccountPublicApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Account.Pro.Admin.Application.Contracts", + "namespace": "Volo.Abp.Account", + "name": "AbpAccountAdminApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AuditLogging.Application.Contracts", + "namespace": "Volo.Abp.AuditLogging", + "name": "AbpAuditLoggingApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.OpenIddict.Pro.Application.Contracts", + "namespace": "Volo.Abp.OpenIddict", + "name": "AbpOpenIddictProApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.TextTemplateManagement.Application.Contracts", + "namespace": "Volo.Abp.TextTemplateManagement", + "name": "TextTemplateManagementApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.LanguageManagement.Application.Contracts", + "namespace": "Volo.Abp.LanguageManagement", + "name": "LanguageManagementApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Gdpr.Application.Contracts", + "namespace": "Volo.Abp.Gdpr", + "name": "AbpGdprApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.PermissionManagement.Application.Contracts", + "namespace": "Volo.Abp.PermissionManagement", + "name": "AbpPermissionManagementApplicationContractsModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "DemoApplicationContractsModule", + "summary": null + }, + { + "displayName": "Book Management", + "isEnabled": true, + "contentType": "permission", + "name": "Demo.Books", + "summary": null + }, + { + "displayName": "Creating new books", + "isEnabled": true, + "contentType": "permission", + "name": "Demo.Books.Create", + "summary": null + }, + { + "displayName": "Editing the books", + "isEnabled": true, + "contentType": "permission", + "name": "Demo.Books.Edit", + "summary": null + }, + { + "displayName": "Deleting the books", + "isEnabled": true, + "contentType": "permission", + "name": "Demo.Books.Delete", + "summary": null + }, + ] +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.csproj b/src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.csproj new file mode 100644 index 0000000..57dce5a --- /dev/null +++ b/src/Hua.Abp.Demo.Application.Contracts/Hua.Abp.Demo.Application.Contracts.csproj @@ -0,0 +1,24 @@ + + + + + + net10.0 + enable + Hua.Abp.Demo + + + + + + + + + + + + + + + + diff --git a/src/Hua.Abp.Demo.Application.Contracts/Permissions/DemoPermissionDefinitionProvider.cs b/src/Hua.Abp.Demo.Application.Contracts/Permissions/DemoPermissionDefinitionProvider.cs new file mode 100644 index 0000000..64c6e56 --- /dev/null +++ b/src/Hua.Abp.Demo.Application.Contracts/Permissions/DemoPermissionDefinitionProvider.cs @@ -0,0 +1,26 @@ +using Hua.Abp.Demo.Localization; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Localization; +using Volo.Abp.MultiTenancy; + +namespace Hua.Abp.Demo.Permissions; + +public class DemoPermissionDefinitionProvider : PermissionDefinitionProvider +{ + public override void Define(IPermissionDefinitionContext context) + { + var myGroup = context.AddGroup(DemoPermissions.GroupName); + + var booksPermission = myGroup.AddPermission(DemoPermissions.Books.Default, L("Permission:Books")); + booksPermission.AddChild(DemoPermissions.Books.Create, L("Permission:Books.Create")); + booksPermission.AddChild(DemoPermissions.Books.Edit, L("Permission:Books.Edit")); + booksPermission.AddChild(DemoPermissions.Books.Delete, L("Permission:Books.Delete")); + //Define your own permissions here. Example: + //myGroup.AddPermission(DemoPermissions.MyPermission1, L("Permission:MyPermission1")); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } +} diff --git a/src/Hua.Abp.Demo.Application.Contracts/Permissions/DemoPermissions.cs b/src/Hua.Abp.Demo.Application.Contracts/Permissions/DemoPermissions.cs new file mode 100644 index 0000000..a5c5146 --- /dev/null +++ b/src/Hua.Abp.Demo.Application.Contracts/Permissions/DemoPermissions.cs @@ -0,0 +1,18 @@ +namespace Hua.Abp.Demo.Permissions; + +public static class DemoPermissions +{ + public const string GroupName = "Demo"; + + + public static class Books + { + public const string Default = GroupName + ".Books"; + public const string Create = Default + ".Create"; + public const string Edit = Default + ".Edit"; + public const string Delete = Default + ".Delete"; + } + + //Add your own permission names. Example: + //public const string MyPermission1 = GroupName + ".MyPermission1"; +} diff --git a/src/Hua.Abp.Demo.Application/Books/BookAppService.cs b/src/Hua.Abp.Demo.Application/Books/BookAppService.cs new file mode 100644 index 0000000..a8554de --- /dev/null +++ b/src/Hua.Abp.Demo.Application/Books/BookAppService.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Hua.Abp.Demo.Permissions; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; +using System.Linq.Dynamic.Core; + +namespace Hua.Abp.Demo.Books; + +[Authorize(DemoPermissions.Books.Default)] +public class BookAppService : ApplicationService, IBookAppService +{ + private readonly IRepository _repository; + + public BookAppService(IRepository repository) + { + _repository = repository; + } + + public async Task GetAsync(Guid id) + { + var book = await _repository.GetAsync(id); + return ObjectMapper.Map(book); + } + + public async Task> GetListAsync(PagedAndSortedResultRequestDto input) + { + var queryable = await _repository.GetQueryableAsync(); + var query = queryable + .OrderBy(input.Sorting.IsNullOrWhiteSpace() ? "Name" : input.Sorting) + .Skip(input.SkipCount) + .Take(input.MaxResultCount); + + var books = await AsyncExecuter.ToListAsync(query); + var totalCount = await AsyncExecuter.CountAsync(queryable); + + return new PagedResultDto( + totalCount, + ObjectMapper.Map, List>(books) + ); + } + + [Authorize(DemoPermissions.Books.Create)] + public async Task CreateAsync(CreateUpdateBookDto input) + { + var book = ObjectMapper.Map(input); + await _repository.InsertAsync(book); + return ObjectMapper.Map(book); + } + + [Authorize(DemoPermissions.Books.Edit)] + public async Task UpdateAsync(Guid id, CreateUpdateBookDto input) + { + var book = await _repository.GetAsync(id); + ObjectMapper.Map(input, book); + await _repository.UpdateAsync(book); + return ObjectMapper.Map(book); + } + + [Authorize(DemoPermissions.Books.Delete)] + public async Task DeleteAsync(Guid id) + { + await _repository.DeleteAsync(id); + } +} diff --git a/src/Hua.Abp.Demo.Application/DemoAppService.cs b/src/Hua.Abp.Demo.Application/DemoAppService.cs new file mode 100644 index 0000000..6afba0a --- /dev/null +++ b/src/Hua.Abp.Demo.Application/DemoAppService.cs @@ -0,0 +1,14 @@ +using Hua.Abp.Demo.Localization; +using Volo.Abp.Application.Services; + +namespace Hua.Abp.Demo; + +/* Inherit your application services from this class. + */ +public abstract class DemoAppService : ApplicationService +{ + protected DemoAppService() + { + LocalizationResource = typeof(DemoResource); + } +} diff --git a/src/Hua.Abp.Demo.Application/DemoApplicationMappers.cs b/src/Hua.Abp.Demo.Application/DemoApplicationMappers.cs new file mode 100644 index 0000000..13aed83 --- /dev/null +++ b/src/Hua.Abp.Demo.Application/DemoApplicationMappers.cs @@ -0,0 +1,21 @@ +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; +using Hua.Abp.Demo.Books; + +namespace Hua.Abp.Demo; + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +public partial class DemoBookToBookDtoMapper : MapperBase +{ + public override partial BookDto Map(Book source); + + public override partial void Map(Book source, BookDto destination); +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +public partial class DemoCreateUpdateBookDtoToBookMapper : MapperBase +{ + public override partial Book Map(CreateUpdateBookDto source); + + public override partial void Map(CreateUpdateBookDto source, Book destination); +} diff --git a/src/Hua.Abp.Demo.Application/DemoApplicationModule.cs b/src/Hua.Abp.Demo.Application/DemoApplicationModule.cs new file mode 100644 index 0000000..b111a4b --- /dev/null +++ b/src/Hua.Abp.Demo.Application/DemoApplicationModule.cs @@ -0,0 +1,26 @@ +using Volo.Abp.PermissionManagement; +using Volo.Abp.SettingManagement; +using Volo.Abp.Account; +using Volo.Abp.Identity; +using Volo.Abp.Mapperly; +using Volo.Abp.FeatureManagement; +using Volo.Abp.Modularity; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.TenantManagement; + +namespace Hua.Abp.Demo; + +[DependsOn( + typeof(DemoDomainModule), + typeof(DemoApplicationContractsModule), + typeof(AbpPermissionManagementApplicationModule), + typeof(AbpFeatureManagementApplicationModule), + typeof(AbpIdentityApplicationModule), + typeof(AbpAccountApplicationModule), + typeof(AbpTenantManagementApplicationModule), + typeof(AbpSettingManagementApplicationModule) + )] +public class DemoApplicationModule : AbpModule +{ + +} diff --git a/src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.abppkg b/src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.abppkg new file mode 100644 index 0000000..412567a --- /dev/null +++ b/src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.application" +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.abppkg.analyze.json b/src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.abppkg.analyze.json new file mode 100644 index 0000000..ca917c8 --- /dev/null +++ b/src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.abppkg.analyze.json @@ -0,0 +1,240 @@ +{ + "name": "Hua.Abp.Demo.Application", + "hash": "", + "contents": [ + { + "namespace": "Hua.Abp.Demo", + "dependsOnModules": [ + { + "declaringAssemblyName": "Hua.Abp.Demo.Domain", + "namespace": "Hua.Abp.Demo", + "name": "DemoDomainModule" + }, + { + "declaringAssemblyName": "Hua.Abp.Demo.Application.Contracts", + "namespace": "Hua.Abp.Demo", + "name": "DemoApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.PermissionManagement.Application", + "namespace": "Volo.Abp.PermissionManagement", + "name": "AbpPermissionManagementApplicationModule" + }, + { + "declaringAssemblyName": "Volo.Abp.FeatureManagement.Application", + "namespace": "Volo.Abp.FeatureManagement", + "name": "AbpFeatureManagementApplicationModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Identity.Pro.Application", + "namespace": "Volo.Abp.Identity", + "name": "AbpIdentityApplicationModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Account.Pro.Public.Application", + "namespace": "Volo.Abp.Account", + "name": "AbpAccountPublicApplicationModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Account.Pro.Admin.Application", + "namespace": "Volo.Abp.Account", + "name": "AbpAccountAdminApplicationModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AuditLogging.Application", + "namespace": "Volo.Abp.AuditLogging", + "name": "AbpAuditLoggingApplicationModule" + }, + { + "declaringAssemblyName": "Volo.Abp.TextTemplateManagement.Application", + "namespace": "Volo.Abp.TextTemplateManagement", + "name": "TextTemplateManagementApplicationModule" + }, + { + "declaringAssemblyName": "Volo.Abp.OpenIddict.Pro.Application", + "namespace": "Volo.Abp.OpenIddict", + "name": "AbpOpenIddictProApplicationModule" + }, + { + "declaringAssemblyName": "Volo.Abp.LanguageManagement.Application", + "namespace": "Volo.Abp.LanguageManagement", + "name": "LanguageManagementApplicationModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Gdpr.Application", + "namespace": "Volo.Abp.Gdpr", + "name": "AbpGdprApplicationModule" + }, + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.Application", + "namespace": "Volo.Abp.SettingManagement", + "name": "AbpSettingManagementApplicationModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "DemoApplicationModule", + "summary": null + }, + { + "namespace": "Hua.Abp.Demo.Books", + "baseClass": { + "name": "CrudAppService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application", + "fullName": "Volo.Abp.Application.Services.CrudAppService" + }, + "implementingInterfaces": [ + { + "name": "IApplicationService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.IApplicationService" + }, + { + "name": "IRemoteService", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IRemoteService" + }, + { + "name": "IAvoidDuplicateCrossCuttingConcerns", + "namespace": "Volo.Abp.Aspects", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Aspects.IAvoidDuplicateCrossCuttingConcerns" + }, + { + "name": "IValidationEnabled", + "namespace": "Volo.Abp.Validation", + "declaringAssemblyName": "Volo.Abp.Validation", + "fullName": "Volo.Abp.Validation.IValidationEnabled" + }, + { + "name": "IUnitOfWorkEnabled", + "namespace": "Volo.Abp.Uow", + "declaringAssemblyName": "Volo.Abp.Uow", + "fullName": "Volo.Abp.Uow.IUnitOfWorkEnabled" + }, + { + "name": "IAuditingEnabled", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IAuditingEnabled" + }, + { + "name": "IGlobalFeatureCheckingEnabled", + "namespace": "Volo.Abp.GlobalFeatures", + "declaringAssemblyName": "Volo.Abp.GlobalFeatures", + "fullName": "Volo.Abp.GlobalFeatures.IGlobalFeatureCheckingEnabled" + }, + { + "name": "ITransientDependency", + "namespace": "Volo.Abp.DependencyInjection", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.DependencyInjection.ITransientDependency" + }, + { + "name": "IReadOnlyAppService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.IReadOnlyAppService" + }, + { + "name": "ICrudAppService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.ICrudAppService" + }, + { + "name": "ICreateUpdateAppService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.ICreateUpdateAppService" + }, + { + "name": "ICreateAppService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.ICreateAppService" + }, + { + "name": "IUpdateAppService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.IUpdateAppService" + }, + { + "name": "IDeleteAppService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.IDeleteAppService" + }, + { + "name": "IBookAppService", + "namespace": "Hua.Abp.Demo.Books", + "declaringAssemblyName": "Hua.Abp.Demo.Application.Contracts", + "fullName": "Hua.Abp.Demo.Books.IBookAppService" + }, + { + "name": "ICrudAppService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.ICrudAppService" + }, + { + "name": "ICrudAppService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.ICrudAppService" + } + ], + "methods": [], + "contentType": "applicationService", + "name": "BookAppService", + "summary": null + } + ] +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.csproj b/src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.csproj new file mode 100644 index 0000000..83bfa02 --- /dev/null +++ b/src/Hua.Abp.Demo.Application/Hua.Abp.Demo.Application.csproj @@ -0,0 +1,25 @@ + + + + + + net10.0 + enable + Hua.Abp.Demo + + + + + + + + + + + + + + + + + diff --git a/src/Hua.Abp.Demo.Application/Properties/AssemblyInfo.cs b/src/Hua.Abp.Demo.Application/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e1dfcb2 --- /dev/null +++ b/src/Hua.Abp.Demo.Application/Properties/AssemblyInfo.cs @@ -0,0 +1,2 @@ +using System.Runtime.CompilerServices; +[assembly:InternalsVisibleToAttribute("Hua.Abp.Demo.Application.Tests")] diff --git a/src/Hua.Abp.Demo.DbMigrator/DbMigratorHostedService.cs b/src/Hua.Abp.Demo.DbMigrator/DbMigratorHostedService.cs new file mode 100644 index 0000000..66acc28 --- /dev/null +++ b/src/Hua.Abp.Demo.DbMigrator/DbMigratorHostedService.cs @@ -0,0 +1,51 @@ +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Hua.Abp.Demo.Data; +using Serilog; +using Volo.Abp; +using Volo.Abp.Data; + +namespace Hua.Abp.Demo.DbMigrator; + +public class DbMigratorHostedService : IHostedService +{ + private readonly IHostApplicationLifetime _hostApplicationLifetime; + private readonly IConfiguration _configuration; + + public DbMigratorHostedService(IHostApplicationLifetime hostApplicationLifetime, IConfiguration configuration) + { + _hostApplicationLifetime = hostApplicationLifetime; + _configuration = configuration; + } + + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = await AbpApplicationFactory.CreateAsync(options => + { + options.Services.ReplaceConfiguration(_configuration); + options.UseAutofac(); + options.Services.AddLogging(c => c.AddSerilog()); + options.AddDataMigrationEnvironment(); + })) + { + await application.InitializeAsync(); + + await application + .ServiceProvider + .GetRequiredService() + .MigrateAsync(); + + await application.ShutdownAsync(); + + _hostApplicationLifetime.StopApplication(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) + { + return Task.CompletedTask; + } +} diff --git a/src/Hua.Abp.Demo.DbMigrator/DemoDbMigratorModule.cs b/src/Hua.Abp.Demo.DbMigrator/DemoDbMigratorModule.cs new file mode 100644 index 0000000..918f676 --- /dev/null +++ b/src/Hua.Abp.Demo.DbMigrator/DemoDbMigratorModule.cs @@ -0,0 +1,14 @@ +using Hua.Abp.Demo.EntityFrameworkCore; +using Volo.Abp.Autofac; +using Volo.Abp.Modularity; + +namespace Hua.Abp.Demo.DbMigrator; + +[DependsOn( + typeof(AbpAutofacModule), + typeof(DemoEntityFrameworkCoreModule), + typeof(DemoApplicationContractsModule) +)] +public class DemoDbMigratorModule : AbpModule +{ +} diff --git a/src/Hua.Abp.Demo.DbMigrator/Dockerfile b/src/Hua.Abp.Demo.DbMigrator/Dockerfile new file mode 100644 index 0000000..19d766b --- /dev/null +++ b/src/Hua.Abp.Demo.DbMigrator/Dockerfile @@ -0,0 +1,5 @@ +FROM mcr.microsoft.com/dotnet/aspnet:10.0 +COPY bin/Release/net10.0/publish/ app/ +WORKDIR /app +ENV ASPNETCORE_URLS=http://+:80 +ENTRYPOINT ["dotnet", "Hua.Abp.Demo.DbMigrator.dll"] \ No newline at end of file diff --git a/src/Hua.Abp.Demo.DbMigrator/Dockerfile.local b/src/Hua.Abp.Demo.DbMigrator/Dockerfile.local new file mode 100644 index 0000000..8c774de --- /dev/null +++ b/src/Hua.Abp.Demo.DbMigrator/Dockerfile.local @@ -0,0 +1,6 @@ + FROM mcr.microsoft.com/dotnet/aspnet:10.0 + USER $APP_UID + + COPY bin/Release/net10.0/publish/ app/ + WORKDIR /app + ENTRYPOINT ["dotnet", "Hua.Abp.Demo.DbMigrator.dll"] \ No newline at end of file diff --git a/src/Hua.Abp.Demo.DbMigrator/Hua.Abp.Demo.DbMigrator.abppkg b/src/Hua.Abp.Demo.DbMigrator/Hua.Abp.Demo.DbMigrator.abppkg new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/Hua.Abp.Demo.DbMigrator/Hua.Abp.Demo.DbMigrator.abppkg @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.DbMigrator/Hua.Abp.Demo.DbMigrator.csproj b/src/Hua.Abp.Demo.DbMigrator/Hua.Abp.Demo.DbMigrator.csproj new file mode 100644 index 0000000..4772f0c --- /dev/null +++ b/src/Hua.Abp.Demo.DbMigrator/Hua.Abp.Demo.DbMigrator.csproj @@ -0,0 +1,47 @@ + + + + + + Exe + net10.0 + enable + 96f11e75-006a-4257-9c43-0f113eb7550c + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + Always + + + + PreserveNewest + Always + + + + diff --git a/src/Hua.Abp.Demo.DbMigrator/Program.cs b/src/Hua.Abp.Demo.DbMigrator/Program.cs new file mode 100644 index 0000000..466010d --- /dev/null +++ b/src/Hua.Abp.Demo.DbMigrator/Program.cs @@ -0,0 +1,39 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Serilog; +using Serilog.Events; + +namespace Hua.Abp.Demo.DbMigrator; + +class Program +{ + static async Task Main(string[] args) + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Information() + .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) + .MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning) +#if DEBUG + .MinimumLevel.Override("Hua.Abp.Demo", LogEventLevel.Debug) +#else + .MinimumLevel.Override("Hua.Abp.Demo", LogEventLevel.Information) +#endif + .Enrich.FromLogContext() + .WriteTo.Async(c => c.File("Logs/logs.txt")) + .WriteTo.Async(c => c.Console()) + .CreateLogger(); + + await CreateHostBuilder(args).RunConsoleAsync(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .AddAppSettingsSecretsJson() + .ConfigureLogging((context, logging) => logging.ClearProviders()) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); +} diff --git a/src/Hua.Abp.Demo.DbMigrator/appsettings.json b/src/Hua.Abp.Demo.DbMigrator/appsettings.json new file mode 100644 index 0000000..8a9e5f4 --- /dev/null +++ b/src/Hua.Abp.Demo.DbMigrator/appsettings.json @@ -0,0 +1,16 @@ +{ + "ConnectionStrings": { + "Default": "Host=localhost;Port=5432;Database=Demo;User ID=postgres;Password=123456;" + }, + "OpenIddict": { + "Applications": { + "Demo_App": { + "ClientId": "Demo_App", + "RootUrl": "http://localhost:4200" }, + "Demo_Swagger": { + "ClientId": "Demo_Swagger", + "RootUrl": "https://localhost:44322/" + } + } + } +} diff --git a/src/Hua.Abp.Demo.DbMigrator/appsettings.secrets.json b/src/Hua.Abp.Demo.DbMigrator/appsettings.secrets.json new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/src/Hua.Abp.Demo.DbMigrator/appsettings.secrets.json @@ -0,0 +1,2 @@ +{ +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Books/BookType.cs b/src/Hua.Abp.Demo.Domain.Shared/Books/BookType.cs new file mode 100644 index 0000000..9d92169 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Books/BookType.cs @@ -0,0 +1,14 @@ +namespace Hua.Abp.Demo.Books; + +public enum BookType +{ + Undefined, + Adventure, + Biography, + Dystopia, + Fantastic, + Horror, + Science, + ScienceFiction, + Poetry +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Domain.Shared/DemoDomainErrorCodes.cs b/src/Hua.Abp.Demo.Domain.Shared/DemoDomainErrorCodes.cs new file mode 100644 index 0000000..bd11e38 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/DemoDomainErrorCodes.cs @@ -0,0 +1,6 @@ +namespace Hua.Abp.Demo; + +public static class DemoDomainErrorCodes +{ + /* You can add your business exception error codes here, as constants */ +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/DemoDomainSharedModule.cs b/src/Hua.Abp.Demo.Domain.Shared/DemoDomainSharedModule.cs new file mode 100644 index 0000000..ea692b1 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/DemoDomainSharedModule.cs @@ -0,0 +1,82 @@ +using Hua.Abp.Demo.Localization; +using Volo.Abp.AuditLogging; +using Volo.Abp.BackgroundJobs; +using Volo.Abp.FeatureManagement; +using Volo.Abp.Identity; +using Volo.Abp.Localization; +using Volo.Abp.Localization.ExceptionHandling; +using Volo.Abp.Validation.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement; +using Volo.Abp.SettingManagement; +using Volo.Abp.VirtualFileSystem; +using Volo.Abp.OpenIddict; +using Volo.Abp.BlobStoring.Database; +using Volo.Abp.TenantManagement; + +namespace Hua.Abp.Demo; + +[DependsOn( + typeof(AbpAuditLoggingDomainSharedModule), + typeof(AbpBackgroundJobsDomainSharedModule), + typeof(AbpFeatureManagementDomainSharedModule), + typeof(AbpPermissionManagementDomainSharedModule), + typeof(AbpSettingManagementDomainSharedModule), + typeof(AbpIdentityDomainSharedModule), + typeof(AbpOpenIddictDomainSharedModule), + typeof(AbpTenantManagementDomainSharedModule), + typeof(BlobStoringDatabaseDomainSharedModule) + )] +public class DemoDomainSharedModule : AbpModule +{ + public override void PreConfigureServices(ServiceConfigurationContext context) + { + DemoGlobalFeatureConfigurator.Configure(); + DemoModuleExtensionConfigurator.Configure(); + } + + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.FileSets.AddEmbedded(); + }); + + Configure(options => + { + options.Resources + .Add("en") + .AddBaseTypes(typeof(AbpValidationResource)) + .AddVirtualJson("/Localization/Demo"); + + options.DefaultResourceType = typeof(DemoResource); + + options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("ar", "ar", "Arabic")); + options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "Chinese (Simplified)")); + options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "Chinese (Traditional)")); + options.Languages.Add(new LanguageInfo("cs", "cs", "Czech")); + options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (United Kingdom)")); + options.Languages.Add(new LanguageInfo("fi", "fi", "Finnish")); + options.Languages.Add(new LanguageInfo("fr", "fr", "French")); + options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "German (Germany)")); + options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi ")); + options.Languages.Add(new LanguageInfo("hu", "hu", "Hungarian")); + options.Languages.Add(new LanguageInfo("is", "is", "Icelandic")); + options.Languages.Add(new LanguageInfo("it", "it", "Italian")); + options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Portuguese (Brazil)")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Romanian (Romania)")); + options.Languages.Add(new LanguageInfo("ru", "ru", "Russian")); + options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); + options.Languages.Add(new LanguageInfo("es", "es", "Spanish")); + options.Languages.Add(new LanguageInfo("sv", "sv", "Swedish")); + options.Languages.Add(new LanguageInfo("tr", "tr", "Turkish")); + + }); + + Configure(options => + { + options.MapCodeNamespace("Demo", typeof(DemoResource)); + }); + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/DemoGlobalFeatureConfigurator.cs b/src/Hua.Abp.Demo.Domain.Shared/DemoGlobalFeatureConfigurator.cs new file mode 100644 index 0000000..6bf138e --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/DemoGlobalFeatureConfigurator.cs @@ -0,0 +1,20 @@ +using Volo.Abp.GlobalFeatures; +using Volo.Abp.Threading; + +namespace Hua.Abp.Demo; + +public static class DemoGlobalFeatureConfigurator +{ + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public static void Configure() + { + OneTimeRunner.Run(() => + { + /* You can configure (enable/disable) global features of the used modules here. + * Please refer to the documentation to learn more about the Global Features System: + * https://docs.abp.io/en/abp/latest/Global-Features + */ + }); + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/DemoModuleExtensionConfigurator.cs b/src/Hua.Abp.Demo.Domain.Shared/DemoModuleExtensionConfigurator.cs new file mode 100644 index 0000000..1e8e16e --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/DemoModuleExtensionConfigurator.cs @@ -0,0 +1,71 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Identity; +using Volo.Abp.ObjectExtending; +using Volo.Abp.Threading; + +namespace Hua.Abp.Demo; + +public static class DemoModuleExtensionConfigurator +{ + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public static void Configure() + { + OneTimeRunner.Run(() => + { + ConfigureExistingProperties(); + ConfigureExtraProperties(); + }); + } + + private static void ConfigureExistingProperties() + { + /* You can change max lengths for properties of the + * entities defined in the modules used by your application. + * + * Example: Change user and role name max lengths + + AbpUserConsts.MaxNameLength = 99; + IdentityRoleConsts.MaxNameLength = 99; + + * Notice: It is not suggested to change property lengths + * unless you really need it. Go with the standard values wherever possible. + * + * If you are using EF Core, you will need to run the add-migration command after your changes. + */ + } + + private static void ConfigureExtraProperties() + { + /* You can configure extra properties for the + * entities defined in the modules used by your application. + * + * This class can be used to define these extra properties + * with a high level, easy to use API. + * + * Example: Add a new property to the user entity of the identity module + + ObjectExtensionManager.Instance.Modules() + .ConfigureIdentity(identity => + { + identity.ConfigureUser(user => + { + user.AddOrUpdateProperty( //property type: string + "SocialSecurityNumber", //property name + property => + { + //validation rules + property.Attributes.Add(new RequiredAttribute()); + property.Attributes.Add(new StringLengthAttribute(64) {MinimumLength = 4}); + + //...other configurations for this property + } + ); + }); + }); + + * See the documentation for more: + * https://abp.io/docs/latest/framework/architecture/modularity/extending/module-entity-extensions + */ + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.abppkg b/src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.abppkg new file mode 100644 index 0000000..8b3de05 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.domain-shared" +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.abppkg.analyze.json b/src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.abppkg.analyze.json new file mode 100644 index 0000000..46f86bb --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.abppkg.analyze.json @@ -0,0 +1,118 @@ +{ + "name": "Hua.Abp.Demo.Domain.Shared", + "hash": "", + "contents": [ + { + "namespace": "Hua.Abp.Demo", + "dependsOnModules": [ + { + "declaringAssemblyName": "Volo.Abp.AuditLogging.Domain.Shared", + "namespace": "Volo.Abp.AuditLogging", + "name": "AbpAuditLoggingDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.BackgroundJobs.Domain.Shared", + "namespace": "Volo.Abp.BackgroundJobs", + "name": "AbpBackgroundJobsDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.FeatureManagement.Domain.Shared", + "namespace": "Volo.Abp.FeatureManagement", + "name": "AbpFeatureManagementDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.PermissionManagement.Domain.Shared", + "namespace": "Volo.Abp.PermissionManagement", + "name": "AbpPermissionManagementDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.Domain.Shared", + "namespace": "Volo.Abp.SettingManagement", + "name": "AbpSettingManagementDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Identity.Pro.Domain.Shared", + "namespace": "Volo.Abp.Identity", + "name": "AbpIdentityProDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.OpenIddict.Pro.Domain.Shared", + "namespace": "Volo.Abp.OpenIddict", + "name": "AbpOpenIddictProDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.LanguageManagement.Domain.Shared", + "namespace": "Volo.Abp.LanguageManagement", + "name": "LanguageManagementDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.TextTemplateManagement.Domain.Shared", + "namespace": "Volo.Abp.TextTemplateManagement", + "name": "TextTemplateManagementDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Gdpr.Domain.Shared", + "namespace": "Volo.Abp.Gdpr", + "name": "AbpGdprDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.GlobalFeatures", + "namespace": "Volo.Abp.GlobalFeatures", + "name": "AbpGlobalFeaturesModule" + }, + { + "declaringAssemblyName": "Volo.Abp.BlobStoring.Database.Domain.Shared", + "namespace": "Volo.Abp.BlobStoring.Database", + "name": "BlobStoringDatabaseDomainSharedModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "DemoDomainSharedModule", + "summary": null + } + ] +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.csproj b/src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.csproj new file mode 100644 index 0000000..2c1b573 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Hua.Abp.Demo.Domain.Shared.csproj @@ -0,0 +1,37 @@ + + + + + + net10.0 + enable + Hua.Abp.Demo + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ar.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ar.json new file mode 100644 index 0000000..f660249 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ar.json @@ -0,0 +1,42 @@ +{ + "culture": "ar", + "texts": { + "AppName": "Demo", + "Menu:Home": "منزل، بيت", + "Menu:ContactUs": "اتصل بنا", + "Menu:ArticleSample": "عينة المادة", + "Home": "منزل، بيت", + "Welcome": "مرحبا", + "LongWelcomeMessage": "مرحبا بكم في التطبيق. هذا مشروع بدء التشغيل يعتمد على إطار عمل برنامج ABP. لمزيد من المعلومات قم بزيارة", + "Date": "تاريخ", + "Permission:Dashboard": "لوحة القيادة", + "Menu:Dashboard": "لوحة القيادة", + "Menu:HomePage": "الصفحة الرئيسية", + "Dashboard": "لوحة القيادة", + "ExternalProvider:Google": "جوجل", + "ExternalProvider:Google:ClientId": "معرف العميل", + "ExternalProvider:Google:ClientSecret": "سر العميل", + "ExternalProvider:Microsoft": "مايكروسوفت", + "ExternalProvider:Microsoft:ClientId": "معرف العميل", + "ExternalProvider:Microsoft:ClientSecret": "سر العميل", + "ExternalProvider:Twitter": "تويتر", + "ExternalProvider:Twitter:ConsumerKey": "مفتاح المستهلك", + "ExternalProvider:Twitter:ConsumerSecret": "سر المستهلك", + "NewsletterHeader": "اشترك في النشرة الإخبارية!", + "NewsletterInfo": "احصل على معلومات حول آخر الأحداث.", + "NewsletterPreference_Default": "النشرة الإخبارية الافتراضية", + "NewsletterPrivacyAcceptMessage": "أوافق على سياسة الخصوصية .", + "Language": "لغة", + "Search": "يبحث", + "LoadMore": "تحميل المزيد", + "Settings": "إعدادات", + "Theme": "سمة", + "DeviceTheme": "موضوع الجهاز", + "Dark": "مظلم", + "Light": "ضوء", + "Unspecified": "نظام", + "SeeAllUsers": "رؤية كافة المستخدمين", + "TakePhoto": "تصوير", + "ChoosePhoto": "اختر صورة" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/cs.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/cs.json new file mode 100644 index 0000000..b7ba253 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/cs.json @@ -0,0 +1,38 @@ +{ + "Culture": "cs", + "Texts": { + "AppName": "Demo", + "Menu:Demo": "Book Store", + "Menu:Books": "Books", + "Actions": "Actions", + "Close": "Close", + "Delete": "Delete", + "Edit": "Edit", + "PublishDate": "Publish date", + "NewBook": "New book", + "Name": "Name", + "Type": "Type", + "Price": "Price", + "CreationTime": "Creation time", + "AreYouSure": "Are you sure?", + "AreYouSureToDelete": "Are you sure you want to delete this item?", + "BookDeletionConfirmationMessage": "Are you sure to delete the book '{0}'?", + "Enum:BookType.0": "Undefined", + "Enum:BookType.1": "Adventure", + "Enum:BookType.2": "Biography", + "Enum:BookType.3": "Dystopia", + "Enum:BookType.4": "Fantastic", + "Enum:BookType.5": "Horror", + "Enum:BookType.6": "Science", + "Enum:BookType.7": "Science fiction", + "Enum:BookType.8": "Poetry", + "Permission:Demo": "Book Store", + "Permission:Books": "Book Management", + "Permission:Books.Create": "Creating new books", + "Permission:Books.Edit": "Editing the books", + "Permission:Books.Delete": "Deleting the books", + "Menu:Home": "Home", + "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information visit", + "Welcome": "Welcome" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/de-DE.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/de-DE.json new file mode 100644 index 0000000..1fa51a4 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/de-DE.json @@ -0,0 +1,42 @@ +{ + "culture": "de-DE", + "texts": { + "AppName": "Demo", + "Menu:Home": "Home", + "Menu:ContactUs": "Kontaktiere uns", + "Menu:ArticleSample": "Artikelmuster", + "Home": "Home", + "Welcome": "Willkommen", + "LongWelcomeMessage": "Willkommen in der Anwendung. Dies ist ein Startup-Projekt basierend auf dem ABP-Framework. Weitere Informationen finden Sie unter", + "Date": "Datum", + "Permission:Dashboard": "Dashboard", + "Menu:Dashboard": "Dashboard", + "Menu:HomePage": "Startseite", + "Dashboard": "Dashboard", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "Kunden ID", + "ExternalProvider:Google:ClientSecret": "Client-Geheimnis", + "ExternalProvider:Microsoft": "Microsoft", + "ExternalProvider:Microsoft:ClientId": "Kunden ID", + "ExternalProvider:Microsoft:ClientSecret": "Client-Geheimnis", + "ExternalProvider:Twitter": "Twitter", + "ExternalProvider:Twitter:ConsumerKey": "Verbraucherschlüssel", + "ExternalProvider:Twitter:ConsumerSecret": "Verbrauchergeheimnis", + "NewsletterHeader": "Abonnieren Sie den Newsletter!", + "NewsletterInfo": "Informieren Sie sich über aktuelle Ereignisse.", + "NewsletterPreference_Default": "Standard-Newsletter", + "NewsletterPrivacyAcceptMessage": "Ich akzeptiere die Datenschutzerklärung.", + "Language": "Sprache", + "Search": "Suchen", + "LoadMore": "Mehr laden", + "Settings": "Einstellungen", + "Theme": "Thema", + "DeviceTheme": "Gerätethema", + "Dark": "Dunkel", + "Light": "Licht", + "Unspecified": "System", + "SeeAllUsers": "Alle Benutzer anzeigen", + "TakePhoto": "Foto machen", + "ChoosePhoto": "Wähle ein Foto aus" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/en-GB.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/en-GB.json new file mode 100644 index 0000000..dd522c5 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/en-GB.json @@ -0,0 +1,38 @@ +{ + "Culture": "en-GB", + "Texts": { + "AppName": "Demo", + "Menu:Demo": "Book Store", + "Menu:Books": "Books", + "Actions": "Actions", + "Close": "Close", + "Delete": "Delete", + "Edit": "Edit", + "PublishDate": "Publish date", + "NewBook": "New book", + "Name": "Name", + "Type": "Type", + "Price": "Price", + "CreationTime": "Creation time", + "AreYouSure": "Are you sure?", + "AreYouSureToDelete": "Are you sure you want to delete this item?", + "BookDeletionConfirmationMessage": "Are you sure to delete the book '{0}'?", + "Enum:BookType.0": "Undefined", + "Enum:BookType.1": "Adventure", + "Enum:BookType.2": "Biography", + "Enum:BookType.3": "Dystopia", + "Enum:BookType.4": "Fantastic", + "Enum:BookType.5": "Horror", + "Enum:BookType.6": "Science", + "Enum:BookType.7": "Science fiction", + "Enum:BookType.8": "Poetry", + "Permission:Demo": "Book Store", + "Permission:Books": "Book Management", + "Permission:Books.Create": "Creating new books", + "Permission:Books.Edit": "Editing the books", + "Permission:Books.Delete": "Deleting the books", + "Menu:Home": "Home", + "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information visit", + "Welcome": "Welcome" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/en.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/en.json new file mode 100644 index 0000000..fef91ca --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/en.json @@ -0,0 +1,38 @@ +{ + "Culture": "en", + "Texts": { + "AppName": "Demo", + "Menu:Demo": "Book Store", + "Menu:Books": "Books", + "Actions": "Actions", + "Close": "Close", + "Delete": "Delete", + "Edit": "Edit", + "PublishDate": "Publish date", + "NewBook": "New book", + "Name": "Name", + "Type": "Type", + "Price": "Price", + "CreationTime": "Creation time", + "AreYouSure": "Are you sure?", + "AreYouSureToDelete": "Are you sure you want to delete this item?", + "BookDeletionConfirmationMessage": "Are you sure to delete the book '{0}'?", + "Enum:BookType.0": "Undefined", + "Enum:BookType.1": "Adventure", + "Enum:BookType.2": "Biography", + "Enum:BookType.3": "Dystopia", + "Enum:BookType.4": "Fantastic", + "Enum:BookType.5": "Horror", + "Enum:BookType.6": "Science", + "Enum:BookType.7": "Science fiction", + "Enum:BookType.8": "Poetry", + "Permission:Demo": "Book Store", + "Permission:Books": "Book Management", + "Permission:Books.Create": "Creating new books", + "Permission:Books.Edit": "Editing the books", + "Permission:Books.Delete": "Deleting the books", + "Menu:Home": "Home", + "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information visit", + "Welcome": "Welcome" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/es.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/es.json new file mode 100644 index 0000000..7c5b391 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/es.json @@ -0,0 +1,42 @@ +{ + "culture": "es", + "texts": { + "AppName": "Demo", + "Menu:Home": "Hogar", + "Menu:ContactUs": "Contáctenos", + "Menu:ArticleSample": "Muestra de artículo", + "Home": "Hogar", + "Welcome": "Bienvenido", + "LongWelcomeMessage": "Bienvenido a la aplicacion. Este es un proyecto de inicio basado en el marco ABP. Para obtener mas informacion, visite", + "Date": "Fecha", + "Permission:Dashboard": "Panel de control", + "Menu:Dashboard": "Panel de control", + "Menu:HomePage": "Página de inicio", + "Dashboard": "Panel de control", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "ID de cliente", + "ExternalProvider:Google:ClientSecret": "Client Secret", + "ExternalProvider:Microsoft": "Microsoft", + "ExternalProvider:Microsoft:ClientId": "ID de cliente", + "ExternalProvider:Microsoft:ClientSecret": "Client Secret", + "ExternalProvider:Twitter": "Twitter", + "ExternalProvider:Twitter:ConsumerKey": "Clave de consumidor", + "ExternalProvider:Twitter:ConsumerSecret": "Consumer Secret", + "NewsletterHeader": "Suscríbete a la newsletter!", + "NewsletterInfo": "Obtenga información sobre los últimos acontecimientos.", + "NewsletterPreference_Default": "Boletín de noticias predeterminado", + "NewsletterPrivacyAcceptMessage": "Acepto la Política de privacidad .", + "Language": "Idioma", + "Search": "Buscar", + "LoadMore": "Carga más", + "Settings": "Ajustes", + "Theme": "Tema", + "DeviceTheme": "Tema del dispositivo", + "Dark": "Oscuro", + "Light": "Luz", + "Unspecified": "Sistema", + "SeeAllUsers": "Ver todos los usuarios", + "TakePhoto": "Tomar foto", + "ChoosePhoto": "Escoge una foto" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/fi.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/fi.json new file mode 100644 index 0000000..bc89c39 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/fi.json @@ -0,0 +1,42 @@ +{ + "culture": "fi", + "texts": { + "AppName": "Demo", + "Menu:Home": "Koti", + "Menu:ContactUs": "Ota meihin yhteyttä", + "Menu:ArticleSample": "Artikkelinäyte", + "Home": "Koti", + "Welcome": "Tervetuloa", + "LongWelcomeMessage": "Tervetuloa sovellukseen. Tämä on ABP-kehykseen perustuva käynnistysprojekti. Lisätietoja on osoitteessa", + "Date": "Päivämäärä", + "Permission:Dashboard": "Kojelauta", + "Menu:Dashboard": "Kojelauta", + "Menu:HomePage": "Kotisivu", + "Dashboard": "Kojelauta", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "Asiakastunnus", + "ExternalProvider:Google:ClientSecret": "Asiakkaan salaisuus", + "ExternalProvider:Microsoft": "Microsoft", + "ExternalProvider:Microsoft:ClientId": "Asiakastunnus", + "ExternalProvider:Microsoft:ClientSecret": "Asiakkaan salaisuus", + "ExternalProvider:Twitter": "Viserrys", + "ExternalProvider:Twitter:ConsumerKey": "Kuluttaja-avain", + "ExternalProvider:Twitter:ConsumerSecret": "Kuluttajan salaisuus", + "NewsletterHeader": "Tilaa uutiskirje!", + "NewsletterInfo": "Hanki tietoa viimeisimmistä tapahtumista.", + "NewsletterPreference_Default": "Oletusuutiskirje", + "NewsletterPrivacyAcceptMessage": "Hyväksyn tietosuojakäytännön .", + "Language": "Kieli", + "Search": "Hae", + "LoadMore": "Lataa lisää", + "Settings": "asetukset", + "Theme": "Teema", + "DeviceTheme": "Laitteen teema", + "Dark": "Tumma", + "Light": "Kevyt", + "Unspecified": "Järjestelmä", + "SeeAllUsers": "Katso Kaikki käyttäjät", + "TakePhoto": "Ota valokuva", + "ChoosePhoto": "Valitse Valokuva" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/fr.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/fr.json new file mode 100644 index 0000000..7307abf --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/fr.json @@ -0,0 +1,42 @@ +{ + "culture": "fr", + "texts": { + "AppName": "Demo", + "Menu:Home": "Acceuil", + "Menu:ContactUs": "Nous contacter", + "Menu:ArticleSample": "Échantillon d'article", + "Home": "Acceuil", + "Welcome": "Bienvenue", + "LongWelcomeMessage": "Bienvenue dans l'application. Il s'agit d'un projet de démarrage basé sur le framework ABP. Pour plus d'informations, visitez", + "Date": "Date", + "Permission:Dashboard": "Tableau de bord", + "Menu:Dashboard": "Tableau de bord", + "Menu:HomePage": "Page d'accueil", + "Dashboard": "Tableau de bord", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "identité du client", + "ExternalProvider:Google:ClientSecret": "Secret du client", + "ExternalProvider:Microsoft": "Microsoft", + "ExternalProvider:Microsoft:ClientId": "identité du client", + "ExternalProvider:Microsoft:ClientSecret": "Secret du client", + "ExternalProvider:Twitter": "Twitter", + "ExternalProvider:Twitter:ConsumerKey": "La clé du consommateur", + "ExternalProvider:Twitter:ConsumerSecret": "Secret du consommateur", + "NewsletterHeader": "Abonnez-vous à la newsletter!", + "NewsletterInfo": "Obtenez des informations sur les derniers événements.", + "NewsletterPreference_Default": "Newsletter par défaut", + "NewsletterPrivacyAcceptMessage": "J'accepte la Politique de confidentialité .", + "Language": "Langue", + "Search": "Recherche", + "LoadMore": "Charger plus", + "Settings": "Paramètres", + "Theme": "Thème", + "DeviceTheme": "Thème de l'appareil", + "Dark": "Sombre", + "Light": "Lumière", + "Unspecified": "Système", + "SeeAllUsers": "Voir tous les utilisateurs", + "TakePhoto": "Prendre une photo", + "ChoosePhoto": "Choisissez une photo" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/hi.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/hi.json new file mode 100644 index 0000000..e1daf11 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/hi.json @@ -0,0 +1,42 @@ +{ + "culture": "hi", + "texts": { + "AppName": "Demo", + "Menu:Home": "घर", + "Menu:ContactUs": "संपर्क करें", + "Menu:ArticleSample": "आलेख नमूना", + "Home": "घर", + "Welcome": "स्वागत हे", + "LongWelcomeMessage": "आवेदन करने के लिए आपका स्वागत है। यह एबीपी ढांचे पर आधारित एक स्टार्टअप परियोजना है। अधिक जानकारी के लिए पर जाएँ।", + "Date": "दिनांक", + "Permission:Dashboard": "डैशबोर्ड", + "Menu:Dashboard": "डैशबोर्ड", + "Menu:HomePage": "मुख पृष्ठ", + "Dashboard": "डैशबोर्ड", + "ExternalProvider:Google": "गूगल", + "ExternalProvider:Google:ClientId": "ग्राहक ID", + "ExternalProvider:Google:ClientSecret": "ग्राहक गुप्त", + "ExternalProvider:Microsoft": "माइक्रोसॉफ्ट", + "ExternalProvider:Microsoft:ClientId": "ग्राहक ID", + "ExternalProvider:Microsoft:ClientSecret": "ग्राहक गुप्त", + "ExternalProvider:Twitter": "ट्विटर", + "ExternalProvider:Twitter:ConsumerKey": "उपभोक्ता कुंजी", + "ExternalProvider:Twitter:ConsumerSecret": "उपभोक्ता रहस्य", + "NewsletterHeader": "न्यूज़लेटर की सदस्यता लें!", + "NewsletterInfo": "नवीनतम घटनाओं के बारे में जानकारी प्राप्त करें।", + "NewsletterPreference_Default": "डिफ़ॉल्ट न्यूज़लैटर", + "NewsletterPrivacyAcceptMessage": "मैं गोपनीयता नीति स्वीकार करता हूं।", + "Language": "भाषा", + "Search": "खोज", + "LoadMore": "और लोड करें", + "Settings": "समायोजन", + "Theme": "विषय", + "DeviceTheme": "डिवाइस थीम", + "Dark": "अँधेरा", + "Light": "रोशनी", + "Unspecified": "प्रणाली", + "SeeAllUsers": "सभी उपयोगकर्ता देखें", + "TakePhoto": "फोटो लो", + "ChoosePhoto": "तस्विर का चयन करो" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/hu.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/hu.json new file mode 100644 index 0000000..b604e01 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/hu.json @@ -0,0 +1,42 @@ +{ + "culture": "hu", + "texts": { + "AppName": "Demo", + "Menu:Home": "Kezdőlap", + "Menu:ContactUs": "Lépjen kapcsolatba velünk", + "Menu:ArticleSample": "Cikkminta", + "Home": "Kezdőlap", + "Welcome": "Üdvözöljük", + "LongWelcomeMessage": "Üdvözöljük az alkalmazásban. Ez egy ABP keretrendszeren alapuló startup projekt. További információért látogasson el az oldalra", + "Date": "dátum", + "Permission:Dashboard": "Irányítópult", + "Menu:Dashboard": "Irányítópult", + "Menu:HomePage": "Kezdőlap", + "Dashboard": "Irányítópult", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "Ügyfélazonosító", + "ExternalProvider:Google:ClientSecret": "Ügyfél titkos kulcs", + "ExternalProvider:Microsoft": "Microsoft", + "ExternalProvider:Microsoft:ClientId": "Ügyfélazonosító", + "ExternalProvider:Microsoft:ClientSecret": "Ügyfél titkos kulcs", + "ExternalProvider:Twitter": "Twitter", + "ExternalProvider:Twitter:ConsumerKey": "Fogyasztói kulcs", + "ExternalProvider:Twitter:ConsumerSecret": "Fogyasztói titkos kulcs", + "NewsletterHeader": "Iratkozz fel a hírlevélre!", + "NewsletterInfo": "Tájékozódjon a legfrissebb eseményekről.", + "NewsletterPreference_Default": "Alapértelmezett hírlevél", + "NewsletterPrivacyAcceptMessage": "Elfogadom az Adatvédelmi szabályzatot .", + "Language": "Nyelv", + "Search": "Keresés", + "LoadMore": "Load More", + "Settings": "Beállítások", + "Theme": "Téma", + "DeviceTheme": "Eszköz téma", + "Dark": "Sötét", + "Light": "Fény", + "Unspecified": "Rendszer", + "SeeAllUsers": "Lásd: Összes felhasználó", + "TakePhoto": "Fotót készíteni", + "ChoosePhoto": "Válassz képet" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/is.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/is.json new file mode 100644 index 0000000..9210d1f --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/is.json @@ -0,0 +1,38 @@ +{ + "Culture": "is", + "Texts": { + "AppName": "Demo", + "Menu:Demo": "Book Store", + "Menu:Books": "Books", + "Actions": "Actions", + "Close": "Close", + "Delete": "Delete", + "Edit": "Edit", + "PublishDate": "Publish date", + "NewBook": "New book", + "Name": "Name", + "Type": "Type", + "Price": "Price", + "CreationTime": "Creation time", + "AreYouSure": "Are you sure?", + "AreYouSureToDelete": "Are you sure you want to delete this item?", + "BookDeletionConfirmationMessage": "Are you sure to delete the book '{0}'?", + "Enum:BookType.0": "Undefined", + "Enum:BookType.1": "Adventure", + "Enum:BookType.2": "Biography", + "Enum:BookType.3": "Dystopia", + "Enum:BookType.4": "Fantastic", + "Enum:BookType.5": "Horror", + "Enum:BookType.6": "Science", + "Enum:BookType.7": "Science fiction", + "Enum:BookType.8": "Poetry", + "Permission:Demo": "Book Store", + "Permission:Books": "Book Management", + "Permission:Books.Create": "Creating new books", + "Permission:Books.Edit": "Editing the books", + "Permission:Books.Delete": "Deleting the books", + "Menu:Home": "Home", + "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information visit", + "Welcome": "Welcome" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/it.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/it.json new file mode 100644 index 0000000..524b08f --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/it.json @@ -0,0 +1,42 @@ +{ + "culture": "it", + "texts": { + "AppName": "Demo", + "Menu:Home": "Home", + "Menu:ContactUs": "Contattaci", + "Menu:ArticleSample": "Esempio di articolo", + "Home": "Home", + "Welcome": "Benvenuto", + "LongWelcomeMessage": "Benvenuto nell'applicazione. Questo è un progetto di avvio basato sul framework ABP. Per maggiori informazioni visita", + "Date": "Data", + "Permission:Dashboard": "Cruscotto", + "Menu:Dashboard": "Cruscotto", + "Menu:HomePage": "Pagina iniziale", + "Dashboard": "Cruscotto", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "Client ID", + "ExternalProvider:Google:ClientSecret": "Client Secret", + "ExternalProvider:Microsoft": "Microsoft", + "ExternalProvider:Microsoft:ClientId": "Client ID", + "ExternalProvider:Microsoft:ClientSecret": "Client Secret", + "ExternalProvider:Twitter": "Twitter", + "ExternalProvider:Twitter:ConsumerKey": "Consumer Key", + "ExternalProvider:Twitter:ConsumerSecret": "Consumer Secret", + "NewsletterHeader": "Iscriviti alla newsletter!", + "NewsletterInfo": "Ottieni informazioni sugli ultimi avvenimenti.", + "NewsletterPreference_Default": "Newsletter predefinita", + "NewsletterPrivacyAcceptMessage": "Accetto la Informativa sulla privacy.", + "Language": "Lingua", + "Search": "Ricerca", + "LoadMore": "Carica altro", + "Settings": "Impostazioni", + "Theme": "Tema", + "DeviceTheme": "Tema del dispositivo", + "Dark": "Buio", + "Light": "Leggero", + "Unspecified": "Sistema", + "SeeAllUsers": "Visualizza tutti gli utenti", + "TakePhoto": "Fare foto", + "ChoosePhoto": "Scegli la foto" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/pt-BR.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/pt-BR.json new file mode 100644 index 0000000..ae86449 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/pt-BR.json @@ -0,0 +1,42 @@ +{ + "culture": "pt-BR", + "texts": { + "AppName": "Demo", + "Menu:Home": "Principal", + "Menu:ContactUs": "Entre em contato conosco", + "Menu:ArticleSample": "Amostra de Artigo", + "Home": "Casa", + "Welcome": "Seja bem-vindo!", + "LongWelcomeMessage": "Bem-vindo a esta aplicação. Este é um projeto inicial baseado no ABP framework. Para mais informações, visite", + "Date": "Data", + "Permission:Dashboard": "Painel", + "Menu:Dashboard": "Painel", + "Menu:HomePage": "Pagina inicial", + "Dashboard": "Painel", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "ID do Cliente", + "ExternalProvider:Google:ClientSecret": "Segredo do cliente", + "ExternalProvider:Microsoft": "Microsoft", + "ExternalProvider:Microsoft:ClientId": "ID do Cliente", + "ExternalProvider:Microsoft:ClientSecret": "Segredo do cliente", + "ExternalProvider:Twitter": "Twitter", + "ExternalProvider:Twitter:ConsumerKey": "Chave do consumidor", + "ExternalProvider:Twitter:ConsumerSecret": "consumidor secreto", + "NewsletterHeader": "Assine a newsletter!", + "NewsletterInfo": "Obtenha informações sobre os últimos acontecimentos.", + "NewsletterPreference_Default": "Boletim informativo padrão", + "NewsletterPrivacyAcceptMessage": "Eu aceito a Política de Privacidade .", + "Language": "Linguagem", + "Search": "Procurar", + "LoadMore": "Carregue mais", + "Settings": "Configurações", + "Theme": "Tema", + "DeviceTheme": "Tema do dispositivo", + "Dark": "Escuro", + "Light": "Luz", + "Unspecified": "Sistema", + "SeeAllUsers": "Ver todos os usuários", + "TakePhoto": "Tirar fotos", + "ChoosePhoto": "Escolher Foto" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ro-RO.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ro-RO.json new file mode 100644 index 0000000..dbe1289 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ro-RO.json @@ -0,0 +1,38 @@ +{ + "Culture": "ro-RO", + "Texts": { + "AppName": "Demo", + "Menu:Demo": "Book Store", + "Menu:Books": "Books", + "Actions": "Actions", + "Close": "Close", + "Delete": "Delete", + "Edit": "Edit", + "PublishDate": "Publish date", + "NewBook": "New book", + "Name": "Name", + "Type": "Type", + "Price": "Price", + "CreationTime": "Creation time", + "AreYouSure": "Are you sure?", + "AreYouSureToDelete": "Are you sure you want to delete this item?", + "BookDeletionConfirmationMessage": "Are you sure to delete the book '{0}'?", + "Enum:BookType.0": "Undefined", + "Enum:BookType.1": "Adventure", + "Enum:BookType.2": "Biography", + "Enum:BookType.3": "Dystopia", + "Enum:BookType.4": "Fantastic", + "Enum:BookType.5": "Horror", + "Enum:BookType.6": "Science", + "Enum:BookType.7": "Science fiction", + "Enum:BookType.8": "Poetry", + "Permission:Demo": "Book Store", + "Permission:Books": "Book Management", + "Permission:Books.Create": "Creating new books", + "Permission:Books.Edit": "Editing the books", + "Permission:Books.Delete": "Deleting the books", + "Menu:Home": "Home", + "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information visit", + "Welcome": "Welcome" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ru.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ru.json new file mode 100644 index 0000000..099b2c8 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/ru.json @@ -0,0 +1,42 @@ +{ + "culture": "ru", + "texts": { + "AppName": "Demo", + "Menu:Home": "Дома", + "Menu:ContactUs": "Связаться с нами", + "Menu:ArticleSample": "Образец статьи", + "Home": "Дома", + "Welcome": "Добро пожаловать", + "LongWelcomeMessage": "Добро пожаловать в приложение. Это стартап-проект, основанный на структуре ABP. Для получения дополнительной информации посетите сайт", + "Date": "датировать", + "Permission:Dashboard": "Панель приборов", + "Menu:Dashboard": "Панель приборов", + "Menu:HomePage": "Домашняя страница", + "Dashboard": "Панель приборов", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "ID клиента", + "ExternalProvider:Google:ClientSecret": "Секрет клиента", + "ExternalProvider:Microsoft": "Майкрософт", + "ExternalProvider:Microsoft:ClientId": "ID клиента", + "ExternalProvider:Microsoft:ClientSecret": "Секрет клиента", + "ExternalProvider:Twitter": "Твиттер", + "ExternalProvider:Twitter:ConsumerKey": "Потребительский ключ", + "ExternalProvider:Twitter:ConsumerSecret": "Потребительский секрет", + "NewsletterHeader": "Подпишитесь на рассылку!", + "NewsletterInfo": "Получайте информацию о последних событиях.", + "NewsletterPreference_Default": "Информационный бюллетень по умолчанию", + "NewsletterPrivacyAcceptMessage": "Я принимаю Политику конфиденциальности.", + "Language": "Язык", + "Search": "Поиск", + "LoadMore": "Загрузи больше", + "Settings": "Настройки", + "Theme": "Тема", + "DeviceTheme": "Тема устройства", + "Dark": "Темный", + "Light": "Свет", + "Unspecified": "Система", + "SeeAllUsers": "Просмотреть всех пользователей", + "TakePhoto": "Сделать фотографию", + "ChoosePhoto": "Выбрать фото" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/sk.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/sk.json new file mode 100644 index 0000000..269a0e9 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/sk.json @@ -0,0 +1,42 @@ +{ + "culture": "sk", + "texts": { + "AppName": "Demo", + "Menu:Home": "Domov", + "Menu:ContactUs": "Kontaktujte nás", + "Menu:ArticleSample": "Ukážka článku", + "Home": "Domov", + "Welcome": "Vitajte", + "LongWelcomeMessage": "Vitajte v aplikácii. Toto je štartovací projekt založený na ABP frameworku. Viac informácií nájdete na stránke", + "Date": "Dátum", + "Permission:Dashboard": "Dashboard", + "Menu:Dashboard": "Dashboard", + "Menu:HomePage": "Domovská stránka", + "Dashboard": "Dashboard", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "Client ID", + "ExternalProvider:Google:ClientSecret": "Client Secret", + "ExternalProvider:Microsoft": "Microsoft", + "ExternalProvider:Microsoft:ClientId": "Client ID", + "ExternalProvider:Microsoft:ClientSecret": "Client Secret", + "ExternalProvider:Twitter": "Twitter", + "ExternalProvider:Twitter:ConsumerKey": "Consumer Key", + "ExternalProvider:Twitter:ConsumerSecret": "Consumer Secret", + "NewsletterHeader": "Prihláste sa na odber noviniek!", + "NewsletterInfo": "Získajte informácie o najnovšiom dianí.", + "NewsletterPreference_Default": "Predvolený odber noviniek", + "NewsletterPrivacyAcceptMessage": "Súhlasím so Zásadami ochrany osobných údajov.", + "Language": "Jazyk", + "Search": "Vyhľadávanie", + "LoadMore": "Načítať viac", + "Settings": "nastavenie", + "Theme": "Téma", + "DeviceTheme": "Téma zariadenia", + "Dark": "Tmavý", + "Light": "Svetlo", + "Unspecified": "Systém", + "SeeAllUsers": "Pozrite si Všetci používatelia", + "TakePhoto": "Odfoť", + "ChoosePhoto": "Vyberte fotografiu" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/sv.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/sv.json new file mode 100644 index 0000000..c20847a --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/sv.json @@ -0,0 +1,42 @@ +{ + "Culture": "sv", + "Texts": { + "AppName": "Demo", + "Menu:ContactUs": "Kontakta oss", + "Menu:ArticleSample": "Artikelexempel", + "Home": "Hem", + "Date": "Datum", + "Permission:Dashboard": "Dashboard", + "Menu:Dashboard": "Dashboard", + "Menu:HomePage": "Hemsida", + "Dashboard": "Dashboard", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "Klient-ID", + "ExternalProvider:Google:ClientSecret": "Klienthemlighet", + "ExternalProvider:Microsoft": "Microsoft", + "ExternalProvider:Microsoft:ClientId": "Klient-ID", + "ExternalProvider:Microsoft:ClientSecret": "Klienthemlighet", + "ExternalProvider:Twitter": "Twitter (X)", + "ExternalProvider:Twitter:ConsumerKey": "Konsumentnyckel", + "ExternalProvider:Twitter:ConsumerSecret": "Konsumenthemlighet", + "NewsletterHeader": "Prenumerera på nyhetsbrevet!", + "NewsletterInfo": "Få information om de senaste händelserna.", + "NewsletterPreference_Default": "Standardnyhetsbrev", + "NewsletterPrivacyAcceptMessage": "Jag accepterar Sekretesspolicy.", + "Language": "Språk", + "Search": "Söka", + "LoadMore": "Ladda mer", + "Settings": "Inställningar", + "Theme": "Tema", + "DeviceTheme": "Enhetstema", + "Dark": "Mörk", + "Light": "Ljus", + "Unspecified": "System", + "SeeAllUsers": "Se Alla användare", + "TakePhoto": "Ta foto", + "ChoosePhoto": "Välj Foto", + "Menu:Home": "Hem", + "LongWelcomeMessage": "Välkommen till ansökan. ", + "Welcome": "Välkomna" + } + } \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/tr.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/tr.json new file mode 100644 index 0000000..72cb4b1 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/tr.json @@ -0,0 +1,42 @@ +{ + "culture": "tr", + "texts": { + "AppName": "Demo", + "Menu:Home": "Ana sayfa", + "Menu:ContactUs": "Bize Ulaşın", + "Menu:ArticleSample": "Yazı Örneği", + "Home": "Ana sayfa", + "Welcome": "Hoşgeldiniz", + "LongWelcomeMessage": "Uygulamaya hoşgeldiniz. Bu, ABP framework'ü üzerine bina edilmiş bir başlangıç projesidir. Daha fazla bilgi için ziyaret edebilirsiniz", + "Date": "Tarih", + "Permission:Dashboard": "Genel görünüm", + "Menu:Dashboard": "Genel görünüm", + "Menu:HomePage": "ana sayfa", + "Dashboard": "Genel görünüm", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "Client ID", + "ExternalProvider:Google:ClientSecret": "Client Secret", + "ExternalProvider:Microsoft": "Microsoft", + "ExternalProvider:Microsoft:ClientId": "Client ID", + "ExternalProvider:Microsoft:ClientSecret": "Client Secret", + "ExternalProvider:Twitter": "Twitter", + "ExternalProvider:Twitter:ConsumerKey": "Consumer Key", + "ExternalProvider:Twitter:ConsumerSecret": "Consumer Secret", + "NewsletterHeader": "Bültene abone olun!", + "NewsletterInfo": "Son gelişmeler hakkında bilgi alın.", + "NewsletterPreference_Default": "Varsayılan Bülten", + "NewsletterPrivacyAcceptMessage": "Gizlilik Politikası'nı kabul ediyorum.", + "Language": "Dil", + "Search": "Ara", + "LoadMore": "Daha fazla yükle", + "Settings": "Ayarlar", + "Theme": "Tema", + "DeviceTheme": "Cihaz Teması", + "Dark": "Koyu", + "Light": "Açık", + "Unspecified": "Sistem", + "SeeAllUsers": "Tüm Kullanıcıları Gör", + "TakePhoto": "Fotoğraf Çek", + "ChoosePhoto": "Fotoğraf Seç" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/zh-Hans.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/zh-Hans.json new file mode 100644 index 0000000..389dabb --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/zh-Hans.json @@ -0,0 +1,42 @@ +{ + "culture": "zh-Hans", + "texts": { + "AppName": "Demo", + "Menu:Home": "首页", + "Menu:ContactUs": "联系我们", + "Menu:ArticleSample": "文章示例", + "Home": "首页", + "Welcome": "欢迎", + "LongWelcomeMessage": "欢迎使用本应用程序。这是一个基于 ABP 框架的启动项目。欲了解更多信息,请访问", + "Date": "日期", + "Permission:Dashboard": "仪表板", + "Menu:Dashboard": "仪表板", + "Menu:HomePage": "主页", + "Dashboard": "仪表板", + "ExternalProvider:Google": "Google", + "ExternalProvider:Google:ClientId": "Client Id", + "ExternalProvider:Google:ClientSecret": "Client Secret", + "ExternalProvider:Microsoft": "Microsoft", + "ExternalProvider:Microsoft:ClientId": "Client Id", + "ExternalProvider:Microsoft:ClientSecret": "Client Secret", + "ExternalProvider:Twitter": "Twitter", + "ExternalProvider:Twitter:ConsumerKey": "Consumer Key", + "ExternalProvider:Twitter:ConsumerSecret": "Consumer Secret", + "NewsletterHeader": "订阅时事通讯!", + "NewsletterInfo": "了解最新动态。", + "NewsletterPreference_Default": "默认通讯", + "NewsletterPrivacyAcceptMessage": "我接受隐私政策。", + "Language": "语言", + "Search": "搜索", + "LoadMore": "加载更多", + "Settings": "设置", + "Theme": "主题", + "DeviceTheme": "设备主题", + "Dark": "Dark", + "Light": "Light", + "Unspecified": "System", + "SeeAllUsers": "查看所有用户", + "TakePhoto": "拍摄照片", + "ChoosePhoto": "选择照片" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/zh-Hant.json b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/zh-Hant.json new file mode 100644 index 0000000..23b3db9 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/Demo/zh-Hant.json @@ -0,0 +1,38 @@ +{ + "Culture": "zh-Hant", + "Texts": { + "AppName": "Demo", + "Menu:Demo": "Book Store", + "Menu:Books": "Books", + "Actions": "Actions", + "Close": "Close", + "Delete": "Delete", + "Edit": "Edit", + "PublishDate": "Publish date", + "NewBook": "New book", + "Name": "Name", + "Type": "Type", + "Price": "Price", + "CreationTime": "Creation time", + "AreYouSure": "Are you sure?", + "AreYouSureToDelete": "Are you sure you want to delete this item?", + "BookDeletionConfirmationMessage": "Are you sure to delete the book '{0}'?", + "Enum:BookType.0": "Undefined", + "Enum:BookType.1": "Adventure", + "Enum:BookType.2": "Biography", + "Enum:BookType.3": "Dystopia", + "Enum:BookType.4": "Fantastic", + "Enum:BookType.5": "Horror", + "Enum:BookType.6": "Science", + "Enum:BookType.7": "Science fiction", + "Enum:BookType.8": "Poetry", + "Permission:Demo": "Book Store", + "Permission:Books": "Book Management", + "Permission:Books.Create": "Creating new books", + "Permission:Books.Edit": "Editing the books", + "Permission:Books.Delete": "Deleting the books", + "Menu:Home": "Home", + "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information visit", + "Welcome": "Welcome" + } +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/Localization/DemoResource.cs b/src/Hua.Abp.Demo.Domain.Shared/Localization/DemoResource.cs new file mode 100644 index 0000000..2a9c561 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/Localization/DemoResource.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Localization; + +namespace Hua.Abp.Demo.Localization; + +[LocalizationResourceName("Demo")] +public class DemoResource +{ + +} diff --git a/src/Hua.Abp.Demo.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs b/src/Hua.Abp.Demo.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs new file mode 100644 index 0000000..14eee1f --- /dev/null +++ b/src/Hua.Abp.Demo.Domain.Shared/MultiTenancy/MultiTenancyConsts.cs @@ -0,0 +1,10 @@ +namespace Hua.Abp.Demo.MultiTenancy; + +public static class MultiTenancyConsts +{ + /* Enable/disable multi-tenancy easily in a single point. + * If you will never need to multi-tenancy, you can remove + * related modules and code parts, including this file. + */ + public const bool IsEnabled = true; +} diff --git a/src/Hua.Abp.Demo.Domain/BookStoreDataSeederContributor.cs b/src/Hua.Abp.Demo.Domain/BookStoreDataSeederContributor.cs new file mode 100644 index 0000000..12f073b --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/BookStoreDataSeederContributor.cs @@ -0,0 +1,47 @@ +using System; +using System.Threading.Tasks; +using Hua.Abp.Demo.Books; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; + +namespace Hua.Abp.Demo; + +public class DemoDataSeederContributor + : IDataSeedContributor, ITransientDependency +{ + private readonly IRepository _bookRepository; + + public DemoDataSeederContributor(IRepository bookRepository) + { + _bookRepository = bookRepository; + } + + public async Task SeedAsync(DataSeedContext context) + { + if (await _bookRepository.GetCountAsync() <= 0) + { + await _bookRepository.InsertAsync( + new Book + { + Name = "1984", + Type = BookType.Dystopia, + PublishDate = new DateTime(1949, 6, 8), + Price = 19.84f + }, + autoSave: true + ); + + await _bookRepository.InsertAsync( + new Book + { + Name = "The Hitchhiker's Guide to the Galaxy", + Type = BookType.ScienceFiction, + PublishDate = new DateTime(1995, 9, 27), + Price = 42.0f + }, + autoSave: true + ); + } + } +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Domain/Books/Book.cs b/src/Hua.Abp.Demo.Domain/Books/Book.cs new file mode 100644 index 0000000..2828653 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/Books/Book.cs @@ -0,0 +1,15 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; + +namespace Hua.Abp.Demo.Books; + +public class Book : AuditedAggregateRoot +{ + public string Name { get; set; } + + public BookType Type { get; set; } + + public DateTime PublishDate { get; set; } + + public float Price { get; set; } +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Domain/Data/DemoDbMigrationService.cs b/src/Hua.Abp.Demo.Domain/Data/DemoDbMigrationService.cs new file mode 100644 index 0000000..2f1f7a7 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/Data/DemoDbMigrationService.cs @@ -0,0 +1,226 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Identity; +using Volo.Abp.MultiTenancy; +using Hua.Abp.Demo.MultiTenancy; +using Volo.Abp.TenantManagement; + +namespace Hua.Abp.Demo.Data; + +public class DemoDbMigrationService : ITransientDependency +{ + public ILogger Logger { get; set; } + + private readonly IDataSeeder _dataSeeder; + private readonly IEnumerable _dbSchemaMigrators; + private readonly ITenantRepository _tenantRepository; + private readonly ICurrentTenant _currentTenant; + + public DemoDbMigrationService( + IDataSeeder dataSeeder, + ITenantRepository tenantRepository, + ICurrentTenant currentTenant, + IEnumerable dbSchemaMigrators) + { + _dataSeeder = dataSeeder; + _tenantRepository = tenantRepository; + _currentTenant = currentTenant; + _dbSchemaMigrators = dbSchemaMigrators; + + Logger = NullLogger.Instance; + } + + public async Task MigrateAsync() + { + var initialMigrationAdded = AddInitialMigrationIfNotExist(); + + if (initialMigrationAdded) + { + return; + } + + Logger.LogInformation("Started database migrations..."); + + await MigrateDatabaseSchemaAsync(); + await SeedDataAsync(); + + Logger.LogInformation($"Successfully completed host database migrations."); + + if (MultiTenancyConsts.IsEnabled) + { + + var tenants = await _tenantRepository.GetListAsync(includeDetails: true); + + var migratedDatabaseSchemas = new HashSet(); + foreach (var tenant in tenants) + { + using (_currentTenant.Change(tenant.Id)) + { + if (tenant.ConnectionStrings.Any()) + { + var tenantConnectionStrings = tenant.ConnectionStrings + .Select(x => x.Value) + .ToList(); + + if (!migratedDatabaseSchemas.IsSupersetOf(tenantConnectionStrings)) + { + await MigrateDatabaseSchemaAsync(tenant); + + migratedDatabaseSchemas.AddIfNotContains(tenantConnectionStrings); + } + } + + await SeedDataAsync(tenant); + } + + Logger.LogInformation($"Successfully completed {tenant.Name} tenant database migrations."); + } + + Logger.LogInformation("Successfully completed all database migrations."); + } + Logger.LogInformation("You can safely end this process..."); + } + + private async Task MigrateDatabaseSchemaAsync(Tenant? tenant = null) + { + Logger.LogInformation( + $"Migrating schema for {(tenant == null ? "host" : tenant.Name + " tenant")} database..."); + + foreach (var migrator in _dbSchemaMigrators) + { + await migrator.MigrateAsync(); + } + } + + private async Task SeedDataAsync(Tenant? tenant = null) + { + Logger.LogInformation($"Executing {(tenant == null ? "host" : tenant.Name + " tenant")} database seed..."); + + await _dataSeeder.SeedAsync(new DataSeedContext(tenant?.Id) + .WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, + DemoConsts.AdminEmailDefaultValue) + .WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, + DemoConsts.AdminPasswordDefaultValue) + ); + } + + private bool AddInitialMigrationIfNotExist() + { + try + { + if (!DbMigrationsProjectExists()) + { + return false; + } + } + catch (Exception) + { + return false; + } + + try + { + if (!MigrationsFolderExists()) + { + AddInitialMigration(); + return true; + } + else + { + return false; + } + } + catch (Exception e) + { + Logger.LogWarning("Couldn't determinate if any migrations exist : " + e.Message); + return false; + } + } + + private bool DbMigrationsProjectExists() + { + var dbMigrationsProjectFolder = GetEntityFrameworkCoreProjectFolderPath(); + + return dbMigrationsProjectFolder != null; + } + + private bool MigrationsFolderExists() + { + var dbMigrationsProjectFolder = GetEntityFrameworkCoreProjectFolderPath(); + + return dbMigrationsProjectFolder != null && Directory.Exists(Path.Combine(dbMigrationsProjectFolder, "Migrations")); + } + + private void AddInitialMigration() + { + Logger.LogInformation("Creating initial migration..."); + + string argumentPrefix; + string fileName; + + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + argumentPrefix = "-c"; + fileName = "/bin/bash"; + } + else + { + argumentPrefix = "/C"; + fileName = "cmd.exe"; + } + + var procStartInfo = new ProcessStartInfo(fileName, + $"{argumentPrefix} \"abp create-migration-and-run-migrator \"{GetEntityFrameworkCoreProjectFolderPath()}\"\"" + ); + + try + { + Process.Start(procStartInfo); + } + catch (Exception) + { + throw new Exception("Couldn't run ABP CLI..."); + } + } + + private string? GetEntityFrameworkCoreProjectFolderPath() + { + var slnDirectoryPath = GetSolutionDirectoryPath(); + + if (slnDirectoryPath == null) + { + throw new Exception("Solution folder not found!"); + } + + var srcDirectoryPath = Path.Combine(slnDirectoryPath, "src"); + + return Directory.GetDirectories(srcDirectoryPath) + .FirstOrDefault(d => d.EndsWith(".EntityFrameworkCore")); + } + + private string? GetSolutionDirectoryPath() + { + var currentDirectory = new DirectoryInfo(Directory.GetCurrentDirectory()); + + while (currentDirectory != null && Directory.GetParent(currentDirectory.FullName) != null) + { + currentDirectory = Directory.GetParent(currentDirectory.FullName); + + if (currentDirectory != null && Directory.GetFiles(currentDirectory.FullName).FirstOrDefault(f => f.EndsWith(".sln") || f.EndsWith(".slnx")) != null) + { + return currentDirectory.FullName; + } + } + + return null; + } +} diff --git a/src/Hua.Abp.Demo.Domain/Data/IDemoDbSchemaMigrator.cs b/src/Hua.Abp.Demo.Domain/Data/IDemoDbSchemaMigrator.cs new file mode 100644 index 0000000..d5f75f3 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/Data/IDemoDbSchemaMigrator.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; + +namespace Hua.Abp.Demo.Data; + +public interface IDemoDbSchemaMigrator +{ + Task MigrateAsync(); +} diff --git a/src/Hua.Abp.Demo.Domain/Data/NullDemoDbSchemaMigrator.cs b/src/Hua.Abp.Demo.Domain/Data/NullDemoDbSchemaMigrator.cs new file mode 100644 index 0000000..3c9d758 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/Data/NullDemoDbSchemaMigrator.cs @@ -0,0 +1,15 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace Hua.Abp.Demo.Data; + +/* This is used if database provider does't define + * IDemoDbSchemaMigrator implementation. + */ +public class NullDemoDbSchemaMigrator : IDemoDbSchemaMigrator, ITransientDependency +{ + public Task MigrateAsync() + { + return Task.CompletedTask; + } +} diff --git a/src/Hua.Abp.Demo.Domain/DemoConsts.cs b/src/Hua.Abp.Demo.Domain/DemoConsts.cs new file mode 100644 index 0000000..1794c2e --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/DemoConsts.cs @@ -0,0 +1,11 @@ +using Volo.Abp.Identity; + +namespace Hua.Abp.Demo; + +public static class DemoConsts +{ + public const string DbTablePrefix = "App"; + public const string? DbSchema = null; + public const string AdminEmailDefaultValue = IdentityDataSeedContributor.AdminEmailDefaultValue; + public const string AdminPasswordDefaultValue = IdentityDataSeedContributor.AdminPasswordDefaultValue; +} diff --git a/src/Hua.Abp.Demo.Domain/DemoDomainModule.cs b/src/Hua.Abp.Demo.Domain/DemoDomainModule.cs new file mode 100644 index 0000000..13b16c0 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/DemoDomainModule.cs @@ -0,0 +1,54 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Hua.Abp.Demo.Localization; +using Hua.Abp.Demo.MultiTenancy; +using System; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; +using Volo.Abp.PermissionManagement.Identity; +using Volo.Abp.SettingManagement; +using Volo.Abp.BlobStoring.Database; +using Volo.Abp.Caching; +using Volo.Abp.OpenIddict; +using Volo.Abp.PermissionManagement.OpenIddict; +using Volo.Abp.AuditLogging; +using Volo.Abp.BackgroundJobs; +using Volo.Abp.Emailing; +using Volo.Abp.FeatureManagement; +using Volo.Abp.Identity; +using Volo.Abp.TenantManagement; + +namespace Hua.Abp.Demo; + +[DependsOn( + typeof(DemoDomainSharedModule), + typeof(AbpAuditLoggingDomainModule), + typeof(AbpCachingModule), + typeof(AbpBackgroundJobsDomainModule), + typeof(AbpFeatureManagementDomainModule), + typeof(AbpPermissionManagementDomainIdentityModule), + typeof(AbpPermissionManagementDomainOpenIddictModule), + typeof(AbpSettingManagementDomainModule), + typeof(AbpEmailingModule), + typeof(AbpIdentityDomainModule), + typeof(AbpOpenIddictDomainModule), + typeof(AbpTenantManagementDomainModule), + typeof(BlobStoringDatabaseDomainModule) + )] +public class DemoDomainModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.IsEnabled = MultiTenancyConsts.IsEnabled; + }); + + + +#if DEBUG + context.Services.Replace(ServiceDescriptor.Singleton()); +#endif + } +} diff --git a/src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.abppkg b/src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.abppkg new file mode 100644 index 0000000..1d574ef --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.domain" +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.abppkg.analyze.json b/src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.abppkg.analyze.json new file mode 100644 index 0000000..09dce4a --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.abppkg.analyze.json @@ -0,0 +1,256 @@ +{ + "name": "Hua.Abp.Demo.Domain", + "hash": "", + "contents": [ + { + "namespace": "Hua.Abp.Demo", + "dependsOnModules": [ + { + "declaringAssemblyName": "Hua.Abp.Demo.Domain.Shared", + "namespace": "Hua.Abp.Demo", + "name": "DemoDomainSharedModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AuditLogging.Domain", + "namespace": "Volo.Abp.AuditLogging", + "name": "AbpAuditLoggingDomainModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Caching", + "namespace": "Volo.Abp.Caching", + "name": "AbpCachingModule" + }, + { + "declaringAssemblyName": "Volo.Abp.BackgroundJobs.Domain", + "namespace": "Volo.Abp.BackgroundJobs", + "name": "AbpBackgroundJobsDomainModule" + }, + { + "declaringAssemblyName": "Volo.Abp.FeatureManagement.Domain", + "namespace": "Volo.Abp.FeatureManagement", + "name": "AbpFeatureManagementDomainModule" + }, + { + "declaringAssemblyName": "Volo.Abp.PermissionManagement.Domain.Identity", + "namespace": "Volo.Abp.PermissionManagement.Identity", + "name": "AbpPermissionManagementDomainIdentityModule" + }, + { + "declaringAssemblyName": "Volo.Abp.PermissionManagement.Domain.OpenIddict", + "namespace": "Volo.Abp.PermissionManagement.OpenIddict", + "name": "AbpPermissionManagementDomainOpenIddictModule" + }, + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.Domain", + "namespace": "Volo.Abp.SettingManagement", + "name": "AbpSettingManagementDomainModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Emailing", + "namespace": "Volo.Abp.Emailing", + "name": "AbpEmailingModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Identity.Pro.Domain", + "namespace": "Volo.Abp.Identity", + "name": "AbpIdentityProDomainModule" + }, + { + "declaringAssemblyName": "Volo.Abp.OpenIddict.Pro.Domain", + "namespace": "Volo.Abp.OpenIddict", + "name": "AbpOpenIddictProDomainModule" + }, + { + "declaringAssemblyName": "Volo.Abp.TextTemplateManagement.Domain", + "namespace": "Volo.Abp.TextTemplateManagement", + "name": "TextTemplateManagementDomainModule" + }, + { + "declaringAssemblyName": "Volo.Abp.LanguageManagement.Domain", + "namespace": "Volo.Abp.LanguageManagement", + "name": "LanguageManagementDomainModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Commercial.SuiteTemplates", + "namespace": "Volo.Abp.Commercial.SuiteTemplates", + "name": "VoloAbpCommercialSuiteTemplatesModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Gdpr.Domain", + "namespace": "Volo.Abp.Gdpr", + "name": "AbpGdprDomainModule" + }, + { + "declaringAssemblyName": "Volo.Abp.BlobStoring.Database.Domain", + "namespace": "Volo.Abp.BlobStoring.Database", + "name": "BlobStoringDatabaseDomainModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "DemoDomainModule", + "summary": null + }, + { + "baseClass": { + "name": "AuditedAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities.Auditing", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.Auditing.AuditedAggregateRoot" + }, + "implementingInterfaces": [ + { + "name": "IEntity", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" + }, + { + "name": "IEntity", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" + }, + { + "name": "IAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" + }, + { + "name": "IAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" + }, + { + "name": "IGeneratesDomainEvents", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IGeneratesDomainEvents" + }, + { + "name": "IHasExtraProperties", + "namespace": "Volo.Abp.Data", + "declaringAssemblyName": "Volo.Abp.ObjectExtending", + "fullName": "Volo.Abp.Data.IHasExtraProperties" + }, + { + "name": "IHasConcurrencyStamp", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Data", + "fullName": "Volo.Abp.Domain.Entities.IHasConcurrencyStamp" + }, + { + "name": "ICreationAuditedObject", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.ICreationAuditedObject" + }, + { + "name": "IHasCreationTime", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IHasCreationTime" + }, + { + "name": "IMayHaveCreator", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IMayHaveCreator" + }, + { + "name": "IAuditedObject", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IAuditedObject" + }, + { + "name": "IModificationAuditedObject", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IModificationAuditedObject" + }, + { + "name": "IHasModificationTime", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IHasModificationTime" + } + ], + "methods": [], + "collectionProperties": {}, + "navigationProperties": {}, + "namespace": "Hua.Abp.Demo.Books", + "primaryKeyType": "Guid", + "properties": [ + { + "type": "System.String", + "name": "Name", + "summary": null + }, + { + "type": "Hua.Abp.Demo.Books.BookType", + "name": "Type", + "summary": null + }, + { + "type": "System.DateTime", + "name": "PublishDate", + "summary": null + }, + { + "type": "System.Single", + "name": "Price", + "summary": null + } + ], + "contentType": "aggregateRoot", + "name": "Book", + "summary": null + } + ] +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.csproj b/src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.csproj new file mode 100644 index 0000000..d238258 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/Hua.Abp.Demo.Domain.csproj @@ -0,0 +1,33 @@ + + + + + + net10.0 + enable + Hua.Abp.Demo + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Hua.Abp.Demo.Domain/Identity/ChangeIdentityPasswordPolicySettingDefinitionProvider.cs b/src/Hua.Abp.Demo.Domain/Identity/ChangeIdentityPasswordPolicySettingDefinitionProvider.cs new file mode 100644 index 0000000..c725265 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/Identity/ChangeIdentityPasswordPolicySettingDefinitionProvider.cs @@ -0,0 +1,34 @@ +using Volo.Abp.Identity.Settings; +using Volo.Abp.Settings; + +namespace Hua.Abp.Demo.Identity; + +public class ChangeIdentityPasswordPolicySettingDefinitionProvider : SettingDefinitionProvider +{ + public override void Define(ISettingDefinitionContext context) + { + var requireNonAlphanumeric = context.GetOrNull(IdentitySettingNames.Password.RequireNonAlphanumeric); + if (requireNonAlphanumeric != null) + { + requireNonAlphanumeric.DefaultValue = false.ToString(); + } + + var requireLowercase = context.GetOrNull(IdentitySettingNames.Password.RequireLowercase); + if (requireLowercase != null) + { + requireLowercase.DefaultValue = false.ToString(); + } + + var requireUppercase = context.GetOrNull(IdentitySettingNames.Password.RequireUppercase); + if (requireUppercase != null) + { + requireUppercase.DefaultValue = false.ToString(); + } + + var requireDigit = context.GetOrNull(IdentitySettingNames.Password.RequireDigit); + if (requireDigit != null) + { + requireDigit.DefaultValue = false.ToString(); + } + } +} diff --git a/src/Hua.Abp.Demo.Domain/OpenIddict/OpenIddictDataSeedContributor.cs b/src/Hua.Abp.Demo.Domain/OpenIddict/OpenIddictDataSeedContributor.cs new file mode 100644 index 0000000..7c2841e --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/OpenIddict/OpenIddictDataSeedContributor.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using OpenIddict.Abstractions; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.OpenIddict; +using Volo.Abp.OpenIddict.Applications; +using Volo.Abp.OpenIddict.Scopes; +using Volo.Abp.Uow; + +namespace Hua.Abp.Demo.OpenIddict; + +/* Creates initial data that is needed to property run the application + * and make client-to-server communication possible. + */ +public class OpenIddictDataSeedContributor : OpenIddictDataSeedContributorBase, IDataSeedContributor, ITransientDependency +{ + public OpenIddictDataSeedContributor( + IConfiguration configuration, + IOpenIddictApplicationRepository openIddictApplicationRepository, + IAbpApplicationManager applicationManager, + IOpenIddictScopeRepository openIddictScopeRepository, + IOpenIddictScopeManager scopeManager) + : base(configuration, openIddictApplicationRepository, applicationManager, openIddictScopeRepository, scopeManager) + { + } + + [UnitOfWork] + public virtual async Task SeedAsync(DataSeedContext context) + { + await CreateScopesAsync(); + await CreateApplicationsAsync(); + } + + private async Task CreateScopesAsync() + { + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "Demo", + DisplayName = "Demo API", + Resources = { "Demo" } + }); + } + + private async Task CreateApplicationsAsync() + { + var commonScopes = new List { + OpenIddictConstants.Permissions.Scopes.Address, + OpenIddictConstants.Permissions.Scopes.Email, + OpenIddictConstants.Permissions.Scopes.Phone, + OpenIddictConstants.Permissions.Scopes.Profile, + OpenIddictConstants.Permissions.Scopes.Roles, + "Demo" + }; + + var configurationSection = Configuration.GetSection("OpenIddict:Applications"); + + + //Console Test / Angular Client + var consoleAndAngularClientId = configurationSection["Demo_App:ClientId"]; + if (!consoleAndAngularClientId.IsNullOrWhiteSpace()) + { + var consoleAndAngularClientRootUrl = configurationSection["Demo_App:RootUrl"]?.TrimEnd('/'); + await CreateOrUpdateApplicationAsync( + applicationType: OpenIddictConstants.ApplicationTypes.Web, + name: consoleAndAngularClientId!, + type: OpenIddictConstants.ClientTypes.Public, + consentType: OpenIddictConstants.ConsentTypes.Implicit, + displayName: "Console Test / Angular Application", + secret: null, + grantTypes: new List { + OpenIddictConstants.GrantTypes.AuthorizationCode, + OpenIddictConstants.GrantTypes.Password, + OpenIddictConstants.GrantTypes.ClientCredentials, + OpenIddictConstants.GrantTypes.RefreshToken, + "LinkLogin", + "Impersonation" + }, + scopes: commonScopes, + redirectUris: new List { consoleAndAngularClientRootUrl }, + postLogoutRedirectUris: new List { consoleAndAngularClientRootUrl }, + clientUri: consoleAndAngularClientRootUrl, + logoUri: "/images/clients/angular.svg" + ); + } + + + + + + + + // Swagger Client + var swaggerClientId = configurationSection["Demo_Swagger:ClientId"]; + if (!swaggerClientId.IsNullOrWhiteSpace()) + { + var swaggerRootUrl = configurationSection["Demo_Swagger:RootUrl"]?.TrimEnd('/'); + + await CreateOrUpdateApplicationAsync( + applicationType: OpenIddictConstants.ApplicationTypes.Web, + name: swaggerClientId!, + type: OpenIddictConstants.ClientTypes.Public, + consentType: OpenIddictConstants.ConsentTypes.Implicit, + displayName: "Swagger Application", + secret: null, + grantTypes: new List { OpenIddictConstants.GrantTypes.AuthorizationCode, }, + scopes: commonScopes, + redirectUris: new List { $"{swaggerRootUrl}/swagger/oauth2-redirect.html" }, + clientUri: swaggerRootUrl.EnsureEndsWith('/') + "swagger", + logoUri: "/images/clients/swagger.svg" + ); + } + + + } +} diff --git a/src/Hua.Abp.Demo.Domain/Properties/AssemblyInfo.cs b/src/Hua.Abp.Demo.Domain/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..330c9bf --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/Properties/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; +[assembly:InternalsVisibleToAttribute("Hua.Abp.Demo.Domain.Tests")] +[assembly:InternalsVisibleToAttribute("Hua.Abp.Demo.TestBase")] diff --git a/src/Hua.Abp.Demo.Domain/Settings/DemoSettingDefinitionProvider.cs b/src/Hua.Abp.Demo.Domain/Settings/DemoSettingDefinitionProvider.cs new file mode 100644 index 0000000..c92bafb --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/Settings/DemoSettingDefinitionProvider.cs @@ -0,0 +1,12 @@ +using Volo.Abp.Settings; + +namespace Hua.Abp.Demo.Settings; + +public class DemoSettingDefinitionProvider : SettingDefinitionProvider +{ + public override void Define(ISettingDefinitionContext context) + { + //Define your own settings here. Example: + //context.Add(new SettingDefinition(DemoSettings.MySetting1)); + } +} diff --git a/src/Hua.Abp.Demo.Domain/Settings/DemoSettings.cs b/src/Hua.Abp.Demo.Domain/Settings/DemoSettings.cs new file mode 100644 index 0000000..20c7112 --- /dev/null +++ b/src/Hua.Abp.Demo.Domain/Settings/DemoSettings.cs @@ -0,0 +1,9 @@ +namespace Hua.Abp.Demo.Settings; + +public static class DemoSettings +{ + private const string Prefix = "Demo"; + + //Add your own setting names here. Example: + //public const string MySetting1 = Prefix + ".MySetting1"; +} diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoDbContext.cs b/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoDbContext.cs new file mode 100644 index 0000000..fcc0feb --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoDbContext.cs @@ -0,0 +1,101 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.AuditLogging.EntityFrameworkCore; +using Hua.Abp.Demo.Books; +using Volo.Abp.BackgroundJobs.EntityFrameworkCore; +using Volo.Abp.BlobStoring.Database.EntityFrameworkCore; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.Modeling; +using Volo.Abp.FeatureManagement.EntityFrameworkCore; +using Volo.Abp.Identity; +using Volo.Abp.Identity.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.OpenIddict.EntityFrameworkCore; +using Volo.Abp.TenantManagement; +using Volo.Abp.TenantManagement.EntityFrameworkCore; + +namespace Hua.Abp.Demo.EntityFrameworkCore; + +[ReplaceDbContext(typeof(IIdentityDbContext))] +[ReplaceDbContext(typeof(ITenantManagementDbContext))] +[ConnectionStringName("Default")] +public class DemoDbContext : + AbpDbContext, + ITenantManagementDbContext, + IIdentityDbContext +{ + /* Add DbSet properties for your Aggregate Roots / Entities here. */ + + public DbSet Books { get; set; } + + #region Entities from the modules + + /* Notice: We only implemented IIdentityProDbContext and ISaasDbContext + * and replaced them for this DbContext. This allows you to perform JOIN + * queries for the entities of these modules over the repositories easily. You + * typically don't need that for other modules. But, if you need, you can + * implement the DbContext interface of the needed module and use ReplaceDbContext + * attribute just like IIdentityProDbContext and ISaasDbContext. + * + * More info: Replacing a DbContext of a module ensures that the related module + * uses this DbContext on runtime. Otherwise, it will use its own DbContext class. + */ + + // Identity + public DbSet Users { get; set; } + public DbSet Roles { get; set; } + public DbSet ClaimTypes { get; set; } + public DbSet OrganizationUnits { get; set; } + public DbSet SecurityLogs { get; set; } + public DbSet LinkUsers { get; set; } + public DbSet UserDelegations { get; set; } + public DbSet Sessions { get; set; } + + // Tenant Management + public DbSet Tenants { get; set; } + public DbSet TenantConnectionStrings { get; set; } + + #endregion + + public DemoDbContext(DbContextOptions options) + : base(options) + { + + } + + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); + + /* Include modules to your migration db context */ + + builder.ConfigurePermissionManagement(); + builder.ConfigureSettingManagement(); + builder.ConfigureBackgroundJobs(); + builder.ConfigureAuditLogging(); + builder.ConfigureFeatureManagement(); + builder.ConfigureIdentity(); + builder.ConfigureOpenIddict(); + builder.ConfigureTenantManagement(); + builder.ConfigureBlobStoring(); + + builder.Entity(b => + { + b.ToTable(DemoConsts.DbTablePrefix + "Books", + DemoConsts.DbSchema); + b.ConfigureByConvention(); //auto configure for the base class props + b.Property(x => x.Name).IsRequired().HasMaxLength(128); + }); + + /* Configure your own tables/entities inside here */ + + //builder.Entity(b => + //{ + // b.ToTable(DemoConsts.DbTablePrefix + "YourEntities", DemoConsts.DbSchema); + // b.ConfigureByConvention(); //auto configure for the base class props + // //... + //}); + } +} diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoDbContextFactory.cs b/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoDbContextFactory.cs new file mode 100644 index 0000000..07f3ed8 --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoDbContextFactory.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using Microsoft.Extensions.Configuration; + +namespace Hua.Abp.Demo.EntityFrameworkCore; + +/* This class is needed for EF Core console commands + * (like Add-Migration and Update-Database commands) */ +public class DemoDbContextFactory : IDesignTimeDbContextFactory +{ + public DemoDbContext CreateDbContext(string[] args) + { + // https://www.npgsql.org/efcore/release-notes/6.0.html#opting-out-of-the-new-timestamp-mapping-logic + AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); + + var configuration = BuildConfiguration(); + + DemoEfCoreEntityExtensionMappings.Configure(); + + var builder = new DbContextOptionsBuilder() + .UseNpgsql(configuration.GetConnectionString("Default")); + + return new DemoDbContext(builder.Options); + } + + private static IConfigurationRoot BuildConfiguration() + { + var builder = new ConfigurationBuilder() + .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../Hua.Abp.Demo.DbMigrator/")) + .AddJsonFile("appsettings.json", optional: false) + .AddEnvironmentVariables(); + + return builder.Build(); + } +} diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoEfCoreEntityExtensionMappings.cs b/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoEfCoreEntityExtensionMappings.cs new file mode 100644 index 0000000..e1cbf44 --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoEfCoreEntityExtensionMappings.cs @@ -0,0 +1,44 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Identity; +using Volo.Abp.ObjectExtending; +using Volo.Abp.Threading; + +namespace Hua.Abp.Demo.EntityFrameworkCore; + +public static class DemoEfCoreEntityExtensionMappings +{ + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public static void Configure() + { + DemoGlobalFeatureConfigurator.Configure(); + DemoModuleExtensionConfigurator.Configure(); + + OneTimeRunner.Run(() => + { + /* You can configure extra properties for the + * entities defined in the modules used by your application. + * + * This class can be used to map these extra properties to table fields in the database. + * + * USE THIS CLASS ONLY TO CONFIGURE EF CORE RELATED MAPPING. + * USE DemoModuleExtensionConfigurator CLASS (in the Domain.Shared project) + * FOR A HIGH LEVEL API TO DEFINE EXTRA PROPERTIES TO ENTITIES OF THE USED MODULES + * + * Example: Map a property to a table field: + + ObjectExtensionManager.Instance + .MapEfCoreProperty( + "MyProperty", + (entityBuilder, propertyBuilder) => + { + propertyBuilder.HasMaxLength(128); + } + ); + + * See the documentation for more: + * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities + */ + }); + } +} diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoEntityFrameworkCoreModule.cs b/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoEntityFrameworkCoreModule.cs new file mode 100644 index 0000000..8af8fb5 --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/DemoEntityFrameworkCoreModule.cs @@ -0,0 +1,67 @@ +using System; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Uow; +using Volo.Abp.AuditLogging.EntityFrameworkCore; +using Volo.Abp.BackgroundJobs.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.PostgreSql; +using Volo.Abp.FeatureManagement.EntityFrameworkCore; +using Volo.Abp.Identity.EntityFrameworkCore; +using Volo.Abp.OpenIddict.EntityFrameworkCore; +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.BlobStoring.Database.EntityFrameworkCore; +using Volo.Abp.TenantManagement.EntityFrameworkCore; +using Volo.Abp.Studio; + +namespace Hua.Abp.Demo.EntityFrameworkCore; + +[DependsOn( + typeof(DemoDomainModule), + typeof(AbpPermissionManagementEntityFrameworkCoreModule), + typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpEntityFrameworkCorePostgreSqlModule), + typeof(AbpBackgroundJobsEntityFrameworkCoreModule), + typeof(AbpAuditLoggingEntityFrameworkCoreModule), + typeof(AbpFeatureManagementEntityFrameworkCoreModule), + typeof(AbpIdentityEntityFrameworkCoreModule), + typeof(AbpOpenIddictEntityFrameworkCoreModule), + typeof(AbpTenantManagementEntityFrameworkCoreModule), + typeof(BlobStoringDatabaseEntityFrameworkCoreModule) + )] +public class DemoEntityFrameworkCoreModule : AbpModule +{ + public override void PreConfigureServices(ServiceConfigurationContext context) + { + // https://www.npgsql.org/efcore/release-notes/6.0.html#opting-out-of-the-new-timestamp-mapping-logic + AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); + + DemoEfCoreEntityExtensionMappings.Configure(); + } + + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAbpDbContext(options => + { + /* Remove "includeAllEntities: true" to create + * default repositories only for aggregate roots */ + options.AddDefaultRepositories(includeAllEntities: true); + }); + + if (AbpStudioAnalyzeHelper.IsInAnalyzeMode) + { + return; + } + + Configure(options => + { + /* The main point to change your DBMS. + * See also DemoDbContextFactory for EF Core tooling. */ + + options.UseNpgsql(); + + }); + + } +} diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreDemoDbSchemaMigrator.cs b/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreDemoDbSchemaMigrator.cs new file mode 100644 index 0000000..d0f6313 --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/EntityFrameworkCore/EntityFrameworkCoreDemoDbSchemaMigrator.cs @@ -0,0 +1,33 @@ +using System; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Hua.Abp.Demo.Data; +using Volo.Abp.DependencyInjection; + +namespace Hua.Abp.Demo.EntityFrameworkCore; + +public class EntityFrameworkCoreDemoDbSchemaMigrator + : IDemoDbSchemaMigrator, ITransientDependency +{ + private readonly IServiceProvider _serviceProvider; + + public EntityFrameworkCoreDemoDbSchemaMigrator(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + public async Task MigrateAsync() + { + /* We intentionally resolving the DemoDbContext + * from IServiceProvider (instead of directly injecting it) + * to properly get the connection string of the current tenant in the + * current scope. + */ + + await _serviceProvider + .GetRequiredService() + .Database + .MigrateAsync(); + } +} diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.abppkg b/src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.abppkg new file mode 100644 index 0000000..e1c64f0 --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.ef" +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.abppkg.analyze.json b/src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.abppkg.analyze.json new file mode 100644 index 0000000..840dcdc --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.abppkg.analyze.json @@ -0,0 +1,233 @@ +{ + "name": "Hua.Abp.Demo.EntityFrameworkCore", + "hash": "", + "contents": [ + { + "namespace": "Hua.Abp.Demo.EntityFrameworkCore", + "dependsOnModules": [ + { + "declaringAssemblyName": "Hua.Abp.Demo.Domain", + "namespace": "Hua.Abp.Demo", + "name": "DemoDomainModule" + }, + { + "declaringAssemblyName": "Volo.Abp.PermissionManagement.EntityFrameworkCore", + "namespace": "Volo.Abp.PermissionManagement.EntityFrameworkCore", + "name": "AbpPermissionManagementEntityFrameworkCoreModule" + }, + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.EntityFrameworkCore", + "namespace": "Volo.Abp.SettingManagement.EntityFrameworkCore", + "name": "AbpSettingManagementEntityFrameworkCoreModule" + }, + { + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore.SqlServer", + "namespace": "Volo.Abp.EntityFrameworkCore.SqlServer", + "name": "AbpEntityFrameworkCoreSqlServerModule" + }, + { + "declaringAssemblyName": "Volo.Abp.BackgroundJobs.EntityFrameworkCore", + "namespace": "Volo.Abp.BackgroundJobs.EntityFrameworkCore", + "name": "AbpBackgroundJobsEntityFrameworkCoreModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AuditLogging.EntityFrameworkCore", + "namespace": "Volo.Abp.AuditLogging.EntityFrameworkCore", + "name": "AbpAuditLoggingEntityFrameworkCoreModule" + }, + { + "declaringAssemblyName": "Volo.Abp.FeatureManagement.EntityFrameworkCore", + "namespace": "Volo.Abp.FeatureManagement.EntityFrameworkCore", + "name": "AbpFeatureManagementEntityFrameworkCoreModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Identity.Pro.EntityFrameworkCore", + "namespace": "Volo.Abp.Identity.EntityFrameworkCore", + "name": "AbpIdentityProEntityFrameworkCoreModule" + }, + { + "declaringAssemblyName": "Volo.Abp.OpenIddict.Pro.EntityFrameworkCore", + "namespace": "Volo.Abp.OpenIddict.EntityFrameworkCore", + "name": "AbpOpenIddictProEntityFrameworkCoreModule" + }, + { + "declaringAssemblyName": "Volo.Abp.LanguageManagement.EntityFrameworkCore", + "namespace": "Volo.Abp.LanguageManagement.EntityFrameworkCore", + "name": "LanguageManagementEntityFrameworkCoreModule" + }, + { + "declaringAssemblyName": "Volo.Abp.TextTemplateManagement.EntityFrameworkCore", + "namespace": "Volo.Abp.TextTemplateManagement.EntityFrameworkCore", + "name": "TextTemplateManagementEntityFrameworkCoreModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Gdpr.EntityFrameworkCore", + "namespace": "Volo.Abp.Gdpr", + "name": "AbpGdprEntityFrameworkCoreModule" + }, + { + "declaringAssemblyName": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore", + "namespace": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore", + "name": "BlobStoringDatabaseEntityFrameworkCoreModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "DemoEntityFrameworkCoreModule", + "summary": null + }, + { + "namespace": "Hua.Abp.Demo.EntityFrameworkCore", + "connectionStringName": "Default", + "databaseTables": [ + { + "entityFullName": "Books", + "contentType": "databaseTable", + "name": "Hua.Abp.Demo.Books.Book", + "summary": null + } + ], + "replacedDbContexts": [ + { + "name": "ITenantManagementDbContext", + "namespace": "Volo.Abp.TenantManagement.EntityFrameworkCore", + "declaringAssemblyName": "Volo.Abp.TenantManagement.EntityFrameworkCore", + "fullName": "Volo.Abp.TenantManagement.EntityFrameworkCore.ITenantManagementDbContext" + }, + { + "name": "IIdentityDbContext", + "namespace": "Volo.Abp.Identity.EntityFrameworkCore", + "declaringAssemblyName": "Volo.Abp.Identity.EntityFrameworkCore", + "fullName": "Volo.Abp.Identity.EntityFrameworkCore.IIdentityDbContext" + } + ], + "modelBuilderExtensionMethods": [], + "implementingInterfaces": [ + { + "name": "IInfrastructure", + "namespace": "Microsoft.EntityFrameworkCore.Infrastructure", + "declaringAssemblyName": "Microsoft.EntityFrameworkCore", + "fullName": "Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure" + }, + { + "name": "IDbContextDependencies", + "namespace": "Microsoft.EntityFrameworkCore.Internal", + "declaringAssemblyName": "Microsoft.EntityFrameworkCore", + "fullName": "Microsoft.EntityFrameworkCore.Internal.IDbContextDependencies" + }, + { + "name": "IDbSetCache", + "namespace": "Microsoft.EntityFrameworkCore.Internal", + "declaringAssemblyName": "Microsoft.EntityFrameworkCore", + "fullName": "Microsoft.EntityFrameworkCore.Internal.IDbSetCache" + }, + { + "name": "IDbContextPoolable", + "namespace": "Microsoft.EntityFrameworkCore.Internal", + "declaringAssemblyName": "Microsoft.EntityFrameworkCore", + "fullName": "Microsoft.EntityFrameworkCore.Internal.IDbContextPoolable" + }, + { + "name": "IResettableService", + "namespace": "Microsoft.EntityFrameworkCore.Infrastructure", + "declaringAssemblyName": "Microsoft.EntityFrameworkCore", + "fullName": "Microsoft.EntityFrameworkCore.Infrastructure.IResettableService" + }, + { + "name": "IDisposable", + "namespace": "System", + "declaringAssemblyName": "System.Private.CoreLib", + "fullName": "System.IDisposable" + }, + { + "name": "IAsyncDisposable", + "namespace": "System", + "declaringAssemblyName": "System.Private.CoreLib", + "fullName": "System.IAsyncDisposable" + }, + { + "name": "IAbpEfCoreDbContext", + "namespace": "Volo.Abp.EntityFrameworkCore", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.IAbpEfCoreDbContext" + }, + { + "name": "IEfCoreDbContext", + "namespace": "Volo.Abp.EntityFrameworkCore", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" + }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, + { + "name": "ITransientDependency", + "namespace": "Volo.Abp.DependencyInjection", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.DependencyInjection.ITransientDependency" + }, + { + "name": "IIdentityProDbContext", + "namespace": "Volo.Abp.Identity.EntityFrameworkCore", + "declaringAssemblyName": "Volo.Abp.Identity.Pro.EntityFrameworkCore", + "fullName": "Volo.Abp.Identity.EntityFrameworkCore.IIdentityProDbContext" + }, + { + "name": "IIdentityDbContext", + "namespace": "Volo.Abp.Identity.EntityFrameworkCore", + "declaringAssemblyName": "Volo.Abp.Identity.EntityFrameworkCore", + "fullName": "Volo.Abp.Identity.EntityFrameworkCore.IIdentityDbContext" + } + ], + "contentType": "efCoreDbContext", + "name": "DemoDbContext", + "summary": null + } + ] +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.csproj b/src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.csproj new file mode 100644 index 0000000..06c324b --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/Hua.Abp.Demo.EntityFrameworkCore.csproj @@ -0,0 +1,38 @@ + + + + + + net10.0 + enable + Hua.Abp.Demo + + + + + + + + + + + + + + + + + + + + + + + + + runtime; build; native; contentfiles; analyzers + compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native + + + + diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/20251228134317_Initial.Designer.cs b/src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/20251228134317_Initial.Designer.cs new file mode 100644 index 0000000..ce67605 --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/20251228134317_Initial.Designer.cs @@ -0,0 +1,2131 @@ +// +using System; +using Hua.Abp.Demo.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace Hua.Abp.Demo.Migrations +{ + [DbContext(typeof(DemoDbContext))] + [Migration("20251228134317_Initial")] + partial class Initial + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) + .HasAnnotation("ProductVersion", "10.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Hua.Abp.Demo.Books.Book", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Price") + .HasColumnType("real"); + + b.Property("PublishDate") + .HasColumnType("timestamp without time zone"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("AppBooks", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasColumnType("text"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("integer") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uuid") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ImpersonatorTenantName"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uuid") + .HasColumnName("ImpersonatorUserId"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("ImpersonatorUserName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("TenantName"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("smallint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uuid"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("EntityChangeId") + .HasColumnType("uuid"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsAbandoned") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("JobArgs") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)"); + + b.Property("JobName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("LastTryTime") + .HasColumnType("timestamp without time zone"); + + b.Property("NextTryTime") + .HasColumnType("timestamp without time zone"); + + b.Property("Priority") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((byte)15); + + b.Property("TryCount") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0); + + b.HasKey("Id"); + + b.HasIndex("IsAbandoned", "NextTryTime"); + + b.ToTable("AbpBackgroundJobs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("uuid"); + + b.Property("Content") + .HasMaxLength(2147483647) + .HasColumnType("bytea"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("TenantId", "ContainerId", "Name"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AllowedProviders") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DefaultValue") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsAvailableToHost") + .HasColumnType("boolean"); + + b.Property("IsVisibleToClients") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ValueType") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatures", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatureGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpFeatureValues", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Required") + .HasColumnType("boolean"); + + b.Property("ValueType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("SourceTenantId") + .HasColumnType("uuid"); + + b.Property("SourceUserId") + .HasColumnType("uuid"); + + b.Property("TargetTenantId") + .HasColumnType("uuid"); + + b.Property("TargetUserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique(); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("boolean") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("boolean") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("boolean") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySession", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Device") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("DeviceInfo") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IpAddresses") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("LastAccessed") + .HasColumnType("timestamp without time zone"); + + b.Property("SessionId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("SignedIn") + .HasColumnType("timestamp without time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("Device"); + + b.HasIndex("SessionId"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSessions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("boolean") + .HasColumnName("IsActive"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LastPasswordChangeTime") + .HasColumnType("timestamp with time zone"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("SecurityStamp"); + + b.Property("ShouldChangePasswordOnNextLogin") + .HasColumnType("boolean"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("EndTime") + .HasColumnType("timestamp without time zone"); + + b.Property("SourceUserId") + .HasColumnType("uuid"); + + b.Property("StartTime") + .HasColumnType("timestamp without time zone"); + + b.Property("TargetUserId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpUserDelegations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("character varying(196)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("character varying(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("ClientSecret") + .HasColumnType("text"); + + b.Property("ClientType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientUri") + .HasColumnType("text"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("DisplayNames") + .HasColumnType("text"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("text"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("JsonWebKeySet") + .HasColumnType("text"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LogoUri") + .HasColumnType("text"); + + b.Property("Permissions") + .HasColumnType("text"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("text"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("RedirectUris") + .HasColumnType("text"); + + b.Property("Requirements") + .HasColumnType("text"); + + b.Property("Settings") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("OpenIddictApplications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("Scopes") + .HasColumnType("text"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictAuthorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Descriptions") + .HasColumnType("text"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("DisplayNames") + .HasColumnType("text"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("Resources") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("OpenIddictScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationId") + .HasColumnType("uuid"); + + b.Property("AuthorizationId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Payload") + .HasColumnType("text"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("RedemptionDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)"); + + b.Property("Type") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("MultiTenancySide") + .HasColumnType("smallint"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Providers") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpPermissions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpPermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpPermissionGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpSettings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DefaultValue") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEncrypted") + .HasColumnType("boolean"); + + b.Property("IsInherited") + .HasColumnType("boolean"); + + b.Property("IsVisibleToClients") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Providers") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpSettingDefinitions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpTenants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.HasOne("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/20251228134317_Initial.cs b/src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/20251228134317_Initial.cs new file mode 100644 index 0000000..3ef8073 --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/20251228134317_Initial.cs @@ -0,0 +1,1248 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Hua.Abp.Demo.Migrations +{ + /// + public partial class Initial : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpAuditLogExcelFiles", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + FileName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogExcelFiles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpAuditLogs", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + ApplicationName = table.Column(type: "character varying(96)", maxLength: 96, nullable: true), + UserId = table.Column(type: "uuid", nullable: true), + UserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + TenantId = table.Column(type: "uuid", nullable: true), + TenantName = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + ImpersonatorUserId = table.Column(type: "uuid", nullable: true), + ImpersonatorUserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + ImpersonatorTenantId = table.Column(type: "uuid", nullable: true), + ImpersonatorTenantName = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + ExecutionTime = table.Column(type: "timestamp without time zone", nullable: false), + ExecutionDuration = table.Column(type: "integer", nullable: false), + ClientIpAddress = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + ClientName = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + ClientId = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + CorrelationId = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + BrowserInfo = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + HttpMethod = table.Column(type: "character varying(16)", maxLength: 16, nullable: true), + Url = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + Exceptions = table.Column(type: "text", nullable: true), + Comments = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + HttpStatusCode = table.Column(type: "integer", nullable: true), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpBackgroundJobs", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + ApplicationName = table.Column(type: "character varying(96)", maxLength: 96, nullable: true), + JobName = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + JobArgs = table.Column(type: "character varying(1048576)", maxLength: 1048576, nullable: false), + TryCount = table.Column(type: "smallint", nullable: false, defaultValue: (short)0), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + NextTryTime = table.Column(type: "timestamp without time zone", nullable: false), + LastTryTime = table.Column(type: "timestamp without time zone", nullable: true), + IsAbandoned = table.Column(type: "boolean", nullable: false, defaultValue: false), + Priority = table.Column(type: "smallint", nullable: false, defaultValue: (byte)15), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBackgroundJobs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpBlobContainers", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobContainers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpClaimTypes", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + Required = table.Column(type: "boolean", nullable: false), + IsStatic = table.Column(type: "boolean", nullable: false), + Regex = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + RegexDescription = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + Description = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + ValueType = table.Column(type: "integer", nullable: false), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpFeatureGroups", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + DisplayName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + ExtraProperties = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpFeatureGroups", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpFeatures", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + GroupName = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + ParentName = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + DisplayName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + Description = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + DefaultValue = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + IsVisibleToClients = table.Column(type: "boolean", nullable: false), + IsAvailableToHost = table.Column(type: "boolean", nullable: false), + AllowedProviders = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + ValueType = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), + ExtraProperties = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpFeatures", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpFeatureValues", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + Value = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + ProviderName = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + ProviderKey = table.Column(type: "character varying(64)", maxLength: 64, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpFeatureValues", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpLinkUsers", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + SourceUserId = table.Column(type: "uuid", nullable: false), + SourceTenantId = table.Column(type: "uuid", nullable: true), + TargetUserId = table.Column(type: "uuid", nullable: false), + TargetTenantId = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpLinkUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpOrganizationUnits", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + ParentId = table.Column(type: "uuid", nullable: true), + Code = table.Column(type: "character varying(95)", maxLength: 95, nullable: false), + DisplayName = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + EntityVersion = table.Column(type: "integer", nullable: false), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true), + LastModificationTime = table.Column(type: "timestamp without time zone", nullable: true), + LastModifierId = table.Column(type: "uuid", nullable: true), + IsDeleted = table.Column(type: "boolean", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uuid", nullable: true), + DeletionTime = table.Column(type: "timestamp without time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpOrganizationUnits", x => x.Id); + table.ForeignKey( + name: "FK_AbpOrganizationUnits_AbpOrganizationUnits_ParentId", + column: x => x.ParentId, + principalTable: "AbpOrganizationUnits", + principalColumn: "Id"); + }); + + migrationBuilder.CreateTable( + name: "AbpPermissionGrants", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + ProviderName = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + ProviderKey = table.Column(type: "character varying(64)", maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpPermissionGroups", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + DisplayName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + ExtraProperties = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpPermissionGroups", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpPermissions", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + GroupName = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + ParentName = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + DisplayName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + IsEnabled = table.Column(type: "boolean", nullable: false), + MultiTenancySide = table.Column(type: "smallint", nullable: false), + Providers = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + StateCheckers = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + ExtraProperties = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpPermissions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpRoles", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + NormalizedName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + IsDefault = table.Column(type: "boolean", nullable: false), + IsStatic = table.Column(type: "boolean", nullable: false), + IsPublic = table.Column(type: "boolean", nullable: false), + EntityVersion = table.Column(type: "integer", nullable: false), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSecurityLogs", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + ApplicationName = table.Column(type: "character varying(96)", maxLength: 96, nullable: true), + Identity = table.Column(type: "character varying(96)", maxLength: 96, nullable: true), + Action = table.Column(type: "character varying(96)", maxLength: 96, nullable: true), + UserId = table.Column(type: "uuid", nullable: true), + UserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + TenantName = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + ClientId = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + CorrelationId = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + ClientIpAddress = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + BrowserInfo = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSecurityLogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSessions", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + SessionId = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + Device = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + DeviceInfo = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + TenantId = table.Column(type: "uuid", nullable: true), + UserId = table.Column(type: "uuid", nullable: false), + ClientId = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + IpAddresses = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), + SignedIn = table.Column(type: "timestamp without time zone", nullable: false), + LastAccessed = table.Column(type: "timestamp without time zone", nullable: true), + ExtraProperties = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSessions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSettingDefinitions", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + DisplayName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + Description = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + DefaultValue = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), + IsVisibleToClients = table.Column(type: "boolean", nullable: false), + Providers = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), + IsInherited = table.Column(type: "boolean", nullable: false), + IsEncrypted = table.Column(type: "boolean", nullable: false), + ExtraProperties = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSettingDefinitions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSettings", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + Value = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: false), + ProviderName = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + ProviderKey = table.Column(type: "character varying(64)", maxLength: 64, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSettings", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpTenants", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + NormalizedName = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + EntityVersion = table.Column(type: "integer", nullable: false), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true), + LastModificationTime = table.Column(type: "timestamp without time zone", nullable: true), + LastModifierId = table.Column(type: "uuid", nullable: true), + IsDeleted = table.Column(type: "boolean", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uuid", nullable: true), + DeletionTime = table.Column(type: "timestamp without time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpUserDelegations", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + SourceUserId = table.Column(type: "uuid", nullable: false), + TargetUserId = table.Column(type: "uuid", nullable: false), + StartTime = table.Column(type: "timestamp without time zone", nullable: false), + EndTime = table.Column(type: "timestamp without time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserDelegations", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpUsers", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + UserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + NormalizedUserName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + Name = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + Surname = table.Column(type: "character varying(64)", maxLength: 64, nullable: true), + Email = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + NormalizedEmail = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + EmailConfirmed = table.Column(type: "boolean", nullable: false, defaultValue: false), + PasswordHash = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + SecurityStamp = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + IsExternal = table.Column(type: "boolean", nullable: false, defaultValue: false), + PhoneNumber = table.Column(type: "character varying(16)", maxLength: 16, nullable: true), + PhoneNumberConfirmed = table.Column(type: "boolean", nullable: false, defaultValue: false), + IsActive = table.Column(type: "boolean", nullable: false), + TwoFactorEnabled = table.Column(type: "boolean", nullable: false, defaultValue: false), + LockoutEnd = table.Column(type: "timestamp with time zone", nullable: true), + LockoutEnabled = table.Column(type: "boolean", nullable: false, defaultValue: false), + AccessFailedCount = table.Column(type: "integer", nullable: false, defaultValue: 0), + ShouldChangePasswordOnNextLogin = table.Column(type: "boolean", nullable: false), + EntityVersion = table.Column(type: "integer", nullable: false), + LastPasswordChangeTime = table.Column(type: "timestamp with time zone", nullable: true), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true), + LastModificationTime = table.Column(type: "timestamp without time zone", nullable: true), + LastModifierId = table.Column(type: "uuid", nullable: true), + IsDeleted = table.Column(type: "boolean", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uuid", nullable: true), + DeletionTime = table.Column(type: "timestamp without time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AppBooks", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + Type = table.Column(type: "integer", nullable: false), + PublishDate = table.Column(type: "timestamp without time zone", nullable: false), + Price = table.Column(type: "real", nullable: false), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true), + LastModificationTime = table.Column(type: "timestamp without time zone", nullable: true), + LastModifierId = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AppBooks", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "OpenIddictApplications", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + ApplicationType = table.Column(type: "character varying(50)", maxLength: 50, nullable: true), + ClientId = table.Column(type: "character varying(100)", maxLength: 100, nullable: true), + ClientSecret = table.Column(type: "text", nullable: true), + ClientType = table.Column(type: "character varying(50)", maxLength: 50, nullable: true), + ConsentType = table.Column(type: "character varying(50)", maxLength: 50, nullable: true), + DisplayName = table.Column(type: "text", nullable: true), + DisplayNames = table.Column(type: "text", nullable: true), + JsonWebKeySet = table.Column(type: "text", nullable: true), + Permissions = table.Column(type: "text", nullable: true), + PostLogoutRedirectUris = table.Column(type: "text", nullable: true), + Properties = table.Column(type: "text", nullable: true), + RedirectUris = table.Column(type: "text", nullable: true), + Requirements = table.Column(type: "text", nullable: true), + Settings = table.Column(type: "text", nullable: true), + FrontChannelLogoutUri = table.Column(type: "text", nullable: true), + ClientUri = table.Column(type: "text", nullable: true), + LogoUri = table.Column(type: "text", nullable: true), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true), + LastModificationTime = table.Column(type: "timestamp without time zone", nullable: true), + LastModifierId = table.Column(type: "uuid", nullable: true), + IsDeleted = table.Column(type: "boolean", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uuid", nullable: true), + DeletionTime = table.Column(type: "timestamp without time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_OpenIddictApplications", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "OpenIddictScopes", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Description = table.Column(type: "text", nullable: true), + Descriptions = table.Column(type: "text", nullable: true), + DisplayName = table.Column(type: "text", nullable: true), + DisplayNames = table.Column(type: "text", nullable: true), + Name = table.Column(type: "character varying(200)", maxLength: 200, nullable: true), + Properties = table.Column(type: "text", nullable: true), + Resources = table.Column(type: "text", nullable: true), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true), + LastModificationTime = table.Column(type: "timestamp without time zone", nullable: true), + LastModifierId = table.Column(type: "uuid", nullable: true), + IsDeleted = table.Column(type: "boolean", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uuid", nullable: true), + DeletionTime = table.Column(type: "timestamp without time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_OpenIddictScopes", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpAuditLogActions", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + AuditLogId = table.Column(type: "uuid", nullable: false), + ServiceName = table.Column(type: "character varying(256)", maxLength: 256, nullable: true), + MethodName = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + Parameters = table.Column(type: "character varying(2000)", maxLength: 2000, nullable: true), + ExecutionTime = table.Column(type: "timestamp without time zone", nullable: false), + ExecutionDuration = table.Column(type: "integer", nullable: false), + ExtraProperties = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); + table.ForeignKey( + name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityChanges", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + AuditLogId = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + ChangeTime = table.Column(type: "timestamp without time zone", nullable: false), + ChangeType = table.Column(type: "smallint", nullable: false), + EntityTenantId = table.Column(type: "uuid", nullable: true), + EntityId = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + EntityTypeFullName = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + ExtraProperties = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpBlobs", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + ContainerId = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + Content = table.Column(type: "bytea", maxLength: 2147483647, nullable: true), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobs", x => x.Id); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobContainers_ContainerId", + column: x => x.ContainerId, + principalTable: "AbpBlobContainers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpOrganizationUnitRoles", + columns: table => new + { + RoleId = table.Column(type: "uuid", nullable: false), + OrganizationUnitId = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpOrganizationUnitRoles", x => new { x.OrganizationUnitId, x.RoleId }); + table.ForeignKey( + name: "FK_AbpOrganizationUnitRoles_AbpOrganizationUnits_OrganizationU~", + column: x => x.OrganizationUnitId, + principalTable: "AbpOrganizationUnits", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpOrganizationUnitRoles_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpRoleClaims", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + RoleId = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + ClaimType = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + ClaimValue = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpRoleClaims", x => x.Id); + table.ForeignKey( + name: "FK_AbpRoleClaims_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpTenantConnectionStrings", + columns: table => new + { + TenantId = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + Value = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); + table.ForeignKey( + name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", + column: x => x.TenantId, + principalTable: "AbpTenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserClaims", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + UserId = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + ClaimType = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + ClaimValue = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserClaims", x => x.Id); + table.ForeignKey( + name: "FK_AbpUserClaims_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserLogins", + columns: table => new + { + UserId = table.Column(type: "uuid", nullable: false), + LoginProvider = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + ProviderKey = table.Column(type: "character varying(196)", maxLength: 196, nullable: false), + ProviderDisplayName = table.Column(type: "character varying(128)", maxLength: 128, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider }); + table.ForeignKey( + name: "FK_AbpUserLogins_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserOrganizationUnits", + columns: table => new + { + UserId = table.Column(type: "uuid", nullable: false), + OrganizationUnitId = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserOrganizationUnits", x => new { x.OrganizationUnitId, x.UserId }); + table.ForeignKey( + name: "FK_AbpUserOrganizationUnits_AbpOrganizationUnits_OrganizationU~", + column: x => x.OrganizationUnitId, + principalTable: "AbpOrganizationUnits", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpUserOrganizationUnits_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserRoles", + columns: table => new + { + UserId = table.Column(type: "uuid", nullable: false), + RoleId = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId }); + table.ForeignKey( + name: "FK_AbpUserRoles_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpUserRoles_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserTokens", + columns: table => new + { + UserId = table.Column(type: "uuid", nullable: false), + LoginProvider = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + Value = table.Column(type: "text", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); + table.ForeignKey( + name: "FK_AbpUserTokens_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "OpenIddictAuthorizations", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + ApplicationId = table.Column(type: "uuid", nullable: true), + CreationDate = table.Column(type: "timestamp without time zone", nullable: true), + Properties = table.Column(type: "text", nullable: true), + Scopes = table.Column(type: "text", nullable: true), + Status = table.Column(type: "character varying(50)", maxLength: 50, nullable: true), + Subject = table.Column(type: "character varying(400)", maxLength: 400, nullable: true), + Type = table.Column(type: "character varying(50)", maxLength: 50, nullable: true), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_OpenIddictAuthorizations", x => x.Id); + table.ForeignKey( + name: "FK_OpenIddictAuthorizations_OpenIddictApplications_Application~", + column: x => x.ApplicationId, + principalTable: "OpenIddictApplications", + principalColumn: "Id"); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityPropertyChanges", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + EntityChangeId = table.Column(type: "uuid", nullable: false), + NewValue = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + OriginalValue = table.Column(type: "character varying(512)", maxLength: 512, nullable: true), + PropertyName = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + PropertyTypeFullName = table.Column(type: "character varying(64)", maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", + column: x => x.EntityChangeId, + principalTable: "AbpEntityChanges", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "OpenIddictTokens", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + ApplicationId = table.Column(type: "uuid", nullable: true), + AuthorizationId = table.Column(type: "uuid", nullable: true), + CreationDate = table.Column(type: "timestamp without time zone", nullable: true), + ExpirationDate = table.Column(type: "timestamp without time zone", nullable: true), + Payload = table.Column(type: "text", nullable: true), + Properties = table.Column(type: "text", nullable: true), + RedemptionDate = table.Column(type: "timestamp without time zone", nullable: true), + ReferenceId = table.Column(type: "character varying(100)", maxLength: 100, nullable: true), + Status = table.Column(type: "character varying(50)", maxLength: 50, nullable: true), + Subject = table.Column(type: "character varying(400)", maxLength: 400, nullable: true), + Type = table.Column(type: "character varying(150)", maxLength: 150, nullable: true), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_OpenIddictTokens", x => x.Id); + table.ForeignKey( + name: "FK_OpenIddictTokens_OpenIddictApplications_ApplicationId", + column: x => x.ApplicationId, + principalTable: "OpenIddictApplications", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_OpenIddictTokens_OpenIddictAuthorizations_AuthorizationId", + column: x => x.AuthorizationId, + principalTable: "OpenIddictAuthorizations", + principalColumn: "Id"); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_AuditLogId", + table: "AbpAuditLogActions", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_Executio~", + table: "AbpAuditLogActions", + columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "UserId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBackgroundJobs_IsAbandoned_NextTryTime", + table: "AbpBackgroundJobs", + columns: new[] { "IsAbandoned", "NextTryTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobContainers_TenantId_Name", + table: "AbpBlobContainers", + columns: new[] { "TenantId", "Name" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ContainerId", + table: "AbpBlobs", + column: "ContainerId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_TenantId_ContainerId_Name", + table: "AbpBlobs", + columns: new[] { "TenantId", "ContainerId", "Name" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_AuditLogId", + table: "AbpEntityChanges", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", + table: "AbpEntityChanges", + columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityPropertyChanges_EntityChangeId", + table: "AbpEntityPropertyChanges", + column: "EntityChangeId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpFeatureGroups_Name", + table: "AbpFeatureGroups", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpFeatures_GroupName", + table: "AbpFeatures", + column: "GroupName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpFeatures_Name", + table: "AbpFeatures", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpFeatureValues_Name_ProviderName_ProviderKey", + table: "AbpFeatureValues", + columns: new[] { "Name", "ProviderName", "ProviderKey" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpLinkUsers_SourceUserId_SourceTenantId_TargetUserId_Targe~", + table: "AbpLinkUsers", + columns: new[] { "SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpOrganizationUnitRoles_RoleId_OrganizationUnitId", + table: "AbpOrganizationUnitRoles", + columns: new[] { "RoleId", "OrganizationUnitId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpOrganizationUnits_Code", + table: "AbpOrganizationUnits", + column: "Code"); + + migrationBuilder.CreateIndex( + name: "IX_AbpOrganizationUnits_ParentId", + table: "AbpOrganizationUnits", + column: "ParentId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissionGrants_TenantId_Name_ProviderName_ProviderKey", + table: "AbpPermissionGrants", + columns: new[] { "TenantId", "Name", "ProviderName", "ProviderKey" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissionGroups_Name", + table: "AbpPermissionGroups", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_GroupName", + table: "AbpPermissions", + column: "GroupName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_Name", + table: "AbpPermissions", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpRoleClaims_RoleId", + table: "AbpRoleClaims", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpRoles_NormalizedName", + table: "AbpRoles", + column: "NormalizedName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_Action", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "Action" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_ApplicationName", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "ApplicationName" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_Identity", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "Identity" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_UserId", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "UserId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSessions_Device", + table: "AbpSessions", + column: "Device"); + + migrationBuilder.CreateIndex( + name: "IX_AbpSessions_SessionId", + table: "AbpSessions", + column: "SessionId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpSessions_TenantId_UserId", + table: "AbpSessions", + columns: new[] { "TenantId", "UserId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSettingDefinitions_Name", + table: "AbpSettingDefinitions", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpSettings_Name_ProviderName_ProviderKey", + table: "AbpSettings", + columns: new[] { "Name", "ProviderName", "ProviderKey" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpTenants_Name", + table: "AbpTenants", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_AbpTenants_NormalizedName", + table: "AbpTenants", + column: "NormalizedName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserClaims_UserId", + table: "AbpUserClaims", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserLogins_LoginProvider_ProviderKey", + table: "AbpUserLogins", + columns: new[] { "LoginProvider", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserOrganizationUnits_UserId_OrganizationUnitId", + table: "AbpUserOrganizationUnits", + columns: new[] { "UserId", "OrganizationUnitId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserRoles_RoleId_UserId", + table: "AbpUserRoles", + columns: new[] { "RoleId", "UserId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_Email", + table: "AbpUsers", + column: "Email"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_NormalizedEmail", + table: "AbpUsers", + column: "NormalizedEmail"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_NormalizedUserName", + table: "AbpUsers", + column: "NormalizedUserName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_UserName", + table: "AbpUsers", + column: "UserName"); + + migrationBuilder.CreateIndex( + name: "IX_OpenIddictApplications_ClientId", + table: "OpenIddictApplications", + column: "ClientId"); + + migrationBuilder.CreateIndex( + name: "IX_OpenIddictAuthorizations_ApplicationId_Status_Subject_Type", + table: "OpenIddictAuthorizations", + columns: new[] { "ApplicationId", "Status", "Subject", "Type" }); + + migrationBuilder.CreateIndex( + name: "IX_OpenIddictScopes_Name", + table: "OpenIddictScopes", + column: "Name"); + + migrationBuilder.CreateIndex( + name: "IX_OpenIddictTokens_ApplicationId_Status_Subject_Type", + table: "OpenIddictTokens", + columns: new[] { "ApplicationId", "Status", "Subject", "Type" }); + + migrationBuilder.CreateIndex( + name: "IX_OpenIddictTokens_AuthorizationId", + table: "OpenIddictTokens", + column: "AuthorizationId"); + + migrationBuilder.CreateIndex( + name: "IX_OpenIddictTokens_ReferenceId", + table: "OpenIddictTokens", + column: "ReferenceId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpAuditLogActions"); + + migrationBuilder.DropTable( + name: "AbpAuditLogExcelFiles"); + + migrationBuilder.DropTable( + name: "AbpBackgroundJobs"); + + migrationBuilder.DropTable( + name: "AbpBlobs"); + + migrationBuilder.DropTable( + name: "AbpClaimTypes"); + + migrationBuilder.DropTable( + name: "AbpEntityPropertyChanges"); + + migrationBuilder.DropTable( + name: "AbpFeatureGroups"); + + migrationBuilder.DropTable( + name: "AbpFeatures"); + + migrationBuilder.DropTable( + name: "AbpFeatureValues"); + + migrationBuilder.DropTable( + name: "AbpLinkUsers"); + + migrationBuilder.DropTable( + name: "AbpOrganizationUnitRoles"); + + migrationBuilder.DropTable( + name: "AbpPermissionGrants"); + + migrationBuilder.DropTable( + name: "AbpPermissionGroups"); + + migrationBuilder.DropTable( + name: "AbpPermissions"); + + migrationBuilder.DropTable( + name: "AbpRoleClaims"); + + migrationBuilder.DropTable( + name: "AbpSecurityLogs"); + + migrationBuilder.DropTable( + name: "AbpSessions"); + + migrationBuilder.DropTable( + name: "AbpSettingDefinitions"); + + migrationBuilder.DropTable( + name: "AbpSettings"); + + migrationBuilder.DropTable( + name: "AbpTenantConnectionStrings"); + + migrationBuilder.DropTable( + name: "AbpUserClaims"); + + migrationBuilder.DropTable( + name: "AbpUserDelegations"); + + migrationBuilder.DropTable( + name: "AbpUserLogins"); + + migrationBuilder.DropTable( + name: "AbpUserOrganizationUnits"); + + migrationBuilder.DropTable( + name: "AbpUserRoles"); + + migrationBuilder.DropTable( + name: "AbpUserTokens"); + + migrationBuilder.DropTable( + name: "AppBooks"); + + migrationBuilder.DropTable( + name: "OpenIddictScopes"); + + migrationBuilder.DropTable( + name: "OpenIddictTokens"); + + migrationBuilder.DropTable( + name: "AbpBlobContainers"); + + migrationBuilder.DropTable( + name: "AbpEntityChanges"); + + migrationBuilder.DropTable( + name: "AbpTenants"); + + migrationBuilder.DropTable( + name: "AbpOrganizationUnits"); + + migrationBuilder.DropTable( + name: "AbpRoles"); + + migrationBuilder.DropTable( + name: "AbpUsers"); + + migrationBuilder.DropTable( + name: "OpenIddictAuthorizations"); + + migrationBuilder.DropTable( + name: "AbpAuditLogs"); + + migrationBuilder.DropTable( + name: "OpenIddictApplications"); + } + } +} diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/DemoDbContextModelSnapshot.cs b/src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/DemoDbContextModelSnapshot.cs new file mode 100644 index 0000000..d78d615 --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/Migrations/DemoDbContextModelSnapshot.cs @@ -0,0 +1,2128 @@ +// +using System; +using Hua.Abp.Demo.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace Hua.Abp.Demo.Migrations +{ + [DbContext(typeof(DemoDbContext))] + partial class DemoDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) + .HasAnnotation("ProductVersion", "10.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Hua.Abp.Demo.Books.Book", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Price") + .HasColumnType("real"); + + b.Property("PublishDate") + .HasColumnType("timestamp without time zone"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("AppBooks", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasColumnType("text"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("integer") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uuid") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ImpersonatorTenantName"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uuid") + .HasColumnName("ImpersonatorUserId"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("ImpersonatorUserName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("TenantName"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("smallint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uuid"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("EntityChangeId") + .HasColumnType("uuid"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsAbandoned") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false); + + b.Property("JobArgs") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)"); + + b.Property("JobName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("LastTryTime") + .HasColumnType("timestamp without time zone"); + + b.Property("NextTryTime") + .HasColumnType("timestamp without time zone"); + + b.Property("Priority") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((byte)15); + + b.Property("TryCount") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)0); + + b.HasKey("Id"); + + b.HasIndex("IsAbandoned", "NextTryTime"); + + b.ToTable("AbpBackgroundJobs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("uuid"); + + b.Property("Content") + .HasMaxLength(2147483647) + .HasColumnType("bytea"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("TenantId", "ContainerId", "Name"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AllowedProviders") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DefaultValue") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsAvailableToHost") + .HasColumnType("boolean"); + + b.Property("IsVisibleToClients") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ValueType") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatures", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatureGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpFeatureValues", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Required") + .HasColumnType("boolean"); + + b.Property("ValueType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("SourceTenantId") + .HasColumnType("uuid"); + + b.Property("SourceUserId") + .HasColumnType("uuid"); + + b.Property("TargetTenantId") + .HasColumnType("uuid"); + + b.Property("TargetUserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique(); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("boolean") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("boolean") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("boolean") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySession", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Device") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("DeviceInfo") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IpAddresses") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("LastAccessed") + .HasColumnType("timestamp without time zone"); + + b.Property("SessionId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("SignedIn") + .HasColumnType("timestamp without time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("Device"); + + b.HasIndex("SessionId"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSessions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("boolean") + .HasColumnName("IsActive"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LastPasswordChangeTime") + .HasColumnType("timestamp with time zone"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("SecurityStamp"); + + b.Property("ShouldChangePasswordOnNextLogin") + .HasColumnType("boolean"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("EndTime") + .HasColumnType("timestamp without time zone"); + + b.Property("SourceUserId") + .HasColumnType("uuid"); + + b.Property("StartTime") + .HasColumnType("timestamp without time zone"); + + b.Property("TargetUserId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpUserDelegations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("character varying(196)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("character varying(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("ClientSecret") + .HasColumnType("text"); + + b.Property("ClientType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientUri") + .HasColumnType("text"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("DisplayNames") + .HasColumnType("text"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("text"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("JsonWebKeySet") + .HasColumnType("text"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LogoUri") + .HasColumnType("text"); + + b.Property("Permissions") + .HasColumnType("text"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("text"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("RedirectUris") + .HasColumnType("text"); + + b.Property("Requirements") + .HasColumnType("text"); + + b.Property("Settings") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("OpenIddictApplications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("Scopes") + .HasColumnType("text"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictAuthorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Descriptions") + .HasColumnType("text"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("DisplayNames") + .HasColumnType("text"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("Resources") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("OpenIddictScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ApplicationId") + .HasColumnType("uuid"); + + b.Property("AuthorizationId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Payload") + .HasColumnType("text"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("RedemptionDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)"); + + b.Property("Type") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("MultiTenancySide") + .HasColumnType("smallint"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Providers") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpPermissions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpPermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpPermissionGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpSettings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DefaultValue") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEncrypted") + .HasColumnType("boolean"); + + b.Property("IsInherited") + .HasColumnType("boolean"); + + b.Property("IsVisibleToClients") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Providers") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpSettingDefinitions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpTenants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.HasOne("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Hua.Abp.Demo.EntityFrameworkCore/Properties/AssemblyInfo.cs b/src/Hua.Abp.Demo.EntityFrameworkCore/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2e5a8bc --- /dev/null +++ b/src/Hua.Abp.Demo.EntityFrameworkCore/Properties/AssemblyInfo.cs @@ -0,0 +1,2 @@ +using System.Runtime.CompilerServices; +[assembly:InternalsVisibleToAttribute("Hua.Abp.Demo.EntityFrameworkCore.Tests")] diff --git a/src/Hua.Abp.Demo.HttpApi.Client/DemoHttpApiClientModule.cs b/src/Hua.Abp.Demo.HttpApi.Client/DemoHttpApiClientModule.cs new file mode 100644 index 0000000..cd63db6 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Client/DemoHttpApiClientModule.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Account; +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement; +using Volo.Abp.SettingManagement; +using Volo.Abp.VirtualFileSystem; +using Volo.Abp.FeatureManagement; +using Volo.Abp.Identity; +using Volo.Abp.TenantManagement; + +namespace Hua.Abp.Demo; + +[DependsOn( + typeof(DemoApplicationContractsModule), + typeof(AbpPermissionManagementHttpApiClientModule), + typeof(AbpFeatureManagementHttpApiClientModule), + typeof(AbpAccountHttpApiClientModule), + typeof(AbpIdentityHttpApiClientModule), + typeof(AbpTenantManagementHttpApiClientModule), + typeof(AbpSettingManagementHttpApiClientModule) +)] +public class DemoHttpApiClientModule : AbpModule +{ + public const string RemoteServiceName = "Default"; + + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddHttpClientProxies( + typeof(DemoApplicationContractsModule).Assembly, + RemoteServiceName + ); + + Configure(options => + { + options.FileSets.AddEmbedded(); + }); + } +} diff --git a/src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.abppkg b/src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.abppkg new file mode 100644 index 0000000..7deef5e --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.http-api-client" +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.abppkg.analyze.json b/src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.abppkg.analyze.json new file mode 100644 index 0000000..7d661d3 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.abppkg.analyze.json @@ -0,0 +1,118 @@ +{ + "name": "Hua.Abp.Demo.HttpApi.Client", + "hash": "", + "contents": [ + { + "namespace": "Hua.Abp.Demo", + "dependsOnModules": [ + { + "declaringAssemblyName": "Hua.Abp.Demo.Application.Contracts", + "namespace": "Hua.Abp.Demo", + "name": "DemoApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.PermissionManagement.HttpApi.Client", + "namespace": "Volo.Abp.PermissionManagement", + "name": "AbpPermissionManagementHttpApiClientModule" + }, + { + "declaringAssemblyName": "Volo.Abp.FeatureManagement.HttpApi.Client", + "namespace": "Volo.Abp.FeatureManagement", + "name": "AbpFeatureManagementHttpApiClientModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Identity.Pro.HttpApi.Client", + "namespace": "Volo.Abp.Identity", + "name": "AbpIdentityHttpApiClientModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Account.Pro.Admin.HttpApi.Client", + "namespace": "Volo.Abp.Account", + "name": "AbpAccountAdminHttpApiClientModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Account.Pro.Public.HttpApi.Client", + "namespace": "Volo.Abp.Account", + "name": "AbpAccountPublicHttpApiClientModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AuditLogging.HttpApi.Client", + "namespace": "Volo.Abp.AuditLogging", + "name": "AbpAuditLoggingHttpApiClientModule" + }, + { + "declaringAssemblyName": "Volo.Abp.OpenIddict.Pro.HttpApi.Client", + "namespace": "Volo.Abp.OpenIddict", + "name": "AbpOpenIddictProHttpApiClientModule" + }, + { + "declaringAssemblyName": "Volo.Abp.TextTemplateManagement.HttpApi.Client", + "namespace": "Volo.Abp.TextTemplateManagement", + "name": "TextTemplateManagementHttpApiClientModule" + }, + { + "declaringAssemblyName": "Volo.Abp.LanguageManagement.HttpApi.Client", + "namespace": "Volo.Abp.LanguageManagement", + "name": "LanguageManagementHttpApiClientModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Gdpr.HttpApi.Client", + "namespace": "Volo.Abp.Gdpr", + "name": "AbpGdprHttpApiClientModule" + }, + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.HttpApi.Client", + "namespace": "Volo.Abp.SettingManagement", + "name": "AbpSettingManagementHttpApiClientModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "DemoHttpApiClientModule", + "summary": null + } + ] +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.csproj b/src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.csproj new file mode 100644 index 0000000..f1ba2c5 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Client/Hua.Abp.Demo.HttpApi.Client.csproj @@ -0,0 +1,32 @@ + + + + + + net10.0 + enable + Hua.Abp.Demo + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Hua.Abp.Demo.HttpApi.Host/DemoBrandingProvider.cs b/src/Hua.Abp.Demo.HttpApi.Host/DemoBrandingProvider.cs new file mode 100644 index 0000000..bc33476 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/DemoBrandingProvider.cs @@ -0,0 +1,19 @@ +using Microsoft.Extensions.Localization; +using Hua.Abp.Demo.Localization; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Ui.Branding; + +namespace Hua.Abp.Demo; + +[Dependency(ReplaceServices = true)] +public class DemoBrandingProvider : DefaultBrandingProvider +{ + private IStringLocalizer _localizer; + + public DemoBrandingProvider(IStringLocalizer localizer) + { + _localizer = localizer; + } + + public override string AppName => _localizer["AppName"]; +} diff --git a/src/Hua.Abp.Demo.HttpApi.Host/DemoHttpApiHostModule.cs b/src/Hua.Abp.Demo.HttpApi.Host/DemoHttpApiHostModule.cs new file mode 100644 index 0000000..ab2b4a5 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/DemoHttpApiHostModule.cs @@ -0,0 +1,281 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Cors; +using Microsoft.AspNetCore.HttpOverrides; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.AspNetCore.Extensions.DependencyInjection; +using OpenIddict.Validation.AspNetCore; +using OpenIddict.Server.AspNetCore; +using Hua.Abp.Demo.EntityFrameworkCore; +using Hua.Abp.Demo.MultiTenancy; +using Hua.Abp.Demo.HealthChecks; +using Microsoft.OpenApi.Models; +using Volo.Abp; +using Volo.Abp.Studio; +using Volo.Abp.Account; +using Volo.Abp.Account.Web; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Autofac; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.UI.Navigation.Urls; +using Volo.Abp.VirtualFileSystem; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling; +using Microsoft.AspNetCore.Hosting; +using Volo.Abp.AspNetCore.Serilog; +using Volo.Abp.Identity; +using Volo.Abp.OpenIddict; +using Volo.Abp.Swashbuckle; +using Volo.Abp.Studio.Client.AspNetCore; +using Volo.Abp.Security.Claims; + +namespace Hua.Abp.Demo; + +[DependsOn( + typeof(DemoHttpApiModule), + typeof(AbpStudioClientAspNetCoreModule), + typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), + typeof(AbpAutofacModule), + typeof(AbpAspNetCoreMultiTenancyModule), + typeof(DemoApplicationModule), + typeof(DemoEntityFrameworkCoreModule), + typeof(AbpAccountWebOpenIddictModule), + typeof(AbpSwashbuckleModule), + typeof(AbpAspNetCoreSerilogModule) + )] +public class DemoHttpApiHostModule : AbpModule +{ + public override void PreConfigureServices(ServiceConfigurationContext context) + { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + + PreConfigure(builder => + { + builder.AddValidation(options => + { + options.AddAudiences("Demo"); + options.UseLocalServer(); + options.UseAspNetCore(); + }); + }); + + if (!hostingEnvironment.IsDevelopment()) + { + PreConfigure(options => + { + options.AddDevelopmentEncryptionAndSigningCertificate = false; + }); + + PreConfigure(serverBuilder => + { + serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", configuration["AuthServer:CertificatePassPhrase"]!); + serverBuilder.SetIssuer(new Uri(configuration["AuthServer:Authority"]!)); + }); + } + } + + public override void ConfigureServices(ServiceConfigurationContext context) + { + var configuration = context.Services.GetConfiguration(); + var hostingEnvironment = context.Services.GetHostingEnvironment(); + + if (!configuration.GetValue("App:DisablePII")) + { + Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true; + Microsoft.IdentityModel.Logging.IdentityModelEventSource.LogCompleteSecurityArtifact = true; + } + + if (!configuration.GetValue("AuthServer:RequireHttpsMetadata")) + { + Configure(options => + { + options.DisableTransportSecurityRequirement = true; + }); + + Configure(options => + { + options.ForwardedHeaders = ForwardedHeaders.XForwardedProto; + }); + } + + ConfigureAuthentication(context); + ConfigureUrls(configuration); + ConfigureBundles(); + ConfigureConventionalControllers(); + ConfigureHealthChecks(context); + ConfigureSwagger(context, configuration); + ConfigureVirtualFileSystem(context); + ConfigureCors(context, configuration); + } + + private void ConfigureAuthentication(ServiceConfigurationContext context) + { + context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme); + context.Services.Configure(options => + { + options.IsDynamicClaimsEnabled = true; + }); + } + + private void ConfigureUrls(IConfiguration configuration) + { + Configure(options => + { + options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"]; + options.Applications["Angular"].RootUrl = configuration["App:AngularUrl"]; + options.Applications["Angular"].Urls[AccountUrlNames.PasswordReset] = "account/reset-password"; + options.RedirectAllowedUrls.AddRange(configuration["App:RedirectAllowedUrls"]?.Split(',') ?? Array.Empty()); + }); + } + + private void ConfigureBundles() + { + Configure(options => + { + options.StyleBundles.Configure( + LeptonXLiteThemeBundles.Styles.Global, + bundle => + { + bundle.AddFiles("/global-styles.css"); + } + ); + + options.ScriptBundles.Configure( + LeptonXLiteThemeBundles.Scripts.Global, + bundle => + { + bundle.AddFiles("/global-scripts.js"); + } + ); + }); + } + + + private void ConfigureVirtualFileSystem(ServiceConfigurationContext context) + { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + + if (hostingEnvironment.IsDevelopment()) + { + Configure(options => + { + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}Hua.Abp.Demo.Domain.Shared")); + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}Hua.Abp.Demo.Domain")); + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}Hua.Abp.Demo.Application.Contracts")); + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}Hua.Abp.Demo.Application")); + }); + } + } + + private void ConfigureConventionalControllers() + { + Configure(options => + { + options.ConventionalControllers.Create(typeof(DemoApplicationModule).Assembly); + }); + } + + private static void ConfigureSwagger(ServiceConfigurationContext context, IConfiguration configuration) + { + context.Services.AddAbpSwaggerGenWithOidc( + configuration["AuthServer:Authority"]!, + ["Demo"], + [AbpSwaggerOidcFlows.AuthorizationCode], + null, + options => + { + options.SwaggerDoc("v1", new OpenApiInfo { Title = "Demo API", Version = "v1" }); + options.DocInclusionPredicate((docName, description) => true); + options.CustomSchemaIds(type => type.FullName); + }); + } + + private void ConfigureCors(ServiceConfigurationContext context, IConfiguration configuration) + { + context.Services.AddCors(options => + { + options.AddDefaultPolicy(builder => + { + builder + .WithOrigins( + configuration["App:CorsOrigins"]? + .Split(",", StringSplitOptions.RemoveEmptyEntries) + .Select(o => o.Trim().RemovePostFix("/")) + .ToArray() ?? Array.Empty() + ) + .WithAbpExposedHeaders() + .SetIsOriginAllowedToAllowWildcardSubdomains() + .AllowAnyHeader() + .AllowAnyMethod() + .AllowCredentials(); + }); + }); + } + + private void ConfigureHealthChecks(ServiceConfigurationContext context) + { + context.Services.AddDemoHealthChecks(); + } + + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + app.UseForwardedHeaders(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseAbpRequestLocalization(); + + if (!env.IsDevelopment()) + { + app.UseErrorPage(); + } + + app.UseRouting(); + app.MapAbpStaticAssets(); + app.UseAbpStudioLink(); + app.UseAbpSecurityHeaders(); + app.UseCors(); + app.UseAuthentication(); + app.UseAbpOpenIddictValidation(); + + if (MultiTenancyConsts.IsEnabled) + { + app.UseMultiTenancy(); + } + + app.UseUnitOfWork(); + app.UseDynamicClaims(); + app.UseAuthorization(); + + app.UseSwagger(); + app.UseAbpSwaggerUI(options => + { + options.SwaggerEndpoint("/swagger/v1/swagger.json", "Demo API"); + + var configuration = context.ServiceProvider.GetRequiredService(); + options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]); + }); + app.UseAuditing(); + app.UseAbpSerilogEnrichers(); + app.UseConfiguredEndpoints(); + } +} diff --git a/src/Hua.Abp.Demo.HttpApi.Host/Dockerfile b/src/Hua.Abp.Demo.HttpApi.Host/Dockerfile new file mode 100644 index 0000000..d0edf44 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/Dockerfile @@ -0,0 +1,5 @@ +FROM mcr.microsoft.com/dotnet/aspnet:10.0 +COPY bin/Release/net10.0/publish/ app/ +WORKDIR /app +ENV ASPNETCORE_URLS=http://+:80 +ENTRYPOINT ["dotnet", "Hua.Abp.Demo.HttpApi.Host.dll"] \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi.Host/Dockerfile.local b/src/Hua.Abp.Demo.HttpApi.Host/Dockerfile.local new file mode 100644 index 0000000..40b7021 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/Dockerfile.local @@ -0,0 +1,18 @@ +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base +USER $APP_UID +EXPOSE 8080 +EXPOSE 8081 + +COPY bin/Release/net10.0/publish/ app/ +WORKDIR /app + +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +WORKDIR /src +RUN dotnet dev-certs https -v -ep openiddict.pfx -p a8dad6bd-08cf-40f9-baaf-873686b50b75 +RUN chmod 644 openiddict.pfx + +FROM base AS final +WORKDIR /app +COPY --from=build /src . + +ENTRYPOINT ["dotnet", "Hua.Abp.Demo.HttpApi.Host.dll"] \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi.Host/HealthChecks/DemoDatabaseCheck.cs b/src/Hua.Abp.Demo.HttpApi.Host/HealthChecks/DemoDatabaseCheck.cs new file mode 100644 index 0000000..8911008 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/HealthChecks/DemoDatabaseCheck.cs @@ -0,0 +1,32 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Diagnostics.HealthChecks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Identity; + +namespace Hua.Abp.Demo.HealthChecks; + +public class DemoDatabaseCheck : IHealthCheck, ITransientDependency +{ + protected readonly IIdentityRoleRepository IdentityRoleRepository; + + public DemoDatabaseCheck(IIdentityRoleRepository identityRoleRepository) + { + IdentityRoleRepository = identityRoleRepository; + } + + public async Task CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default) + { + try + { + await IdentityRoleRepository.GetListAsync(sorting: nameof(IdentityRole.Id), maxResultCount: 1, cancellationToken: cancellationToken); + + return HealthCheckResult.Healthy($"Could connect to database and get record."); + } + catch (Exception e) + { + return HealthCheckResult.Unhealthy($"Error when trying to get database record. ", e); + } + } +} diff --git a/src/Hua.Abp.Demo.HttpApi.Host/HealthChecks/HealthChecksBuilderExtensions.cs b/src/Hua.Abp.Demo.HttpApi.Host/HealthChecks/HealthChecksBuilderExtensions.cs new file mode 100644 index 0000000..675ba50 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/HealthChecks/HealthChecksBuilderExtensions.cs @@ -0,0 +1,76 @@ +using System; +using HealthChecks.UI.Client; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Diagnostics.HealthChecks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Routing; +using Microsoft.Extensions.DependencyInjection; + +namespace Hua.Abp.Demo.HealthChecks; + +public static class HealthChecksBuilderExtensions +{ + public static void AddDemoHealthChecks(this IServiceCollection services) + { + // Add your health checks here + var healthChecksBuilder = services.AddHealthChecks(); + healthChecksBuilder.AddCheck("Demo DbContext Check", tags: new string[] { "database" }); + + services.ConfigureHealthCheckEndpoint("/health-status"); + + var configuration = services.GetConfiguration(); + var healthCheckUrl = configuration["App:HealthCheckUrl"]; + + if (string.IsNullOrEmpty(healthCheckUrl)) + { + healthCheckUrl = "/health-status"; + } + + var healthChecksUiBuilder = services.AddHealthChecksUI(settings => + { + settings.AddHealthCheckEndpoint("Demo Health Status", configuration["App:HealthUiCheckUrl"] ?? healthCheckUrl); + }); + + // Set your HealthCheck UI Storage here + healthChecksUiBuilder.AddInMemoryStorage(); + + services.MapHealthChecksUiEndpoints(options => + { + options.UIPath = "/health-ui"; + options.ApiPath = "/health-api"; + }); + } + + private static IServiceCollection ConfigureHealthCheckEndpoint(this IServiceCollection services, string path) + { + services.Configure(options => + { + options.EndpointConfigureActions.Add(endpointContext => + { + endpointContext.Endpoints.MapHealthChecks( + new PathString(path.EnsureStartsWith('/')), + new HealthCheckOptions + { + Predicate = _ => true, + ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse, + AllowCachingResponses = false, + }); + }); + }); + + return services; + } + + private static IServiceCollection MapHealthChecksUiEndpoints(this IServiceCollection services, Action? setupOption = null) + { + services.Configure(routerOptions => + { + routerOptions.EndpointConfigureActions.Add(endpointContext => + { + endpointContext.Endpoints.MapHealthChecksUI(setupOption); + }); + }); + + return services; + } +} diff --git a/src/Hua.Abp.Demo.HttpApi.Host/Hua.Abp.Demo.HttpApi.Host.abppkg b/src/Hua.Abp.Demo.HttpApi.Host/Hua.Abp.Demo.HttpApi.Host.abppkg new file mode 100644 index 0000000..8e711fe --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/Hua.Abp.Demo.HttpApi.Host.abppkg @@ -0,0 +1,4 @@ +{ + "role": "host.http-api", + "projectId": "0bec1cdf-1405-4d9e-a588-35efd0e960c3" +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi.Host/Hua.Abp.Demo.HttpApi.Host.csproj b/src/Hua.Abp.Demo.HttpApi.Host/Hua.Abp.Demo.HttpApi.Host.csproj new file mode 100644 index 0000000..0dc36dc --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/Hua.Abp.Demo.HttpApi.Host.csproj @@ -0,0 +1,60 @@ + + + + + + net10.0 + enable + InProcess + Hua.Abp.Demo + true + cc8b5af8-9aca-47f2-b21e-77f940a2f51b + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Hua.Abp.Demo.HttpApi.Host/Pages/Index.cshtml b/src/Hua.Abp.Demo.HttpApi.Host/Pages/Index.cshtml new file mode 100644 index 0000000..3a5e5bd --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/Pages/Index.cshtml @@ -0,0 +1,127 @@ +@page +@using Microsoft.AspNetCore.Mvc.Localization +@using Microsoft.AspNetCore.Http.Extensions +@using Hua.Abp.Demo.Localization +@using Hua.Abp.Demo.Pages +@using Volo.Abp.Account.Localization +@using Volo.Abp.Users +@using Volo.Abp.AspNetCore.Mvc.UI.Theming +@using Volo.Abp.Ui.Branding +@model IndexModel +@inject IHtmlLocalizer L +@inject IHtmlLocalizer AccountLocalizer +@inject ICurrentUser CurrentUser +@inject IBrandingProvider BrandingProvider +@inject ITheme Theme +@{ + Layout = Theme.GetEmptyLayout(); +} + +

+
+ + + + + +
+
diff --git a/src/Hua.Abp.Demo.HttpApi.Host/Pages/Index.cshtml.cs b/src/Hua.Abp.Demo.HttpApi.Host/Pages/Index.cshtml.cs new file mode 100644 index 0000000..2954bf4 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/Pages/Index.cshtml.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using System.Globalization; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; +using Volo.Abp.Localization; +using Volo.Abp.OpenIddict.Applications; + +namespace Hua.Abp.Demo.Pages; + +public class IndexModel : AbpPageModel +{ + public List? Applications { get; protected set; } + + public IReadOnlyList? Languages { get; protected set; } + + public string? CurrentLanguage { get; protected set; } + + protected IOpenIddictApplicationRepository OpenIdApplicationRepository { get; } + + protected ILanguageProvider LanguageProvider { get; } + + public IndexModel(IOpenIddictApplicationRepository openIdApplicationmRepository, ILanguageProvider languageProvider) + { + OpenIdApplicationRepository = openIdApplicationmRepository; + LanguageProvider = languageProvider; + } + + public async Task OnGetAsync() + { + Applications = await OpenIdApplicationRepository.GetListAsync(); + + Languages = await LanguageProvider.GetLanguagesAsync(); + CurrentLanguage = CultureInfo.CurrentCulture.DisplayName; + } +} diff --git a/src/Hua.Abp.Demo.HttpApi.Host/Pages/_ViewImports.cshtml b/src/Hua.Abp.Demo.HttpApi.Host/Pages/_ViewImports.cshtml new file mode 100644 index 0000000..c1da1f5 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/Pages/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi.Host/Program.cs b/src/Hua.Abp.Demo.HttpApi.Host/Program.cs new file mode 100644 index 0000000..fc5eb72 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/Program.cs @@ -0,0 +1,63 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Events; + +namespace Hua.Abp.Demo; + +public class Program +{ + public async static Task Main(string[] args) + { + Log.Logger = new LoggerConfiguration() + .WriteTo.Async(c => c.File("Logs/logs.txt")) + .WriteTo.Async(c => c.Console()) + .CreateBootstrapLogger(); + + try + { + Log.Information("Starting Hua.Abp.Demo.HttpApi.Host."); + var builder = WebApplication.CreateBuilder(args); + builder.Host + .AddAppSettingsSecretsJson() + .UseAutofac() + .UseSerilog((context, services, loggerConfiguration) => + { + loggerConfiguration + #if DEBUG + .MinimumLevel.Debug() + #else + .MinimumLevel.Information() + #endif + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) + .Enrich.FromLogContext() + .WriteTo.Async(c => c.File("Logs/logs.txt")) + .WriteTo.Async(c => c.Console()) + .WriteTo.Async(c => c.AbpStudio(services)); + }); + await builder.AddApplicationAsync(); + var app = builder.Build(); + await app.InitializeApplicationAsync(); + await app.RunAsync(); + return 0; + } + catch (Exception ex) + { + if (ex is HostAbortedException) + { + throw; + } + + Log.Fatal(ex, "Host terminated unexpectedly!"); + return 1; + } + finally + { + Log.CloseAndFlush(); + } + } +} diff --git a/src/Hua.Abp.Demo.HttpApi.Host/Properties/launchSettings.json b/src/Hua.Abp.Demo.HttpApi.Host/Properties/launchSettings.json new file mode 100644 index 0000000..c1210c0 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "https://localhost:44322", + "sslPort": 44322 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Hua.Abp.Demo.HttpApi.Host": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "https://localhost:44322", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi.Host/abp.resourcemapping.js b/src/Hua.Abp.Demo.HttpApi.Host/abp.resourcemapping.js new file mode 100644 index 0000000..4a2ad45 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/abp.resourcemapping.js @@ -0,0 +1,11 @@ +module.exports = { + aliases: { + + }, + clean: [ + + ], + mappings: { + + } +}; diff --git a/src/Hua.Abp.Demo.HttpApi.Host/appsettings.Development.json b/src/Hua.Abp.Demo.HttpApi.Host/appsettings.Development.json new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/appsettings.Development.json @@ -0,0 +1,2 @@ +{ +} diff --git a/src/Hua.Abp.Demo.HttpApi.Host/appsettings.json b/src/Hua.Abp.Demo.HttpApi.Host/appsettings.json new file mode 100644 index 0000000..4f09c03 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/appsettings.json @@ -0,0 +1,21 @@ +{ + "App": { + "SelfUrl": "https://localhost:44322", + "AngularUrl": "http://localhost:4200,*", + "CorsOrigins": "https://*.Demo.com,http://localhost:4200,*", + "RedirectAllowedUrls": "http://localhost:4200,*", + "DisablePII": false, + "HealthCheckUrl": "/health-status" + }, + "ConnectionStrings": { + "Default": "Host=localhost;Port=5432;Database=Demo;User ID=postgres;Password=123456;" + }, + "AuthServer": { + "Authority": "https://localhost:44322", + "RequireHttpsMetadata": true, + "SwaggerClientId": "Demo_Swagger", + "CertificatePassPhrase": "a8dad6bd-08cf-40f9-baaf-873686b50b75" + }, + "StringEncryption": { + "DefaultPassPhrase": "xleACjIr9Lbh6yNy" + }} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi.Host/package.json b/src/Hua.Abp.Demo.HttpApi.Host/package.json new file mode 100644 index 0000000..33a8190 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/package.json @@ -0,0 +1,8 @@ +{ + "version": "1.0.0", + "name": "my-app", + "private": true, + "dependencies": { + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.0.1" + } +} diff --git a/src/Hua.Abp.Demo.HttpApi.Host/web.config b/src/Hua.Abp.Demo.HttpApi.Host/web.config new file mode 100644 index 0000000..c6a5224 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/web.config @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/global-scripts.js b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/global-scripts.js new file mode 100644 index 0000000..e8136b0 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/global-scripts.js @@ -0,0 +1 @@ +/* Your Global Scripts */ diff --git a/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/global-styles.css b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/global-styles.css new file mode 100644 index 0000000..4d4b8b7 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/global-styles.css @@ -0,0 +1,8 @@ +:root { + --lpx-logo: url('/images/logo/leptonxlite/logo-light-thumbnail.png'); + --lpx-logo-icon: url('/images/logo/leptonxlite/logo-light-thumbnail.png'); +} +:root .abp-account-layout .lpx-brand-logo{ + --lpx-logo: url('/images/logo/leptonxlite/logo-dark-thumbnail.png'); + background-position: left; +} diff --git a/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/angular.svg b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/angular.svg new file mode 100644 index 0000000..468c4ba --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/angular.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/aspnetcore.svg b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/aspnetcore.svg new file mode 100644 index 0000000..82a2ef8 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/aspnetcore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/blazor.svg b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/blazor.svg new file mode 100644 index 0000000..2f5a30c --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/blazor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/swagger.svg b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/swagger.svg new file mode 100644 index 0000000..908edf5 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/clients/swagger.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/logo/leptonxlite/logo-dark-thumbnail.png b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/logo/leptonxlite/logo-dark-thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..9734a07a4d4539d3081bb897ffc8d5e75dab8798 GIT binary patch literal 10695 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 iRGz-n4VZ}kM?W?F&FYYBo literal 0 HcmV?d00001 diff --git a/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/logo/leptonxlite/logo-dark.png b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/logo/leptonxlite/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a3bbe82224deec74650461230f66d609eda717e3 GIT binary patch literal 38171 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 MU)LDY2zE;NA05R;CIA2c literal 0 HcmV?d00001 diff --git a/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/logo/leptonxlite/logo-light.png b/src/Hua.Abp.Demo.HttpApi.Host/wwwroot/images/logo/leptonxlite/logo-light.png new file mode 100644 index 0000000000000000000000000000000000000000..761fb4443d597661e7700574e52b787d7ed7255b GIT binary patch literal 33228 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 nuxmBTJ6Y+ll0437Z literal 0 HcmV?d00001 diff --git a/src/Hua.Abp.Demo.HttpApi.Host/yarn.lock b/src/Hua.Abp.Demo.HttpApi.Host/yarn.lock new file mode 100644 index 0000000..29b704a --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi.Host/yarn.lock @@ -0,0 +1,306 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@abp/aspnetcore.mvc.ui.theme.leptonxlite@~5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.leptonxlite/-/aspnetcore.mvc.ui.theme.leptonxlite-5.0.1.tgz#da337d369e4fbce3e20cc29f664060cbcc4093e9" + integrity sha512-N5FmoWeJnXQe4qJQlzxPKDKHaNN1N6I/CpT6w+7hNcuLE/cHd+HMuup2oismhc1MeVN13+idtt3p6/iH3MqeDQ== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~10.0.1" + +"@abp/aspnetcore.mvc.ui.theme.shared@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.0.1.tgz#3c525bbc0da2b4e603b609289af623a030953f6d" + integrity sha512-euCjtPG2AjZ9AFbRQNh9649f40rQRfq58ZLvjUCfCvotbe7Fl+FaZgyIukpxXqKgd14NtCd2xPbvRM6/3Wj6IQ== + dependencies: + "@abp/aspnetcore.mvc.ui" "~10.0.1" + "@abp/bootstrap" "~10.0.1" + "@abp/bootstrap-datepicker" "~10.0.1" + "@abp/bootstrap-daterangepicker" "~10.0.1" + "@abp/datatables.net-bs5" "~10.0.1" + "@abp/font-awesome" "~10.0.1" + "@abp/jquery-form" "~10.0.1" + "@abp/jquery-validation-unobtrusive" "~10.0.1" + "@abp/lodash" "~10.0.1" + "@abp/luxon" "~10.0.1" + "@abp/malihu-custom-scrollbar-plugin" "~10.0.1" + "@abp/moment" "~10.0.1" + "@abp/select2" "~10.0.1" + "@abp/sweetalert2" "~10.0.1" + "@abp/timeago" "~10.0.1" + +"@abp/aspnetcore.mvc.ui@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.0.1.tgz#b004dc6313b9320b05f465eeb9e74877766ea0f0" + integrity sha512-IEiLfdpDwtrGek/z7iBlgKlZdCvgaL2q9/GGLySrLknnVtv/qONzYburveZsKw8LT7PbZWRQRBh2n7v6TT7M9w== + dependencies: + ansi-colors "^4.1.3" + +"@abp/bootstrap-datepicker@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.0.1.tgz#5d58e5039e39d84b179a0c343d616ab0fc7c38d4" + integrity sha512-hwpSDUTM/A/Rn+3Hjjt3xG7QdhmFruM7fGEEU8kd7Qowimx2XVNIM5Ua5obt5bGTyBmsaAx4HnurjJJn1oh4ng== + dependencies: + bootstrap-datepicker "^1.10.1" + +"@abp/bootstrap-daterangepicker@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.0.1.tgz#8ff88aed898e46c36a3e9601a791cb0fa1134f28" + integrity sha512-a1hhaSk+SffutUI0CxUgAG6Zmx/Y4L7i1LEsQff4OEq0j8ipaHT+5UHMXf2DbCMo7yoZh2yUXQAATO0A/O2V+A== + dependencies: + bootstrap-daterangepicker "^3.1.0" + +"@abp/bootstrap@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.0.1.tgz#cb857f21814097522fbd7e5c1a36cb22182e9f3e" + integrity sha512-AK/8ykw4SYjLgFgJE1zb2Mevn6ypqXqETbndN887JSny1QRrLUBVOKy6g+pnPUqI45/4wPfas7H9WgjFINiK2g== + dependencies: + "@abp/core" "~10.0.1" + bootstrap "^5.3.8" + +"@abp/core@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.0.1.tgz#c96563310d28137b0ac24efff74a969fa13aa7bb" + integrity sha512-mc/Wve/fl/B3cLqQ18IXO0lw1QCi3kCbi8PxRoLowD8NZEguezNglFjNqdvHNvBaWpZpMgJc2U+B15giB0946w== + dependencies: + "@abp/utils" "~10.0.1" + +"@abp/datatables.net-bs5@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.0.1.tgz#1b33c14e9dabd0b29cc4d6f05120607a14313d55" + integrity sha512-0ww7HZ9m/OZWRQ2/9gNNgd59FpfvWSdw21onCBgJ7eaLd6KQeeFqbXm4eYjHoLgyRwk8c6u/F9ciir3EeTivhw== + dependencies: + "@abp/datatables.net" "~10.0.1" + datatables.net-bs5 "^2.3.4" + +"@abp/datatables.net@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.0.1.tgz#ed45edcb4ee6832f38d4f1a56b5c0e1b126e8b82" + integrity sha512-DR53PGhHbW0ZdzeT7PWvBSfZrSyF2eWo1zAzCXsG+MsVRIiNzUNjipeq1igmd0PtXi2FHb76xS2utgAfgZEZ1A== + dependencies: + "@abp/jquery" "~10.0.1" + datatables.net "^2.3.4" + +"@abp/font-awesome@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.0.1.tgz#8c75feda6e394143f7e1cbe1ac8fc12b275bafed" + integrity sha512-2DDjc+EJcHDPUm/LHzbVjVMmChIaiEqMasKQ7qhxDq6yL102wMibPz0JR6Q9EYmYWro+Blf3Q0/0ECYLa8BgnQ== + dependencies: + "@abp/core" "~10.0.1" + "@fortawesome/fontawesome-free" "^7.0.1" + +"@abp/jquery-form@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-10.0.1.tgz#e19c89863e2175a5e5db638ab95f648d2ee18ab3" + integrity sha512-nVZwEv0VeIP+xQZk7bz8S2RbKhkOUTKSf6mkdkLlna+8TNW0Ry8tBns79n/I0wYUh5007hxQbqb3L5TG4kq4+Q== + dependencies: + "@abp/jquery" "~10.0.1" + jquery-form "^4.3.0" + +"@abp/jquery-validation-unobtrusive@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.0.1.tgz#35d43938c05ed3f6aab67bfd574c82f5e83a277f" + integrity sha512-jch+haMxPqMcN7CrFoEnULXHSdP43E+CdwDkCYJnTjEydISMyr2CwW4cIA/ab4kjNXs1DloW+r8+unRnOzClWQ== + dependencies: + "@abp/jquery-validation" "~10.0.1" + jquery-validation-unobtrusive "^4.0.0" + +"@abp/jquery-validation@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.0.1.tgz#20c4c313d9ec73b4dc242729ab3250f747b76b66" + integrity sha512-cUGUCOuwKc1TR1R8GHpjN9HokWK6p6ElM4sN/J3yY/Nef9wKn4zY98Q3hmFLsCDeV+9Sjex1xcqNjqU3ZOiZSg== + dependencies: + "@abp/jquery" "~10.0.1" + jquery-validation "^1.21.0" + +"@abp/jquery@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.0.1.tgz#fc6fb5fed08e6ab113e0096cd6c00ad10461fef4" + integrity sha512-hIQkMc9ouQz4QKaEJSVzZqQMyWdF7tmzZ8WlVN6EeWEDUKPLyuibhwTvTEO6u+17ZP7GhlldONHsRwTdc0zlJA== + dependencies: + "@abp/core" "~10.0.1" + jquery "~3.7.1" + +"@abp/lodash@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.0.1.tgz#41df6cc6d375ea1e6a5a27745b68b0964bcbc295" + integrity sha512-15uv5kNtXBb+3hm7Qorh95mLhSIJkIbGa2bp3Tyw4jEdXTFPsb1v5FCC2m7LEaEUNuNgzXFJGT818Xi58AI0Rw== + dependencies: + "@abp/core" "~10.0.1" + lodash "^4.17.21" + +"@abp/luxon@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.0.1.tgz#97c920867775def2bb1628b47507e45388179e40" + integrity sha512-LL/J4oyA+o9res57cq/+qsilTvo7ikxtCdpxGSIEjkvNTmYzcChv1ixmDMvqqMvJFELJ9R+1V7NeZhXBAiR6Lw== + dependencies: + "@abp/core" "~10.0.1" + luxon "^3.7.2" + +"@abp/malihu-custom-scrollbar-plugin@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.0.1.tgz#53dc824537110f155d00c46b1ffe7c6eff060040" + integrity sha512-S4zKvlTMvhkFCBhakql1bLB/lHlRjPy8An0KB2pBKvxfIvzUQn8YmiBSK51Hq/Hf6ZnnSJkNr35cb9TcHUwkNA== + dependencies: + "@abp/core" "~10.0.1" + malihu-custom-scrollbar-plugin "^3.1.5" + +"@abp/moment@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.0.1.tgz#dce2c26602ac9c77ea0209e6a3727a7e9f04f4c4" + integrity sha512-fRrMLQhYzOSATSM4hWdr7Y5ggbMd23ffivpDB4O2BDYUXTcfiWyVVKDd+5uLZi+znkWz29bNN4WswileuHvaGw== + dependencies: + moment "^2.30.1" + +"@abp/select2@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.0.1.tgz#df92daf67f46aa2fc884ef84f9da68b1fb8e63d7" + integrity sha512-VQxYH0Uqa7EN+F6XBkDMz3yy8yTM6xcZ6593WtZupl9UbiHToGElsem3ibnZueoyMHcd3ByYw968uvJX7zudNw== + dependencies: + "@abp/core" "~10.0.1" + select2 "^4.0.13" + +"@abp/sweetalert2@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.0.1.tgz#a26874fd51ddffeba60f4506eb1a5c914ae3efae" + integrity sha512-4USaGSA5+7O6D+5a4YhluYPKUyOAassUUuKJATP8IqLRtpkh16P4tJ/7+QWvnFDIgJLURpbjmOiN2xhVzhpxvw== + dependencies: + "@abp/core" "~10.0.1" + sweetalert2 "^11.23.0" + +"@abp/timeago@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.0.1.tgz#6bc36ab7dd3deea114ff1d68dbda908202837cf6" + integrity sha512-Wd2KY8B95ycsRDn5ouY3l3U+niBMEd+XCgZs6CoaMtiQ1AxkT7/iPqNCMJMKjeIjBQ/A1CSmKL7MI+BGw1bxBA== + dependencies: + "@abp/jquery" "~10.0.1" + timeago "^1.6.7" + +"@abp/utils@~10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.0.1.tgz#0db8713481cb781c3c4d07a150b7f45a65466b50" + integrity sha512-YGXgco/qYSxGaQfNTHDIMU1MyEuVDe3FayIZWPW5+p+elwp4DPFD4rvD+6ZLM0Jr30k5UdKT4IFAsw7wduQWrw== + dependencies: + just-compare "^2.3.0" + +"@fortawesome/fontawesome-free@^7.0.1": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.1.0.tgz#8eb76278515341720aa74485266f8be121089529" + integrity sha512-+WxNld5ZCJHvPQCr/GnzCTVREyStrAJjisUPtUxG5ngDA8TMlPnKp6dddlTpai4+1GNmltAeuk1hJEkBohwZYA== + +ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +bootstrap-datepicker@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/bootstrap-datepicker/-/bootstrap-datepicker-1.10.1.tgz#0a8bec42957ea1ce1272b91bcf2b53696629fb86" + integrity sha512-GIe+fsLp9Hi30oW7L2v2Q9/a4+aojrIA2p4ZagtLuKw2lpfQgjJjM0L6vl/lYQydGXWUbpoKbEC/O5tzWIkEKQ== + dependencies: + jquery ">=3.4.0 <4.0.0" + +bootstrap-daterangepicker@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bootstrap-daterangepicker/-/bootstrap-daterangepicker-3.1.0.tgz#632e6fb2de4b6360c5c0a9d5f6adb9aace051fe8" + integrity sha512-oaQZx6ZBDo/dZNyXGVi2rx5GmFXThyQLAxdtIqjtLlYVaQUfQALl5JZMJJZzyDIX7blfy4ppZPAJ10g8Ma4d/g== + dependencies: + jquery ">=1.10" + moment "^2.9.0" + +bootstrap@^5.3.8: + version "5.3.8" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.8.tgz#6401a10057a22752d21f4e19055508980656aeed" + integrity sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg== + +datatables.net-bs5@^2.3.4: + version "2.3.6" + resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-2.3.6.tgz#88e9b015cb3d260f3e874f0f9ad16dc566b997da" + integrity sha512-oUNGjZrpNC2fY3l/6V4ijTC9kyVKU4Raons+RFmq2J7590rPn0c+5WAYKBx0evgW/CW7WfhStGBrU7+WJig6Og== + dependencies: + datatables.net "2.3.6" + jquery ">=1.7" + +datatables.net@2.3.6, datatables.net@^2.3.4: + version "2.3.6" + resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-2.3.6.tgz#a11be57a2b50d7231cae2980a8ff1df3c18b7b17" + integrity sha512-xQ/dCxrjfxM0XY70wSIzakkTZ6ghERwlLmAPyCnu8Sk5cyt9YvOVyOsFNOa/BZ/lM63Q3i2YSSvp/o7GXZGsbg== + dependencies: + jquery ">=1.7" + +jquery-form@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/jquery-form/-/jquery-form-4.3.0.tgz#7d3961c314a1f2d15298f4af1d3943f54f4149c6" + integrity sha512-q3uaVCEWdLOYUCI6dpNdwf/7cJFOsUgdpq6r0taxtGQ5NJSkOzofyWm4jpOuJ5YxdmL1FI5QR+q+HB63HHLGnQ== + dependencies: + jquery ">=1.7.2" + +jquery-mousewheel@>=3.0.6: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jquery-mousewheel/-/jquery-mousewheel-3.2.2.tgz#48c833f6260ee0c46d438a999e7d0060ec9eed0b" + integrity sha512-JP71xTAg08ZY3hcs9ZbYUZ5i+dkSsz4yRl/zpWkAmtzc+kMs5EfPkpkINSidiLYMaR0MTo3DfFGF9WIezMsFQQ== + dependencies: + jquery ">=1.2.6" + +jquery-validation-unobtrusive@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#dfcf25a558496a2c883db6021d10f5398d15f99d" + integrity sha512-1ervYFFv6LX/rp7ktuLnMakHNG0piNRDyROI8Ir3hL1vPIwylAehB1AY3BPrYJnzW3WmwWryZq+Bz4sazZK9iQ== + dependencies: + jquery "^3.6.0" + jquery-validation ">=1.19" + +jquery-validation@>=1.19, jquery-validation@^1.21.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/jquery-validation/-/jquery-validation-1.21.0.tgz#78fc05ab76020912a246af3661b3f54a438bca93" + integrity sha512-xNot0rlUIgu7duMcQ5qb6MGkGL/Z1PQaRJQoZAURW9+a/2PGOUxY36o/WyNeP2T9R6jvWB8Z9lUVvvQWI/Zs5w== + +jquery@>=1.10, jquery@>=1.2.6, "jquery@>=1.5.0 <4.0", jquery@>=1.7, jquery@>=1.7.2, "jquery@>=3.4.0 <4.0.0", jquery@^3.6.0, jquery@~3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" + integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== + +just-compare@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-2.3.0.tgz#a2adcc1d1940536263275f5a1ef1298bcacfeda7" + integrity sha512-6shoR7HDT+fzfL3gBahx1jZG3hWLrhPAf+l7nCwahDdT9XDtosB9kIF0ZrzUp5QY8dJWfQVr5rnsPqsbvflDzg== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +luxon@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba" + integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew== + +malihu-custom-scrollbar-plugin@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.5.tgz#310cecc5e59415a1c29e9dfb5d2b6e01d66a29ef" + integrity sha512-lwW3LgI+CNDMPnP4ED2la6oYxWMkCXlnhex+s2wuOLhFDFGnGmQuTQVdRK9bvDLpxs10sGlfErVufJy9ztfgJQ== + dependencies: + jquery-mousewheel ">=3.0.6" + +moment@^2.30.1, moment@^2.9.0: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +select2@^4.0.13: + version "4.0.13" + resolved "https://registry.yarnpkg.com/select2/-/select2-4.0.13.tgz#0dbe377df3f96167c4c1626033e924372d8ef44d" + integrity sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw== + +sweetalert2@^11.23.0: + version "11.26.17" + resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.26.17.tgz#be5dd2a9b8d1c3b2672de4de4d172e62f7be3a6d" + integrity sha512-kkaySn1IRfwNlf9AkZVqDmBINDWw9NRR6Ij0O5dBRBOD1+mbtZJWxxR9/pA90nce9E5tIIkJ7SWij4rMWXtA1g== + +timeago@^1.6.7: + version "1.6.7" + resolved "https://registry.yarnpkg.com/timeago/-/timeago-1.6.7.tgz#afd467c29a911e697fc22a81888c7c3022783cb5" + integrity sha512-FikcjN98+ij0siKH4VO4dZ358PR3oDDq4Vdl1+sN9gWz1/+JXGr3uZbUShYH/hL7bMhcTpPbplJU5Tej4b4jbQ== + dependencies: + jquery ">=1.5.0 <4.0" diff --git a/src/Hua.Abp.Demo.HttpApi/Controllers/DemoController.cs b/src/Hua.Abp.Demo.HttpApi/Controllers/DemoController.cs new file mode 100644 index 0000000..114f9ef --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi/Controllers/DemoController.cs @@ -0,0 +1,14 @@ +using Hua.Abp.Demo.Localization; +using Volo.Abp.AspNetCore.Mvc; + +namespace Hua.Abp.Demo.Controllers; + +/* Inherit your controllers from this class. + */ +public abstract class DemoController : AbpControllerBase +{ + protected DemoController() + { + LocalizationResource = typeof(DemoResource); + } +} diff --git a/src/Hua.Abp.Demo.HttpApi/DemoHttpApiModule.cs b/src/Hua.Abp.Demo.HttpApi/DemoHttpApiModule.cs new file mode 100644 index 0000000..13b3141 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi/DemoHttpApiModule.cs @@ -0,0 +1,41 @@ +using Localization.Resources.AbpUi; +using Hua.Abp.Demo.Localization; +using Volo.Abp.Account; +using Volo.Abp.SettingManagement; +using Volo.Abp.FeatureManagement; +using Volo.Abp.Identity; +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement.HttpApi; +using Volo.Abp.Localization; +using Volo.Abp.TenantManagement; + +namespace Hua.Abp.Demo; + + [DependsOn( + typeof(DemoApplicationContractsModule), + typeof(AbpPermissionManagementHttpApiModule), + typeof(AbpSettingManagementHttpApiModule), + typeof(AbpAccountHttpApiModule), + typeof(AbpIdentityHttpApiModule), + typeof(AbpTenantManagementHttpApiModule), + typeof(AbpFeatureManagementHttpApiModule) + )] +public class DemoHttpApiModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + ConfigureLocalization(); + } + + private void ConfigureLocalization() + { + Configure(options => + { + options.Resources + .Get() + .AddBaseTypes( + typeof(AbpUiResource) + ); + }); + } +} diff --git a/src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.abppkg b/src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.abppkg new file mode 100644 index 0000000..515bfe6 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.http-api" +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.abppkg.analyze.json b/src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.abppkg.analyze.json new file mode 100644 index 0000000..07311f8 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.abppkg.analyze.json @@ -0,0 +1,118 @@ +{ + "name": "Hua.Abp.Demo.HttpApi", + "hash": "", + "contents": [ + { + "namespace": "Hua.Abp.Demo", + "dependsOnModules": [ + { + "declaringAssemblyName": "Hua.Abp.Demo.Application.Contracts", + "namespace": "Hua.Abp.Demo", + "name": "DemoApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.PermissionManagement.HttpApi", + "namespace": "Volo.Abp.PermissionManagement.HttpApi", + "name": "AbpPermissionManagementHttpApiModule" + }, + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.HttpApi", + "namespace": "Volo.Abp.SettingManagement", + "name": "AbpSettingManagementHttpApiModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Identity.Pro.HttpApi", + "namespace": "Volo.Abp.Identity", + "name": "AbpIdentityHttpApiModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Account.Pro.Admin.HttpApi", + "namespace": "Volo.Abp.Account", + "name": "AbpAccountAdminHttpApiModule" + }, + { + "declaringAssemblyName": "Volo.Abp.TextTemplateManagement.HttpApi", + "namespace": "Volo.Abp.TextTemplateManagement", + "name": "TextTemplateManagementHttpApiModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AuditLogging.HttpApi", + "namespace": "Volo.Abp.AuditLogging", + "name": "AbpAuditLoggingHttpApiModule" + }, + { + "declaringAssemblyName": "Volo.Abp.OpenIddict.Pro.HttpApi", + "namespace": "Volo.Abp.OpenIddict", + "name": "AbpOpenIddictProHttpApiModule" + }, + { + "declaringAssemblyName": "Volo.Abp.LanguageManagement.HttpApi", + "namespace": "Volo.Abp.LanguageManagement", + "name": "LanguageManagementHttpApiModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Gdpr.HttpApi", + "namespace": "Volo.Abp.Gdpr", + "name": "AbpGdprHttpApiModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Account.Pro.Public.HttpApi", + "namespace": "Volo.Abp.Account", + "name": "AbpAccountPublicHttpApiModule" + }, + { + "declaringAssemblyName": "Volo.Abp.FeatureManagement.HttpApi", + "namespace": "Volo.Abp.FeatureManagement", + "name": "AbpFeatureManagementHttpApiModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "DemoHttpApiModule", + "summary": null + } + ] +} \ No newline at end of file diff --git a/src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.csproj b/src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.csproj new file mode 100644 index 0000000..4bbf096 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi/Hua.Abp.Demo.HttpApi.csproj @@ -0,0 +1,27 @@ + + + + + + net10.0 + enable + Hua.Abp.Demo + + + + + + + + + + + + + + + + + + + diff --git a/src/Hua.Abp.Demo.HttpApi/Models/Test/TestModel.cs b/src/Hua.Abp.Demo.HttpApi/Models/Test/TestModel.cs new file mode 100644 index 0000000..2e4ec91 --- /dev/null +++ b/src/Hua.Abp.Demo.HttpApi/Models/Test/TestModel.cs @@ -0,0 +1,10 @@ +using System; + +namespace Hua.Abp.Demo.Models.Test; + +public class TestModel +{ + public string? Name { get; set; } + + public DateTime BirthDate { get; set; } +} diff --git a/test/Hua.Abp.Demo.Application.Tests/Books/BookAppService_Tests .cs b/test/Hua.Abp.Demo.Application.Tests/Books/BookAppService_Tests .cs new file mode 100644 index 0000000..9f90aef --- /dev/null +++ b/test/Hua.Abp.Demo.Application.Tests/Books/BookAppService_Tests .cs @@ -0,0 +1,73 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Modularity; +using Volo.Abp.Validation; +using Xunit; + +namespace Hua.Abp.Demo.Books; + +public abstract class BookAppService_Tests : DemoApplicationTestBase + where TStartupModule : IAbpModule +{ + private readonly IBookAppService _bookAppService; + + protected BookAppService_Tests() + { + _bookAppService = GetRequiredService(); + } + + [Fact] + public async Task Should_Get_List_Of_Books() + { + //Act + var result = await _bookAppService.GetListAsync( + new PagedAndSortedResultRequestDto() + ); + + //Assert + result.TotalCount.ShouldBeGreaterThan(0); + result.Items.ShouldContain(b => b.Name == "1984"); + } + + [Fact] + public async Task Should_Create_A_Valid_Book() + { + //Act + var result = await _bookAppService.CreateAsync( + new CreateUpdateBookDto + { + Name = "New test book 42", + Price = 10, + PublishDate = DateTime.Now, + Type = BookType.ScienceFiction + } + ); + + //Assert + result.Id.ShouldNotBe(Guid.Empty); + result.Name.ShouldBe("New test book 42"); + } + + [Fact] + public async Task Should_Not_Create_A_Book_Without_Name() + { + var exception = await Assert.ThrowsAsync(async () => + { + await _bookAppService.CreateAsync( + new CreateUpdateBookDto + { + Name = "", + Price = 10, + PublishDate = DateTime.Now, + Type = BookType.ScienceFiction + } + ); + }); + + exception.ValidationErrors + .ShouldContain(err => err.MemberNames.Any(mem => mem == "Name")); + } +} \ No newline at end of file diff --git a/test/Hua.Abp.Demo.Application.Tests/DemoApplicationTestBase.cs b/test/Hua.Abp.Demo.Application.Tests/DemoApplicationTestBase.cs new file mode 100644 index 0000000..8496955 --- /dev/null +++ b/test/Hua.Abp.Demo.Application.Tests/DemoApplicationTestBase.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Modularity; + +namespace Hua.Abp.Demo; + +public abstract class DemoApplicationTestBase : DemoTestBase + where TStartupModule : IAbpModule +{ + +} diff --git a/test/Hua.Abp.Demo.Application.Tests/DemoApplicationTestModule.cs b/test/Hua.Abp.Demo.Application.Tests/DemoApplicationTestModule.cs new file mode 100644 index 0000000..2fdf512 --- /dev/null +++ b/test/Hua.Abp.Demo.Application.Tests/DemoApplicationTestModule.cs @@ -0,0 +1,12 @@ +using Volo.Abp.Modularity; + +namespace Hua.Abp.Demo; + +[DependsOn( + typeof(DemoApplicationModule), + typeof(DemoDomainTestModule) +)] +public class DemoApplicationTestModule : AbpModule +{ + +} diff --git a/test/Hua.Abp.Demo.Application.Tests/Hua.Abp.Demo.Application.Tests.abppkg b/test/Hua.Abp.Demo.Application.Tests/Hua.Abp.Demo.Application.Tests.abppkg new file mode 100644 index 0000000..a686451 --- /dev/null +++ b/test/Hua.Abp.Demo.Application.Tests/Hua.Abp.Demo.Application.Tests.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.test" +} \ No newline at end of file diff --git a/test/Hua.Abp.Demo.Application.Tests/Hua.Abp.Demo.Application.Tests.csproj b/test/Hua.Abp.Demo.Application.Tests/Hua.Abp.Demo.Application.Tests.csproj new file mode 100644 index 0000000..2d82527 --- /dev/null +++ b/test/Hua.Abp.Demo.Application.Tests/Hua.Abp.Demo.Application.Tests.csproj @@ -0,0 +1,20 @@ + + + + + + net10.0 + enable + Hua.Abp.Demo + + + + + + + + + + + + diff --git a/test/Hua.Abp.Demo.Application.Tests/Samples/SampleAppServiceTests.cs b/test/Hua.Abp.Demo.Application.Tests/Samples/SampleAppServiceTests.cs new file mode 100644 index 0000000..ffc2889 --- /dev/null +++ b/test/Hua.Abp.Demo.Application.Tests/Samples/SampleAppServiceTests.cs @@ -0,0 +1,34 @@ +using Shouldly; +using System.Threading.Tasks; +using Volo.Abp.Identity; +using Volo.Abp.Modularity; +using Xunit; + +namespace Hua.Abp.Demo.Samples; + +/* This is just an example test class. + * Normally, you don't test code of the modules you are using + * (like IIdentityUserAppService here). + * Only test your own application services. + */ +public abstract class SampleAppServiceTests : DemoApplicationTestBase + where TStartupModule : IAbpModule +{ + private readonly IIdentityUserAppService _userAppService; + + protected SampleAppServiceTests() + { + _userAppService = GetRequiredService(); + } + + [Fact] + public async Task Initial_Data_Should_Contain_Admin_User() + { + //Act + var result = await _userAppService.GetListAsync(new GetIdentityUsersInput()); + + //Assert + result.TotalCount.ShouldBeGreaterThan(0); + result.Items.ShouldContain(u => u.UserName == "admin"); + } +} diff --git a/test/Hua.Abp.Demo.Domain.Tests/DemoDomainTestBase.cs b/test/Hua.Abp.Demo.Domain.Tests/DemoDomainTestBase.cs new file mode 100644 index 0000000..bd111ba --- /dev/null +++ b/test/Hua.Abp.Demo.Domain.Tests/DemoDomainTestBase.cs @@ -0,0 +1,10 @@ +using Volo.Abp.Modularity; + +namespace Hua.Abp.Demo; + +/* Inherit from this class for your domain layer tests. */ +public abstract class DemoDomainTestBase : DemoTestBase + where TStartupModule : IAbpModule +{ + +} diff --git a/test/Hua.Abp.Demo.Domain.Tests/DemoDomainTestModule.cs b/test/Hua.Abp.Demo.Domain.Tests/DemoDomainTestModule.cs new file mode 100644 index 0000000..9442960 --- /dev/null +++ b/test/Hua.Abp.Demo.Domain.Tests/DemoDomainTestModule.cs @@ -0,0 +1,12 @@ +using Volo.Abp.Modularity; + +namespace Hua.Abp.Demo; + +[DependsOn( + typeof(DemoDomainModule), + typeof(DemoTestBaseModule) +)] +public class DemoDomainTestModule : AbpModule +{ + +} diff --git a/test/Hua.Abp.Demo.Domain.Tests/Hua.Abp.Demo.Domain.Tests.abppkg b/test/Hua.Abp.Demo.Domain.Tests/Hua.Abp.Demo.Domain.Tests.abppkg new file mode 100644 index 0000000..a686451 --- /dev/null +++ b/test/Hua.Abp.Demo.Domain.Tests/Hua.Abp.Demo.Domain.Tests.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.test" +} \ No newline at end of file diff --git a/test/Hua.Abp.Demo.Domain.Tests/Hua.Abp.Demo.Domain.Tests.csproj b/test/Hua.Abp.Demo.Domain.Tests/Hua.Abp.Demo.Domain.Tests.csproj new file mode 100644 index 0000000..b2ddd1f --- /dev/null +++ b/test/Hua.Abp.Demo.Domain.Tests/Hua.Abp.Demo.Domain.Tests.csproj @@ -0,0 +1,20 @@ + + + + + + net10.0 + enable + Hua.Abp.Demo + + + + + + + + + + + + diff --git a/test/Hua.Abp.Demo.Domain.Tests/Samples/SampleDomainTests.cs b/test/Hua.Abp.Demo.Domain.Tests/Samples/SampleDomainTests.cs new file mode 100644 index 0000000..c3f1ed3 --- /dev/null +++ b/test/Hua.Abp.Demo.Domain.Tests/Samples/SampleDomainTests.cs @@ -0,0 +1,46 @@ +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Identity; +using Volo.Abp.Modularity; +using Xunit; + +namespace Hua.Abp.Demo.Samples; + +/* This is just an example test class. + * Normally, you don't test code of the modules you are using + * (like IdentityUserManager here). + * Only test your own domain services. + */ +public abstract class SampleDomainTests : DemoDomainTestBase + where TStartupModule : IAbpModule +{ + private readonly IIdentityUserRepository _identityUserRepository; + private readonly IdentityUserManager _identityUserManager; + + protected SampleDomainTests() + { + _identityUserRepository = GetRequiredService(); + _identityUserManager = GetRequiredService(); + } + + [Fact] + public async Task Should_Set_Email_Of_A_User() + { + IdentityUser adminUser; + + /* Need to manually start Unit Of Work because + * FirstOrDefaultAsync should be executed while db connection / context is available. + */ + await WithUnitOfWorkAsync(async () => + { + adminUser = await _identityUserRepository + .FindByNormalizedUserNameAsync("ADMIN"); + + await _identityUserManager.SetEmailAsync(adminUser, "newemail@abp.io"); + await _identityUserRepository.UpdateAsync(adminUser); + }); + + adminUser = await _identityUserRepository.FindByNormalizedUserNameAsync("ADMIN"); + adminUser.Email.ShouldBe("newemail@abp.io"); + } +} diff --git a/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/Books/EfCoreBookAppService_Tests.cs b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/Books/EfCoreBookAppService_Tests.cs new file mode 100644 index 0000000..409900b --- /dev/null +++ b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/Books/EfCoreBookAppService_Tests.cs @@ -0,0 +1,10 @@ +using Hua.Abp.Demo.Books; +using Xunit; + +namespace Hua.Abp.Demo.EntityFrameworkCore.Applications.Books; + +[Collection(DemoTestConsts.CollectionDefinitionName)] +public class EfCoreBookAppService_Tests : BookAppService_Tests +{ + +} \ No newline at end of file diff --git a/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppServiceTests.cs b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppServiceTests.cs new file mode 100644 index 0000000..34971cc --- /dev/null +++ b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Applications/EfCoreSampleAppServiceTests.cs @@ -0,0 +1,10 @@ +using Hua.Abp.Demo.Samples; +using Xunit; + +namespace Hua.Abp.Demo.EntityFrameworkCore.Applications; + +[Collection(DemoTestConsts.CollectionDefinitionName)] +public class EfCoreSampleAppServiceTests : SampleAppServiceTests +{ + +} diff --git a/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreCollection.cs b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreCollection.cs new file mode 100644 index 0000000..2e393e1 --- /dev/null +++ b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreCollection.cs @@ -0,0 +1,9 @@ +using Xunit; + +namespace Hua.Abp.Demo.EntityFrameworkCore; + +[CollectionDefinition(DemoTestConsts.CollectionDefinitionName)] +public class DemoEntityFrameworkCoreCollection : ICollectionFixture +{ + +} diff --git a/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreCollectionFixtureBase.cs b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreCollectionFixtureBase.cs new file mode 100644 index 0000000..4ac3556 --- /dev/null +++ b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreCollectionFixtureBase.cs @@ -0,0 +1,9 @@ +using Hua.Abp.Demo.EntityFrameworkCore; +using Xunit; + +namespace Hua.Abp.Demo.EntityFrameworkCore; + +public class DemoEntityFrameworkCoreCollectionFixtureBase : ICollectionFixture +{ + +} diff --git a/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreFixture.cs b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreFixture.cs new file mode 100644 index 0000000..50c40f5 --- /dev/null +++ b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreFixture.cs @@ -0,0 +1,11 @@ +using System; + +namespace Hua.Abp.Demo.EntityFrameworkCore; + +public class DemoEntityFrameworkCoreFixture : IDisposable +{ + public void Dispose() + { + + } +} diff --git a/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreTestBase.cs b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreTestBase.cs new file mode 100644 index 0000000..4203816 --- /dev/null +++ b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreTestBase.cs @@ -0,0 +1,8 @@ +using Volo.Abp; + +namespace Hua.Abp.Demo.EntityFrameworkCore; + +public abstract class DemoEntityFrameworkCoreTestBase : DemoTestBase +{ + +} diff --git a/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreTestModule.cs b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreTestModule.cs new file mode 100644 index 0000000..c9d2795 --- /dev/null +++ b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/DemoEntityFrameworkCoreTestModule.cs @@ -0,0 +1,77 @@ +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.Sqlite; +using Volo.Abp.FeatureManagement; +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement; +using Volo.Abp.Uow; + +namespace Hua.Abp.Demo.EntityFrameworkCore; + +[DependsOn( + typeof(DemoApplicationTestModule), + typeof(DemoEntityFrameworkCoreModule), + typeof(AbpEntityFrameworkCoreSqliteModule) +)] +public class DemoEntityFrameworkCoreTestModule : AbpModule +{ + private SqliteConnection? _sqliteConnection; + + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.SaveStaticFeaturesToDatabase = false; + options.IsDynamicFeatureStoreEnabled = false; + }); + Configure(options => + { + options.SaveStaticPermissionsToDatabase = false; + options.IsDynamicPermissionStoreEnabled = false; + }); + context.Services.AddAlwaysDisableUnitOfWorkTransaction(); + + ConfigureInMemorySqlite(context.Services); + + } + + private void ConfigureInMemorySqlite(IServiceCollection services) + { + _sqliteConnection = CreateDatabaseAndGetConnection(); + + services.Configure(options => + { + options.Configure(context => + { + context.DbContextOptions.UseSqlite(_sqliteConnection); + }); + }); + } + + public override void OnApplicationShutdown(ApplicationShutdownContext context) + { + _sqliteConnection?.Dispose(); + } + + private static SqliteConnection CreateDatabaseAndGetConnection() + { + var connection = new SqliteConnection("Data Source=:memory:"); + connection.Open(); + + var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + + using (var context = new DemoDbContext(options)) + { + context.GetService().CreateTables(); + } + + return connection; + } +} diff --git a/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomainTests.cs b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomainTests.cs new file mode 100644 index 0000000..c31e987 --- /dev/null +++ b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Domains/EfCoreSampleDomainTests.cs @@ -0,0 +1,10 @@ +using Hua.Abp.Demo.Samples; +using Xunit; + +namespace Hua.Abp.Demo.EntityFrameworkCore.Domains; + +[Collection(DemoTestConsts.CollectionDefinitionName)] +public class EfCoreSampleDomainTests : SampleDomainTests +{ + +} diff --git a/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepositoryTests.cs b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepositoryTests.cs new file mode 100644 index 0000000..7a00be6 --- /dev/null +++ b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepositoryTests.cs @@ -0,0 +1,40 @@ +using System; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Identity; +using Xunit; + +namespace Hua.Abp.Demo.EntityFrameworkCore.Samples; + +/* This is just an example test class. + * Normally, you don't test ABP framework code + * Only test your custom repository methods. + */ +[Collection(DemoTestConsts.CollectionDefinitionName)] +public class SampleRepositoryTests : DemoEntityFrameworkCoreTestBase +{ + private readonly IRepository _appUserRepository; + + public SampleRepositoryTests() + { + _appUserRepository = GetRequiredService>(); + } + + [Fact] + public async Task Should_Query_AppUser() + { + /* Need to manually start Unit Of Work because + * FirstOrDefaultAsync should be executed while db connection / context is available. + */ + await WithUnitOfWorkAsync(async () => + { + //Act + var adminUser = await _appUserRepository + .FirstOrDefaultAsync(u => u.UserName == "admin"); + + //Assert + adminUser.ShouldNotBeNull(); + }); + } +} diff --git a/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/Hua.Abp.Demo.EntityFrameworkCore.Tests.abppkg b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/Hua.Abp.Demo.EntityFrameworkCore.Tests.abppkg new file mode 100644 index 0000000..a686451 --- /dev/null +++ b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/Hua.Abp.Demo.EntityFrameworkCore.Tests.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.test" +} \ No newline at end of file diff --git a/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/Hua.Abp.Demo.EntityFrameworkCore.Tests.csproj b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/Hua.Abp.Demo.EntityFrameworkCore.Tests.csproj new file mode 100644 index 0000000..2e8faf6 --- /dev/null +++ b/test/Hua.Abp.Demo.EntityFrameworkCore.Tests/Hua.Abp.Demo.EntityFrameworkCore.Tests.csproj @@ -0,0 +1,21 @@ + + + + + + net10.0 + enable + Hua.Abp.Demo + + + + + + + + + + + + + diff --git a/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs new file mode 100644 index 0000000..80bd2b6 --- /dev/null +++ b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs @@ -0,0 +1,38 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Identity; +using Volo.Abp.Account; + +namespace Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp; + +public class ClientDemoService : ITransientDependency +{ + private readonly IProfileAppService _profileAppService; + private readonly IIdentityUserAppService _identityUserAppService; + + public ClientDemoService( + IProfileAppService profileAppService, + IIdentityUserAppService identityUserAppService) + { + _profileAppService = profileAppService; + _identityUserAppService = identityUserAppService; + } + + public async Task RunAsync() + { + var profileDto = await _profileAppService.GetAsync(); + Console.WriteLine($"UserName : {profileDto.UserName}"); + Console.WriteLine($"Email : {profileDto.Email}"); + Console.WriteLine($"Name : {profileDto.Name}"); + Console.WriteLine($"Surname : {profileDto.Surname}"); + Console.WriteLine(); + + var resultDto = await _identityUserAppService.GetListAsync(new GetIdentityUsersInput()); + Console.WriteLine($"Total users: {resultDto.TotalCount}"); + foreach (var identityUserDto in resultDto.Items) + { + Console.WriteLine($"- [{identityUserDto.Id}] {identityUserDto.Name}"); + } + } +} diff --git a/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/DemoConsoleApiClientModule.cs b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/DemoConsoleApiClientModule.cs new file mode 100644 index 0000000..8c5a36d --- /dev/null +++ b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/DemoConsoleApiClientModule.cs @@ -0,0 +1,30 @@ +using System; +using Microsoft.Extensions.DependencyInjection; +using Polly; +using Volo.Abp.Autofac; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Client.IdentityModel; +using Volo.Abp.Modularity; + +namespace Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp; + +[DependsOn( + typeof(AbpAutofacModule), + typeof(DemoHttpApiClientModule), + typeof(AbpHttpClientIdentityModelModule) + )] +public class DemoConsoleApiClientModule : AbpModule +{ + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(options => + { + options.ProxyClientBuildActions.Add((remoteServiceName, clientBuilder) => + { + clientBuilder.AddTransientHttpErrorPolicy( + policyBuilder => policyBuilder.WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(Math.Pow(2, i))) + ); + }); + }); + } +} diff --git a/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp.abppkg b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp.abppkg new file mode 100644 index 0000000..a686451 --- /dev/null +++ b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.test" +} \ No newline at end of file diff --git a/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp.csproj b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp.csproj new file mode 100644 index 0000000..27c11d5 --- /dev/null +++ b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp.csproj @@ -0,0 +1,42 @@ + + + + Exe + net10.0 + enable + + + + + + PreserveNewest + Always + + + + PreserveNewest + Always + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Program.cs b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Program.cs new file mode 100644 index 0000000..98ec5b4 --- /dev/null +++ b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/Program.cs @@ -0,0 +1,33 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; + +namespace Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp; + +class Program +{ + static async Task Main(string[] args) + { + using (var application = await AbpApplicationFactory.CreateAsync(options => + { + var builder = new ConfigurationBuilder(); + builder.AddJsonFile("appsettings.json", false); + builder.AddJsonFile("appsettings.secrets.json", true); + options.Services.ReplaceConfiguration(builder.Build()); + options.UseAutofac(); + })) + { + await application.InitializeAsync(); + + var demo = application.ServiceProvider.GetRequiredService(); + await demo.RunAsync(); + + Console.WriteLine("Press ENTER to stop application..."); + Console.ReadLine(); + + await application.ShutdownAsync(); + } + } +} diff --git a/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/appsettings.json b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/appsettings.json new file mode 100644 index 0000000..2c81535 --- /dev/null +++ b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/appsettings.json @@ -0,0 +1,17 @@ +{ + "RemoteServices": { + "Default": { + "BaseUrl": "https://localhost:44322/" + } + }, + "IdentityClients": { + "Default": { + "GrantType": "password", + "ClientId": "Demo_App", + "UserName": "admin", + "UserPassword": "1q2w3E*", + "Authority": "https://localhost:44322/", + "Scope": "Demo" + } + } +} diff --git a/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/appsettings.secrets.json b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/appsettings.secrets.json new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/test/Hua.Abp.Demo.HttpApi.Client.ConsoleTestApp/appsettings.secrets.json @@ -0,0 +1,2 @@ +{ +} diff --git a/test/Hua.Abp.Demo.TestBase/DemoTestBase.cs b/test/Hua.Abp.Demo.TestBase/DemoTestBase.cs new file mode 100644 index 0000000..9e69174 --- /dev/null +++ b/test/Hua.Abp.Demo.TestBase/DemoTestBase.cs @@ -0,0 +1,67 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.Modularity; +using Volo.Abp.Uow; +using Volo.Abp.Testing; + +namespace Hua.Abp.Demo; + +public abstract class DemoTestBase : AbpIntegratedTest + where TStartupModule : IAbpModule +{ + protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) + { + options.UseAutofac(); + } + + protected override void BeforeAddApplication(IServiceCollection services) + { + var builder = new ConfigurationBuilder(); + builder.AddJsonFile("appsettings.json", false); + builder.AddJsonFile("appsettings.secrets.json", true); + services.ReplaceConfiguration(builder.Build()); + } + + protected virtual Task WithUnitOfWorkAsync(Func func) + { + return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); + } + + protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func action) + { + using (var scope = ServiceProvider.CreateScope()) + { + var uowManager = scope.ServiceProvider.GetRequiredService(); + + using (var uow = uowManager.Begin(options)) + { + await action(); + + await uow.CompleteAsync(); + } + } + } + + protected virtual Task WithUnitOfWorkAsync(Func> func) + { + return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); + } + + protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func> func) + { + using (var scope = ServiceProvider.CreateScope()) + { + var uowManager = scope.ServiceProvider.GetRequiredService(); + + using (var uow = uowManager.Begin(options)) + { + var result = await func(); + await uow.CompleteAsync(); + return result; + } + } + } +} diff --git a/test/Hua.Abp.Demo.TestBase/DemoTestBaseModule.cs b/test/Hua.Abp.Demo.TestBase/DemoTestBaseModule.cs new file mode 100644 index 0000000..b0e9772 --- /dev/null +++ b/test/Hua.Abp.Demo.TestBase/DemoTestBaseModule.cs @@ -0,0 +1,47 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.Authorization; +using Volo.Abp.Autofac; +using Volo.Abp.BackgroundJobs; +using Volo.Abp.Data; +using Volo.Abp.Modularity; +using Volo.Abp.Threading; + +namespace Hua.Abp.Demo; + +[DependsOn( + typeof(AbpAutofacModule), + typeof(AbpTestBaseModule), + typeof(AbpAuthorizationModule), + typeof(AbpBackgroundJobsAbstractionsModule) +)] +public class DemoTestBaseModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.IsJobExecutionEnabled = false; + }); + + context.Services.AddAlwaysAllowAuthorization(); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + SeedTestData(context); + } + + private static void SeedTestData(ApplicationInitializationContext context) + { + AsyncHelper.RunSync(async () => + { + using (var scope = context.ServiceProvider.CreateScope()) + { + await scope.ServiceProvider + .GetRequiredService() + .SeedAsync(); + } + }); + } +} diff --git a/test/Hua.Abp.Demo.TestBase/DemoTestConsts.cs b/test/Hua.Abp.Demo.TestBase/DemoTestConsts.cs new file mode 100644 index 0000000..dffb9cb --- /dev/null +++ b/test/Hua.Abp.Demo.TestBase/DemoTestConsts.cs @@ -0,0 +1,6 @@ +namespace Hua.Abp.Demo; + +public static class DemoTestConsts +{ + public const string CollectionDefinitionName = "Demo collection"; +} diff --git a/test/Hua.Abp.Demo.TestBase/DemoTestDataBuilder.cs b/test/Hua.Abp.Demo.TestBase/DemoTestDataBuilder.cs new file mode 100644 index 0000000..3cfff45 --- /dev/null +++ b/test/Hua.Abp.Demo.TestBase/DemoTestDataBuilder.cs @@ -0,0 +1,26 @@ +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; + +namespace Hua.Abp.Demo; + +public class DemoTestDataSeedContributor : IDataSeedContributor, ITransientDependency +{ + private readonly ICurrentTenant _currentTenant; + + public DemoTestDataSeedContributor(ICurrentTenant currentTenant) + { + _currentTenant = currentTenant; + } + + public Task SeedAsync(DataSeedContext context) + { + /* Seed additional test data... */ + + using (_currentTenant.Change(context?.TenantId)) + { + return Task.CompletedTask; + } + } +} diff --git a/test/Hua.Abp.Demo.TestBase/Hua.Abp.Demo.TestBase.abppkg b/test/Hua.Abp.Demo.TestBase/Hua.Abp.Demo.TestBase.abppkg new file mode 100644 index 0000000..a686451 --- /dev/null +++ b/test/Hua.Abp.Demo.TestBase/Hua.Abp.Demo.TestBase.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.test" +} \ No newline at end of file diff --git a/test/Hua.Abp.Demo.TestBase/Hua.Abp.Demo.TestBase.csproj b/test/Hua.Abp.Demo.TestBase/Hua.Abp.Demo.TestBase.csproj new file mode 100644 index 0000000..f0cbeac --- /dev/null +++ b/test/Hua.Abp.Demo.TestBase/Hua.Abp.Demo.TestBase.csproj @@ -0,0 +1,45 @@ + + + + + + net10.0 + enable + Hua.Abp.Demo + + + + + + PreserveNewest + true + PreserveNewest + + + + PreserveNewest + Always + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + diff --git a/test/Hua.Abp.Demo.TestBase/Security/FakeCurrentPrincipalAccessor.cs b/test/Hua.Abp.Demo.TestBase/Security/FakeCurrentPrincipalAccessor.cs new file mode 100644 index 0000000..72f2632 --- /dev/null +++ b/test/Hua.Abp.Demo.TestBase/Security/FakeCurrentPrincipalAccessor.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Security.Claims; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Security.Claims; + +namespace Hua.Abp.Demo.Security; + +[Dependency(ReplaceServices = true)] +public class FakeCurrentPrincipalAccessor : ThreadCurrentPrincipalAccessor +{ + protected override ClaimsPrincipal GetClaimsPrincipal() + { + return GetPrincipal(); + } + + private ClaimsPrincipal GetPrincipal() + { + return new ClaimsPrincipal(new ClaimsIdentity(new List + { + new Claim(AbpClaimTypes.UserId, "2e701e62-0953-4dd3-910b-dc6cc93ccb0d"), + new Claim(AbpClaimTypes.UserName, "admin"), + new Claim(AbpClaimTypes.Email, "admin@abp.io") + })); + } +} diff --git a/test/Hua.Abp.Demo.TestBase/appsettings.json b/test/Hua.Abp.Demo.TestBase/appsettings.json new file mode 100644 index 0000000..0db3279 --- /dev/null +++ b/test/Hua.Abp.Demo.TestBase/appsettings.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/test/Hua.Abp.Demo.TestBase/appsettings.secrets.json b/test/Hua.Abp.Demo.TestBase/appsettings.secrets.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/test/Hua.Abp.Demo.TestBase/appsettings.secrets.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file