From e71631240b1eaba56773ba79841b1e2b411a4bc9 Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 1 Oct 2024 18:19:48 +0200 Subject: [PATCH] init wip system --- angular/.editorconfig | 16 + angular/.gitignore | 42 + angular/1deployMatsenFE.sh | 65 + angular/README.md | 88 + angular/angular.json | 137 + angular/buildClient.sh | 34 + angular/generateApi.sh | 23 + angular/openapi.json | 1 + angular/openapi.yaml | 5037 ++++++ angular/openapitools.json | 7 + angular/package-lock.json | 14699 ++++++++++++++++ angular/package.json | 56 + .../src/app/_components/alert.component.html | 7 + .../src/app/_components/alert.component.ts | 100 + .../datetime-picker.component.html | 10 + .../datetime-picker.component.scss | 0 .../datetime-picker.component.spec.ts | 23 + .../datetime-picker.component.ts | 70 + .../filter-bar/filter-bar.component.html | 141 + .../filter-bar/filter-bar.component.scss | 0 .../filter-bar/filter-bar.component.spec.ts | 23 + .../filter-bar/filter-bar.component.ts | 301 + angular/src/app/_components/index.ts | 1 + .../two-column/two-column.component.html | 83 + .../two-column/two-column.component.scss | 0 .../two-column/two-column.component.spec.ts | 23 + .../layout/two-column/two-column.component.ts | 26 + .../linked-label/linked-label.component.html | 4 + .../linked-label/linked-label.component.scss | 0 .../linked-label.component.spec.ts | 23 + .../linked-label/linked-label.component.ts | 21 + .../_components/list/list-col-definition.ts | 30 + .../_components/list/list-col-type-address.ts | 8 + .../list/list-get-data-function-type.ts | 4 + .../list/list-update-element-function-type.ts | 4 + .../app/_components/list/list.component.html | 171 + .../app/_components/list/list.component.scss | 0 .../_components/list/list.component.spec.ts | 23 + .../app/_components/list/list.component.ts | 474 + .../_components/paging/paging.component.html | 52 + .../_components/paging/paging.component.scss | 0 .../paging/paging.component.spec.ts | 23 + .../_components/paging/paging.component.ts | 132 + .../search-input/search-input-col-def.ts | 7 + .../search-input/search-input.component.html | 11 + .../search-input/search-input.component.scss | 0 .../search-input.component.spec.ts | 23 + .../search-input/search-input.component.ts | 38 + .../search-select.component.html | 19 + .../search-select.component.scss | 0 .../search-select.component.spec.ts | 23 + .../search-select/search-select.component.ts | 253 + .../_components/toggle/toggle.component.html | 9 + .../_components/toggle/toggle.component.scss | 0 .../toggle/toggle.component.spec.ts | 23 + .../_components/toggle/toggle.component.ts | 23 + angular/src/app/_forms/apiForms.ts | 620 + angular/src/app/_guards/admin.guard.spec.ts | 17 + angular/src/app/_guards/admin.guard.ts | 12 + .../_guards/game-account-owner.guard.spec.ts | 17 + .../app/_guards/game-account-owner.guard.ts | 27 + angular/src/app/_guards/sales.guard.spec.ts | 17 + angular/src/app/_guards/sales.guard.ts | 13 + angular/src/app/_guards/user.guard.spec.ts | 17 + angular/src/app/_guards/user.guard.ts | 13 + .../src/app/_helpers/app-helper.service.ts | 86 + angular/src/app/_helpers/error.interceptor.ts | 38 + .../src/app/_helpers/formgroup.initializer.ts | 12 + angular/src/app/_helpers/index.ts | 2 + angular/src/app/_helpers/jwt.interceptor.ts | 27 + .../_helpers/loading-interceptor.service.ts | 21 + angular/src/app/_helpers/modal.states.ts | 4 + .../app/_helpers/price-calculator.service.ts | 116 + .../src/app/_helpers/property.interceptor.ts | 75 + angular/src/app/_helpers/role.ts | 6 + angular/src/app/_models/alert.ts | 25 + angular/src/app/_models/index.ts | 2 + angular/src/app/_models/orderFilter.ts | 6 + angular/src/app/_models/priceError.ts | 4 + angular/src/app/_models/snipingResponse.ts | 11 + angular/src/app/_models/user.ts | 12 + angular/src/app/_services/account.service.ts | 101 + angular/src/app/_services/alert.service.ts | 44 + .../src/app/_services/data-import.service.ts | 65 + .../app/_services/ea-data-connect.service.ts | 35 + angular/src/app/_services/index.ts | 2 + angular/src/app/_services/loading.service.ts | 20 + angular/src/app/_services/log.service.ts | 23 + angular/src/app/_services/sniping.service.ts | 100 + .../src/app/_validators/minMaxValidator.ts | 16 + .../_views/account/account-routing.module.ts | 22 + .../src/app/_views/account/account.module.ts | 22 + .../app/_views/account/layout.component.html | 3 + .../app/_views/account/layout.component.ts | 17 + .../app/_views/account/login.component.html | 28 + .../src/app/_views/account/login.component.ts | 58 + .../_views/account/register.component.html | 43 + .../app/_views/account/register.component.ts | 59 + .../_views/dashboard/dashboard.component.html | 13 + .../_views/dashboard/dashboard.component.scss | 5 + .../dashboard/dashboard.component.spec.ts | 23 + .../_views/dashboard/dashboard.component.ts | 30 + .../src/app/_views/home/home.component.html | 78 + .../src/app/_views/home/home.component.scss | 92 + angular/src/app/_views/home/home.component.ts | 27 + angular/src/app/_views/home/index.ts | 1 + .../app/_views/profile/profile.component.html | 3 + .../app/_views/profile/profile.component.scss | 0 .../_views/profile/profile.component.spec.ts | 23 + .../app/_views/profile/profile.component.ts | 43 + .../user-detail/user-detail.component.html | 18 + .../user-detail/user-detail.component.scss | 0 .../user-detail/user-detail.component.spec.ts | 23 + .../user/user-detail/user-detail.component.ts | 57 + .../user/user-list/user-list.component.html | 9 + .../user/user-list/user-list.component.scss | 0 .../user-list/user-list.component.spec.ts | 23 + .../user/user-list/user-list.component.ts | 98 + .../src/app/_views/user/users.component.html | 6 + .../src/app/_views/user/users.component.scss | 0 .../app/_views/user/users.component.spec.ts | 23 + .../src/app/_views/user/users.component.ts | 43 + angular/src/app/app-routing.module.ts | 60 + angular/src/app/app.component.html | 38 + angular/src/app/app.component.scss | 1 + angular/src/app/app.component.ts | 105 + angular/src/app/app.config.server.ts | 10 + angular/src/app/app.config.ts | 10 + angular/src/app/app.module.server.ts | 14 + angular/src/app/app.module.ts | 118 + angular/src/app/app.routes.ts | 3 + angular/src/app/core/api/v1/.gitignore | 4 + .../app/core/api/v1/.openapi-generator-ignore | 23 + .../app/core/api/v1/.openapi-generator/FILES | 74 + .../core/api/v1/.openapi-generator/VERSION | 1 + angular/src/app/core/api/v1/README.md | 226 + angular/src/app/core/api/v1/api.module.ts | 30 + .../v1/api/accountTradePileItem.service.ts | 381 + angular/src/app/core/api/v1/api/api.ts | 37 + .../app/core/api/v1/api/candidate.service.ts | 434 + .../core/api/v1/api/candidateStat.service.ts | 259 + .../v1/api/candidateStockAccounts.service.ts | 166 + .../src/app/core/api/v1/api/config.service.ts | 246 + .../core/api/v1/api/gameAccount.service.ts | 456 + .../api/v1/api/logAccountCredit.service.ts | 264 + .../api/v1/api/logAccountProfit.service.ts | 281 + .../api/v1/api/logAccountSoldItem.service.ts | 288 + .../app/core/api/v1/api/logGeneral.service.ts | 264 + .../core/api/v1/api/logTotalProfit.service.ts | 419 + .../app/core/api/v1/api/loginCheck.service.ts | 178 + .../core/api/v1/api/mediaObject.service.ts | 425 + .../app/core/api/v1/api/modeConfig.service.ts | 246 + .../src/app/core/api/v1/api/player.service.ts | 424 + .../src/app/core/api/v1/api/rarity.service.ts | 424 + .../app/core/api/v1/api/systemStat.service.ts | 162 + .../src/app/core/api/v1/api/user.service.ts | 351 + angular/src/app/core/api/v1/configuration.ts | 175 + angular/src/app/core/api/v1/encoder.ts | 20 + angular/src/app/core/api/v1/git_push.sh | 57 + angular/src/app/core/api/v1/index.ts | 6 + .../core/api/v1/model/accountTradePileItem.ts | 47 + .../v1/model/accountTradePileItemJsonld.ts | 53 + .../accountTradePileItemJsonldContext.ts | 20 + .../accountTradePileItemJsonldContextOneOf.ts | 28 + ...tTradePileItemsGetCollection200Response.ts | 23 + ...temsGetCollection200ResponseHydraSearch.ts | 21 + ...200ResponseHydraSearchHydraMappingInner.ts | 20 + ...eItemsGetCollection200ResponseHydraView.ts | 22 + ...iCandidateStatsGetCollection200Response.ts | 23 + .../apiCandidatesGetCollection200Response.ts | 23 + ...apiGameAccountsGetCollection200Response.ts | 23 + ...gAccountCreditsGetCollection200Response.ts | 23 + ...gAccountProfitsGetCollection200Response.ts | 23 + ...ccountSoldItemsGetCollection200Response.ts | 23 + .../apiLogGeneralsGetCollection200Response.ts | 23 + ...LogTotalProfitsGetCollection200Response.ts | 23 + ...apiMediaObjectsGetCollection200Response.ts | 23 + .../apiPlayersGetCollection200Response.ts | 23 + .../apiRaritiesGetCollection200Response.ts | 23 + .../model/apiUsersGetCollection200Response.ts | 23 + .../src/app/core/api/v1/model/candidate.ts | 70 + .../app/core/api/v1/model/candidateJsonld.ts | 77 + .../core/api/v1/model/candidateStatJsonld.ts | 73 + .../v1/model/candidateStockAccountsJsonld.ts | 26 + angular/src/app/core/api/v1/model/config.ts | 28 + .../src/app/core/api/v1/model/configJsonld.ts | 32 + .../src/app/core/api/v1/model/gameAccount.ts | 74 + .../core/api/v1/model/gameAccountJsonld.ts | 79 + .../api/v1/model/logAccountCreditJsonld.ts | 28 + .../api/v1/model/logAccountProfitJsonld.ts | 56 + .../api/v1/model/logAccountSoldItemJsonld.ts | 45 + .../app/core/api/v1/model/logGeneralJsonld.ts | 56 + .../app/core/api/v1/model/logTotalProfit.ts | 51 + .../core/api/v1/model/logTotalProfitJsonld.ts | 55 + .../api/v1/model/loginCheckPost200Response.ts | 17 + .../api/v1/model/loginCheckPostRequest.ts | 18 + .../model/mediaObjectJsonldMediaObjectRead.ts | 24 + .../src/app/core/api/v1/model/modeConfig.ts | 21 + .../app/core/api/v1/model/modeConfigJsonld.ts | 25 + angular/src/app/core/api/v1/model/models.ts | 45 + angular/src/app/core/api/v1/model/player.ts | 25 + .../src/app/core/api/v1/model/playerJsonld.ts | 29 + angular/src/app/core/api/v1/model/rarity.ts | 25 + .../src/app/core/api/v1/model/rarityJsonld.ts | 29 + .../app/core/api/v1/model/systemStatJsonld.ts | 45 + .../src/app/core/api/v1/model/userJsonld.ts | 35 + angular/src/app/core/api/v1/param.ts | 69 + angular/src/app/core/api/v1/variables.ts | 9 + angular/src/assets/.gitkeep | 0 .../material-icons-v142-latin-regular.woff2 | Bin 0 -> 128352 bytes .../fonts/montserrat-v26-latin-600.woff2 | Bin 0 -> 15072 bytes .../montserrat-v26-latin-600italic.woff2 | Bin 0 -> 15624 bytes .../fonts/montserrat-v26-latin-800.woff2 | Bin 0 -> 15332 bytes .../montserrat-v26-latin-800italic.woff2 | Bin 0 -> 15924 bytes .../fonts/montserrat-v26-latin-italic.woff2 | Bin 0 -> 15396 bytes .../fonts/montserrat-v26-latin-regular.woff2 | Bin 0 -> 14940 bytes angular/src/assets/i18n/de.json | 167 + angular/src/assets/i18n/en.json | 530 + angular/src/assets/images/icons/customer.svg | 12 + angular/src/assets/images/icons/details.svg | 12 + angular/src/assets/images/icons/document.svg | 15 + .../src/assets/images/icons/dummy-company.png | Bin 0 -> 51954 bytes .../src/assets/images/icons/dummy-person.png | Bin 0 -> 6932 bytes .../src/assets/images/icons/dummy-product.png | Bin 0 -> 19208 bytes .../assets/images/icons/icon-round-danger.svg | 1 + .../assets/images/icons/icon-round-info.svg | 1 + .../images/icons/icon-round-success.svg | 1 + .../images/icons/icon-round-warning.svg | 1 + .../src/assets/images/icons/logo-futbin.png | Bin 0 -> 4093 bytes .../src/assets/images/icons/logo-futwiz.png | Bin 0 -> 3326 bytes angular/src/assets/images/icons/product.svg | 14 + angular/src/assets/images/icons/profile.svg | 11 + angular/src/assets/images/icons/sale.svg | 15 + angular/src/assets/images/icons/service.svg | 18 + angular/src/assets/images/icons/supplier.svg | 11 + angular/src/assets/images/icons/task.svg | 10 + angular/src/assets/images/icons/user.svg | 16 + .../assets/images/specific/futcoinbase.jpg | Bin 0 -> 63622 bytes angular/src/assets/scss/_accordion.scss | 0 angular/src/assets/scss/_basics.scss | 858 + angular/src/assets/scss/_button.scss | 110 + angular/src/assets/scss/_contacts.scss | 25 + angular/src/assets/scss/_dark.scss | 62 + angular/src/assets/scss/_form.scss | 36 + angular/src/assets/scss/_mixins.scss | 25 + angular/src/assets/scss/_modal.scss | 30 + angular/src/assets/scss/_sales.scss | 60 + angular/src/assets/scss/_sidebar.scss | 170 + angular/src/assets/scss/_table.scss | 126 + angular/src/assets/scss/_tasks-posts.scss | 103 + angular/src/assets/scss/_text.scss | 109 + angular/src/assets/scss/_variables.scss | 2 + angular/src/environments/environment.beta.ts | 5 + .../environments/environment.development.ts | 5 + angular/src/environments/environment.prod.ts | 5 + angular/src/environments/environment.ts | 18 + angular/src/favicon.ico | Bin 0 -> 15086 bytes angular/src/index.html | 14 + angular/src/main.ts | 12 + angular/src/styles.scss | 16 + angular/tsconfig.app.json | 14 + angular/tsconfig.json | 37 + angular/tsconfig.spec.json | 14 + httpdocs | 1 + 264 files changed, 35955 insertions(+) create mode 100644 angular/.editorconfig create mode 100644 angular/.gitignore create mode 100644 angular/1deployMatsenFE.sh create mode 100644 angular/README.md create mode 100644 angular/angular.json create mode 100644 angular/buildClient.sh create mode 100644 angular/generateApi.sh create mode 100644 angular/openapi.json create mode 100644 angular/openapi.yaml create mode 100644 angular/openapitools.json create mode 100644 angular/package-lock.json create mode 100644 angular/package.json create mode 100644 angular/src/app/_components/alert.component.html create mode 100644 angular/src/app/_components/alert.component.ts create mode 100644 angular/src/app/_components/datetime-picker/datetime-picker.component.html create mode 100644 angular/src/app/_components/datetime-picker/datetime-picker.component.scss create mode 100644 angular/src/app/_components/datetime-picker/datetime-picker.component.spec.ts create mode 100644 angular/src/app/_components/datetime-picker/datetime-picker.component.ts create mode 100644 angular/src/app/_components/filter-bar/filter-bar.component.html create mode 100644 angular/src/app/_components/filter-bar/filter-bar.component.scss create mode 100644 angular/src/app/_components/filter-bar/filter-bar.component.spec.ts create mode 100644 angular/src/app/_components/filter-bar/filter-bar.component.ts create mode 100644 angular/src/app/_components/index.ts create mode 100644 angular/src/app/_components/layout/two-column/two-column.component.html create mode 100644 angular/src/app/_components/layout/two-column/two-column.component.scss create mode 100644 angular/src/app/_components/layout/two-column/two-column.component.spec.ts create mode 100644 angular/src/app/_components/layout/two-column/two-column.component.ts create mode 100644 angular/src/app/_components/linked-label/linked-label.component.html create mode 100644 angular/src/app/_components/linked-label/linked-label.component.scss create mode 100644 angular/src/app/_components/linked-label/linked-label.component.spec.ts create mode 100644 angular/src/app/_components/linked-label/linked-label.component.ts create mode 100644 angular/src/app/_components/list/list-col-definition.ts create mode 100644 angular/src/app/_components/list/list-col-type-address.ts create mode 100644 angular/src/app/_components/list/list-get-data-function-type.ts create mode 100644 angular/src/app/_components/list/list-update-element-function-type.ts create mode 100644 angular/src/app/_components/list/list.component.html create mode 100644 angular/src/app/_components/list/list.component.scss create mode 100644 angular/src/app/_components/list/list.component.spec.ts create mode 100644 angular/src/app/_components/list/list.component.ts create mode 100644 angular/src/app/_components/paging/paging.component.html create mode 100644 angular/src/app/_components/paging/paging.component.scss create mode 100644 angular/src/app/_components/paging/paging.component.spec.ts create mode 100644 angular/src/app/_components/paging/paging.component.ts create mode 100644 angular/src/app/_components/search-input/search-input-col-def.ts create mode 100644 angular/src/app/_components/search-input/search-input.component.html create mode 100644 angular/src/app/_components/search-input/search-input.component.scss create mode 100644 angular/src/app/_components/search-input/search-input.component.spec.ts create mode 100644 angular/src/app/_components/search-input/search-input.component.ts create mode 100644 angular/src/app/_components/search-select/search-select.component.html create mode 100644 angular/src/app/_components/search-select/search-select.component.scss create mode 100644 angular/src/app/_components/search-select/search-select.component.spec.ts create mode 100644 angular/src/app/_components/search-select/search-select.component.ts create mode 100644 angular/src/app/_components/toggle/toggle.component.html create mode 100644 angular/src/app/_components/toggle/toggle.component.scss create mode 100644 angular/src/app/_components/toggle/toggle.component.spec.ts create mode 100644 angular/src/app/_components/toggle/toggle.component.ts create mode 100644 angular/src/app/_forms/apiForms.ts create mode 100644 angular/src/app/_guards/admin.guard.spec.ts create mode 100644 angular/src/app/_guards/admin.guard.ts create mode 100644 angular/src/app/_guards/game-account-owner.guard.spec.ts create mode 100644 angular/src/app/_guards/game-account-owner.guard.ts create mode 100644 angular/src/app/_guards/sales.guard.spec.ts create mode 100644 angular/src/app/_guards/sales.guard.ts create mode 100644 angular/src/app/_guards/user.guard.spec.ts create mode 100644 angular/src/app/_guards/user.guard.ts create mode 100644 angular/src/app/_helpers/app-helper.service.ts create mode 100644 angular/src/app/_helpers/error.interceptor.ts create mode 100644 angular/src/app/_helpers/formgroup.initializer.ts create mode 100644 angular/src/app/_helpers/index.ts create mode 100644 angular/src/app/_helpers/jwt.interceptor.ts create mode 100644 angular/src/app/_helpers/loading-interceptor.service.ts create mode 100644 angular/src/app/_helpers/modal.states.ts create mode 100644 angular/src/app/_helpers/price-calculator.service.ts create mode 100644 angular/src/app/_helpers/property.interceptor.ts create mode 100644 angular/src/app/_helpers/role.ts create mode 100644 angular/src/app/_models/alert.ts create mode 100644 angular/src/app/_models/index.ts create mode 100644 angular/src/app/_models/orderFilter.ts create mode 100644 angular/src/app/_models/priceError.ts create mode 100644 angular/src/app/_models/snipingResponse.ts create mode 100644 angular/src/app/_models/user.ts create mode 100644 angular/src/app/_services/account.service.ts create mode 100644 angular/src/app/_services/alert.service.ts create mode 100644 angular/src/app/_services/data-import.service.ts create mode 100644 angular/src/app/_services/ea-data-connect.service.ts create mode 100644 angular/src/app/_services/index.ts create mode 100644 angular/src/app/_services/loading.service.ts create mode 100644 angular/src/app/_services/log.service.ts create mode 100644 angular/src/app/_services/sniping.service.ts create mode 100644 angular/src/app/_validators/minMaxValidator.ts create mode 100644 angular/src/app/_views/account/account-routing.module.ts create mode 100644 angular/src/app/_views/account/account.module.ts create mode 100644 angular/src/app/_views/account/layout.component.html create mode 100644 angular/src/app/_views/account/layout.component.ts create mode 100644 angular/src/app/_views/account/login.component.html create mode 100644 angular/src/app/_views/account/login.component.ts create mode 100644 angular/src/app/_views/account/register.component.html create mode 100644 angular/src/app/_views/account/register.component.ts create mode 100644 angular/src/app/_views/dashboard/dashboard.component.html create mode 100644 angular/src/app/_views/dashboard/dashboard.component.scss create mode 100644 angular/src/app/_views/dashboard/dashboard.component.spec.ts create mode 100644 angular/src/app/_views/dashboard/dashboard.component.ts create mode 100644 angular/src/app/_views/home/home.component.html create mode 100644 angular/src/app/_views/home/home.component.scss create mode 100644 angular/src/app/_views/home/home.component.ts create mode 100644 angular/src/app/_views/home/index.ts create mode 100644 angular/src/app/_views/profile/profile.component.html create mode 100644 angular/src/app/_views/profile/profile.component.scss create mode 100644 angular/src/app/_views/profile/profile.component.spec.ts create mode 100644 angular/src/app/_views/profile/profile.component.ts create mode 100644 angular/src/app/_views/user/user-detail/user-detail.component.html create mode 100644 angular/src/app/_views/user/user-detail/user-detail.component.scss create mode 100644 angular/src/app/_views/user/user-detail/user-detail.component.spec.ts create mode 100644 angular/src/app/_views/user/user-detail/user-detail.component.ts create mode 100644 angular/src/app/_views/user/user-list/user-list.component.html create mode 100644 angular/src/app/_views/user/user-list/user-list.component.scss create mode 100644 angular/src/app/_views/user/user-list/user-list.component.spec.ts create mode 100644 angular/src/app/_views/user/user-list/user-list.component.ts create mode 100644 angular/src/app/_views/user/users.component.html create mode 100644 angular/src/app/_views/user/users.component.scss create mode 100644 angular/src/app/_views/user/users.component.spec.ts create mode 100644 angular/src/app/_views/user/users.component.ts create mode 100644 angular/src/app/app-routing.module.ts create mode 100644 angular/src/app/app.component.html create mode 100644 angular/src/app/app.component.scss create mode 100644 angular/src/app/app.component.ts create mode 100644 angular/src/app/app.config.server.ts create mode 100644 angular/src/app/app.config.ts create mode 100644 angular/src/app/app.module.server.ts create mode 100644 angular/src/app/app.module.ts create mode 100644 angular/src/app/app.routes.ts create mode 100644 angular/src/app/core/api/v1/.gitignore create mode 100644 angular/src/app/core/api/v1/.openapi-generator-ignore create mode 100644 angular/src/app/core/api/v1/.openapi-generator/FILES create mode 100644 angular/src/app/core/api/v1/.openapi-generator/VERSION create mode 100644 angular/src/app/core/api/v1/README.md create mode 100644 angular/src/app/core/api/v1/api.module.ts create mode 100644 angular/src/app/core/api/v1/api/accountTradePileItem.service.ts create mode 100644 angular/src/app/core/api/v1/api/api.ts create mode 100644 angular/src/app/core/api/v1/api/candidate.service.ts create mode 100644 angular/src/app/core/api/v1/api/candidateStat.service.ts create mode 100644 angular/src/app/core/api/v1/api/candidateStockAccounts.service.ts create mode 100644 angular/src/app/core/api/v1/api/config.service.ts create mode 100644 angular/src/app/core/api/v1/api/gameAccount.service.ts create mode 100644 angular/src/app/core/api/v1/api/logAccountCredit.service.ts create mode 100644 angular/src/app/core/api/v1/api/logAccountProfit.service.ts create mode 100644 angular/src/app/core/api/v1/api/logAccountSoldItem.service.ts create mode 100644 angular/src/app/core/api/v1/api/logGeneral.service.ts create mode 100644 angular/src/app/core/api/v1/api/logTotalProfit.service.ts create mode 100644 angular/src/app/core/api/v1/api/loginCheck.service.ts create mode 100644 angular/src/app/core/api/v1/api/mediaObject.service.ts create mode 100644 angular/src/app/core/api/v1/api/modeConfig.service.ts create mode 100644 angular/src/app/core/api/v1/api/player.service.ts create mode 100644 angular/src/app/core/api/v1/api/rarity.service.ts create mode 100644 angular/src/app/core/api/v1/api/systemStat.service.ts create mode 100644 angular/src/app/core/api/v1/api/user.service.ts create mode 100644 angular/src/app/core/api/v1/configuration.ts create mode 100644 angular/src/app/core/api/v1/encoder.ts create mode 100644 angular/src/app/core/api/v1/git_push.sh create mode 100644 angular/src/app/core/api/v1/index.ts create mode 100644 angular/src/app/core/api/v1/model/accountTradePileItem.ts create mode 100644 angular/src/app/core/api/v1/model/accountTradePileItemJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/accountTradePileItemJsonldContext.ts create mode 100644 angular/src/app/core/api/v1/model/accountTradePileItemJsonldContextOneOf.ts create mode 100644 angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraSearch.ts create mode 100644 angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraSearchHydraMappingInner.ts create mode 100644 angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraView.ts create mode 100644 angular/src/app/core/api/v1/model/apiCandidateStatsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiCandidatesGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiGameAccountsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiLogAccountCreditsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiLogAccountProfitsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiLogAccountSoldItemsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiLogGeneralsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiLogTotalProfitsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiMediaObjectsGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiPlayersGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiRaritiesGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/apiUsersGetCollection200Response.ts create mode 100644 angular/src/app/core/api/v1/model/candidate.ts create mode 100644 angular/src/app/core/api/v1/model/candidateJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/candidateStatJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/candidateStockAccountsJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/config.ts create mode 100644 angular/src/app/core/api/v1/model/configJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/gameAccount.ts create mode 100644 angular/src/app/core/api/v1/model/gameAccountJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/logAccountCreditJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/logAccountProfitJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/logAccountSoldItemJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/logGeneralJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/logTotalProfit.ts create mode 100644 angular/src/app/core/api/v1/model/logTotalProfitJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/loginCheckPost200Response.ts create mode 100644 angular/src/app/core/api/v1/model/loginCheckPostRequest.ts create mode 100644 angular/src/app/core/api/v1/model/mediaObjectJsonldMediaObjectRead.ts create mode 100644 angular/src/app/core/api/v1/model/modeConfig.ts create mode 100644 angular/src/app/core/api/v1/model/modeConfigJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/models.ts create mode 100644 angular/src/app/core/api/v1/model/player.ts create mode 100644 angular/src/app/core/api/v1/model/playerJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/rarity.ts create mode 100644 angular/src/app/core/api/v1/model/rarityJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/systemStatJsonld.ts create mode 100644 angular/src/app/core/api/v1/model/userJsonld.ts create mode 100644 angular/src/app/core/api/v1/param.ts create mode 100644 angular/src/app/core/api/v1/variables.ts create mode 100644 angular/src/assets/.gitkeep create mode 100644 angular/src/assets/fonts/material-icons-v142-latin-regular.woff2 create mode 100644 angular/src/assets/fonts/montserrat-v26-latin-600.woff2 create mode 100644 angular/src/assets/fonts/montserrat-v26-latin-600italic.woff2 create mode 100644 angular/src/assets/fonts/montserrat-v26-latin-800.woff2 create mode 100644 angular/src/assets/fonts/montserrat-v26-latin-800italic.woff2 create mode 100644 angular/src/assets/fonts/montserrat-v26-latin-italic.woff2 create mode 100644 angular/src/assets/fonts/montserrat-v26-latin-regular.woff2 create mode 100644 angular/src/assets/i18n/de.json create mode 100644 angular/src/assets/i18n/en.json create mode 100644 angular/src/assets/images/icons/customer.svg create mode 100644 angular/src/assets/images/icons/details.svg create mode 100644 angular/src/assets/images/icons/document.svg create mode 100644 angular/src/assets/images/icons/dummy-company.png create mode 100644 angular/src/assets/images/icons/dummy-person.png create mode 100644 angular/src/assets/images/icons/dummy-product.png create mode 100644 angular/src/assets/images/icons/icon-round-danger.svg create mode 100644 angular/src/assets/images/icons/icon-round-info.svg create mode 100644 angular/src/assets/images/icons/icon-round-success.svg create mode 100644 angular/src/assets/images/icons/icon-round-warning.svg create mode 100644 angular/src/assets/images/icons/logo-futbin.png create mode 100644 angular/src/assets/images/icons/logo-futwiz.png create mode 100644 angular/src/assets/images/icons/product.svg create mode 100644 angular/src/assets/images/icons/profile.svg create mode 100644 angular/src/assets/images/icons/sale.svg create mode 100644 angular/src/assets/images/icons/service.svg create mode 100644 angular/src/assets/images/icons/supplier.svg create mode 100644 angular/src/assets/images/icons/task.svg create mode 100644 angular/src/assets/images/icons/user.svg create mode 100644 angular/src/assets/images/specific/futcoinbase.jpg create mode 100644 angular/src/assets/scss/_accordion.scss create mode 100644 angular/src/assets/scss/_basics.scss create mode 100644 angular/src/assets/scss/_button.scss create mode 100644 angular/src/assets/scss/_contacts.scss create mode 100644 angular/src/assets/scss/_dark.scss create mode 100644 angular/src/assets/scss/_form.scss create mode 100644 angular/src/assets/scss/_mixins.scss create mode 100644 angular/src/assets/scss/_modal.scss create mode 100644 angular/src/assets/scss/_sales.scss create mode 100644 angular/src/assets/scss/_sidebar.scss create mode 100644 angular/src/assets/scss/_table.scss create mode 100644 angular/src/assets/scss/_tasks-posts.scss create mode 100644 angular/src/assets/scss/_text.scss create mode 100644 angular/src/assets/scss/_variables.scss create mode 100644 angular/src/environments/environment.beta.ts create mode 100644 angular/src/environments/environment.development.ts 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/styles.scss create mode 100644 angular/tsconfig.app.json create mode 100644 angular/tsconfig.json create mode 100644 angular/tsconfig.spec.json create mode 160000 httpdocs 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/.gitignore b/angular/.gitignore new file mode 100644 index 0000000..0711527 --- /dev/null +++ b/angular/.gitignore @@ -0,0 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/angular/1deployMatsenFE.sh b/angular/1deployMatsenFE.sh new file mode 100644 index 0000000..adab1a7 --- /dev/null +++ b/angular/1deployMatsenFE.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +export PATH=/opt/plesk/php/8.2/bin:$PATH; + +cd /var/www/vhosts/spawntree.de/git_repo_clones/futbase-fe/ +sudo git pull + +echo "$(tput setab 2)matsen frontend has been PULLED$(tput sgr 0)" + +rm -rf /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/composer.lock +#cp -rf /var/www/vhosts/spawntree.de/git_repo_clones/futbase-fe/httpdocs/composer.lock /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs +rm -rf /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/composer.json +cp -rf /var/www/vhosts/spawntree.de/git_repo_clones/futbase-fe/composer.json /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs + +rm -rf /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/config +cp -rf /var/www/vhosts/spawntree.de/git_repo_clones/futbase-fe/config /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs + +rm -rf /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/bin +cp -rf /var/www/vhosts/spawntree.de/git_repo_clones/futbase-fe/bin /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs + +rm -rf /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/migrations +cp -rf /var/www/vhosts/spawntree.de/git_repo_clones/futbase-fe/migrations /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs + +rm -rf /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/src +cp -rf /var/www/vhosts/spawntree.de/git_repo_clones/futbase-fe/src /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs + +rm -rf /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/public/index.php +cp -rf /var/www/vhosts/spawntree.de/git_repo_clones/futbase-fe/public/index.php /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/public + +echo "$(tput setab 2)Files have been copied$(tput sgr 0)" + +cd /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs +composer update --no-scripts + +echo "$(tput setab 2)COMPOSER UPDATED updated$(tput sgr 0)" + +php /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/bin/console doctrine:migrations:migrate + +echo "$(tput setab 2)DATABASE SCHEMA updated$(tput sgr 0)" + +cd /var/www/vhosts/spawntree.de/ +sudo chmod 777 matsen.spawntree.de +cd /var/www/vhosts/spawntree.de/matsen.spawntree.de/ +sudo chmod 777 -R * + +cd /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/var/cache/ +rm -R * + +php /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/bin/console cache:clear +php /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/bin/console cache:warmup + +echo "$(tput setab 2)CACHE HAS BEEN CLEARED$(tput sgr 0)" + +cd /var/www/vhosts/spawntree.de/matsen.spawntree.de/httpdocs/var/ +chmod 777 -R * +chmod 777 cache/ * +chmod 777 cache/ + +#service apache2 restart + +#echo "$(tput setab 2)CACHE cleared$(tput sgr 0)" + +echo "$(tput setab 7)$(tput setaf 1)THINK ABOUT POSSIBLE PATCHES!" + +echo "You have updated matsen api!$(tput sgr 0)" diff --git a/angular/README.md b/angular/README.md new file mode 100644 index 0000000..5b2f5b3 --- /dev/null +++ b/angular/README.md @@ -0,0 +1,88 @@ +# Futmachine + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.0.7. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application 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. + +## 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. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## 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. + + +############ + +# BEFORE Installation: +- npm -v (minimum is 8.0.0) +- node --version (minimum is 20.9.0) +- brew upgrade node +- npm install + +## Installation +- npm i -g @angular/cli + +### Only once +- ng new futbase --no-standalone + - Standalone is now the new default in v17 (no app.module.ts) + +- cd futbase -> ng serve + +## Install Bootstrap +- cd futbase +- npm i bootstrap @popperjs/core --save +- npm install bootstrap-icons + +## Install Angular Material +- cd futbase +- ng add @angular/material + +## Generate Dummy data +- cd futbase +- npm i @openapitools/openapi-generator-cli -D +- package.json: Scripts block: + - "generate:api": "openapi-generator-cli generate -i ./openapi.yaml -g typescript-angular -o src/app/core/api/v1 -p=removeOperationIdPrefix=true" +- Java must be installed +- cd futbase + +## Generate services from openapi.yaml +- run sh generateApi.sh +- (npm run generate:api + - Wenn es nicht geht: brew install java + - sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk + - java -version) + - ACHTUNG: In Datei src/app/core/api/v1/model/partnerJsonId.ts diese zwei Zeilen löschen: + - readonly type?: string; + +## Module anlegen +- cd app +- ng g m registration --route register --module app.module + +## Interesting Links +- https://openapi-generator.tech/docs/installation +- https://www.kevinboosten.dev/how-i-use-an-openapi-spec-in-my-angular-projects + +- https://material.angular.io/ +- https://ng-bootstrap.github.io/#/home +- https://medium.com/ngconf/new-input-binding-for-ngcomponentoutlet-cb18a86a739d +- https://ng-bootstrap.github.io/#/components/typeahead/examples + +## Install for autogeneration of forms: +- brew install jq + diff --git a/angular/angular.json b/angular/angular.json new file mode 100644 index 0000000..0078e78 --- /dev/null +++ b/angular/angular.json @@ -0,0 +1,137 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "futbase": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss", + "standalone": false + }, + "@schematics/angular:directive": { + "standalone": false + }, + "@schematics/angular:pipe": { + "standalone": false + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "../httpdocs/public/client", + "baseHref": "/", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "@angular/material/prebuilt-themes/indigo-pink.css", + "node_modules/bootstrap/scss/bootstrap.scss", + "node_modules/bootstrap-icons/font/bootstrap-icons.css", + "src/styles.scss" + ], + "scripts": [ + "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js" + ] + }, + "configurations": { + "production": { + "baseHref": "/client/", + "budgets": [ + { + "type": "initial", + "maximumWarning": "1mb", + "maximumError": "2mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true, + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.development.ts" + } + ] + }, + "beta": { + "baseHref": "/client/", + "optimization": false, + "extractLicenses": false, + "sourceMap": true, + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.beta.ts" + } + ] + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "futbase:build:production" + }, + "development": { + "buildTarget": "futbase:build:development" + }, + "beta": { + "buildTarget": "futbase:build:beta" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "futbase:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "@angular/material/prebuilt-themes/indigo-pink.css", + "src/styles.scss" + ], + "scripts": [] + } + } + } + } + } +} \ No newline at end of file diff --git a/angular/buildClient.sh b/angular/buildClient.sh new file mode 100644 index 0000000..122a5a8 --- /dev/null +++ b/angular/buildClient.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +rm -rf ../httpdocs/public/client/* + +# Run ng build +ng build + +# Check if ng build was successful +if [ $? -ne 0 ]; then + echo "ng build failed. Exiting script." + exit 1 +fi + + + +# Move files from ../httpdocs/public/client/browser to ../httpdocs/public/client +mv ../httpdocs/public/client/browser/* ../httpdocs/public/client/ + +# Check if move was successful +if [ $? -ne 0 ]; then + echo "Failed to move files. Exiting script." + exit 1 +fi + +# Remove the browser folder +rm -rf ../httpdocs/public/client/browser + +# Check if removal was successful +if [ $? -ne 0 ]; then + echo "Failed to remove browser folder. Exiting script." + exit 1 +fi + +echo "Build completed and files moved successfully." \ No newline at end of file diff --git a/angular/generateApi.sh b/angular/generateApi.sh new file mode 100644 index 0000000..1778373 --- /dev/null +++ b/angular/generateApi.sh @@ -0,0 +1,23 @@ +npm run generate:api + +find ./src/app/core/api/v1/model -type f -exec sed -i '' -e '' -e "s/hydramember/'hydra:member'/g" {} + +find ./src/app/core/api/v1/model -type f -exec sed -i '' -e '' -e "s/hydratotalItems/'hydra:totalItems'/g" {} + +find ./src/app/core/api/v1/model -type f -exec sed -i '' -e "s/hydraview/'hydra:view'/g" {} + +find ./src/app/core/api/v1/model -type f -exec sed -i '' -e "s/hydrasearch/'hydra:search'/g" {} + +find ./src/app/core/api/v1/model -type f -exec sed -i '' -e "s/hydratemplate/'hydra:template'/g" {} + +find ./src/app/core/api/v1/model -type f -exec sed -i '' -e "s/hydravariableRepresentation/'hydra:variableRepresentation'/g" {} + +find ./src/app/core/api/v1/model -type f -exec sed -i '' -e "s/hydramapping/'hydra:mapping'/g" {} + +find ./src/app/core/api/v1/model -type f -exec sed -i '' -e "s/hydrafirst/'hydra:first'/g" {} + +find ./src/app/core/api/v1/model -type f -exec sed -i '' -e "s/hydralast/'hydra:last'/g" {} + +find ./src/app/core/api/v1/model -type f -exec sed -i '' -e "s/hydranext/'hydra:next'/g" {} + +find ./src/app/core/api/v1/model -type f -exec sed -i '' -e "s/hydraprevious/'hydra:previous'/g" {} + + + +# https://dev.to/martinmcwhorter/generate-angular-reactiveforms-from-swagger-openapi-35h9 -> alternative +# https://github.com/Humbertda/ngx-openapi-form-generator -> alternative +# https://github.com/verizonconnect/ngx-form-generator -> we use this one + +cat openapi.json | jq 'walk(if type == "object" then with_entries(select(.key | test("^@") | not)) else . end)' > openapi_no_hydra.json +npx ngx-form-generator -i openapi_no_hydra.json -o src/app/_forms/ -f apiForms.ts + +rm openapi_no_hydra.json \ No newline at end of file diff --git a/angular/openapi.json b/angular/openapi.json new file mode 100644 index 0000000..ff3bd69 --- /dev/null +++ b/angular/openapi.json @@ -0,0 +1 @@ +{"openapi":"3.1.0","info":{"title":"Hello API Platform","description":"","version":"1.0.0"},"servers":[{"url":"\/","description":""}],"paths":{"\/api\/account_trade_pile_items":{"get":{"operationId":"api_account_trade_pile_items_get_collection","tags":["AccountTradePileItem"],"responses":{"200":{"description":"AccountTradePileItem collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/AccountTradePileItem.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of AccountTradePileItem resources.","description":"Retrieves the collection of AccountTradePileItem resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"account","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"account[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"candidateItem","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"candidateItem[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"candidateNameSearch","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"accountTmOpenFilter","in":"query","description":"Filter items based on the tmOpen value of the associated account","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"boolean"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"parameters":[]},"\/api\/account_trade_pile_items\/{id}":{"get":{"operationId":"api_account_trade_pile_items_id_get","tags":["AccountTradePileItem"],"responses":{"200":{"description":"AccountTradePileItem resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/AccountTradePileItem.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a AccountTradePileItem resource.","description":"Retrieves a AccountTradePileItem resource.","parameters":[{"name":"id","in":"path","description":"AccountTradePileItem identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_account_trade_pile_items_id_patch","tags":["AccountTradePileItem"],"responses":{"200":{"description":"AccountTradePileItem resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/AccountTradePileItem.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the AccountTradePileItem resource.","description":"Updates the AccountTradePileItem resource.","parameters":[{"name":"id","in":"path","description":"AccountTradePileItem identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated AccountTradePileItem resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/AccountTradePileItem"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/auth":{"post":{"operationId":"login_check_post","tags":["Login Check"],"responses":{"200":{"description":"User token created","content":{"application\/json":{"schema":{"type":"object","properties":{"token":{"readOnly":true,"type":"string","nullable":false}},"required":["token"]}}}}},"summary":"Creates a user token.","description":"Creates a user token.","requestBody":{"description":"The login data","content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","nullable":false},"password":{"type":"string","nullable":false}},"required":["email","password"]}}},"required":true}},"parameters":[]},"\/api\/candidate-items\/{id}\/stock-accounts":{"get":{"operationId":"api_candidate-items_idstock-accounts_get","tags":["CandidateStockAccounts"],"responses":{"200":{"description":"CandidateStockAccounts resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/CandidateStockAccounts.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves the stock and missing accounts for a candidate item","description":"Retrieves a CandidateStockAccounts resource.","parameters":[{"name":"id","in":"path","description":"Candidate Item ID","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"integer"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/candidate_stats":{"get":{"operationId":"api_candidate_stats_get_collection","tags":["CandidateStat"],"responses":{"200":{"description":"CandidateStat collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/CandidateStat.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of CandidateStat resources.","description":"Retrieves the collection of CandidateStat resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"candidateNameSearch","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"parameters":[]},"\/api\/candidate_stats\/{id}":{"get":{"operationId":"api_candidate_stats_id_get","tags":["CandidateStat"],"responses":{"200":{"description":"CandidateStat resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/CandidateStat.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a CandidateStat resource.","description":"Retrieves a CandidateStat resource.","parameters":[{"name":"id","in":"path","description":"CandidateStat identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/candidates":{"get":{"operationId":"api_candidates_get_collection","tags":["Candidate"],"responses":{"200":{"description":"Candidate collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/Candidate.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of Candidate resources.","description":"Retrieves the collection of Candidate resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"candidateNameSearch","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"post":{"operationId":"api_candidates_post","tags":["Candidate"],"responses":{"201":{"description":"Candidate resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Candidate.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a Candidate resource.","description":"Creates a Candidate resource.","parameters":[],"requestBody":{"description":"The new Candidate resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Candidate.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/candidates\/{id}":{"get":{"operationId":"api_candidates_id_get","tags":["Candidate"],"responses":{"200":{"description":"Candidate resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Candidate.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Candidate resource.","description":"Retrieves a Candidate resource.","parameters":[{"name":"id","in":"path","description":"Candidate identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_candidates_id_patch","tags":["Candidate"],"responses":{"200":{"description":"Candidate resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Candidate.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Candidate resource.","description":"Updates the Candidate resource.","parameters":[{"name":"id","in":"path","description":"Candidate identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated Candidate resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Candidate"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/config":{"get":{"operationId":"api_config_get","tags":["Config"],"responses":{"200":{"description":"Config resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Config.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Config resource.","description":"Retrieves a Config resource.","parameters":[],"deprecated":false},"patch":{"operationId":"api_config_patch","tags":["Config"],"responses":{"200":{"description":"Config resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Config.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Config resource.","description":"Updates the Config resource.","parameters":[],"requestBody":{"description":"The updated Config resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Config"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/game_accounts":{"get":{"operationId":"api_game_accounts_get_collection","tags":["GameAccount"],"responses":{"200":{"description":"GameAccount collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of GameAccount resources.","description":"Retrieves the collection of GameAccount resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"owner","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"owner[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"email","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"profile","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"tmOpen","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"boolean"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"post":{"operationId":"api_game_accounts_post","tags":["GameAccount"],"responses":{"201":{"description":"GameAccount resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a GameAccount resource.","description":"Creates a GameAccount resource.","parameters":[],"requestBody":{"description":"The new GameAccount resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/game_accounts\/{id}":{"get":{"operationId":"api_game_accounts_id_get","tags":["GameAccount"],"responses":{"200":{"description":"GameAccount resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a GameAccount resource.","description":"Retrieves a GameAccount resource.","parameters":[{"name":"id","in":"path","description":"GameAccount identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_game_accounts_id_patch","tags":["GameAccount"],"responses":{"200":{"description":"GameAccount resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the GameAccount resource.","description":"Updates the GameAccount resource.","parameters":[{"name":"id","in":"path","description":"GameAccount identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated GameAccount resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/GameAccount"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/log_account_credits":{"get":{"operationId":"api_log_account_credits_get_collection","tags":["LogAccountCredit"],"responses":{"200":{"description":"LogAccountCredit collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/LogAccountCredit.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of LogAccountCredit resources.","description":"Retrieves the collection of LogAccountCredit resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"order[creationDate]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string","enum":["asc","desc"]},"style":"form","explode":false,"allowReserved":false},{"name":"order[credits]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string","enum":["asc","desc"]},"style":"form","explode":false,"allowReserved":false},{"name":"order[revenue]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string","enum":["asc","desc"]},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/log_account_credits\/{id}":{"get":{"operationId":"api_log_account_credits_id_get","tags":["LogAccountCredit"],"responses":{"200":{"description":"LogAccountCredit resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogAccountCredit.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a LogAccountCredit resource.","description":"Retrieves a LogAccountCredit resource.","parameters":[{"name":"id","in":"path","description":"LogAccountCredit identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/log_account_profits":{"get":{"operationId":"api_log_account_profits_get_collection","tags":["LogAccountProfit"],"responses":{"200":{"description":"LogAccountProfit collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/LogAccountProfit.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of LogAccountProfit resources.","description":"Retrieves the collection of LogAccountProfit resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"gameAccount","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"gameAccount[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"isDailyProfit","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"boolean"},"style":"form","explode":false,"allowReserved":false},{"name":"gameAccountProfile","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"parameters":[]},"\/api\/log_account_profits\/{id}":{"get":{"operationId":"api_log_account_profits_id_get","tags":["LogAccountProfit"],"responses":{"200":{"description":"LogAccountProfit resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogAccountProfit.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a LogAccountProfit resource.","description":"Retrieves a LogAccountProfit resource.","parameters":[{"name":"id","in":"path","description":"LogAccountProfit identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/log_account_sold_items":{"get":{"operationId":"api_log_account_sold_items_get_collection","tags":["LogAccountSoldItem"],"responses":{"200":{"description":"LogAccountSoldItem collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/LogAccountSoldItem.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of LogAccountSoldItem resources.","description":"Retrieves the collection of LogAccountSoldItem resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"account","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"account[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"candidateItem","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"candidateItem[]","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true,"allowReserved":false},{"name":"candidateNameSearch","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"parameters":[]},"\/api\/log_account_sold_items\/{id}":{"get":{"operationId":"api_log_account_sold_items_id_get","tags":["LogAccountSoldItem"],"responses":{"200":{"description":"LogAccountSoldItem resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogAccountSoldItem.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a LogAccountSoldItem resource.","description":"Retrieves a LogAccountSoldItem resource.","parameters":[{"name":"id","in":"path","description":"LogAccountSoldItem identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/log_generals":{"get":{"operationId":"api_log_generals_get_collection","tags":["LogGeneral"],"responses":{"200":{"description":"LogGeneral collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/LogGeneral.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of LogGeneral resources.","description":"Retrieves the collection of LogGeneral resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"gameAccountProfile","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_filter","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"parameters":[]},"\/api\/log_generals\/{id}":{"get":{"operationId":"api_log_generals_id_get","tags":["LogGeneral"],"responses":{"200":{"description":"LogGeneral resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogGeneral.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a LogGeneral resource.","description":"Retrieves a LogGeneral resource.","parameters":[{"name":"id","in":"path","description":"LogGeneral identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/log_total_profits":{"get":{"operationId":"api_log_total_profits_get_collection","tags":["LogTotalProfit"],"responses":{"200":{"description":"LogTotalProfit collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of LogTotalProfit resources.","description":"Retrieves the collection of LogTotalProfit resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_log_total_profits_post","tags":["LogTotalProfit"],"responses":{"201":{"description":"LogTotalProfit resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a LogTotalProfit resource.","description":"Creates a LogTotalProfit resource.","parameters":[],"requestBody":{"description":"The new LogTotalProfit resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/log_total_profits\/{id}":{"get":{"operationId":"api_log_total_profits_id_get","tags":["LogTotalProfit"],"responses":{"200":{"description":"LogTotalProfit resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a LogTotalProfit resource.","description":"Retrieves a LogTotalProfit resource.","parameters":[{"name":"id","in":"path","description":"LogTotalProfit identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_log_total_profits_id_patch","tags":["LogTotalProfit"],"responses":{"200":{"description":"LogTotalProfit resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the LogTotalProfit resource.","description":"Updates the LogTotalProfit resource.","parameters":[{"name":"id","in":"path","description":"LogTotalProfit identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated LogTotalProfit resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/LogTotalProfit"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/media_objects":{"get":{"operationId":"api_media_objects_get_collection","tags":["MediaObject"],"responses":{"200":{"description":"MediaObject collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/MediaObject.jsonld-media_object.read"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of MediaObject resources.","description":"Retrieves the collection of MediaObject resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false}],"deprecated":false},"post":{"operationId":"api_media_objects_post","tags":["MediaObject"],"responses":{"201":{"description":"MediaObject resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/MediaObject.jsonld-media_object.read"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a MediaObject resource.","description":"Creates a MediaObject resource.","parameters":[],"requestBody":{"description":"","content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}},"required":false},"deprecated":false},"parameters":[]},"\/api\/media_objects\/{id}":{"get":{"operationId":"api_media_objects_id_get","tags":["MediaObject"],"responses":{"200":{"description":"MediaObject resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/MediaObject.jsonld-media_object.read"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a MediaObject resource.","description":"Retrieves a MediaObject resource.","parameters":[{"name":"id","in":"path","description":"MediaObject identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"delete":{"operationId":"api_media_objects_id_delete","tags":["MediaObject"],"responses":{"204":{"description":"MediaObject resource deleted"},"404":{"description":"Resource not found"}},"summary":"Removes the MediaObject resource.","description":"Removes the MediaObject resource.","parameters":[{"name":"id","in":"path","description":"MediaObject identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]},"\/api\/mode_config":{"get":{"operationId":"api_mode_config_get","tags":["ModeConfig"],"responses":{"200":{"description":"ModeConfig resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/ModeConfig.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a ModeConfig resource.","description":"Retrieves a ModeConfig resource.","parameters":[],"deprecated":false},"patch":{"operationId":"api_mode_config_patch","tags":["ModeConfig"],"responses":{"200":{"description":"ModeConfig resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/ModeConfig.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the ModeConfig resource.","description":"Updates the ModeConfig resource.","parameters":[],"requestBody":{"description":"The updated ModeConfig resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/ModeConfig"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/players":{"get":{"operationId":"api_players_get_collection","tags":["Player"],"responses":{"200":{"description":"Player collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/Player.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of Player resources.","description":"Retrieves the collection of Player resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"post":{"operationId":"api_players_post","tags":["Player"],"responses":{"201":{"description":"Player resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Player.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a Player resource.","description":"Creates a Player resource.","parameters":[],"requestBody":{"description":"The new Player resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Player.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/players\/{id}":{"get":{"operationId":"api_players_id_get","tags":["Player"],"responses":{"200":{"description":"Player resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Player.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Player resource.","description":"Retrieves a Player resource.","parameters":[{"name":"id","in":"path","description":"Player identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_players_id_patch","tags":["Player"],"responses":{"200":{"description":"Player resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Player.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Player resource.","description":"Updates the Player resource.","parameters":[{"name":"id","in":"path","description":"Player identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated Player resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Player"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/rarities":{"get":{"operationId":"api_rarities_get_collection","tags":["Rarity"],"responses":{"200":{"description":"Rarity collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/Rarity.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of Rarity resources.","description":"Retrieves the collection of Rarity resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"post":{"operationId":"api_rarities_post","tags":["Rarity"],"responses":{"201":{"description":"Rarity resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Rarity.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a Rarity resource.","description":"Creates a Rarity resource.","parameters":[],"requestBody":{"description":"The new Rarity resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Rarity.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/rarities\/{id}":{"get":{"operationId":"api_rarities_id_get","tags":["Rarity"],"responses":{"200":{"description":"Rarity resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Rarity.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a Rarity resource.","description":"Retrieves a Rarity resource.","parameters":[{"name":"id","in":"path","description":"Rarity identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"patch":{"operationId":"api_rarities_id_patch","tags":["Rarity"],"responses":{"200":{"description":"Rarity resource updated","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/Rarity.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"},"404":{"description":"Resource not found"}},"summary":"Updates the Rarity resource.","description":"Updates the Rarity resource.","parameters":[{"name":"id","in":"path","description":"Rarity identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"requestBody":{"description":"The updated Rarity resource","content":{"application\/merge-patch+json":{"schema":{"$ref":"#\/components\/schemas\/Rarity"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/system_stats":{"get":{"operationId":"api_system_stats_get","tags":["SystemStat"],"responses":{"200":{"description":"SystemStat resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/SystemStat.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a SystemStat resource.","description":"Retrieves a SystemStat resource.","parameters":[],"deprecated":false},"parameters":[]},"\/api\/users":{"get":{"operationId":"api_users_get_collection","tags":["User"],"responses":{"200":{"description":"User collection","content":{"application\/ld+json":{"schema":{"type":"object","properties":{"hydra:member":{"type":"array","items":{"$ref":"#\/components\/schemas\/User.jsonld"}},"hydra:totalItems":{"type":"integer","minimum":0},"hydra:view":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference"},"@type":{"type":"string"},"hydra:first":{"type":"string","format":"iri-reference"},"hydra:last":{"type":"string","format":"iri-reference"},"hydra:previous":{"type":"string","format":"iri-reference"},"hydra:next":{"type":"string","format":"iri-reference"}},"example":{"@id":"string","type":"string","hydra:first":"string","hydra:last":"string","hydra:previous":"string","hydra:next":"string"}},"hydra:search":{"type":"object","properties":{"@type":{"type":"string"},"hydra:template":{"type":"string"},"hydra:variableRepresentation":{"type":"string"},"hydra:mapping":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string"},"variable":{"type":"string"},"property":{"type":["string","null"]},"required":{"type":"boolean"}}}}}}},"required":["hydra:member"]}}}}},"summary":"Retrieves the collection of User resources.","description":"Retrieves the collection of User resources.","parameters":[{"name":"page","in":"query","description":"The collection page number","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":1},"style":"form","explode":false,"allowReserved":false},{"name":"itemsPerPage","in":"query","description":"The number of items per page","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"integer","default":50,"minimum":0,"maximum":100},"style":"form","explode":false,"allowReserved":false},{"name":"firstName","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"lastName","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"userNameSearch","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false},{"name":"custom_json_order","in":"query","description":"","required":false,"deprecated":false,"allowEmptyValue":true,"schema":{"type":"string"},"style":"form","explode":false,"allowReserved":false,"example":"{\"active\":\"cntSoldItems\",\"direction\":\"desc\",\"listColDefinition\":{\"field\":\"cntSoldItems\",\"sortingSubResource\":\"tradePileItems\",\"countSortSubresource\":true,\"countSortSubresourceValue\":[\"closed\"],\"countSortSubresourceField\":\"tradeState\",\"countSortFilterSubResource\":\"account\",\"countSortFilterSubresourceField\":\"tmOpen\",\"countSortFilterSubresourceValue\":\"0\"}}"}],"deprecated":false},"post":{"operationId":"api_users_post","tags":["User"],"responses":{"201":{"description":"User resource created","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/User.jsonld"}}},"links":{}},"400":{"description":"Invalid input"},"422":{"description":"Unprocessable entity"}},"summary":"Creates a User resource.","description":"Creates a User resource.","parameters":[],"requestBody":{"description":"The new User resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/User.jsonld"}}},"required":true},"deprecated":false},"parameters":[]},"\/api\/users\/{id}":{"get":{"operationId":"api_users_id_get","tags":["User"],"responses":{"200":{"description":"User resource","content":{"application\/ld+json":{"schema":{"$ref":"#\/components\/schemas\/User.jsonld"}}}},"404":{"description":"Resource not found"}},"summary":"Retrieves a User resource.","description":"Retrieves a User resource.","parameters":[{"name":"id","in":"path","description":"User identifier","required":true,"deprecated":false,"allowEmptyValue":false,"schema":{"type":"string"},"style":"simple","explode":false,"allowReserved":false}],"deprecated":false},"parameters":[]}},"components":{"schemas":{"AccountTradePileItem":{"type":"object","description":"","deprecated":false,"properties":{"dbId":{"readOnly":true,"type":["integer","null"]},"account":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"candidateItem":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"eaId":{"readOnly":true,"type":"integer"},"eaAssetId":{"readOnly":true,"type":"integer"},"eaResourceId":{"readOnly":true,"type":"integer"},"rareFlag":{"readOnly":true,"type":"integer"},"itemType":{"readOnly":true,"type":"string"},"rating":{"readOnly":true,"type":"integer"},"contracts":{"readOnly":true,"type":["integer","null"]},"playStyle":{"readOnly":true,"type":["integer","null"]},"startingBid":{"type":"integer"},"binPrice":{"type":"integer"},"individualPrice":{"default":true,"example":true,"type":"boolean"},"minRange":{"readOnly":true,"type":"integer"},"maxRange":{"readOnly":true,"type":"integer"},"lastSalePrice":{"readOnly":true,"type":"integer"},"tradeState":{"readOnly":true,"type":["string","null"]},"eaTradeId":{"readOnly":true,"type":["integer","null"]},"rebuy":{"readOnly":true,"default":true,"example":true,"type":"boolean"},"leagueId":{"readOnly":true,"type":["integer","null"]},"teamId":{"readOnly":true,"type":["integer","null"]},"nationId":{"readOnly":true,"type":["integer","null"]},"listCnt":{"readOnly":true,"type":"integer"},"openBidCnt":{"readOnly":true,"type":["integer","null"]},"snipedItem":{"readOnly":true,"default":true,"example":true,"type":"boolean"},"marketAverage":{"readOnly":true,"type":["integer","null"]},"creationDate":{"readOnly":true,"type":"string","format":"date-time"}}},"AccountTradePileItem.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"dbId":{"readOnly":true,"type":["integer","null"]},"account":{"readOnly":true,"$ref":"#\/components\/schemas\/GameAccount.jsonld"},"candidateItem":{"readOnly":true,"$ref":"#\/components\/schemas\/Candidate.jsonld"},"eaId":{"readOnly":true,"type":"integer"},"eaAssetId":{"readOnly":true,"type":"integer"},"eaResourceId":{"readOnly":true,"type":"integer"},"rareFlag":{"readOnly":true,"type":"integer"},"itemType":{"readOnly":true,"type":"string"},"rating":{"readOnly":true,"type":"integer"},"contracts":{"readOnly":true,"type":["integer","null"]},"playStyle":{"readOnly":true,"type":["integer","null"]},"startingBid":{"type":"integer"},"binPrice":{"type":"integer"},"individualPrice":{"default":true,"example":true,"type":"boolean"},"minRange":{"readOnly":true,"type":"integer"},"maxRange":{"readOnly":true,"type":"integer"},"lastSalePrice":{"readOnly":true,"type":"integer"},"tradeState":{"readOnly":true,"type":["string","null"]},"eaTradeId":{"readOnly":true,"type":["integer","null"]},"rebuy":{"readOnly":true,"default":true,"example":true,"type":"boolean"},"leagueId":{"readOnly":true,"type":["integer","null"]},"teamId":{"readOnly":true,"type":["integer","null"]},"nationId":{"readOnly":true,"type":["integer","null"]},"listCnt":{"readOnly":true,"type":"integer"},"openBidCnt":{"readOnly":true,"type":["integer","null"]},"snipedItem":{"readOnly":true,"default":true,"example":true,"type":"boolean"},"marketAverage":{"readOnly":true,"type":["integer","null"]},"creationDate":{"readOnly":true,"type":"string","format":"date-time"}}},"Candidate":{"type":"object","description":"","deprecated":false,"properties":{"dbId":{"readOnly":true,"type":["integer","null"]},"rarity":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"candidateStat":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"player":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"},"firstname":{"readOnly":true,"type":["string","null"]},"lastname":{"readOnly":true,"type":["string","null"]},"nickname":{"readOnly":true,"type":["string","null"]},"fullDisplayInfo":{"readOnly":true,"type":["string","null"]},"eaAssetId":{"readOnly":true,"type":["integer","null"]},"eaResourceId":{"readOnly":true,"type":["integer","null"]},"rareFlag":{"readOnly":true,"type":["integer","null"]},"rarityName":{"readOnly":true,"type":["string","null"]},"image":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"cardImageUrl":{"readOnly":true,"type":["string","null"]},"stockCountTotal":{"readOnly":true,"type":["integer","null"]},"stockCountReal":{"readOnly":true,"type":["integer","null"]},"futBinId":{"type":["integer","null"]},"futBinName":{"type":["string","null"]},"futBinPrice":{"type":["integer","null"]},"futBinSellingPrice":{"type":["integer","null"]},"lastFutBinUpdate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"futWizId":{"type":["integer","null"]},"futWizPrice":{"type":["integer","null"]},"futwizName":{"type":["string","null"]},"futWizSellingPrice":{"type":["integer","null"]},"lastFutWizUpdate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"rating":{"type":["integer","null"]},"highestBuyBinPrice":{"type":["integer","null"]},"sellStartingBid":{"type":["integer","null"]},"sellBinPrice":{"type":["integer","null"]},"lastFoundMinRange":{"type":["integer","null"]},"lastFoundMaxRange":{"type":["integer","null"]},"lastFoundLowestBin":{"type":["integer","null"]},"lowestBinUpdateDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"buy":{"type":["boolean","null"]},"maxBuyPrice":{"type":["integer","null"]},"buyStyle":{"type":["integer","null"]},"newBuySelective":{"type":["boolean","null"]},"remove":{"type":["boolean","null"]},"leagueId":{"type":["integer","null"]},"nationId":{"type":["integer","null"]},"prio":{"type":["integer","null"]},"listCnt":{"type":["integer","null"]},"soldCnt":{"type":["integer","null"]},"note":{"type":["string","null"]},"relevant":{"type":["boolean","null"]},"adjust100":{"type":["boolean","null"]},"directReBuy":{"type":["boolean","null"]},"marketAverage":{"readOnly":true,"type":["integer","null"]},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["eaAssetId","eaResourceId","rareFlag","rating","buy","buyStyle","newBuySelective","remove","listCnt","soldCnt","relevant","adjust100","directReBuy","creationDate"]},"Candidate.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"dbId":{"readOnly":true,"type":["integer","null"]},"rarity":{"readOnly":true,"$ref":"#\/components\/schemas\/Rarity.jsonld"},"candidateStat":{"readOnly":true,"$ref":"#\/components\/schemas\/CandidateStat.jsonld"},"player":{"readOnly":true,"$ref":"#\/components\/schemas\/Player.jsonld"},"firstname":{"readOnly":true,"type":["string","null"]},"lastname":{"readOnly":true,"type":["string","null"]},"nickname":{"readOnly":true,"type":["string","null"]},"fullDisplayInfo":{"readOnly":true,"type":["string","null"]},"eaAssetId":{"readOnly":true,"type":["integer","null"]},"eaResourceId":{"readOnly":true,"type":["integer","null"]},"rareFlag":{"readOnly":true,"type":["integer","null"]},"rarityName":{"readOnly":true,"type":["string","null"]},"image":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"cardImageUrl":{"readOnly":true,"type":["string","null"]},"stockCountTotal":{"readOnly":true,"type":["integer","null"]},"stockCountReal":{"readOnly":true,"type":["integer","null"]},"futBinId":{"type":["integer","null"]},"futBinName":{"type":["string","null"]},"futBinPrice":{"type":["integer","null"]},"futBinSellingPrice":{"type":["integer","null"]},"lastFutBinUpdate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"futWizId":{"type":["integer","null"]},"futWizPrice":{"type":["integer","null"]},"futwizName":{"type":["string","null"]},"futWizSellingPrice":{"type":["integer","null"]},"lastFutWizUpdate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"rating":{"type":["integer","null"]},"highestBuyBinPrice":{"type":["integer","null"]},"sellStartingBid":{"type":["integer","null"]},"sellBinPrice":{"type":["integer","null"]},"lastFoundMinRange":{"type":["integer","null"]},"lastFoundMaxRange":{"type":["integer","null"]},"lastFoundLowestBin":{"type":["integer","null"]},"lowestBinUpdateDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"buy":{"type":["boolean","null"]},"maxBuyPrice":{"type":["integer","null"]},"buyStyle":{"type":["integer","null"]},"newBuySelective":{"type":["boolean","null"]},"remove":{"type":["boolean","null"]},"leagueId":{"type":["integer","null"]},"nationId":{"type":["integer","null"]},"prio":{"type":["integer","null"]},"listCnt":{"type":["integer","null"]},"soldCnt":{"type":["integer","null"]},"note":{"type":["string","null"]},"relevant":{"type":["boolean","null"]},"adjust100":{"type":["boolean","null"]},"directReBuy":{"type":["boolean","null"]},"marketAverage":{"readOnly":true,"type":["integer","null"]},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["eaAssetId","eaResourceId","rareFlag","rating","buy","buyStyle","newBuySelective","remove","listCnt","soldCnt","relevant","adjust100","directReBuy","creationDate"]},"CandidateStat.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"candidateItem":{"readOnly":true,"$ref":"#\/components\/schemas\/Candidate.jsonld"},"revRl6":{"type":"number"},"rl6":{"type":"integer"},"sold6":{"type":"integer"},"rat6":{"type":"number"},"rev6":{"type":"integer"},"revRl12":{"type":"number"},"rl12":{"type":"integer"},"sold12":{"type":"integer"},"rat12":{"type":"number"},"rev12":{"type":"integer"},"revRl24":{"type":"number"},"rl24":{"type":"integer"},"sold24":{"type":"integer"},"rat24":{"type":"number"},"rev24":{"type":"integer"},"revRl3d":{"type":"number"},"rl3d":{"type":"integer"},"sold3d":{"type":"integer"},"rat3d":{"type":"number"},"rev3d":{"type":"integer"},"revRl1w":{"type":"number"},"rl1w":{"type":"integer"},"sold1w":{"type":"integer"},"rat1w":{"type":"number"},"rev1w":{"type":"integer"},"revRl2w":{"type":"number"},"rl2w":{"type":"integer"},"sold2w":{"type":"integer"},"rat2w":{"type":"number"},"rev2w":{"type":"integer"},"revRl3w":{"type":"number"},"rl3w":{"type":"integer"},"sold3w":{"type":"integer"},"rat3w":{"type":"number"},"rev3w":{"type":"integer"},"revRl4w":{"type":"number"},"rl4w":{"type":"integer"},"sold4w":{"type":"integer"},"rat4w":{"type":"number"},"rev4w":{"type":"integer"},"revRl":{"type":"number"},"rl":{"type":"integer"},"sold":{"type":"integer"},"rat":{"type":"number"},"rev":{"type":"integer"},"snipingRev":{"type":"integer"},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"lastUpdateDate":{"readOnly":true,"type":["string","null"],"format":"date-time"}}},"CandidateStockAccounts.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"candidatesStockAccounts":{"type":"array","items":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}},"candidatesMissingAccounts":{"type":"array","items":{"$ref":"#\/components\/schemas\/GameAccount.jsonld"}}}},"Config":{"type":"object","description":"","deprecated":false,"properties":{"systemActive":{"type":"boolean"},"systemRunning":{"type":"boolean"},"lastUpdateDate":{"readOnly":true,"type":"string","format":"date-time"},"lastCheckDate":{"readOnly":true,"type":"string","format":"date-time"},"processCnt":{"readOnly":true,"type":"integer"},"sleepHourStart":{"minimum":0,"maximum":23,"type":["integer","null"]},"sleepHourEnd":{"minimum":0,"maximum":23,"type":["integer","null"]},"checkMaxSales":{"type":"boolean"},"numMaxSales":{"minimum":0,"maximum":20,"type":["integer","null"]}}},"Config.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"systemActive":{"type":"boolean"},"systemRunning":{"type":"boolean"},"lastUpdateDate":{"readOnly":true,"type":"string","format":"date-time"},"lastCheckDate":{"readOnly":true,"type":"string","format":"date-time"},"processCnt":{"readOnly":true,"type":"integer"},"sleepHourStart":{"minimum":0,"maximum":23,"type":["integer","null"]},"sleepHourEnd":{"minimum":0,"maximum":23,"type":["integer","null"]},"checkMaxSales":{"type":"boolean"},"numMaxSales":{"minimum":0,"maximum":20,"type":["integer","null"]}}},"GameAccount":{"type":"object","description":"","deprecated":false,"properties":{"dbId":{"readOnly":true,"type":["integer","null"]},"email":{"format":"email","externalDocs":{"url":"https:\/\/schema.org\/email"},"type":["string","null"]},"profile":{"type":["string","null"]},"password":{"type":["string","null"]},"emailPw":{"type":["string","null"]},"credits":{"readOnly":true,"type":["integer","null"]},"cntItems":{"readOnly":true,"type":["integer","null"]},"cntSoldItems":{"readOnly":true,"type":["integer","null"]},"cntInactiveItems":{"readOnly":true,"type":["integer","null"]},"active":{"type":["boolean","null"]},"running":{"type":["boolean","null"]},"relist":{"type":["boolean","null"]},"relistDate":{"type":["string","null"],"format":"date-time"},"blocked":{"type":["boolean","null"]},"sniping":{"type":["boolean","null"]},"snipingDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"tmOpen":{"type":["boolean","null"]},"tmState":{"type":["integer","null"]},"dead":{"type":["boolean","null"]},"lockedMsg":{"type":["boolean","null"]},"dynPrices":{"type":["boolean","null"]},"newBuy":{"type":["boolean","null"]},"newBuyDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"newBuySelective":{"type":["boolean","null"]},"reBuy":{"type":["boolean","null"]},"rebuyDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"connectionDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"importWatchlist":{"type":["boolean","null"]},"autoReBuy":{"type":["boolean","null"]},"directReBuy":{"type":["boolean","null"]},"itemMaxBuyPrice":{"minimum":0,"maximum":15000000,"type":["integer","null"]},"revenue":{"readOnly":true,"type":["integer","null"]},"futWizValue":{"readOnly":true,"type":["integer","null"]},"eaMarketAvgValue":{"readOnly":true,"type":["integer","null"]},"mfaCode":{"type":["string","null"]},"twoFactorAuthKey":{"type":["string","null"]},"login2FaViaApp":{"type":["boolean","null"]},"eaCode1":{"type":["string","null"]},"eaCode2":{"type":["string","null"]},"eaCode3":{"type":["string","null"]},"eaCode4":{"type":["string","null"]},"eaCode5":{"type":["string","null"]},"eaCode6":{"type":["string","null"]},"snipingCnt1h":{"type":["integer","null"]},"snipingCnt3h":{"type":["integer","null"]},"snipingCnt6h":{"type":["integer","null"]},"snipingCnt12h":{"type":["integer","null"]},"snipingCnt24h":{"type":["integer","null"]},"snipingCnt3d":{"type":["integer","null"]},"snipingCnt1w":{"type":["integer","null"]},"note":{"type":["string","null"]},"loopStartDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"loopFinishDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"owner":{"readOnly":true,"type":"string","format":"iri-reference","example":"https:\/\/example.com\/"}},"required":["email","profile","password","active","running","relist","blocked","sniping","tmOpen","dead","lockedMsg","dynPrices","newBuy","newBuySelective","reBuy","importWatchlist","autoReBuy","directReBuy"]},"GameAccount.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"dbId":{"readOnly":true,"type":["integer","null"]},"email":{"format":"email","externalDocs":{"url":"https:\/\/schema.org\/email"},"type":["string","null"]},"profile":{"type":["string","null"]},"password":{"type":["string","null"]},"emailPw":{"type":["string","null"]},"credits":{"readOnly":true,"type":["integer","null"]},"cntItems":{"readOnly":true,"type":["integer","null"]},"cntSoldItems":{"readOnly":true,"type":["integer","null"]},"cntInactiveItems":{"readOnly":true,"type":["integer","null"]},"active":{"type":["boolean","null"]},"running":{"type":["boolean","null"]},"relist":{"type":["boolean","null"]},"relistDate":{"type":["string","null"],"format":"date-time"},"blocked":{"type":["boolean","null"]},"sniping":{"type":["boolean","null"]},"snipingDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"tmOpen":{"type":["boolean","null"]},"tmState":{"type":["integer","null"]},"dead":{"type":["boolean","null"]},"lockedMsg":{"type":["boolean","null"]},"dynPrices":{"type":["boolean","null"]},"newBuy":{"type":["boolean","null"]},"newBuyDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"newBuySelective":{"type":["boolean","null"]},"reBuy":{"type":["boolean","null"]},"rebuyDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"connectionDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"importWatchlist":{"type":["boolean","null"]},"autoReBuy":{"type":["boolean","null"]},"directReBuy":{"type":["boolean","null"]},"itemMaxBuyPrice":{"minimum":0,"maximum":15000000,"type":["integer","null"]},"revenue":{"readOnly":true,"type":["integer","null"]},"futWizValue":{"readOnly":true,"type":["integer","null"]},"eaMarketAvgValue":{"readOnly":true,"type":["integer","null"]},"mfaCode":{"type":["string","null"]},"twoFactorAuthKey":{"type":["string","null"]},"login2FaViaApp":{"type":["boolean","null"]},"eaCode1":{"type":["string","null"]},"eaCode2":{"type":["string","null"]},"eaCode3":{"type":["string","null"]},"eaCode4":{"type":["string","null"]},"eaCode5":{"type":["string","null"]},"eaCode6":{"type":["string","null"]},"snipingCnt1h":{"type":["integer","null"]},"snipingCnt3h":{"type":["integer","null"]},"snipingCnt6h":{"type":["integer","null"]},"snipingCnt12h":{"type":["integer","null"]},"snipingCnt24h":{"type":["integer","null"]},"snipingCnt3d":{"type":["integer","null"]},"snipingCnt1w":{"type":["integer","null"]},"note":{"type":["string","null"]},"loopStartDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"loopFinishDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"owner":{"readOnly":true,"$ref":"#\/components\/schemas\/User.jsonld"}},"required":["email","profile","password","active","running","relist","blocked","sniping","tmOpen","dead","lockedMsg","dynPrices","newBuy","newBuySelective","reBuy","importWatchlist","autoReBuy","directReBuy"]},"LogAccountCredit.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"gameAccount":{"readOnly":true,"$ref":"#\/components\/schemas\/GameAccount.jsonld"},"credits":{"readOnly":true,"type":["integer","null"]},"revenue":{"readOnly":true,"type":["integer","null"]},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"}}},"LogAccountProfit.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"gameAccount":{"readOnly":true,"$ref":"#\/components\/schemas\/GameAccount.jsonld"},"credits":{"type":["integer","null"]},"revenue":{"type":["integer","null"]},"tpValue":{"type":["integer","null"]},"revToday":{"type":["integer","null"]},"rev3hours":{"type":["integer","null"]},"rev6hours":{"type":["integer","null"]},"rev12hours":{"type":["integer","null"]},"rev24hours":{"type":["integer","null"]},"rev3days":{"type":["integer","null"]},"rev1week":{"type":["integer","null"]},"rev2weeks":{"type":["integer","null"]},"rev3weeks":{"type":["integer","null"]},"rev4weeks":{"type":["integer","null"]},"rev2months":{"type":["integer","null"]},"rev3months":{"type":["integer","null"]},"revTotal":{"type":["integer","null"]},"numSalesToday":{"type":["integer","null"]},"numSales3hours":{"type":["integer","null"]},"numSales6hours":{"type":["integer","null"]},"numSales12hours":{"type":["integer","null"]},"numSales24hours":{"type":["integer","null"]},"numSales3days":{"type":["integer","null"]},"numSales1week":{"type":["integer","null"]},"numSales2weeks":{"type":["integer","null"]},"numSales3weeks":{"type":["integer","null"]},"numSales4weeks":{"type":["integer","null"]},"numSales2months":{"type":["integer","null"]},"numSales3months":{"type":["integer","null"]},"numSalesTotal":{"type":["integer","null"]},"isDailyProfit":{"type":["boolean","null"]},"creationDate":{"type":["string","null"],"format":"date-time"}}},"LogAccountSoldItem.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"dbId":{"readOnly":true,"type":["integer","null"]},"gameAccount":{"readOnly":true,"$ref":"#\/components\/schemas\/GameAccount.jsonld"},"candidateItem":{"readOnly":true,"$ref":"#\/components\/schemas\/Candidate.jsonld"},"eaId":{"readOnly":true,"type":"integer"},"contracts":{"readOnly":true,"type":["integer","null"]},"playStyle":{"readOnly":true,"type":["integer","null"]},"lastSalePrice":{"readOnly":true,"type":"integer"},"currentBid":{"readOnly":true,"type":"integer"},"startingBid":{"readOnly":true,"type":"integer"},"binPrice":{"readOnly":true,"type":"integer"},"minRange":{"readOnly":true,"type":"integer"},"maxRange":{"readOnly":true,"type":"integer"},"tradeState":{"readOnly":true,"type":"string"},"eaTradeId":{"readOnly":true,"type":"integer"},"listCnt":{"readOnly":true,"type":"integer"},"revenue":{"readOnly":true,"type":"integer"},"reBought":{"readOnly":true,"type":"boolean"},"snipedItem":{"readOnly":true,"type":"boolean"},"firstListDate":{"readOnly":true,"type":["string","null"],"format":"date-time"},"creationDate":{"readOnly":true,"type":"string","format":"date-time"}}},"LogGeneral.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"dbId":{"readOnly":true,"type":"integer"},"gameAccount":{"readOnly":true,"$ref":"#\/components\/schemas\/GameAccount.jsonld"},"candidateItem":{"readOnly":true,"$ref":"#\/components\/schemas\/Candidate.jsonld"},"logType":{"type":"string","enum":["alert","alert_low","cant_buy","debug","debug_server_logs","info","moved_to_club","new_buy","player_price_changed","preview_pack","preview_pack_alert","price_range_errors","profit_overview","removed","rebuy","sales","server_logs","stats","hourly_stats"]},"message":{"readOnly":true,"type":["string","null"]},"creationDate":{"readOnly":true,"type":["string","null"],"format":"date-time"}},"required":["logType"]},"LogTotalProfit":{"type":"object","description":"","deprecated":false,"properties":{"credits":{"type":["integer","null"]},"revenue":{"type":["integer","null"]},"tpValueFutwiz":{"type":["integer","null"]},"tpValueEaAverage":{"type":["integer","null"]},"revToday":{"type":["integer","null"]},"rev3hours":{"type":["integer","null"]},"rev6hours":{"type":["integer","null"]},"rev12hours":{"type":["integer","null"]},"rev24hours":{"type":["integer","null"]},"rev3days":{"type":["integer","null"]},"rev1week":{"type":["integer","null"]},"rev2weeks":{"type":["integer","null"]},"rev3weeks":{"type":["integer","null"]},"rev4weeks":{"type":["integer","null"]},"rev2months":{"type":["integer","null"]},"rev3months":{"type":["integer","null"]},"revTotal":{"type":["integer","null"]},"numSalesToday":{"type":["integer","null"]},"numSales3hours":{"type":["integer","null"]},"numSales6hours":{"type":["integer","null"]},"numSales12hours":{"type":["integer","null"]},"numSales24hours":{"type":["integer","null"]},"numSales3days":{"type":["integer","null"]},"numSales1week":{"type":["integer","null"]},"numSales2weeks":{"type":["integer","null"]},"numSales3weeks":{"type":["integer","null"]},"numSales4weeks":{"type":["integer","null"]},"numSales2months":{"type":["integer","null"]},"numSales3months":{"type":["integer","null"]},"numSalesTotal":{"type":["integer","null"]},"isDailyProfit":{"type":["boolean","null"]},"creationDate":{"type":["string","null"],"format":"date-time"}}},"LogTotalProfit.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"credits":{"type":["integer","null"]},"revenue":{"type":["integer","null"]},"tpValueFutwiz":{"type":["integer","null"]},"tpValueEaAverage":{"type":["integer","null"]},"revToday":{"type":["integer","null"]},"rev3hours":{"type":["integer","null"]},"rev6hours":{"type":["integer","null"]},"rev12hours":{"type":["integer","null"]},"rev24hours":{"type":["integer","null"]},"rev3days":{"type":["integer","null"]},"rev1week":{"type":["integer","null"]},"rev2weeks":{"type":["integer","null"]},"rev3weeks":{"type":["integer","null"]},"rev4weeks":{"type":["integer","null"]},"rev2months":{"type":["integer","null"]},"rev3months":{"type":["integer","null"]},"revTotal":{"type":["integer","null"]},"numSalesToday":{"type":["integer","null"]},"numSales3hours":{"type":["integer","null"]},"numSales6hours":{"type":["integer","null"]},"numSales12hours":{"type":["integer","null"]},"numSales24hours":{"type":["integer","null"]},"numSales3days":{"type":["integer","null"]},"numSales1week":{"type":["integer","null"]},"numSales2weeks":{"type":["integer","null"]},"numSales3weeks":{"type":["integer","null"]},"numSales4weeks":{"type":["integer","null"]},"numSales2months":{"type":["integer","null"]},"numSales3months":{"type":["integer","null"]},"numSalesTotal":{"type":["integer","null"]},"isDailyProfit":{"type":["boolean","null"]},"creationDate":{"type":["string","null"],"format":"date-time"}}},"MediaObject.jsonld-media_object.read":{"type":"object","description":"","deprecated":false,"externalDocs":{"url":"https:\/\/schema.org\/MediaObject"},"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"contentUrl":{"externalDocs":{"url":"https:\/\/schema.org\/contentUrl"},"type":["string","null"]}}},"ModeConfig":{"type":"object","description":"","deprecated":false,"properties":{"autoReBuyMinSoldItems":{"minimum":0,"maximum":20,"default":3,"example":3,"type":"integer"},"autoReBuyMinLastHours":{"minimum":0,"maximum":20,"default":3,"example":3,"type":"integer"}}},"ModeConfig.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"autoReBuyMinSoldItems":{"minimum":0,"maximum":20,"default":3,"example":3,"type":"integer"},"autoReBuyMinLastHours":{"minimum":0,"maximum":20,"default":3,"example":3,"type":"integer"}}},"Player":{"type":"object","description":"","deprecated":false,"properties":{"eaAssetId":{"type":"integer"},"firstname":{"type":["string","null"]},"lastname":{"type":["string","null"]},"nickname":{"type":["string","null"]},"rating":{"type":"integer"},"creationDate":{"readOnly":true,"type":"string","format":"date-time"}}},"Player.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"eaAssetId":{"type":"integer"},"firstname":{"type":["string","null"]},"lastname":{"type":["string","null"]},"nickname":{"type":["string","null"]},"rating":{"type":"integer"},"creationDate":{"readOnly":true,"type":"string","format":"date-time"}}},"Rarity":{"type":"object","description":"","deprecated":false,"properties":{"rareFlag":{"readOnly":true,"type":"integer"},"name":{"type":["string","null"]},"untradable":{"readOnly":true,"type":"boolean"},"image":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"imageBronze":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"}}},"Rarity.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"rareFlag":{"readOnly":true,"type":"integer"},"name":{"type":["string","null"]},"untradable":{"readOnly":true,"type":"boolean"},"image":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"imageBronze":{"readOnly":true,"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"}}},"SystemStat.jsonld":{"type":"object","description":"","deprecated":false,"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"totalLogProfit":{"readOnly":true,"$ref":"#\/components\/schemas\/LogTotalProfit.jsonld"},"config":{"readOnly":true,"$ref":"#\/components\/schemas\/Config.jsonld"},"modeConfig":{"readOnly":true,"$ref":"#\/components\/schemas\/ModeConfig.jsonld"},"numAccounts":{"type":["integer","null"]},"numDeadAccounts":{"type":["integer","null"]},"numActiveAccounts":{"type":["integer","null"]},"numTmOpenAccounts":{"type":["integer","null"]},"numTmClosedAccounts":{"type":["integer","null"]},"numBlockedAccounts":{"type":["integer","null"]},"numRunningAccounts":{"type":["integer","null"]},"numTradepileItems":{"type":["integer","null"]},"numSoldTradepileItems":{"type":["integer","null"]},"numActiveTradepileItems":{"type":["integer","null"]},"numExpiredTradepileItems":{"type":["integer","null"]},"numInactiveTradepileItems":{"type":["integer","null"]},"numCandidates":{"type":["integer","null"]},"numRelevantCandidates":{"type":["integer","null"]},"numBuyCandidates":{"type":["integer","null"]},"totalSnipingRev":{"type":["integer","null"]}}},"User.jsonld":{"type":"object","description":"","deprecated":false,"required":["email","firstName","lastName"],"properties":{"@context":{"readOnly":true,"oneOf":[{"type":"string"},{"type":"object","properties":{"@vocab":{"type":"string"},"hydra":{"type":"string","enum":["http:\/\/www.w3.org\/ns\/hydra\/core#"]}},"required":["@vocab","hydra"],"additionalProperties":true}]},"@id":{"readOnly":true,"type":"string"},"@type":{"readOnly":true,"type":"string"},"email":{"format":"email","externalDocs":{"url":"https:\/\/schema.org\/email"},"type":["string","null"]},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"image":{"type":["string","null"],"format":"iri-reference","example":"https:\/\/example.com\/"},"imageUrl":{"readOnly":true,"type":["string","null"]},"fullName":{"readOnly":true,"type":["string","null"]},"password":{"writeOnly":true,"description":"The plaintext password when being set or changed.","type":["string","null"]},"active":{"type":"boolean"},"createdAt":{"readOnly":true,"type":["string","null"],"format":"date-time"}}}},"responses":{},"parameters":{},"examples":{},"requestBodies":{},"headers":{},"securitySchemes":{"JWT":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"security":[{"JWT":[]}],"tags":[]} \ No newline at end of file diff --git a/angular/openapi.yaml b/angular/openapi.yaml new file mode 100644 index 0000000..61a0f90 --- /dev/null +++ b/angular/openapi.yaml @@ -0,0 +1,5037 @@ +openapi: 3.1.0 +info: + title: 'Hello API Platform' + description: '' + version: 1.0.0 +servers: + - + url: / + description: '' +paths: + /api/account_trade_pile_items: + get: + operationId: api_account_trade_pile_items_get_collection + tags: + - AccountTradePileItem + responses: + 200: + description: 'AccountTradePileItem collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/AccountTradePileItem.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of AccountTradePileItem resources.' + description: 'Retrieves the collection of AccountTradePileItem resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + - + name: account + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: 'account[]' + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: array + items: + type: string + style: form + explode: true + allowReserved: false + - + name: candidateItem + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: 'candidateItem[]' + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: array + items: + type: string + style: form + explode: true + allowReserved: false + - + name: candidateNameSearch + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: accountTmOpenFilter + in: query + description: 'Filter items based on the tmOpen value of the associated account' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: boolean + style: form + explode: false + allowReserved: false + - + name: custom_json_filter + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' + deprecated: false + parameters: [] + '/api/account_trade_pile_items/{id}': + get: + operationId: api_account_trade_pile_items_id_get + tags: + - AccountTradePileItem + responses: + 200: + description: 'AccountTradePileItem resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/AccountTradePileItem.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a AccountTradePileItem resource.' + description: 'Retrieves a AccountTradePileItem resource.' + parameters: + - + name: id + in: path + description: 'AccountTradePileItem identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + patch: + operationId: api_account_trade_pile_items_id_patch + tags: + - AccountTradePileItem + responses: + 200: + description: 'AccountTradePileItem resource updated' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/AccountTradePileItem.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + 404: + description: 'Resource not found' + summary: 'Updates the AccountTradePileItem resource.' + description: 'Updates the AccountTradePileItem resource.' + parameters: + - + name: id + in: path + description: 'AccountTradePileItem identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + requestBody: + description: 'The updated AccountTradePileItem resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/AccountTradePileItem' + required: true + deprecated: false + parameters: [] + /api/auth: + post: + operationId: login_check_post + tags: + - 'Login Check' + responses: + 200: + description: 'User token created' + content: + application/json: + schema: + type: object + properties: + token: { readOnly: true, type: string, nullable: false } + required: + - token + summary: 'Creates a user token.' + description: 'Creates a user token.' + requestBody: + description: 'The login data' + content: + application/json: + schema: + type: object + properties: + email: + type: string + nullable: false + password: + type: string + nullable: false + required: + - email + - password + required: true + parameters: [] + '/api/candidate-items/{id}/stock-accounts': + get: + operationId: api_candidate-items_idstock-accounts_get + tags: + - CandidateStockAccounts + responses: + 200: + description: 'CandidateStockAccounts resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/CandidateStockAccounts.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves the stock and missing accounts for a candidate item' + description: 'Retrieves a CandidateStockAccounts resource.' + parameters: + - + name: id + in: path + description: 'Candidate Item ID' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: integer + style: simple + explode: false + allowReserved: false + deprecated: false + parameters: [] + /api/candidate_stats: + get: + operationId: api_candidate_stats_get_collection + tags: + - CandidateStat + responses: + 200: + description: 'CandidateStat collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/CandidateStat.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of CandidateStat resources.' + description: 'Retrieves the collection of CandidateStat resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + - + name: candidateNameSearch + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' + deprecated: false + parameters: [] + '/api/candidate_stats/{id}': + get: + operationId: api_candidate_stats_id_get + tags: + - CandidateStat + responses: + 200: + description: 'CandidateStat resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/CandidateStat.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a CandidateStat resource.' + description: 'Retrieves a CandidateStat resource.' + parameters: + - + name: id + in: path + description: 'CandidateStat identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + parameters: [] + /api/candidates: + get: + operationId: api_candidates_get_collection + tags: + - Candidate + responses: + 200: + description: 'Candidate collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/Candidate.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of Candidate resources.' + description: 'Retrieves the collection of Candidate resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + - + name: candidateNameSearch + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_filter + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' + deprecated: false + post: + operationId: api_candidates_post + tags: + - Candidate + responses: + 201: + description: 'Candidate resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Candidate.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Creates a Candidate resource.' + description: 'Creates a Candidate resource.' + parameters: [] + requestBody: + description: 'The new Candidate resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Candidate.jsonld' + required: true + deprecated: false + parameters: [] + '/api/candidates/{id}': + get: + operationId: api_candidates_id_get + tags: + - Candidate + responses: + 200: + description: 'Candidate resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Candidate.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a Candidate resource.' + description: 'Retrieves a Candidate resource.' + parameters: + - + name: id + in: path + description: 'Candidate identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + patch: + operationId: api_candidates_id_patch + tags: + - Candidate + responses: + 200: + description: 'Candidate resource updated' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Candidate.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + 404: + description: 'Resource not found' + summary: 'Updates the Candidate resource.' + description: 'Updates the Candidate resource.' + parameters: + - + name: id + in: path + description: 'Candidate identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + requestBody: + description: 'The updated Candidate resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/Candidate' + required: true + deprecated: false + parameters: [] + /api/config: + get: + operationId: api_config_get + tags: + - Config + responses: + 200: + description: 'Config resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Config.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a Config resource.' + description: 'Retrieves a Config resource.' + parameters: [] + deprecated: false + patch: + operationId: api_config_patch + tags: + - Config + responses: + 200: + description: 'Config resource updated' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Config.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + 404: + description: 'Resource not found' + summary: 'Updates the Config resource.' + description: 'Updates the Config resource.' + parameters: [] + requestBody: + description: 'The updated Config resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/Config' + required: true + deprecated: false + parameters: [] + /api/game_accounts: + get: + operationId: api_game_accounts_get_collection + tags: + - GameAccount + responses: + 200: + description: 'GameAccount collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/GameAccount.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of GameAccount resources.' + description: 'Retrieves the collection of GameAccount resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + - + name: owner + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: 'owner[]' + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: array + items: + type: string + style: form + explode: true + allowReserved: false + - + name: email + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: profile + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: tmOpen + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: boolean + style: form + explode: false + allowReserved: false + - + name: custom_json_filter + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' + deprecated: false + post: + operationId: api_game_accounts_post + tags: + - GameAccount + responses: + 201: + description: 'GameAccount resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/GameAccount.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Creates a GameAccount resource.' + description: 'Creates a GameAccount resource.' + parameters: [] + requestBody: + description: 'The new GameAccount resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/GameAccount.jsonld' + required: true + deprecated: false + parameters: [] + '/api/game_accounts/{id}': + get: + operationId: api_game_accounts_id_get + tags: + - GameAccount + responses: + 200: + description: 'GameAccount resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/GameAccount.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a GameAccount resource.' + description: 'Retrieves a GameAccount resource.' + parameters: + - + name: id + in: path + description: 'GameAccount identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + patch: + operationId: api_game_accounts_id_patch + tags: + - GameAccount + responses: + 200: + description: 'GameAccount resource updated' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/GameAccount.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + 404: + description: 'Resource not found' + summary: 'Updates the GameAccount resource.' + description: 'Updates the GameAccount resource.' + parameters: + - + name: id + in: path + description: 'GameAccount identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + requestBody: + description: 'The updated GameAccount resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/GameAccount' + required: true + deprecated: false + parameters: [] + /api/log_account_credits: + get: + operationId: api_log_account_credits_get_collection + tags: + - LogAccountCredit + responses: + 200: + description: 'LogAccountCredit collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/LogAccountCredit.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of LogAccountCredit resources.' + description: 'Retrieves the collection of LogAccountCredit resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + - + name: 'order[creationDate]' + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + enum: + - asc + - desc + style: form + explode: false + allowReserved: false + - + name: 'order[credits]' + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + enum: + - asc + - desc + style: form + explode: false + allowReserved: false + - + name: 'order[revenue]' + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + enum: + - asc + - desc + style: form + explode: false + allowReserved: false + deprecated: false + parameters: [] + '/api/log_account_credits/{id}': + get: + operationId: api_log_account_credits_id_get + tags: + - LogAccountCredit + responses: + 200: + description: 'LogAccountCredit resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/LogAccountCredit.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a LogAccountCredit resource.' + description: 'Retrieves a LogAccountCredit resource.' + parameters: + - + name: id + in: path + description: 'LogAccountCredit identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + parameters: [] + /api/log_account_profits: + get: + operationId: api_log_account_profits_get_collection + tags: + - LogAccountProfit + responses: + 200: + description: 'LogAccountProfit collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/LogAccountProfit.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of LogAccountProfit resources.' + description: 'Retrieves the collection of LogAccountProfit resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + - + name: gameAccount + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: 'gameAccount[]' + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: array + items: + type: string + style: form + explode: true + allowReserved: false + - + name: isDailyProfit + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: boolean + style: form + explode: false + allowReserved: false + - + name: gameAccountProfile + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_filter + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' + deprecated: false + parameters: [] + '/api/log_account_profits/{id}': + get: + operationId: api_log_account_profits_id_get + tags: + - LogAccountProfit + responses: + 200: + description: 'LogAccountProfit resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/LogAccountProfit.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a LogAccountProfit resource.' + description: 'Retrieves a LogAccountProfit resource.' + parameters: + - + name: id + in: path + description: 'LogAccountProfit identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + parameters: [] + /api/log_account_sold_items: + get: + operationId: api_log_account_sold_items_get_collection + tags: + - LogAccountSoldItem + responses: + 200: + description: 'LogAccountSoldItem collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/LogAccountSoldItem.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of LogAccountSoldItem resources.' + description: 'Retrieves the collection of LogAccountSoldItem resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + - + name: account + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: 'account[]' + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: array + items: + type: string + style: form + explode: true + allowReserved: false + - + name: candidateItem + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: 'candidateItem[]' + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: array + items: + type: string + style: form + explode: true + allowReserved: false + - + name: candidateNameSearch + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_filter + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' + deprecated: false + parameters: [] + '/api/log_account_sold_items/{id}': + get: + operationId: api_log_account_sold_items_id_get + tags: + - LogAccountSoldItem + responses: + 200: + description: 'LogAccountSoldItem resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/LogAccountSoldItem.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a LogAccountSoldItem resource.' + description: 'Retrieves a LogAccountSoldItem resource.' + parameters: + - + name: id + in: path + description: 'LogAccountSoldItem identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + parameters: [] + /api/log_generals: + get: + operationId: api_log_generals_get_collection + tags: + - LogGeneral + responses: + 200: + description: 'LogGeneral collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/LogGeneral.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of LogGeneral resources.' + description: 'Retrieves the collection of LogGeneral resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + - + name: gameAccountProfile + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_filter + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' + deprecated: false + parameters: [] + '/api/log_generals/{id}': + get: + operationId: api_log_generals_id_get + tags: + - LogGeneral + responses: + 200: + description: 'LogGeneral resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/LogGeneral.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a LogGeneral resource.' + description: 'Retrieves a LogGeneral resource.' + parameters: + - + name: id + in: path + description: 'LogGeneral identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + parameters: [] + /api/log_total_profits: + get: + operationId: api_log_total_profits_get_collection + tags: + - LogTotalProfit + responses: + 200: + description: 'LogTotalProfit collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/LogTotalProfit.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of LogTotalProfit resources.' + description: 'Retrieves the collection of LogTotalProfit resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + deprecated: false + post: + operationId: api_log_total_profits_post + tags: + - LogTotalProfit + responses: + 201: + description: 'LogTotalProfit resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/LogTotalProfit.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Creates a LogTotalProfit resource.' + description: 'Creates a LogTotalProfit resource.' + parameters: [] + requestBody: + description: 'The new LogTotalProfit resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/LogTotalProfit.jsonld' + required: true + deprecated: false + parameters: [] + '/api/log_total_profits/{id}': + get: + operationId: api_log_total_profits_id_get + tags: + - LogTotalProfit + responses: + 200: + description: 'LogTotalProfit resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/LogTotalProfit.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a LogTotalProfit resource.' + description: 'Retrieves a LogTotalProfit resource.' + parameters: + - + name: id + in: path + description: 'LogTotalProfit identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + patch: + operationId: api_log_total_profits_id_patch + tags: + - LogTotalProfit + responses: + 200: + description: 'LogTotalProfit resource updated' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/LogTotalProfit.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + 404: + description: 'Resource not found' + summary: 'Updates the LogTotalProfit resource.' + description: 'Updates the LogTotalProfit resource.' + parameters: + - + name: id + in: path + description: 'LogTotalProfit identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + requestBody: + description: 'The updated LogTotalProfit resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/LogTotalProfit' + required: true + deprecated: false + parameters: [] + /api/media_objects: + get: + operationId: api_media_objects_get_collection + tags: + - MediaObject + responses: + 200: + description: 'MediaObject collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/MediaObject.jsonld-media_object.read' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of MediaObject resources.' + description: 'Retrieves the collection of MediaObject resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + deprecated: false + post: + operationId: api_media_objects_post + tags: + - MediaObject + responses: + 201: + description: 'MediaObject resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/MediaObject.jsonld-media_object.read' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Creates a MediaObject resource.' + description: 'Creates a MediaObject resource.' + parameters: [] + requestBody: + description: '' + content: + multipart/form-data: + schema: + type: object + properties: + file: + type: string + format: binary + required: false + deprecated: false + parameters: [] + '/api/media_objects/{id}': + get: + operationId: api_media_objects_id_get + tags: + - MediaObject + responses: + 200: + description: 'MediaObject resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/MediaObject.jsonld-media_object.read' + 404: + description: 'Resource not found' + summary: 'Retrieves a MediaObject resource.' + description: 'Retrieves a MediaObject resource.' + parameters: + - + name: id + in: path + description: 'MediaObject identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + delete: + operationId: api_media_objects_id_delete + tags: + - MediaObject + responses: + 204: + description: 'MediaObject resource deleted' + 404: + description: 'Resource not found' + summary: 'Removes the MediaObject resource.' + description: 'Removes the MediaObject resource.' + parameters: + - + name: id + in: path + description: 'MediaObject identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + parameters: [] + /api/mode_config: + get: + operationId: api_mode_config_get + tags: + - ModeConfig + responses: + 200: + description: 'ModeConfig resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/ModeConfig.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a ModeConfig resource.' + description: 'Retrieves a ModeConfig resource.' + parameters: [] + deprecated: false + patch: + operationId: api_mode_config_patch + tags: + - ModeConfig + responses: + 200: + description: 'ModeConfig resource updated' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/ModeConfig.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + 404: + description: 'Resource not found' + summary: 'Updates the ModeConfig resource.' + description: 'Updates the ModeConfig resource.' + parameters: [] + requestBody: + description: 'The updated ModeConfig resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/ModeConfig' + required: true + deprecated: false + parameters: [] + /api/players: + get: + operationId: api_players_get_collection + tags: + - Player + responses: + 200: + description: 'Player collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/Player.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of Player resources.' + description: 'Retrieves the collection of Player resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' + deprecated: false + post: + operationId: api_players_post + tags: + - Player + responses: + 201: + description: 'Player resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Player.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Creates a Player resource.' + description: 'Creates a Player resource.' + parameters: [] + requestBody: + description: 'The new Player resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Player.jsonld' + required: true + deprecated: false + parameters: [] + '/api/players/{id}': + get: + operationId: api_players_id_get + tags: + - Player + responses: + 200: + description: 'Player resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Player.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a Player resource.' + description: 'Retrieves a Player resource.' + parameters: + - + name: id + in: path + description: 'Player identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + patch: + operationId: api_players_id_patch + tags: + - Player + responses: + 200: + description: 'Player resource updated' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Player.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + 404: + description: 'Resource not found' + summary: 'Updates the Player resource.' + description: 'Updates the Player resource.' + parameters: + - + name: id + in: path + description: 'Player identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + requestBody: + description: 'The updated Player resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/Player' + required: true + deprecated: false + parameters: [] + /api/rarities: + get: + operationId: api_rarities_get_collection + tags: + - Rarity + responses: + 200: + description: 'Rarity collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/Rarity.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of Rarity resources.' + description: 'Retrieves the collection of Rarity resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' + deprecated: false + post: + operationId: api_rarities_post + tags: + - Rarity + responses: + 201: + description: 'Rarity resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Rarity.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Creates a Rarity resource.' + description: 'Creates a Rarity resource.' + parameters: [] + requestBody: + description: 'The new Rarity resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Rarity.jsonld' + required: true + deprecated: false + parameters: [] + '/api/rarities/{id}': + get: + operationId: api_rarities_id_get + tags: + - Rarity + responses: + 200: + description: 'Rarity resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Rarity.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a Rarity resource.' + description: 'Retrieves a Rarity resource.' + parameters: + - + name: id + in: path + description: 'Rarity identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + patch: + operationId: api_rarities_id_patch + tags: + - Rarity + responses: + 200: + description: 'Rarity resource updated' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/Rarity.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + 404: + description: 'Resource not found' + summary: 'Updates the Rarity resource.' + description: 'Updates the Rarity resource.' + parameters: + - + name: id + in: path + description: 'Rarity identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + requestBody: + description: 'The updated Rarity resource' + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/Rarity' + required: true + deprecated: false + parameters: [] + /api/system_stats: + get: + operationId: api_system_stats_get + tags: + - SystemStat + responses: + 200: + description: 'SystemStat resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/SystemStat.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a SystemStat resource.' + description: 'Retrieves a SystemStat resource.' + parameters: [] + deprecated: false + parameters: [] + /api/users: + get: + operationId: api_users_get_collection + tags: + - User + responses: + 200: + description: 'User collection' + content: + application/ld+json: + schema: + type: object + properties: + 'hydra:member': { type: array, items: { $ref: '#/components/schemas/User.jsonld' } } + 'hydra:totalItems': { type: integer, minimum: 0 } + 'hydra:view': { type: object, properties: { '@id': { type: string, format: iri-reference }, '@type': { type: string }, 'hydra:first': { type: string, format: iri-reference }, 'hydra:last': { type: string, format: iri-reference }, 'hydra:previous': { type: string, format: iri-reference }, 'hydra:next': { type: string, format: iri-reference } }, example: { '@id': string, type: string, 'hydra:first': string, 'hydra:last': string, 'hydra:previous': string, 'hydra:next': string } } + 'hydra:search': { type: object, properties: { '@type': { type: string }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string }, 'hydra:mapping': { type: array, items: { type: object, properties: { '@type': { type: string }, variable: { type: string }, property: { type: [string, 'null'] }, required: { type: boolean } } } } } } + required: + - 'hydra:member' + summary: 'Retrieves the collection of User resources.' + description: 'Retrieves the collection of User resources.' + parameters: + - + name: page + in: query + description: 'The collection page number' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 1 + style: form + explode: false + allowReserved: false + - + name: itemsPerPage + in: query + description: 'The number of items per page' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: integer + default: 50 + minimum: 0 + maximum: 100 + style: form + explode: false + allowReserved: false + - + name: firstName + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: lastName + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: userNameSearch + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + - + name: custom_json_order + in: query + description: '' + required: false + deprecated: false + allowEmptyValue: true + schema: + type: string + style: form + explode: false + allowReserved: false + example: '{"active":"cntSoldItems","direction":"desc","listColDefinition":{"field":"cntSoldItems","sortingSubResource":"tradePileItems","countSortSubresource":true,"countSortSubresourceValue":["closed"],"countSortSubresourceField":"tradeState","countSortFilterSubResource":"account","countSortFilterSubresourceField":"tmOpen","countSortFilterSubresourceValue":"0"}}' + deprecated: false + post: + operationId: api_users_post + tags: + - User + responses: + 201: + description: 'User resource created' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/User.jsonld' + links: { } + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Creates a User resource.' + description: 'Creates a User resource.' + parameters: [] + requestBody: + description: 'The new User resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/User.jsonld' + required: true + deprecated: false + parameters: [] + '/api/users/{id}': + get: + operationId: api_users_id_get + tags: + - User + responses: + 200: + description: 'User resource' + content: + application/ld+json: + schema: + $ref: '#/components/schemas/User.jsonld' + 404: + description: 'Resource not found' + summary: 'Retrieves a User resource.' + description: 'Retrieves a User resource.' + parameters: + - + name: id + in: path + description: 'User identifier' + required: true + deprecated: false + allowEmptyValue: false + schema: + type: string + style: simple + explode: false + allowReserved: false + deprecated: false + parameters: [] +components: + schemas: + AccountTradePileItem: + type: object + description: '' + deprecated: false + properties: + dbId: + readOnly: true + type: + - integer + - 'null' + account: + readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + candidateItem: + readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + eaId: + readOnly: true + type: integer + eaAssetId: + readOnly: true + type: integer + eaResourceId: + readOnly: true + type: integer + rareFlag: + readOnly: true + type: integer + itemType: + readOnly: true + type: string + rating: + readOnly: true + type: integer + contracts: + readOnly: true + type: + - integer + - 'null' + playStyle: + readOnly: true + type: + - integer + - 'null' + startingBid: + type: integer + binPrice: + type: integer + individualPrice: + default: true + example: true + type: boolean + minRange: + readOnly: true + type: integer + maxRange: + readOnly: true + type: integer + lastSalePrice: + readOnly: true + type: integer + tradeState: + readOnly: true + type: + - string + - 'null' + eaTradeId: + readOnly: true + type: + - integer + - 'null' + rebuy: + readOnly: true + default: true + example: true + type: boolean + leagueId: + readOnly: true + type: + - integer + - 'null' + teamId: + readOnly: true + type: + - integer + - 'null' + nationId: + readOnly: true + type: + - integer + - 'null' + listCnt: + readOnly: true + type: integer + openBidCnt: + readOnly: true + type: + - integer + - 'null' + snipedItem: + readOnly: true + default: true + example: true + type: boolean + marketAverage: + readOnly: true + type: + - integer + - 'null' + creationDate: + readOnly: true + type: string + format: date-time + AccountTradePileItem.jsonld: + type: object + description: '' + deprecated: false + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + dbId: + readOnly: true + type: + - integer + - 'null' + account: + readOnly: true + $ref: '#/components/schemas/GameAccount.jsonld' + candidateItem: + readOnly: true + $ref: '#/components/schemas/Candidate.jsonld' + eaId: + readOnly: true + type: integer + eaAssetId: + readOnly: true + type: integer + eaResourceId: + readOnly: true + type: integer + rareFlag: + readOnly: true + type: integer + itemType: + readOnly: true + type: string + rating: + readOnly: true + type: integer + contracts: + readOnly: true + type: + - integer + - 'null' + playStyle: + readOnly: true + type: + - integer + - 'null' + startingBid: + type: integer + binPrice: + type: integer + individualPrice: + default: true + example: true + type: boolean + minRange: + readOnly: true + type: integer + maxRange: + readOnly: true + type: integer + lastSalePrice: + readOnly: true + type: integer + tradeState: + readOnly: true + type: + - string + - 'null' + eaTradeId: + readOnly: true + type: + - integer + - 'null' + rebuy: + readOnly: true + default: true + example: true + type: boolean + leagueId: + readOnly: true + type: + - integer + - 'null' + teamId: + readOnly: true + type: + - integer + - 'null' + nationId: + readOnly: true + type: + - integer + - 'null' + listCnt: + readOnly: true + type: integer + openBidCnt: + readOnly: true + type: + - integer + - 'null' + snipedItem: + readOnly: true + default: true + example: true + type: boolean + marketAverage: + readOnly: true + type: + - integer + - 'null' + creationDate: + readOnly: true + type: string + format: date-time + Candidate: + type: object + description: '' + deprecated: false + properties: + dbId: + readOnly: true + type: + - integer + - 'null' + rarity: + readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + candidateStat: + readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + player: + readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + firstname: + readOnly: true + type: + - string + - 'null' + lastname: + readOnly: true + type: + - string + - 'null' + nickname: + readOnly: true + type: + - string + - 'null' + fullDisplayInfo: + readOnly: true + type: + - string + - 'null' + eaAssetId: + readOnly: true + type: + - integer + - 'null' + eaResourceId: + readOnly: true + type: + - integer + - 'null' + rareFlag: + readOnly: true + type: + - integer + - 'null' + rarityName: + readOnly: true + type: + - string + - 'null' + image: + readOnly: true + type: + - string + - 'null' + format: iri-reference + example: 'https://example.com/' + imageUrl: + readOnly: true + type: + - string + - 'null' + cardImageUrl: + readOnly: true + type: + - string + - 'null' + stockCountTotal: + readOnly: true + type: + - integer + - 'null' + stockCountReal: + readOnly: true + type: + - integer + - 'null' + futBinId: + type: + - integer + - 'null' + futBinName: + type: + - string + - 'null' + futBinPrice: + type: + - integer + - 'null' + futBinSellingPrice: + type: + - integer + - 'null' + lastFutBinUpdate: + readOnly: true + type: + - string + - 'null' + format: date-time + futWizId: + type: + - integer + - 'null' + futWizPrice: + type: + - integer + - 'null' + futwizName: + type: + - string + - 'null' + futWizSellingPrice: + type: + - integer + - 'null' + lastFutWizUpdate: + readOnly: true + type: + - string + - 'null' + format: date-time + rating: + type: + - integer + - 'null' + highestBuyBinPrice: + type: + - integer + - 'null' + sellStartingBid: + type: + - integer + - 'null' + sellBinPrice: + type: + - integer + - 'null' + lastFoundMinRange: + type: + - integer + - 'null' + lastFoundMaxRange: + type: + - integer + - 'null' + lastFoundLowestBin: + type: + - integer + - 'null' + lowestBinUpdateDate: + readOnly: true + type: + - string + - 'null' + format: date-time + buy: + type: + - boolean + - 'null' + maxBuyPrice: + type: + - integer + - 'null' + buyStyle: + type: + - integer + - 'null' + newBuySelective: + type: + - boolean + - 'null' + remove: + type: + - boolean + - 'null' + leagueId: + type: + - integer + - 'null' + nationId: + type: + - integer + - 'null' + prio: + type: + - integer + - 'null' + listCnt: + type: + - integer + - 'null' + soldCnt: + type: + - integer + - 'null' + note: + type: + - string + - 'null' + relevant: + type: + - boolean + - 'null' + adjust100: + type: + - boolean + - 'null' + directReBuy: + type: + - boolean + - 'null' + marketAverage: + readOnly: true + type: + - integer + - 'null' + creationDate: + readOnly: true + type: + - string + - 'null' + format: date-time + required: + - eaAssetId + - eaResourceId + - rareFlag + - rating + - buy + - buyStyle + - newBuySelective + - remove + - listCnt + - soldCnt + - relevant + - adjust100 + - directReBuy + - creationDate + Candidate.jsonld: + type: object + description: '' + deprecated: false + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + dbId: + readOnly: true + type: + - integer + - 'null' + rarity: + readOnly: true + $ref: '#/components/schemas/Rarity.jsonld' + candidateStat: + readOnly: true + $ref: '#/components/schemas/CandidateStat.jsonld' + player: + readOnly: true + $ref: '#/components/schemas/Player.jsonld' + firstname: + readOnly: true + type: + - string + - 'null' + lastname: + readOnly: true + type: + - string + - 'null' + nickname: + readOnly: true + type: + - string + - 'null' + fullDisplayInfo: + readOnly: true + type: + - string + - 'null' + eaAssetId: + readOnly: true + type: + - integer + - 'null' + eaResourceId: + readOnly: true + type: + - integer + - 'null' + rareFlag: + readOnly: true + type: + - integer + - 'null' + rarityName: + readOnly: true + type: + - string + - 'null' + image: + readOnly: true + type: + - string + - 'null' + format: iri-reference + example: 'https://example.com/' + imageUrl: + readOnly: true + type: + - string + - 'null' + cardImageUrl: + readOnly: true + type: + - string + - 'null' + stockCountTotal: + readOnly: true + type: + - integer + - 'null' + stockCountReal: + readOnly: true + type: + - integer + - 'null' + futBinId: + type: + - integer + - 'null' + futBinName: + type: + - string + - 'null' + futBinPrice: + type: + - integer + - 'null' + futBinSellingPrice: + type: + - integer + - 'null' + lastFutBinUpdate: + readOnly: true + type: + - string + - 'null' + format: date-time + futWizId: + type: + - integer + - 'null' + futWizPrice: + type: + - integer + - 'null' + futwizName: + type: + - string + - 'null' + futWizSellingPrice: + type: + - integer + - 'null' + lastFutWizUpdate: + readOnly: true + type: + - string + - 'null' + format: date-time + rating: + type: + - integer + - 'null' + highestBuyBinPrice: + type: + - integer + - 'null' + sellStartingBid: + type: + - integer + - 'null' + sellBinPrice: + type: + - integer + - 'null' + lastFoundMinRange: + type: + - integer + - 'null' + lastFoundMaxRange: + type: + - integer + - 'null' + lastFoundLowestBin: + type: + - integer + - 'null' + lowestBinUpdateDate: + readOnly: true + type: + - string + - 'null' + format: date-time + buy: + type: + - boolean + - 'null' + maxBuyPrice: + type: + - integer + - 'null' + buyStyle: + type: + - integer + - 'null' + newBuySelective: + type: + - boolean + - 'null' + remove: + type: + - boolean + - 'null' + leagueId: + type: + - integer + - 'null' + nationId: + type: + - integer + - 'null' + prio: + type: + - integer + - 'null' + listCnt: + type: + - integer + - 'null' + soldCnt: + type: + - integer + - 'null' + note: + type: + - string + - 'null' + relevant: + type: + - boolean + - 'null' + adjust100: + type: + - boolean + - 'null' + directReBuy: + type: + - boolean + - 'null' + marketAverage: + readOnly: true + type: + - integer + - 'null' + creationDate: + readOnly: true + type: + - string + - 'null' + format: date-time + required: + - eaAssetId + - eaResourceId + - rareFlag + - rating + - buy + - buyStyle + - newBuySelective + - remove + - listCnt + - soldCnt + - relevant + - adjust100 + - directReBuy + - creationDate + CandidateStat.jsonld: + type: object + description: '' + deprecated: false + properties: + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + candidateItem: + readOnly: true + $ref: '#/components/schemas/Candidate.jsonld' + revRl6: + type: number + rl6: + type: integer + sold6: + type: integer + rat6: + type: number + rev6: + type: integer + revRl12: + type: number + rl12: + type: integer + sold12: + type: integer + rat12: + type: number + rev12: + type: integer + revRl24: + type: number + rl24: + type: integer + sold24: + type: integer + rat24: + type: number + rev24: + type: integer + revRl3d: + type: number + rl3d: + type: integer + sold3d: + type: integer + rat3d: + type: number + rev3d: + type: integer + revRl1w: + type: number + rl1w: + type: integer + sold1w: + type: integer + rat1w: + type: number + rev1w: + type: integer + revRl2w: + type: number + rl2w: + type: integer + sold2w: + type: integer + rat2w: + type: number + rev2w: + type: integer + revRl3w: + type: number + rl3w: + type: integer + sold3w: + type: integer + rat3w: + type: number + rev3w: + type: integer + revRl4w: + type: number + rl4w: + type: integer + sold4w: + type: integer + rat4w: + type: number + rev4w: + type: integer + revRl: + type: number + rl: + type: integer + sold: + type: integer + rat: + type: number + rev: + type: integer + snipingRev: + type: integer + creationDate: + readOnly: true + type: + - string + - 'null' + format: date-time + lastUpdateDate: + readOnly: true + type: + - string + - 'null' + format: date-time + CandidateStockAccounts.jsonld: + type: object + description: '' + deprecated: false + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + candidatesStockAccounts: + type: array + items: + $ref: '#/components/schemas/GameAccount.jsonld' + candidatesMissingAccounts: + type: array + items: + $ref: '#/components/schemas/GameAccount.jsonld' + Config: + type: object + description: '' + deprecated: false + properties: + systemActive: + type: boolean + systemRunning: + type: boolean + lastUpdateDate: + readOnly: true + type: string + format: date-time + lastCheckDate: + readOnly: true + type: string + format: date-time + processCnt: + readOnly: true + type: integer + sleepHourStart: + minimum: 0 + maximum: 23 + type: + - integer + - 'null' + sleepHourEnd: + minimum: 0 + maximum: 23 + type: + - integer + - 'null' + checkMaxSales: + type: boolean + numMaxSales: + minimum: 0 + maximum: 20 + type: + - integer + - 'null' + Config.jsonld: + type: object + description: '' + deprecated: false + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + systemActive: + type: boolean + systemRunning: + type: boolean + lastUpdateDate: + readOnly: true + type: string + format: date-time + lastCheckDate: + readOnly: true + type: string + format: date-time + processCnt: + readOnly: true + type: integer + sleepHourStart: + minimum: 0 + maximum: 23 + type: + - integer + - 'null' + sleepHourEnd: + minimum: 0 + maximum: 23 + type: + - integer + - 'null' + checkMaxSales: + type: boolean + numMaxSales: + minimum: 0 + maximum: 20 + type: + - integer + - 'null' + GameAccount: + type: object + description: '' + deprecated: false + properties: + dbId: + readOnly: true + type: + - integer + - 'null' + email: + format: email + externalDocs: + url: 'https://schema.org/email' + type: + - string + - 'null' + profile: + type: + - string + - 'null' + password: + type: + - string + - 'null' + emailPw: + type: + - string + - 'null' + credits: + readOnly: true + type: + - integer + - 'null' + cntItems: + readOnly: true + type: + - integer + - 'null' + cntSoldItems: + readOnly: true + type: + - integer + - 'null' + cntInactiveItems: + readOnly: true + type: + - integer + - 'null' + active: + type: + - boolean + - 'null' + running: + type: + - boolean + - 'null' + relist: + type: + - boolean + - 'null' + relistDate: + type: + - string + - 'null' + format: date-time + blocked: + type: + - boolean + - 'null' + sniping: + type: + - boolean + - 'null' + snipingDate: + readOnly: true + type: + - string + - 'null' + format: date-time + tmOpen: + type: + - boolean + - 'null' + tmState: + type: + - integer + - 'null' + dead: + type: + - boolean + - 'null' + lockedMsg: + type: + - boolean + - 'null' + dynPrices: + type: + - boolean + - 'null' + newBuy: + type: + - boolean + - 'null' + newBuyDate: + readOnly: true + type: + - string + - 'null' + format: date-time + newBuySelective: + type: + - boolean + - 'null' + reBuy: + type: + - boolean + - 'null' + rebuyDate: + readOnly: true + type: + - string + - 'null' + format: date-time + connectionDate: + readOnly: true + type: + - string + - 'null' + format: date-time + importWatchlist: + type: + - boolean + - 'null' + autoReBuy: + type: + - boolean + - 'null' + directReBuy: + type: + - boolean + - 'null' + itemMaxBuyPrice: + minimum: 0 + maximum: 15000000 + type: + - integer + - 'null' + revenue: + readOnly: true + type: + - integer + - 'null' + futWizValue: + readOnly: true + type: + - integer + - 'null' + eaMarketAvgValue: + readOnly: true + type: + - integer + - 'null' + mfaCode: + type: + - string + - 'null' + twoFactorAuthKey: + type: + - string + - 'null' + login2FaViaApp: + type: + - boolean + - 'null' + eaCode1: + type: + - string + - 'null' + eaCode2: + type: + - string + - 'null' + eaCode3: + type: + - string + - 'null' + eaCode4: + type: + - string + - 'null' + eaCode5: + type: + - string + - 'null' + eaCode6: + type: + - string + - 'null' + snipingCnt1h: + type: + - integer + - 'null' + snipingCnt3h: + type: + - integer + - 'null' + snipingCnt6h: + type: + - integer + - 'null' + snipingCnt12h: + type: + - integer + - 'null' + snipingCnt24h: + type: + - integer + - 'null' + snipingCnt3d: + type: + - integer + - 'null' + snipingCnt1w: + type: + - integer + - 'null' + note: + type: + - string + - 'null' + loopStartDate: + readOnly: true + type: + - string + - 'null' + format: date-time + loopFinishDate: + readOnly: true + type: + - string + - 'null' + format: date-time + creationDate: + readOnly: true + type: + - string + - 'null' + format: date-time + owner: + readOnly: true + type: string + format: iri-reference + example: 'https://example.com/' + required: + - email + - profile + - password + - active + - running + - relist + - blocked + - sniping + - tmOpen + - dead + - lockedMsg + - dynPrices + - newBuy + - newBuySelective + - reBuy + - importWatchlist + - autoReBuy + - directReBuy + GameAccount.jsonld: + type: object + description: '' + deprecated: false + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + dbId: + readOnly: true + type: + - integer + - 'null' + email: + format: email + externalDocs: + url: 'https://schema.org/email' + type: + - string + - 'null' + profile: + type: + - string + - 'null' + password: + type: + - string + - 'null' + emailPw: + type: + - string + - 'null' + credits: + readOnly: true + type: + - integer + - 'null' + cntItems: + readOnly: true + type: + - integer + - 'null' + cntSoldItems: + readOnly: true + type: + - integer + - 'null' + cntInactiveItems: + readOnly: true + type: + - integer + - 'null' + active: + type: + - boolean + - 'null' + running: + type: + - boolean + - 'null' + relist: + type: + - boolean + - 'null' + relistDate: + type: + - string + - 'null' + format: date-time + blocked: + type: + - boolean + - 'null' + sniping: + type: + - boolean + - 'null' + snipingDate: + readOnly: true + type: + - string + - 'null' + format: date-time + tmOpen: + type: + - boolean + - 'null' + tmState: + type: + - integer + - 'null' + dead: + type: + - boolean + - 'null' + lockedMsg: + type: + - boolean + - 'null' + dynPrices: + type: + - boolean + - 'null' + newBuy: + type: + - boolean + - 'null' + newBuyDate: + readOnly: true + type: + - string + - 'null' + format: date-time + newBuySelective: + type: + - boolean + - 'null' + reBuy: + type: + - boolean + - 'null' + rebuyDate: + readOnly: true + type: + - string + - 'null' + format: date-time + connectionDate: + readOnly: true + type: + - string + - 'null' + format: date-time + importWatchlist: + type: + - boolean + - 'null' + autoReBuy: + type: + - boolean + - 'null' + directReBuy: + type: + - boolean + - 'null' + itemMaxBuyPrice: + minimum: 0 + maximum: 15000000 + type: + - integer + - 'null' + revenue: + readOnly: true + type: + - integer + - 'null' + futWizValue: + readOnly: true + type: + - integer + - 'null' + eaMarketAvgValue: + readOnly: true + type: + - integer + - 'null' + mfaCode: + type: + - string + - 'null' + twoFactorAuthKey: + type: + - string + - 'null' + login2FaViaApp: + type: + - boolean + - 'null' + eaCode1: + type: + - string + - 'null' + eaCode2: + type: + - string + - 'null' + eaCode3: + type: + - string + - 'null' + eaCode4: + type: + - string + - 'null' + eaCode5: + type: + - string + - 'null' + eaCode6: + type: + - string + - 'null' + snipingCnt1h: + type: + - integer + - 'null' + snipingCnt3h: + type: + - integer + - 'null' + snipingCnt6h: + type: + - integer + - 'null' + snipingCnt12h: + type: + - integer + - 'null' + snipingCnt24h: + type: + - integer + - 'null' + snipingCnt3d: + type: + - integer + - 'null' + snipingCnt1w: + type: + - integer + - 'null' + note: + type: + - string + - 'null' + loopStartDate: + readOnly: true + type: + - string + - 'null' + format: date-time + loopFinishDate: + readOnly: true + type: + - string + - 'null' + format: date-time + creationDate: + readOnly: true + type: + - string + - 'null' + format: date-time + owner: + readOnly: true + $ref: '#/components/schemas/User.jsonld' + required: + - email + - profile + - password + - active + - running + - relist + - blocked + - sniping + - tmOpen + - dead + - lockedMsg + - dynPrices + - newBuy + - newBuySelective + - reBuy + - importWatchlist + - autoReBuy + - directReBuy + LogAccountCredit.jsonld: + type: object + description: '' + deprecated: false + properties: + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + gameAccount: + readOnly: true + $ref: '#/components/schemas/GameAccount.jsonld' + credits: + readOnly: true + type: + - integer + - 'null' + revenue: + readOnly: true + type: + - integer + - 'null' + creationDate: + readOnly: true + type: + - string + - 'null' + format: date-time + LogAccountProfit.jsonld: + type: object + description: '' + deprecated: false + properties: + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + gameAccount: + readOnly: true + $ref: '#/components/schemas/GameAccount.jsonld' + credits: + type: + - integer + - 'null' + revenue: + type: + - integer + - 'null' + tpValue: + type: + - integer + - 'null' + revToday: + type: + - integer + - 'null' + rev3hours: + type: + - integer + - 'null' + rev6hours: + type: + - integer + - 'null' + rev12hours: + type: + - integer + - 'null' + rev24hours: + type: + - integer + - 'null' + rev3days: + type: + - integer + - 'null' + rev1week: + type: + - integer + - 'null' + rev2weeks: + type: + - integer + - 'null' + rev3weeks: + type: + - integer + - 'null' + rev4weeks: + type: + - integer + - 'null' + rev2months: + type: + - integer + - 'null' + rev3months: + type: + - integer + - 'null' + revTotal: + type: + - integer + - 'null' + numSalesToday: + type: + - integer + - 'null' + numSales3hours: + type: + - integer + - 'null' + numSales6hours: + type: + - integer + - 'null' + numSales12hours: + type: + - integer + - 'null' + numSales24hours: + type: + - integer + - 'null' + numSales3days: + type: + - integer + - 'null' + numSales1week: + type: + - integer + - 'null' + numSales2weeks: + type: + - integer + - 'null' + numSales3weeks: + type: + - integer + - 'null' + numSales4weeks: + type: + - integer + - 'null' + numSales2months: + type: + - integer + - 'null' + numSales3months: + type: + - integer + - 'null' + numSalesTotal: + type: + - integer + - 'null' + isDailyProfit: + type: + - boolean + - 'null' + creationDate: + type: + - string + - 'null' + format: date-time + LogAccountSoldItem.jsonld: + type: object + description: '' + deprecated: false + properties: + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + dbId: + readOnly: true + type: + - integer + - 'null' + gameAccount: + readOnly: true + $ref: '#/components/schemas/GameAccount.jsonld' + candidateItem: + readOnly: true + $ref: '#/components/schemas/Candidate.jsonld' + eaId: + readOnly: true + type: integer + contracts: + readOnly: true + type: + - integer + - 'null' + playStyle: + readOnly: true + type: + - integer + - 'null' + lastSalePrice: + readOnly: true + type: integer + currentBid: + readOnly: true + type: integer + startingBid: + readOnly: true + type: integer + binPrice: + readOnly: true + type: integer + minRange: + readOnly: true + type: integer + maxRange: + readOnly: true + type: integer + tradeState: + readOnly: true + type: string + eaTradeId: + readOnly: true + type: integer + listCnt: + readOnly: true + type: integer + revenue: + readOnly: true + type: integer + reBought: + readOnly: true + type: boolean + snipedItem: + readOnly: true + type: boolean + firstListDate: + readOnly: true + type: + - string + - 'null' + format: date-time + creationDate: + readOnly: true + type: string + format: date-time + LogGeneral.jsonld: + type: object + description: '' + deprecated: false + properties: + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + dbId: + readOnly: true + type: integer + gameAccount: + readOnly: true + $ref: '#/components/schemas/GameAccount.jsonld' + candidateItem: + readOnly: true + $ref: '#/components/schemas/Candidate.jsonld' + logType: + type: string + enum: + - alert + - alert_low + - cant_buy + - debug + - debug_server_logs + - info + - moved_to_club + - new_buy + - player_price_changed + - preview_pack + - preview_pack_alert + - price_range_errors + - profit_overview + - removed + - rebuy + - sales + - server_logs + - stats + - hourly_stats + message: + readOnly: true + type: + - string + - 'null' + creationDate: + readOnly: true + type: + - string + - 'null' + format: date-time + required: + - logType + LogTotalProfit: + type: object + description: '' + deprecated: false + properties: + credits: + type: + - integer + - 'null' + revenue: + type: + - integer + - 'null' + tpValueFutwiz: + type: + - integer + - 'null' + tpValueEaAverage: + type: + - integer + - 'null' + revToday: + type: + - integer + - 'null' + rev3hours: + type: + - integer + - 'null' + rev6hours: + type: + - integer + - 'null' + rev12hours: + type: + - integer + - 'null' + rev24hours: + type: + - integer + - 'null' + rev3days: + type: + - integer + - 'null' + rev1week: + type: + - integer + - 'null' + rev2weeks: + type: + - integer + - 'null' + rev3weeks: + type: + - integer + - 'null' + rev4weeks: + type: + - integer + - 'null' + rev2months: + type: + - integer + - 'null' + rev3months: + type: + - integer + - 'null' + revTotal: + type: + - integer + - 'null' + numSalesToday: + type: + - integer + - 'null' + numSales3hours: + type: + - integer + - 'null' + numSales6hours: + type: + - integer + - 'null' + numSales12hours: + type: + - integer + - 'null' + numSales24hours: + type: + - integer + - 'null' + numSales3days: + type: + - integer + - 'null' + numSales1week: + type: + - integer + - 'null' + numSales2weeks: + type: + - integer + - 'null' + numSales3weeks: + type: + - integer + - 'null' + numSales4weeks: + type: + - integer + - 'null' + numSales2months: + type: + - integer + - 'null' + numSales3months: + type: + - integer + - 'null' + numSalesTotal: + type: + - integer + - 'null' + isDailyProfit: + type: + - boolean + - 'null' + creationDate: + type: + - string + - 'null' + format: date-time + LogTotalProfit.jsonld: + type: object + description: '' + deprecated: false + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + credits: + type: + - integer + - 'null' + revenue: + type: + - integer + - 'null' + tpValueFutwiz: + type: + - integer + - 'null' + tpValueEaAverage: + type: + - integer + - 'null' + revToday: + type: + - integer + - 'null' + rev3hours: + type: + - integer + - 'null' + rev6hours: + type: + - integer + - 'null' + rev12hours: + type: + - integer + - 'null' + rev24hours: + type: + - integer + - 'null' + rev3days: + type: + - integer + - 'null' + rev1week: + type: + - integer + - 'null' + rev2weeks: + type: + - integer + - 'null' + rev3weeks: + type: + - integer + - 'null' + rev4weeks: + type: + - integer + - 'null' + rev2months: + type: + - integer + - 'null' + rev3months: + type: + - integer + - 'null' + revTotal: + type: + - integer + - 'null' + numSalesToday: + type: + - integer + - 'null' + numSales3hours: + type: + - integer + - 'null' + numSales6hours: + type: + - integer + - 'null' + numSales12hours: + type: + - integer + - 'null' + numSales24hours: + type: + - integer + - 'null' + numSales3days: + type: + - integer + - 'null' + numSales1week: + type: + - integer + - 'null' + numSales2weeks: + type: + - integer + - 'null' + numSales3weeks: + type: + - integer + - 'null' + numSales4weeks: + type: + - integer + - 'null' + numSales2months: + type: + - integer + - 'null' + numSales3months: + type: + - integer + - 'null' + numSalesTotal: + type: + - integer + - 'null' + isDailyProfit: + type: + - boolean + - 'null' + creationDate: + type: + - string + - 'null' + format: date-time + MediaObject.jsonld-media_object.read: + type: object + description: '' + deprecated: false + externalDocs: + url: 'https://schema.org/MediaObject' + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + contentUrl: + externalDocs: + url: 'https://schema.org/contentUrl' + type: + - string + - 'null' + ModeConfig: + type: object + description: '' + deprecated: false + properties: + autoReBuyMinSoldItems: + minimum: 0 + maximum: 20 + default: 3 + example: 3 + type: integer + autoReBuyMinLastHours: + minimum: 0 + maximum: 20 + default: 3 + example: 3 + type: integer + ModeConfig.jsonld: + type: object + description: '' + deprecated: false + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + autoReBuyMinSoldItems: + minimum: 0 + maximum: 20 + default: 3 + example: 3 + type: integer + autoReBuyMinLastHours: + minimum: 0 + maximum: 20 + default: 3 + example: 3 + type: integer + Player: + type: object + description: '' + deprecated: false + properties: + eaAssetId: + type: integer + firstname: + type: + - string + - 'null' + lastname: + type: + - string + - 'null' + nickname: + type: + - string + - 'null' + rating: + type: integer + creationDate: + readOnly: true + type: string + format: date-time + Player.jsonld: + type: object + description: '' + deprecated: false + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + eaAssetId: + type: integer + firstname: + type: + - string + - 'null' + lastname: + type: + - string + - 'null' + nickname: + type: + - string + - 'null' + rating: + type: integer + creationDate: + readOnly: true + type: string + format: date-time + Rarity: + type: object + description: '' + deprecated: false + properties: + rareFlag: + readOnly: true + type: integer + name: + type: + - string + - 'null' + untradable: + readOnly: true + type: boolean + image: + readOnly: true + type: + - string + - 'null' + format: iri-reference + example: 'https://example.com/' + imageUrl: + readOnly: true + type: + - string + - 'null' + imageBronze: + readOnly: true + type: + - string + - 'null' + format: iri-reference + example: 'https://example.com/' + Rarity.jsonld: + type: object + description: '' + deprecated: false + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + rareFlag: + readOnly: true + type: integer + name: + type: + - string + - 'null' + untradable: + readOnly: true + type: boolean + image: + readOnly: true + type: + - string + - 'null' + format: iri-reference + example: 'https://example.com/' + imageUrl: + readOnly: true + type: + - string + - 'null' + imageBronze: + readOnly: true + type: + - string + - 'null' + format: iri-reference + example: 'https://example.com/' + SystemStat.jsonld: + type: object + description: '' + deprecated: false + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + totalLogProfit: + readOnly: true + $ref: '#/components/schemas/LogTotalProfit.jsonld' + config: + readOnly: true + $ref: '#/components/schemas/Config.jsonld' + modeConfig: + readOnly: true + $ref: '#/components/schemas/ModeConfig.jsonld' + numAccounts: + type: + - integer + - 'null' + numDeadAccounts: + type: + - integer + - 'null' + numActiveAccounts: + type: + - integer + - 'null' + numTmOpenAccounts: + type: + - integer + - 'null' + numTmClosedAccounts: + type: + - integer + - 'null' + numBlockedAccounts: + type: + - integer + - 'null' + numRunningAccounts: + type: + - integer + - 'null' + numTradepileItems: + type: + - integer + - 'null' + numSoldTradepileItems: + type: + - integer + - 'null' + numActiveTradepileItems: + type: + - integer + - 'null' + numExpiredTradepileItems: + type: + - integer + - 'null' + numInactiveTradepileItems: + type: + - integer + - 'null' + numCandidates: + type: + - integer + - 'null' + numRelevantCandidates: + type: + - integer + - 'null' + numBuyCandidates: + type: + - integer + - 'null' + totalSnipingRev: + type: + - integer + - 'null' + User.jsonld: + type: object + description: '' + deprecated: false + required: + - email + - firstName + - lastName + properties: + '@context': + readOnly: true + oneOf: + - + type: string + - + type: object + properties: + '@vocab': + type: string + hydra: + type: string + enum: ['http://www.w3.org/ns/hydra/core#'] + required: + - '@vocab' + - hydra + additionalProperties: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + email: + format: email + externalDocs: + url: 'https://schema.org/email' + type: + - string + - 'null' + firstName: + type: + - string + - 'null' + lastName: + type: + - string + - 'null' + image: + type: + - string + - 'null' + format: iri-reference + example: 'https://example.com/' + imageUrl: + readOnly: true + type: + - string + - 'null' + fullName: + readOnly: true + type: + - string + - 'null' + password: + writeOnly: true + description: 'The plaintext password when being set or changed.' + type: + - string + - 'null' + active: + type: boolean + createdAt: + readOnly: true + type: + - string + - 'null' + format: date-time + responses: { } + parameters: { } + examples: { } + requestBodies: { } + headers: { } + securitySchemes: + JWT: + type: http + scheme: bearer + bearerFormat: JWT +security: + - + JWT: [] +tags: [] + diff --git a/angular/openapitools.json b/angular/openapitools.json new file mode 100644 index 0000000..9841a49 --- /dev/null +++ b/angular/openapitools.json @@ -0,0 +1,7 @@ +{ + "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json", + "spaces": 2, + "generator-cli": { + "version": "7.3.0" + } +} diff --git a/angular/package-lock.json b/angular/package-lock.json new file mode 100644 index 0000000..349eba0 --- /dev/null +++ b/angular/package-lock.json @@ -0,0 +1,14699 @@ +{ + "name": "futbase", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "futbase", + "version": "0.0.0", + "license": "ISC", + "dependencies": { + "@angular/animations": "^17.0.0", + "@angular/cdk": "^17.0.4", + "@angular/common": "^17.0.0", + "@angular/compiler": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/forms": "^17.0.0", + "@angular/material": "^17.0.4", + "@angular/platform-browser": "^17.0.0", + "@angular/platform-browser-dynamic": "^17.0.0", + "@angular/router": "^17.0.0", + "@ng-bootstrap/ng-bootstrap": "^16.0.0-rc.2", + "@ngx-translate/core": "^15.0.0", + "@ngx-translate/http-loader": "^8.0.0", + "@popperjs/core": "^2.11.8", + "@types/node": "^20.11.5", + "bootstrap": "^5.3.2", + "bootstrap-icons": "^1.11.2", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "uuid": "^9.0.1", + "zone.js": "~0.14.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.0.7", + "@angular/cli": "^17.0.7", + "@angular/compiler-cli": "^17.0.0", + "@openapitools/openapi-generator-cli": "^2.7.0", + "@types/jasmine": "~5.1.0", + "@types/uuid": "^9.0.8", + "@verizonconnect/ngx-form-generator": "^1.2.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.2.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1703.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.8.tgz", + "integrity": "sha512-lKxwG4/QABXZvJpqeSIn/kAwnY6MM9HdHZUV+o5o3UiTi+vO8rZApG4CCaITH3Bxebm7Nam7Xbk8RuukC5rq6g==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.8.tgz", + "integrity": "sha512-ixsdXggWaFRP7Jvxd0AMukImnePuGflT9Yy7NJ9/y0cL/k//S/3RnkQv5i411KzN+7D4RIbNkRGGTYeqH24zlg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1703.8", + "@angular-devkit/build-webpack": "0.1703.8", + "@angular-devkit/core": "17.3.8", + "@babel/core": "7.24.0", + "@babel/generator": "7.23.6", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.6", + "@babel/plugin-transform-async-generator-functions": "7.23.9", + "@babel/plugin-transform-async-to-generator": "7.23.3", + "@babel/plugin-transform-runtime": "7.24.0", + "@babel/preset-env": "7.24.0", + "@babel/runtime": "7.24.0", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "17.3.8", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.18", + "babel-loader": "9.1.3", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.22", + "css-loader": "6.10.0", + "esbuild-wasm": "0.20.1", + "fast-glob": "3.3.2", + "http-proxy-middleware": "2.0.6", + "https-proxy-agent": "7.0.4", + "inquirer": "9.2.15", + "jsonc-parser": "3.2.1", + "karma-source-map-support": "1.4.0", + "less": "4.2.0", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.8", + "mini-css-extract-plugin": "2.8.1", + "mrmime": "2.0.0", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.1", + "piscina": "4.4.0", + "postcss": "8.4.35", + "postcss-loader": "8.1.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.71.1", + "sass-loader": "14.1.1", + "semver": "7.6.0", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.29.1", + "tree-kill": "1.2.2", + "tslib": "2.6.2", + "undici": "6.11.1", + "vite": "5.1.7", + "watchpack": "2.4.0", + "webpack": "5.90.3", + "webpack-dev-middleware": "6.1.2", + "webpack-dev-server": "4.15.1", + "webpack-merge": "5.10.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.20.1" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "@angular/localize": "^17.0.0", + "@angular/platform-server": "^17.0.0", + "@angular/service-worker": "^17.0.0", + "@web/test-runner": "^0.18.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^17.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.2 <5.5" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1703.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.8.tgz", + "integrity": "sha512-9u6fl8VVOxcLOEMzrUeaybSvi9hSLSRucHnybneYrabsgreDo32tuy/4G8p6YAHQjpWEj9jvF9Um13ertdni5Q==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1703.8", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.8.tgz", + "integrity": "sha512-Q8q0voCGudbdCgJ7lXdnyaxKHbNQBARH68zPQV72WT8NWy+Gw/tys870i6L58NWbBaCJEUcIj/kb6KoakSRu+Q==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.8.tgz", + "integrity": "sha512-QRVEYpIfgkprNHc916JlPuNbLzOgrm9DZalHasnLUz4P6g7pR21olb8YCyM2OTJjombNhya9ZpckcADU5Qyvlg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.11.tgz", + "integrity": "sha512-1y1Egag5jbdUSUWVK+KA39N9VFDrzq9ObjbAhrXFlXKa0npBRw5bprEEeLFQMETMP9Mpjbmj2PoASfl4vqj/Iw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.3.11" + } + }, + "node_modules/@angular/cdk": { + "version": "17.3.10", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.3.10.tgz", + "integrity": "sha512-b1qktT2c1TTTe5nTji/kFAVW92fULK0YhYAvJ+BjZTPKu2FniZNe8o4qqQ0pUuvtMu+ZQxp/QqFYoidIVCjScg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^7.1.2" + }, + "peerDependencies": { + "@angular/common": "^17.0.0 || ^18.0.0", + "@angular/core": "^17.0.0 || ^18.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.8.tgz", + "integrity": "sha512-X5ZOQ6ZTKVHjhIsfl32ZRqbs+FUoeHLbT7x4fh2Os/8ObDDwrUcCJPqxe2b2RB5E2d0vepYigknHeLE7gwzlNQ==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1703.8", + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "@schematics/angular": "17.3.8", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.2", + "inquirer": "9.2.15", + "jsonc-parser": "3.2.1", + "npm-package-arg": "11.0.1", + "npm-pick-manifest": "9.0.0", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "17.0.6", + "resolve": "1.22.8", + "semver": "7.6.0", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.11.tgz", + "integrity": "sha512-WG+HQjUaQziYLGdbcv2aW+G73uroN5VF9yk4qWYcolW+VB8SV/DOAol8uFVgCF21cIOl5+wfJZvA4r5oG3dYaw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.3.11", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.11.tgz", + "integrity": "sha512-ingRoREDPkeZGSa13DlztSjZgGArNcmsAWjj+f+vQgQekTjkfQD/N+Bix/LSt5ZdbSjHMtrkDMyRPwbNyk5Keg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.3.11" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.11.tgz", + "integrity": "sha512-O44H/BKGw0TYq0aNTOKYZfQiTrfjbmcTl8y4UX6C9Xey8hXvijzZOAsjA0TGvvDJxeLR+sxaRF4i9Ihoatnd8g==", + "dependencies": { + "@babel/core": "7.23.9", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/compiler": "17.3.11", + "typescript": ">=5.2 <5.5" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/core": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.11.tgz", + "integrity": "sha512-2wPZwXFei3kVxK2ylIH6CdGebrC4kvooFx7qoX+250OITAEFMODJGdh/e3x0DpFUjlRvQtIFQ+YpQlfC5JnL4g==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.14.0" + } + }, + "node_modules/@angular/forms": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.11.tgz", + "integrity": "sha512-719flo/1L64YOAxL3pzszTK+7bczVVOQDXT1khnjb48GVZdBUBwW2D+cFbqSW1VMuWWr2Amwy1lL4YM5S7qPJQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.3.11", + "@angular/core": "17.3.11", + "@angular/platform-browser": "17.3.11", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/localize": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-17.3.11.tgz", + "integrity": "sha512-uc38JfGpIEb13rDZu7wZfEvLxBpWbhfsOR+yI21M4zIiKYQxI7RGgtH9GbCKZDEZmeTUSz/idA4zwRiiX8wNvQ==", + "peer": true, + "dependencies": { + "@babel/core": "7.23.9", + "@types/babel__core": "7.20.5", + "fast-glob": "3.3.2", + "yargs": "^17.2.1" + }, + "bin": { + "localize-extract": "tools/bundles/src/extract/cli.js", + "localize-migrate": "tools/bundles/src/migrate/cli.js", + "localize-translate": "tools/bundles/src/translate/cli.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/compiler": "17.3.11", + "@angular/compiler-cli": "17.3.11" + } + }, + "node_modules/@angular/localize/node_modules/@babel/core": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/localize/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "peer": true + }, + "node_modules/@angular/localize/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/material": { + "version": "17.3.10", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-17.3.10.tgz", + "integrity": "sha512-hHMQES0tQPH5JW33W+mpBPuM8ybsloDTqFPuRV8cboDjosAWfJhzAKF3ozICpNlUrs62La/2Wu/756GcQrxebg==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/auto-init": "15.0.0-canary.7f224ddd4.0", + "@material/banner": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/button": "15.0.0-canary.7f224ddd4.0", + "@material/card": "15.0.0-canary.7f224ddd4.0", + "@material/checkbox": "15.0.0-canary.7f224ddd4.0", + "@material/chips": "15.0.0-canary.7f224ddd4.0", + "@material/circular-progress": "15.0.0-canary.7f224ddd4.0", + "@material/data-table": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dialog": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/drawer": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/fab": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/floating-label": "15.0.0-canary.7f224ddd4.0", + "@material/form-field": "15.0.0-canary.7f224ddd4.0", + "@material/icon-button": "15.0.0-canary.7f224ddd4.0", + "@material/image-list": "15.0.0-canary.7f224ddd4.0", + "@material/layout-grid": "15.0.0-canary.7f224ddd4.0", + "@material/line-ripple": "15.0.0-canary.7f224ddd4.0", + "@material/linear-progress": "15.0.0-canary.7f224ddd4.0", + "@material/list": "15.0.0-canary.7f224ddd4.0", + "@material/menu": "15.0.0-canary.7f224ddd4.0", + "@material/menu-surface": "15.0.0-canary.7f224ddd4.0", + "@material/notched-outline": "15.0.0-canary.7f224ddd4.0", + "@material/radio": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/segmented-button": "15.0.0-canary.7f224ddd4.0", + "@material/select": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/slider": "15.0.0-canary.7f224ddd4.0", + "@material/snackbar": "15.0.0-canary.7f224ddd4.0", + "@material/switch": "15.0.0-canary.7f224ddd4.0", + "@material/tab": "15.0.0-canary.7f224ddd4.0", + "@material/tab-bar": "15.0.0-canary.7f224ddd4.0", + "@material/tab-indicator": "15.0.0-canary.7f224ddd4.0", + "@material/tab-scroller": "15.0.0-canary.7f224ddd4.0", + "@material/textfield": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tooltip": "15.0.0-canary.7f224ddd4.0", + "@material/top-app-bar": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^17.0.0 || ^18.0.0", + "@angular/cdk": "17.3.10", + "@angular/common": "^17.0.0 || ^18.0.0", + "@angular/core": "^17.0.0 || ^18.0.0", + "@angular/forms": "^17.0.0 || ^18.0.0", + "@angular/platform-browser": "^17.0.0 || ^18.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.11.tgz", + "integrity": "sha512-sWjMy8qKH6AOt5YV4OMoPhExCbGdRIPjNSwUrxCm8a8Zz5DamoX3Sib9yRk1etjBuRj+oJySSxISJim2OYXJQQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/animations": "17.3.11", + "@angular/common": "17.3.11", + "@angular/core": "17.3.11" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.11.tgz", + "integrity": "sha512-JPA0enJyJQ5H340WQ2wfXbCCHzjBiAljEDMr/Siw/CzSe0XI8aQYDqKMLUMtRyCdYhNCEYjnBWgXBi9Za9blZg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.3.11", + "@angular/compiler": "17.3.11", + "@angular/core": "17.3.11", + "@angular/platform-browser": "17.3.11" + } + }, + "node_modules/@angular/router": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.3.11.tgz", + "integrity": "sha512-A3aU6uHAeJfsfCw1dgNXHn2Kjw/UieRMnFwENkzz96YFCvFPCEZjy/mODuE3zHludMuqVsJhM/uUxWu8ATRTcA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.3.11", + "@angular/core": "17.3.11", + "@angular/platform-browser": "17.3.11", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz", + "integrity": "sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==", + "dev": true, + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "js-yaml": "^3.13.1" + } + }, + "node_modules/@apidevtools/openapi-schemas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", + "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@apidevtools/swagger-methods": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", + "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==", + "dev": true + }, + "node_modules/@apidevtools/swagger-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz", + "integrity": "sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==", + "dev": true, + "dependencies": { + "@apidevtools/json-schema-ref-parser": "9.0.6", + "@apidevtools/openapi-schemas": "^2.1.0", + "@apidevtools/swagger-methods": "^3.0.2", + "@jsdevtools/ono": "^7.1.3", + "ajv": "^8.6.3", + "ajv-draft-04": "^1.0.0", + "call-me-maybe": "^1.0.1" + }, + "peerDependencies": { + "openapi-types": ">=7" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", + "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.0", + "@babel/parser": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", + "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", + "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz", + "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", + "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-wrap-function": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", + "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", + "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", + "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", + "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", + "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", + "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", + "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", + "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", + "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", + "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", + "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", + "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", + "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", + "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", + "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.24.0", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", + "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dependencies": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "dependencies": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@dsherret/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dsherret/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-InCaQ/KEOcFtAFztn47wadritBLP2nT6m/ucbBnIgI5YwxuMzKKCHtqazR2+D1yR6y1ZTnPea9aLFEUrTttUSQ==", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", + "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", + "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", + "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", + "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", + "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", + "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", + "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", + "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", + "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", + "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", + "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", + "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", + "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", + "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", + "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", + "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", + "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", + "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", + "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", + "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", + "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", + "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", + "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "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" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@material/animation": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-1GSJaPKef+7HRuV+HusVZHps64cmZuOItDbt40tjJVaikcaZvwmHlcTxRIqzcRoCdt5ZKHh3NoO7GB9Khg4Jnw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/auto-init": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/auto-init/-/auto-init-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-t7ZGpRJ3ec0QDUO0nJu/SMgLW7qcuG2KqIsEYD1Ej8qhI2xpdR2ydSDQOkVEitXmKoGol1oq4nYSBjTlB65GqA==", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/banner": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/banner/-/banner-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-g9wBUZzYBizyBcBQXTIafnRUUPi7efU9gPJfzeGgkynXiccP/vh5XMmH+PBxl5v+4MlP/d4cZ2NUYoAN7UTqSA==", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/button": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/base": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-I9KQOKXpLfJkP8MqZyr8wZIzdPHrwPjFvGd9zSK91/vPyE4hzHRJc/0njsh9g8Lm9PRYLbifXX+719uTbHxx+A==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/button": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-BHB7iyHgRVH+JF16+iscR+Qaic+p7LU1FOLgP8KucRlpF9tTwIxQA6mJwGRi5gUtcG+vyCmzVS+hIQ6DqT/7BA==", + "dependencies": { + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/card": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/card/-/card-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-kt7y9/IWOtJTr3Z/AoWJT3ZLN7CLlzXhx2udCLP9ootZU2bfGK0lzNwmo80bv/pJfrY9ihQKCtuGTtNxUy+vIw==", + "dependencies": { + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/checkbox": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/checkbox/-/checkbox-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-rURcrL5O1u6hzWR+dNgiQ/n89vk6tdmdP3mZgnxJx61q4I/k1yijKqNJSLrkXH7Rto3bM5NRKMOlgvMvVd7UMQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/chips": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/chips/-/chips-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-AYAivV3GSk/T/nRIpH27sOHFPaSMrE3L0WYbnb5Wa93FgY8a0fbsFYtSH2QmtwnzXveg+B1zGTt7/xIIcynKdQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/checkbox": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/circular-progress": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/circular-progress/-/circular-progress-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-DJrqCKb+LuGtjNvKl8XigvyK02y36GRkfhMUYTcJEi3PrOE00bwXtyj7ilhzEVshQiXg6AHGWXtf5UqwNrx3Ow==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/progress-indicator": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/data-table": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/data-table/-/data-table-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-/2WZsuBIq9z9RWYF5Jo6b7P6u0fwit+29/mN7rmAZ6akqUR54nXyNfoSNiyydMkzPlZZsep5KrSHododDhBZbA==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/checkbox": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/icon-button": "15.0.0-canary.7f224ddd4.0", + "@material/linear-progress": "15.0.0-canary.7f224ddd4.0", + "@material/list": "15.0.0-canary.7f224ddd4.0", + "@material/menu": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/select": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/density": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-o9EXmGKVpiQ6mHhyV3oDDzc78Ow3E7v8dlaOhgaDSXgmqaE8v5sIlLNa/LKSyUga83/fpGk3QViSGXotpQx0jA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dialog": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-u0XpTlv1JqWC/bQ3DavJ1JguofTelLT2wloj59l3/1b60jv42JQ6Am7jU3I8/SIUB1MKaW7dYocXjDWtWJakLA==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/button": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/icon-button": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-mQ1HT186GPQSkRg5S18i70typ5ZytfjL09R0gJ2Qg5/G+MLCGi7TAjZZSH65tuD/QGOjel4rDdWOTmYbPYV6HA==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/drawer": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-qyO0W0KBftfH8dlLR0gVAgv7ZHNvU8ae11Ao6zJif/YxcvK4+gph1z8AO4H410YmC2kZiwpSKyxM1iQCCzbb4g==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/list": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/elevation": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-tV6s4/pUBECedaI36Yj18KmRCk1vfue/JP/5yYRlFNnLMRVISePbZaKkn/BHXVf+26I3W879+XqIGlDVdmOoMA==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/fab": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/fab/-/fab-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-4h76QrzfZTcPdd+awDPZ4Q0YdSqsXQnS540TPtyXUJ/5G99V6VwGpjMPIxAsW0y+pmI9UkLL/srrMaJec+7r4Q==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/feature-targeting": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-SAjtxYh6YlKZriU83diDEQ7jNSP2MnxKsER0TvFeyG1vX/DWsUyYDOIJTOEa9K1N+fgJEBkNK8hY55QhQaspew==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/floating-label": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-0KMo5ijjYaEHPiZ2pCVIcbaTS2LycvH9zEhEMKwPPGssBCX7iz5ffYQFk7e5yrQand1r3jnQQgYfHAwtykArnQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/focus-ring": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/focus-ring/-/focus-ring-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-Jmg1nltq4J6S6A10EGMZnvufrvU3YTi+8R8ZD9lkSbun0Fm2TVdICQt/Auyi6An9zP66oQN6c31eqO6KfIPsDg==", + "dependencies": { + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0" + } + }, + "node_modules/@material/form-field": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-fEPWgDQEPJ6WF7hNnIStxucHR9LE4DoDSMqCsGWS2Yu+NLZYLuCEecgR0UqQsl1EQdNRaFh8VH93KuxGd2hiPg==", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/icon-button": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-DcK7IL4ICY/DW+48YQZZs9g0U1kRaW0Wb0BxhvppDMYziHo/CTpFdle4gjyuTyRxPOdHQz5a97ru48Z9O4muTw==", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/image-list": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/image-list/-/image-list-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-voMjG2p80XbjL1B2lmF65zO5gEgJOVKClLdqh4wbYzYfwY/SR9c8eLvlYG7DLdFaFBl/7gGxD8TvvZ329HUFPw==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/layout-grid": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/layout-grid/-/layout-grid-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-veDABLxMn2RmvfnUO2RUmC1OFfWr4cU+MrxKPoDD2hl3l3eDYv5fxws6r5T1JoSyXoaN+oEZpheS0+M9Ure8Pg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/line-ripple": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-f60hVJhIU6I3/17Tqqzch1emUKEcfVVgHVqADbU14JD+oEIz429ZX9ksZ3VChoU3+eejFl+jVdZMLE/LrAuwpg==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/linear-progress": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-pRDEwPQielDiC9Sc5XhCXrGxP8wWOnAO8sQlMebfBYHYqy5hhiIzibezS8CSaW4MFQFyXmCmpmqWlbqGYRmiyg==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/progress-indicator": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/list": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-Is0NV91sJlXF5pOebYAtWLF4wU2MJDbYqztML/zQNENkQxDOvEXu3nWNb3YScMIYJJXvARO0Liur5K4yPagS1Q==", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-D11QU1dXqLbh5X1zKlEhS3QWh0b5BPNXlafc5MXfkdJHhOiieb7LC9hMJhbrHtj24FadJ7evaFW/T2ugJbJNnQ==", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/list": "15.0.0-canary.7f224ddd4.0", + "@material/menu-surface": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu-surface": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-7RZHvw0gbwppaAJ/Oh5SWmfAKJ62aw1IMB3+3MRwsb5PLoV666wInYa+zJfE4i7qBeOn904xqT2Nko5hY0ssrg==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/notched-outline": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-Yg2usuKB2DKlKIBISbie9BFsOVuffF71xjbxPbybvqemxqUBd+bD5/t6H1fLE+F8/NCu5JMigho4ewUU+0RCiw==", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/floating-label": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/progress-indicator": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-UPbDjE5CqT+SqTs0mNFG6uFEw7wBlgYmh+noSkQ6ty/EURm8lF125dmi4dv4kW0+octonMXqkGtAoZwLIHKf/w==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/radio": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-wR1X0Sr0KmQLu6+YOFKAI84G3L6psqd7Kys5kfb8WKBM36zxO5HQXC5nJm/Y0rdn22ixzsIz2GBo0MNU4V4k1A==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/ripple": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-JqOsWM1f4aGdotP0rh1vZlPZTg6lZgh39FIYHFMfOwfhR+LAikUJ+37ciqZuewgzXB6iiRO6a8aUH6HR5SJYPg==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/rtl": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-UVf14qAtmPiaaZjuJtmN36HETyoKWmsZM/qn1L5ciR2URb8O035dFWnz4ZWFMmAYBno/L7JiZaCkPurv2ZNrGA==", + "dependencies": { + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/segmented-button": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/segmented-button/-/segmented-button-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-LCnVRUSAhELTKI/9hSvyvIvQIpPpqF29BV+O9yM4WoNNmNWqTulvuiv7grHZl6Z+kJuxSg4BGbsPxxb9dXozPg==", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/select": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/select/-/select-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-WioZtQEXRpglum0cMSzSqocnhsGRr+ZIhvKb3FlaNrTaK8H3Y4QA7rVjv3emRtrLOOjaT6/RiIaUMTo9AGzWQQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/floating-label": "15.0.0-canary.7f224ddd4.0", + "@material/line-ripple": "15.0.0-canary.7f224ddd4.0", + "@material/list": "15.0.0-canary.7f224ddd4.0", + "@material/menu": "15.0.0-canary.7f224ddd4.0", + "@material/menu-surface": "15.0.0-canary.7f224ddd4.0", + "@material/notched-outline": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/shape": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-8z8l1W3+cymObunJoRhwFPKZ+FyECfJ4MJykNiaZq7XJFZkV6xNmqAVrrbQj93FtLsECn9g4PjjIomguVn/OEw==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/slider": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/slider/-/slider-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-QU/WSaSWlLKQRqOhJrPgm29wqvvzRusMqwAcrCh1JTrCl+xwJ43q5WLDfjYhubeKtrEEgGu9tekkAiYfMG7EBw==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/snackbar": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-sm7EbVKddaXpT/aXAYBdPoN0k8yeg9+dprgBUkrdqGzWJAeCkxb4fv2B3He88YiCtvkTz2KLY4CThPQBSEsMFQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/button": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/icon-button": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/switch": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/switch/-/switch-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-lEDJfRvkVyyeHWIBfoxYjJVl+WlEAE2kZ/+6OqB1FW0OV8ftTODZGhHRSzjVBA1/p4FPuhAtKtoK9jTpa4AZjA==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tab/-/tab-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-E1xGACImyCLurhnizyOTCgOiVezce4HlBFAI6YhJo/AyVwjN2Dtas4ZLQMvvWWqpyhITNkeYdOchwCC1mrz3AQ==", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/tab-indicator": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-bar": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-p1Asb2NzrcECvAQU3b2SYrpyJGyJLQWR+nXTYzDKE8WOpLIRCXap2audNqD7fvN/A20UJ1J8U01ptrvCkwJ4eA==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/tab": "15.0.0-canary.7f224ddd4.0", + "@material/tab-indicator": "15.0.0-canary.7f224ddd4.0", + "@material/tab-scroller": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-indicator": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-h9Td3MPqbs33spcPS7ecByRHraYgU4tNCZpZzZXw31RypjKvISDv/PS5wcA4RmWqNGih78T7xg4QIGsZg4Pk4w==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-scroller": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-LFeYNjQpdXecwECd8UaqHYbhscDCwhGln5Yh+3ctvcEgvmDPNjhKn/DL3sWprWvG8NAhP6sHMrsGhQFVdCWtTg==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/tab": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/textfield": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-AExmFvgE5nNF0UA4l2cSzPghtxSUQeeoyRjFLHLy+oAaE4eKZFrSy0zEpqPeWPQpEMDZk+6Y+6T3cOFYBeSvsw==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/floating-label": "15.0.0-canary.7f224ddd4.0", + "@material/line-ripple": "15.0.0-canary.7f224ddd4.0", + "@material/notched-outline": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/theme": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-hs45hJoE9yVnoVOcsN1jklyOa51U4lzWsEnQEuJTPOk2+0HqCQ0yv/q0InpSnm2i69fNSyZC60+8HADZGF8ugQ==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tokens": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-r9TDoicmcT7FhUXC4eYMFnt9TZsz0G8T3wXvkKncLppYvZ517gPyD/1+yhuGfGOxAzxTrM66S/oEc1fFE2q4hw==", + "dependencies": { + "@material/elevation": "15.0.0-canary.7f224ddd4.0" + } + }, + "node_modules/@material/tooltip": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tooltip/-/tooltip-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-8qNk3pmPLTnam3XYC1sZuplQXW9xLn4Z4MI3D+U17Q7pfNZfoOugGr+d2cLA9yWAEjVJYB0mj8Yu86+udo4N9w==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/button": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/top-app-bar": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-SARR5/ClYT4CLe9qAXakbr0i0cMY0V3V4pe3ElIJPfL2Z2c4wGR1mTR8m2LxU1MfGKK8aRoUdtfKaxWejp+eNA==", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/touch-target": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-BJo/wFKHPYLGsRaIpd7vsQwKr02LtO2e89Psv0on/p0OephlNIgeB9dD9W+bQmaeZsZ6liKSKRl6wJWDiK71PA==", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/typography": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-kBaZeCGD50iq1DeRRH5OM5Jl7Gdk+/NOfKArkY4ksBZvJiStJ7ACAhpvb8MEGm4s3jvDInQFLsDq3hL+SA79sQ==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@ng-bootstrap/ng-bootstrap": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-16.0.0.tgz", + "integrity": "sha512-+FJ3e6cX9DW2t7021Ji3oz433rk3+4jLfqzU+Jyx6/vJz1dIOaML3EAY6lYuW4TLiXgMPOMvs6KzPFALGh4Lag==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/forms": "^17.0.0", + "@angular/localize": "^17.0.0", + "@popperjs/core": "^2.11.8", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.8.tgz", + "integrity": "sha512-CjSVVa/9fzMpEDQP01SC4colKCbZwj7vUq0H2bivp8jVsmd21x9Fu0gDBH0Y9NdfAIm4eGZvmiZKMII3vIOaYQ==", + "dev": true, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "typescript": ">=5.2 <5.5", + "webpack": "^5.54.0" + } + }, + "node_modules/@ngx-translate/core": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-15.0.0.tgz", + "integrity": "sha512-Am5uiuR0bOOxyoercDnAA3rJVizo4RRqJHo8N3RqJ+XfzVP/I845yEnMADykOHvM6HkVm4SZSnJBOiz0Anx5BA==", + "engines": { + "node": "^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "rxjs": "^6.5.5 || ^7.4.0" + } + }, + "node_modules/@ngx-translate/http-loader": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-8.0.0.tgz", + "integrity": "sha512-SFMsdUcmHF5OdZkL1CHEoSAwbP5EbAOPTLLboOCRRoOg21P4GJx+51jxGdJeGve6LSKLf4Pay7BkTwmE6vxYlg==", + "engines": { + "node": "^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "@ngx-translate/core": ">=15.0.0", + "rxjs": "^6.5.5 || ^7.4.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "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" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.7.tgz", + "integrity": "sha512-WaOVvto604d5IpdCRV2KjQu8PzkfE96d50CQGKgywXh2GxXmDeUO5EWcBC4V57uFyrNqx83+MewuJh3WTR3xPA==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", + "dev": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dev": true, + "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" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "dev": true, + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", + "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", + "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@nuxtjs/opencollective/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@openapitools/openapi-generator-cli": { + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-2.13.4.tgz", + "integrity": "sha512-4JKyrk55ohQK2FcuZbPdNvxdyXD14jjOIvE8hYjJ+E1cHbRbfXQXbYnjTODFE52Gx8eAxz8C9icuhDYDLn7nww==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nestjs/axios": "3.0.2", + "@nestjs/common": "10.3.0", + "@nestjs/core": "10.3.0", + "@nuxtjs/opencollective": "0.3.2", + "axios": "1.6.8", + "chalk": "4.1.2", + "commander": "8.3.0", + "compare-versions": "4.1.4", + "concurrently": "6.5.1", + "console.table": "0.10.0", + "fs-extra": "10.1.0", + "glob": "7.2.3", + "https-proxy-agent": "7.0.4", + "inquirer": "8.2.6", + "lodash": "4.17.21", + "reflect-metadata": "0.1.13", + "rxjs": "7.8.1", + "tslib": "2.6.2" + }, + "bin": { + "openapi-generator-cli": "main.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openapi_generator" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/@nestjs/axios": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-3.0.2.tgz", + "integrity": "sha512-Z6GuOUdNQjP7FX+OuV2Ybyamse+/e0BFdTWBX5JxpBDKA+YkdLynDgG6HTF04zy6e9zPa19UX0WA2VDoehwhXQ==", + "dev": true, + "peerDependencies": { + "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", + "axios": "^1.3.1", + "rxjs": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/@nestjs/common": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.3.0.tgz", + "integrity": "sha512-DGv34UHsZBxCM3H5QGE2XE/+oLJzz5+714JQjBhjD9VccFlQs3LRxo/epso4l7nJIiNlZkPyIUC8WzfU/5RTsQ==", + "dev": true, + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.6.2", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/@nestjs/core": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.3.0.tgz", + "integrity": "sha512-N06P5ncknW/Pm8bj964WvLIZn2gNhHliCBoAO1LeBvNImYkecqKcrmLbY49Fa1rmMfEM3MuBHeDys3edeuYAOA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "3.2.0", + "tslib": "2.6.2", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/websockets": "^10.0.0", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==", + "dev": true + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "17.3.8", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.8.tgz", + "integrity": "sha512-2g4OmSyE9YGq50Uj7fNI26P/TSAFJ7ZuirwTF2O7Xc4XRQ29/tYIIqhezpNlTb6rlYblcQuMcUZBrMfWJHcqJw==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.3.8", + "@angular-devkit/schematics": "17.3.8", + "jsonc-parser": "3.2.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true + }, + "node_modules/@ts-morph/common": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.2.2.tgz", + "integrity": "sha512-cMUlKTWvrfE5RYJn2VvM67iwIPl3aXm4xfm8oHzCCi2YaWp+NlSuiqj5cUMh+Lse2y84BqjAVOxAv1AY1Ncf+w==", + "dev": true, + "dependencies": { + "@dsherret/to-absolute-glob": "^2.0.2", + "fast-glob": "^3.1.0", + "fs-extra": "^8.1.0", + "is-negated-glob": "^1.0.0", + "multimatch": "^4.0.0", + "typescript": "~3.7.2" + } + }, + "node_modules/@ts-morph/common/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@ts-morph/common/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@ts-morph/common/node_modules/typescript": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.7.tgz", + "integrity": "sha512-MmQdgo/XenfZPvVLtKZOq9jQQvzaUAUpcKW8Z43x9B2fOm4S5g//tPtMweZUIP+SoBqrVPEIm+dJeQ9dfO0QdA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@ts-morph/common/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "peer": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "peer": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "peer": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "peer": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", + "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@verizonconnect/ngx-form-generator": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@verizonconnect/ngx-form-generator/-/ngx-form-generator-1.2.0.tgz", + "integrity": "sha512-r8bNEDl0d9O2seJissQ8LeYwEL7kPNYWUkg8dYtNgfAZNBsb3Q/HB+YKmcOtPftZA5LbAgCIzj9XHxnPs8pCSg==", + "dev": true, + "dependencies": { + "@apidevtools/swagger-parser": "^10.0.2", + "camelcase": "^5.0.0", + "prettier": "^1.19.1", + "ts-morph": "^6.0.3", + "yaml": "^1.8.3", + "yargs": "^15.3.1" + }, + "bin": { + "ngx-form-generator": "dist/generator-cli.js" + } + }, + "node_modules/@verizonconnect/ngx-form-generator/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@verizonconnect/ngx-form-generator/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@verizonconnect/ngx-form-generator/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@verizonconnect/ngx-form-generator/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "dev": true, + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true, + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "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.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/bootstrap-icons": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz", + "integrity": "sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ] + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", + "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.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": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dev": true, + "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" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001638", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz", + "integrity": "sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "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" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/code-block-writer": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-10.1.1.tgz", + "integrity": "sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==", + "dev": true + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/compare-versions": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", + "integrity": "sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concurrently": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", + "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/concurrently/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "node_modules/console.table": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", + "integrity": "sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==", + "dev": true, + "dependencies": { + "easy-table": "1.1.0" + }, + "engines": { + "node": "> 0.10" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.22.tgz", + "integrity": "sha512-NU7DEcQZM2Dy8XTKFHxtdnIM/drE312j2T4PCVaSUcS0oBeyT/NImpRw/Ap0zOr/1SE7SgPK9tGPg1WK/sVakw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "postcss-media-query-parser": "^0.2.3" + } + }, + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/easy-table": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", + "integrity": "sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==", + "dev": true, + "optionalDependencies": { + "wcwidth": ">=1.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.814", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.814.tgz", + "integrity": "sha512-GVulpHjFu1Y9ZvikvbArHmAhZXtm3wHlpjTMcXNGKl4IQ4jMQjlnz8yMQYYqdLHKi/jEL2+CBC2akWVCoIGUdw==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", + "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", + "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "devOptional": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", + "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.1", + "@esbuild/android-arm": "0.20.1", + "@esbuild/android-arm64": "0.20.1", + "@esbuild/android-x64": "0.20.1", + "@esbuild/darwin-arm64": "0.20.1", + "@esbuild/darwin-x64": "0.20.1", + "@esbuild/freebsd-arm64": "0.20.1", + "@esbuild/freebsd-x64": "0.20.1", + "@esbuild/linux-arm": "0.20.1", + "@esbuild/linux-arm64": "0.20.1", + "@esbuild/linux-ia32": "0.20.1", + "@esbuild/linux-loong64": "0.20.1", + "@esbuild/linux-mips64el": "0.20.1", + "@esbuild/linux-ppc64": "0.20.1", + "@esbuild/linux-riscv64": "0.20.1", + "@esbuild/linux-s390x": "0.20.1", + "@esbuild/linux-x64": "0.20.1", + "@esbuild/netbsd-x64": "0.20.1", + "@esbuild/openbsd-x64": "0.20.1", + "@esbuild/sunos-x64": "0.20.1", + "@esbuild/win32-arm64": "0.20.1", + "@esbuild/win32-ia32": "0.20.1", + "@esbuild/win32-x64": "0.20.1" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.20.1.tgz", + "integrity": "sha512-6v/WJubRsjxBbQdz6izgvx7LsVFvVaGmSdwrFHmEzoVgfXL89hkKPoQHsnVI2ngOkcBUQT9kmAM1hVL1k/Av4A==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "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.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", + "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", + "dev": true, + "dependencies": { + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jackspeak": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", + "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/karma": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.3.tgz", + "integrity": "sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q==", + "dev": true, + "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.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", + "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", + "dev": true + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/karma/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/karma/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz", + "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", + "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", + "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dev": true, + "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" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", + "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", + "dev": true, + "dependencies": { + "@npmcli/redact": "^1.1.0", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openapi-types": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", + "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", + "dev": true, + "peer": true + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, + "node_modules/pacote": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", + "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", + "dev": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^7.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "devOptional": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.4.0.tgz", + "integrity": "sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==", + "dev": true, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.1.tgz", + "integrity": "sha512-8PcDiZ8DXUjLf687Ol4BR8Bpm2umR7vhoZOzNRt+uxD9GpBh/K+CAAALVIiYFknmvlmyg7hM7BSNUXPaCCqd0Q==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", + "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "dev": true, + "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" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "dev": true + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/safevalues": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/safevalues/-/safevalues-0.3.4.tgz", + "integrity": "sha512-LRneZZRXNgjzwG4bDQdOTSbze3fHm1EAKN/8bePxnlEZiBmkYEDggaHbuvHI9/hoqHbGfsEA7tWS9GhYHZBBsw==" + }, + "node_modules/sass": { + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.1.1.tgz", + "integrity": "sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sigstore": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", + "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/terser": { + "version": "5.29.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", + "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-morph": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-6.0.3.tgz", + "integrity": "sha512-Pq4AQvwIZoEgnZiYjMcUbuQi8SrLrFGnRM3gwBaIstPg7cFqknt1Hm1q8od9ng37y0bErHASG6tyWlx/yXPMuQ==", + "dev": true, + "dependencies": { + "@dsherret/to-absolute-glob": "^2.0.2", + "@ts-morph/common": "~0.2.2", + "code-block-writer": "^10.1.0" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "node_modules/tuf-js": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "dev": true, + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.38", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz", + "integrity": "sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "dev": true, + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undici": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.11.1.tgz", + "integrity": "sha512-KyhzaLJnV1qa3BSHdj4AZ2ndqI0QWPxYzaIOio0WzcEJB9gvuysprJSLtpvc2D9mhR9jPDUk7xlJlZbH2KR5iw==", + "dev": true, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz", + "integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/webpack": { + "version": "5.90.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", + "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.2.tgz", + "integrity": "sha512-Wu+EHmX326YPYUpQLKmKbTyZZJIB8/n6R09pTmB03kJmnMsVPTo9COzHZFr01txwaCAuZvfBJE4ZCHRcKs5JaQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "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" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.7.tgz", + "integrity": "sha512-0w6DGkX2BPuiK/NLf+4A8FLE43QwBfuqz2dVgi/40Rj1WmqUskCqj329O/pwrqFJLG5X8wkeG2RhIAro441xtg==" + } + } +} diff --git a/angular/package.json b/angular/package.json new file mode 100644 index 0000000..0611720 --- /dev/null +++ b/angular/package.json @@ -0,0 +1,56 @@ +{ + "name": "futbase", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "generate:api": "openapi-generator-cli generate -i ./openapi.yaml -g typescript-angular -o src/app/core/api/v1 -p=removeOperationIdPrefix=true" + }, + "private": true, + "dependencies": { + "@angular/animations": "^17.0.0", + "@angular/cdk": "^17.0.4", + "@angular/common": "^17.0.0", + "@angular/compiler": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/forms": "^17.0.0", + "@angular/material": "^17.0.4", + "@angular/platform-browser": "^17.0.0", + "@angular/platform-browser-dynamic": "^17.0.0", + "@angular/router": "^17.0.0", + "@ng-bootstrap/ng-bootstrap": "^16.0.0-rc.2", + "@ngx-translate/core": "^15.0.0", + "@ngx-translate/http-loader": "^8.0.0", + "@popperjs/core": "^2.11.8", + "@types/node": "^20.11.5", + "bootstrap": "^5.3.2", + "bootstrap-icons": "^1.11.2", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "uuid": "^9.0.1", + "zone.js": "~0.14.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.0.7", + "@angular/cli": "^17.0.7", + "@angular/compiler-cli": "^17.0.0", + "@openapitools/openapi-generator-cli": "^2.7.0", + "@types/jasmine": "~5.1.0", + "@types/uuid": "^9.0.8", + "@verizonconnect/ngx-form-generator": "^1.2.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.2.2" + }, + "description": "This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.0.7.", + "main": "index.js", + "author": "", + "license": "ISC" +} diff --git a/angular/src/app/_components/alert.component.html b/angular/src/app/_components/alert.component.html new file mode 100644 index 0000000..b140a7c --- /dev/null +++ b/angular/src/app/_components/alert.component.html @@ -0,0 +1,7 @@ +
+
+ + +
+
Click here to remove all
+
diff --git a/angular/src/app/_components/alert.component.ts b/angular/src/app/_components/alert.component.ts new file mode 100644 index 0000000..383c264 --- /dev/null +++ b/angular/src/app/_components/alert.component.ts @@ -0,0 +1,100 @@ +import { Component, OnInit, OnDestroy, Input } from '@angular/core'; +import { Router, NavigationStart } from '@angular/router'; +import { Subscription } from 'rxjs'; + +import { Alert, AlertType } from '@app/_models'; +import { AlertService } from '@app/_services'; + +@Component({ selector: 'alert', templateUrl: 'alert.component.html' }) +export class AlertComponent implements OnInit, OnDestroy { + @Input() id = 'default-alert'; + @Input() fade = true; + + alerts: Alert[] = []; + alertSubscription!: Subscription; + routeSubscription!: Subscription; + + constructor(private router: Router, private alertService: AlertService) { } + + ngOnInit() { + // subscribe to new alert notifications + this.alertSubscription = this.alertService.onAlert(this.id) + .subscribe(alert => { + // clear alerts when an empty alert is received + if (!alert.message) { + // filter out alerts without 'keepAfterRouteChange' flag + this.alerts = this.alerts.filter(x => x.keepAfterRouteChange); + + // remove 'keepAfterRouteChange' flag on the rest + this.alerts.forEach(x => delete x.keepAfterRouteChange); + return; + } + + // add alert to array + this.alerts.push(alert); + + // auto close alert if required + if (alert.autoClose) { + setTimeout(() => this.removeAlert(alert), 1000); + } + }); + + // clear alerts on location change + this.routeSubscription = this.router.events.subscribe(event => { + if (event instanceof NavigationStart) { + this.alertService.clear(this.id); + } + }); + } + + ngOnDestroy() { + // unsubscribe to avoid memory leaks + this.alertSubscription.unsubscribe(); + this.routeSubscription.unsubscribe(); + } + + removeAlert(alert: Alert) { + // check if already removed to prevent error on auto close + if (!this.alerts.includes(alert)) return; + + if (this.fade) { + // fade out alert + alert.fade = true; + + // remove alert after faded out + setTimeout(() => { + this.alerts = this.alerts.filter(x => x !== alert); + }, 250); + } else { + // remove alert + this.alerts = this.alerts.filter(x => x !== alert); + } + } + + removeAllAlerts() { + this.alerts.forEach((alert) => this.removeAlert(alert)); + } + + cssClass(alert: Alert) { + if (!alert) return; + + const classes = ['alert', 'alert-dismissible', 'mb-2', 'container']; + + const alertTypeClass = { + [AlertType.Success]: 'alert-success', + [AlertType.Error]: 'alert-danger', + [AlertType.Info]: 'alert-info', + [AlertType.Warning]: 'alert-warning' + } + + if (alert.type !== undefined) { + classes.push(alertTypeClass[alert.type]); + } + + if (alert.fade) { + classes.push('fade'); + } + + return classes.join(' '); + } +} \ No newline at end of file diff --git a/angular/src/app/_components/datetime-picker/datetime-picker.component.html b/angular/src/app/_components/datetime-picker/datetime-picker.component.html new file mode 100644 index 0000000..ea43799 --- /dev/null +++ b/angular/src/app/_components/datetime-picker/datetime-picker.component.html @@ -0,0 +1,10 @@ +
+
+ + +
+
+ + +
+
\ No newline at end of file diff --git a/angular/src/app/_components/datetime-picker/datetime-picker.component.scss b/angular/src/app/_components/datetime-picker/datetime-picker.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_components/datetime-picker/datetime-picker.component.spec.ts b/angular/src/app/_components/datetime-picker/datetime-picker.component.spec.ts new file mode 100644 index 0000000..3f941e1 --- /dev/null +++ b/angular/src/app/_components/datetime-picker/datetime-picker.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DatetimePickerComponent } from './datetime-picker.component'; + +describe('DatetimePickerComponent', () => { + let component: DatetimePickerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [DatetimePickerComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DatetimePickerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_components/datetime-picker/datetime-picker.component.ts b/angular/src/app/_components/datetime-picker/datetime-picker.component.ts new file mode 100644 index 0000000..1ba0a30 --- /dev/null +++ b/angular/src/app/_components/datetime-picker/datetime-picker.component.ts @@ -0,0 +1,70 @@ +import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; +import {FormBuilder, FormGroup} from "@angular/forms"; + +@Component({ + selector: 'app-datetime-picker', + templateUrl: './datetime-picker.component.html', + styleUrl: './datetime-picker.component.scss' +}) +export class DatetimePickerComponent implements OnInit { + @Input() label: string = 'Date and Time'; + @Input() inputId: string = 'myId'; + @Input() initialValue: string | null = null; + @Input() readonly: boolean = false; + @Output() dateTimeChange = new EventEmitter(); + + form: FormGroup; + + constructor(private fb: FormBuilder) { + this.form = this.fb.group({ + date: [''], + time: [''] + }); + } + + ngOnInit() { + if (this.initialValue) { + const date = new Date(this.initialValue); + this.form.patchValue({ + date: this.formatDate(date), + time: this.formatTime(date) + }); + } + + if (this.readonly) { + this.form.disable(); + } + + this.form.valueChanges.subscribe(() => { + if (!this.readonly) { + this.emitDateTime(); + } + }); + } + + private formatDate(date: Date): string { + return date.toLocaleDateString('en-CA'); + } + + private formatTime(date: Date): string { + return date.toLocaleTimeString('en-GB', { hour12: false }); + } + + private emitDateTime() { + const { date, time } = this.form.value; + if (date && time) { + const [year, month, day] = date.split('-'); + const [hours, minutes, seconds] = time.split(':'); + const dateTime = new Date(Number(year), Number(month) - 1, Number(day), Number(hours), Number(minutes), Number(seconds)); + + // Format the date to match the loaded format + const formattedDate = dateTime.toLocaleString('sv-SE', { timeZone: 'Europe/Berlin' }).replace(' ', 'T') + '+02:00'; + + console.log('Emitting datetime:', formattedDate); + this.dateTimeChange.emit(formattedDate); + } else { + console.log('Emitting null datetime'); + this.dateTimeChange.emit(null); + } + } +} diff --git a/angular/src/app/_components/filter-bar/filter-bar.component.html b/angular/src/app/_components/filter-bar/filter-bar.component.html new file mode 100644 index 0000000..b08de56 --- /dev/null +++ b/angular/src/app/_components/filter-bar/filter-bar.component.html @@ -0,0 +1,141 @@ +
+
+ + + + +
+
+ +

{{ getColumnText(filter.field) | translate }}

+
+ +
+
+ + + +
+
+ + +
+ +
+
+ + + +
+
+ + +
+
+
+ +
+
+ +
+
+
+
+ + + +
+
+ + +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +

{{ getColumnText(filter.field) | translate }}

+
+
+
+
+

{{ option }}

+
+ +
+
+
+ + + + + + + + + + +
+
+
+
+
+
+ + +
+
+
diff --git a/angular/src/app/_components/filter-bar/filter-bar.component.scss b/angular/src/app/_components/filter-bar/filter-bar.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_components/filter-bar/filter-bar.component.spec.ts b/angular/src/app/_components/filter-bar/filter-bar.component.spec.ts new file mode 100644 index 0000000..aac1ab3 --- /dev/null +++ b/angular/src/app/_components/filter-bar/filter-bar.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FilterBarComponent } from './filter-bar.component'; + +describe('FilterBarComponent', () => { + let component: FilterBarComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [FilterBarComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(FilterBarComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_components/filter-bar/filter-bar.component.ts b/angular/src/app/_components/filter-bar/filter-bar.component.ts new file mode 100644 index 0000000..4cd3913 --- /dev/null +++ b/angular/src/app/_components/filter-bar/filter-bar.component.ts @@ -0,0 +1,301 @@ +import { Component, EventEmitter, Input, OnInit, OnDestroy, Output } from '@angular/core'; +import { ListColDefinition } from "@app/_components/list/list-col-definition"; +import { Subject, debounceTime, takeUntil } from 'rxjs'; +import {filter} from "rxjs/operators"; + +interface FilterState { + field: string; + type: string; + value: any; + active: boolean; + subResource?: string; + options?: string[]; +} + +interface NumberInput { + field: string; + boundType: 'min' | 'max'; + value: number | null; + subResource?: string; +} + +@Component({ + selector: 'app-filter-bar', + templateUrl: './filter-bar.component.html', + styleUrls: ['./filter-bar.component.scss'] +}) +export class FilterBarComponent implements OnInit, OnDestroy { + @Input() public listColDefinitions!: ListColDefinition[]; + @Input() public filterConfig!: string | null; + @Output() public filterInit = new EventEmitter<{filters: Record, activeCount: number}>(); + @Output() public filterChanged = new EventEmitter<{filters: Record, activeCount: number}>(); + @Output() public filterSave = new EventEmitter(); + + public static readonly FILTER_TYPE_BOOLEAN: string = 'boolean'; + public static readonly FILTER_TYPE_TEXT: string = 'text'; + public static readonly FILTER_TYPE_DATE: string = 'date'; + public static readonly FILTER_TYPE_NUMBER: string = 'number'; + public static readonly FILTER_TYPE_CHECKBOXES: string = 'checkboxes'; + + public filterStates: FilterState[] = []; + + private numberInputSubject = new Subject(); + private textInputSubject = new Subject<{field: string, value: string, subResource?: string}>(); + private destroy$ = new Subject(); + + ngOnInit(): void { + this.initializeFilterStates(); + this.setupNumberInputDebounce(); + this.setupTextInputDebounce(); + } + + ngOnDestroy(): void { + this.destroy$.next(); + this.destroy$.complete(); + } + + private countActiveFilters(): number { + return this.filterStates.filter(state => state.active).length; + } + + private initializeFilterStates(): void { + let filterSettingsObj: { [key: string]: any } = {}; + if (this.filterConfig !== null) { + filterSettingsObj = JSON.parse(this.filterConfig); + } + this.filterStates = this.listColDefinitions + .filter(col => col.filterType) + .map(col => { + let value = this.getInitialValueForType(col.filterType || ''); + let active = false; + if (col.field !== undefined && filterSettingsObj.hasOwnProperty(col.field)) { + value = filterSettingsObj[col.field]; + active = true; + } + const filterState: FilterState = { + field: col.field || '', + type: col.filterType || '', + value: value, + active: active, + subResource: col.subResource, + options: col.filterOptions + }; + return filterState; + }); + const activeFilters: Record = this.getActiveFilters(); + const activeCount = this.countActiveFilters(); + this.filterInit.emit({ filters: activeFilters, activeCount }); + } + + private setupNumberInputDebounce(): void { + this.numberInputSubject.pipe( + debounceTime(300), + takeUntil(this.destroy$) + ).subscribe(input => { + this.updateNumberFilter(input.field, input.boundType, input.value, input.subResource); + }); + } + + private setupTextInputDebounce(): void { + this.textInputSubject.pipe( + debounceTime(300), + takeUntil(this.destroy$) + ).subscribe(({field, value, subResource}) => { + this.updateTextFilter(field, value, subResource); + }); + } + + private getInitialValueForType(type: string, options?: string[]): any { + switch (type) { + case FilterBarComponent.FILTER_TYPE_BOOLEAN: + return false; + case FilterBarComponent.FILTER_TYPE_TEXT: + return ''; + case FilterBarComponent.FILTER_TYPE_DATE: + return { start: null, end: null }; + case FilterBarComponent.FILTER_TYPE_NUMBER: + return { min: null, max: null }; + case FilterBarComponent.FILTER_TYPE_CHECKBOXES: + if (options) { + return options.reduce((acc, option) => { + acc[option] = false; + return acc; + }, {} as {[key: string]: boolean}); + } + return {}; + default: + return null; + } + } + + private findFilterState(field: string, subResource?: string): FilterState | undefined { + return this.filterStates.find(state => + state.field === field && state.subResource === subResource + ); + } + + onBooleanFilterChanged(field: string, event: Event, subResource?: string): void { + const target = event.target as HTMLInputElement; + this.onFilterChanged(field, target.checked, subResource); + } + + onTextFilterChanged(field: string, event: Event, subResource?: string): void { + const target = event.target as HTMLInputElement; + this.textInputSubject.next({ field, value: target.value, subResource }); + } + + private updateTextFilter(field: string, value: string, subResource?: string): void { + const filterState = this.findFilterState(field, subResource); + if (filterState && filterState.type === FilterBarComponent.FILTER_TYPE_TEXT) { + filterState.value = value; + this.emitActiveFilters(); + } + } + + onDateFilterChanged(field: string, dateType: 'start' | 'end', event: Event, subResource?: string): void { + const target = event.target as HTMLInputElement; + const filterState = this.findFilterState(field, subResource); + if (filterState && filterState.type === FilterBarComponent.FILTER_TYPE_DATE) { + filterState.value = { ...filterState.value, [dateType]: target.value }; + this.emitActiveFilters(); + } + } + + onNumberFilterChanged(field: string, boundType: 'min' | 'max', event: Event, subResource?: string): void { + const target = event.target as HTMLInputElement; + const numValue = target.value === '' ? null : Number(target.value); + this.numberInputSubject.next({ field, boundType, value: numValue, subResource }); + } + + onCheckboxesFilterChanged(field: string, option: string, event: Event, subResource?: string): void { + const target = event.target as HTMLInputElement; + const filterState = this.findFilterState(field, subResource); + console.log(filterState); + if (filterState && filterState.type === FilterBarComponent.FILTER_TYPE_CHECKBOXES) { + filterState.value[option] = target.checked; + console.log('jojoj'); + this.emitActiveFilters(); + } + } + + private updateNumberFilter(field: string, boundType: 'min' | 'max', value: number | null, subResource?: string): void { + const filterState = this.findFilterState(field, subResource); + if (filterState && filterState.type === FilterBarComponent.FILTER_TYPE_NUMBER) { + filterState.value = { ...filterState.value, [boundType]: value }; + this.emitActiveFilters(); + } + } + + onFilterChanged(field: string, value: any, subResource?: string): void { + const filterState = this.findFilterState(field, subResource); + if (filterState) { + filterState.value = value; + this.emitActiveFilters(); + } + } + + onFilterActiveChanged(field: string, event: Event, subResource?: string): void { + const target = event.target as HTMLInputElement; + const filterState = this.findFilterState(field, subResource); + if (filterState) { + filterState.active = target.checked; + if (filterState.type === FilterBarComponent.FILTER_TYPE_CHECKBOXES) { + // Reset all checkbox values when the filter is deactivated + if (!filterState.active) { + for (const option in filterState.value) { + filterState.value[option] = false; + } + } + } + this.emitActiveFilters(); + } + } + + resetAllFilters(): void { + this.filterStates.forEach(state => { + state.active = false; + state.value = this.getInitialValueForType(state.type); + }); + this.emitActiveFilters(); + } + + private getActiveFilters(): Record { + const activeFilters: Record = {}; + this.filterStates + .filter(state => state.active) + .forEach(state => { + if (state.subResource) { + if (!activeFilters[state.subResource]) { + activeFilters[state.subResource] = {}; + } + this.setFilterValue(activeFilters[state.subResource], state); + } else { + this.setFilterValue(activeFilters, state); + } + }); + return activeFilters; + } + + private emitActiveFilters(): void { + const activeFilters: Record = this.getActiveFilters(); + const activeCount = this.countActiveFilters(); + this.filterChanged.emit({ filters: activeFilters, activeCount }); + } + + private setFilterValue(obj: Record, state: FilterState): void { + if (state.type === FilterBarComponent.FILTER_TYPE_BOOLEAN) { + obj[state.field] = state.value; + } else if (state.type === FilterBarComponent.FILTER_TYPE_TEXT) { + obj[state.field] = state.value; + } else if (state.type === FilterBarComponent.FILTER_TYPE_DATE) { + if (state.value.start !== null || state.value.end !== null) { + obj[state.field] = state.value; + } else { + obj[state.field] = {}; + } + } else if (state.type === FilterBarComponent.FILTER_TYPE_NUMBER) { + if (state.value.min !== null || state.value.max !== null) { + obj[state.field] = state.value; + } else { + obj[state.field] = {}; + } + } else if (state.type === FilterBarComponent.FILTER_TYPE_CHECKBOXES) { + // Add this block to handle checkbox filters + const selectedOptions = Object.entries(state.value) + .filter(([_, isChecked]) => isChecked) + .map(([option, _]) => option); + if (selectedOptions.length > 0) { + obj[state.field] = selectedOptions; + } + } + } + + saveFilterConfig(): void { + this.filterSave.emit(); + } + + getColumnText(field: string): string { + const column = this.listColDefinitions.find(col => col.field === field); + return column ? column.text : ''; + } + + get FILTER_TYPE_BOOLEAN(): string { + return FilterBarComponent.FILTER_TYPE_BOOLEAN; + } + + get FILTER_TYPE_TEXT(): string { + return FilterBarComponent.FILTER_TYPE_TEXT; + } + + get FILTER_TYPE_DATE(): string { + return FilterBarComponent.FILTER_TYPE_DATE; + } + + get FILTER_TYPE_NUMBER(): string { + return FilterBarComponent.FILTER_TYPE_NUMBER; + } + + get FILTER_TYPE_CHECKBOXES(): string { + return FilterBarComponent.FILTER_TYPE_CHECKBOXES; + } +} \ No newline at end of file diff --git a/angular/src/app/_components/index.ts b/angular/src/app/_components/index.ts new file mode 100644 index 0000000..d221c1b --- /dev/null +++ b/angular/src/app/_components/index.ts @@ -0,0 +1 @@ +export * from './alert.component'; diff --git a/angular/src/app/_components/layout/two-column/two-column.component.html b/angular/src/app/_components/layout/two-column/two-column.component.html new file mode 100644 index 0000000..061377a --- /dev/null +++ b/angular/src/app/_components/layout/two-column/two-column.component.html @@ -0,0 +1,83 @@ + \ No newline at end of file diff --git a/angular/src/app/_components/layout/two-column/two-column.component.scss b/angular/src/app/_components/layout/two-column/two-column.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_components/layout/two-column/two-column.component.spec.ts b/angular/src/app/_components/layout/two-column/two-column.component.spec.ts new file mode 100644 index 0000000..713cb97 --- /dev/null +++ b/angular/src/app/_components/layout/two-column/two-column.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TwoColumnComponent } from './two-column.component'; + +describe('TwoColumnComponent', () => { + let component: TwoColumnComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TwoColumnComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TwoColumnComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_components/layout/two-column/two-column.component.ts b/angular/src/app/_components/layout/two-column/two-column.component.ts new file mode 100644 index 0000000..7b8f51c --- /dev/null +++ b/angular/src/app/_components/layout/two-column/two-column.component.ts @@ -0,0 +1,26 @@ +import {Component} from '@angular/core'; +import {Location} from "@angular/common"; + +@Component({ + selector: 'app-two-column', + templateUrl: './two-column.component.html', + styleUrl: './two-column.component.scss' +}) +export class TwoColumnComponent { + + public navOpen: boolean; + constructor(private _location: Location) { + this.navOpen = false; + } + + goBack() { + this._location.back(); + } + + toggleSidebar() { + this.navOpen = !this.navOpen; + } + + + +} diff --git a/angular/src/app/_components/linked-label/linked-label.component.html b/angular/src/app/_components/linked-label/linked-label.component.html new file mode 100644 index 0000000..8db6cbd --- /dev/null +++ b/angular/src/app/_components/linked-label/linked-label.component.html @@ -0,0 +1,4 @@ + + {{ user.firstName }} {{ user.lastName }} + diff --git a/angular/src/app/_components/linked-label/linked-label.component.scss b/angular/src/app/_components/linked-label/linked-label.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_components/linked-label/linked-label.component.spec.ts b/angular/src/app/_components/linked-label/linked-label.component.spec.ts new file mode 100644 index 0000000..5c4f982 --- /dev/null +++ b/angular/src/app/_components/linked-label/linked-label.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LinkedLabelComponent } from './linked-label.component'; + +describe('LinkedLabelComponent', () => { + let component: LinkedLabelComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [LinkedLabelComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LinkedLabelComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_components/linked-label/linked-label.component.ts b/angular/src/app/_components/linked-label/linked-label.component.ts new file mode 100644 index 0000000..0820afd --- /dev/null +++ b/angular/src/app/_components/linked-label/linked-label.component.ts @@ -0,0 +1,21 @@ +import {Component, Input} from '@angular/core'; +import {UserJsonld} from "@app/core/api/v1"; +import {AppHelperService} from "@app/_helpers/app-helper.service"; + +@Component({ + selector: 'app-linked-label', + templateUrl: './linked-label.component.html', + styleUrl: './linked-label.component.scss' +}) +export class LinkedLabelComponent { + @Input() public user!: UserJsonld; + + + constructor( + protected appHelperService: AppHelperService + ) { + + } + + +} diff --git a/angular/src/app/_components/list/list-col-definition.ts b/angular/src/app/_components/list/list-col-definition.ts new file mode 100644 index 0000000..0f21705 --- /dev/null +++ b/angular/src/app/_components/list/list-col-definition.ts @@ -0,0 +1,30 @@ +import {ListColTypeAddress} from "@app/_components/list/list-col-type-address"; +import {OrderFilter} from "@app/_models/orderFilter"; + +export interface ListColDefinition { + name: string, + text: string, + type: string, + field?: string, + multipleFields?: any[], + address?: ListColTypeAddress, + sortable?: boolean, + subResource?: string, + sortingFieldName?: string, + sortingSubResource?: string, + countSortSubresource?: boolean, + countSortSubresourceField?: string, + countSortSubresourceValue?: any[] | null, + countSortFilterSubResource?: string, + countSortFilterSubresourceField?: string, + countSortFilterSubresourceValue?: string | null, + length?: number, + displayedLength?: number, + groups?: string[], + onClickFunction?: Function, + updateBooleanOnClick?: boolean, + filterType?: string, + visible?: boolean, + url?: string, + filterOptions?: string[], +} \ No newline at end of file diff --git a/angular/src/app/_components/list/list-col-type-address.ts b/angular/src/app/_components/list/list-col-type-address.ts new file mode 100644 index 0000000..5fcb369 --- /dev/null +++ b/angular/src/app/_components/list/list-col-type-address.ts @@ -0,0 +1,8 @@ +export interface ListColTypeAddress { + street: string, + streetNo: string, + zip: string, + city: string, + country: string, + _type: 'address', +} \ No newline at end of file diff --git a/angular/src/app/_components/list/list-get-data-function-type.ts b/angular/src/app/_components/list/list-get-data-function-type.ts new file mode 100644 index 0000000..8a04814 --- /dev/null +++ b/angular/src/app/_components/list/list-get-data-function-type.ts @@ -0,0 +1,4 @@ +// types.ts +import { Observable } from 'rxjs'; + +export type ListGetDataFunctionType = (index: number, pageSize: number, term?: string) => Observable; diff --git a/angular/src/app/_components/list/list-update-element-function-type.ts b/angular/src/app/_components/list/list-update-element-function-type.ts new file mode 100644 index 0000000..5093ab9 --- /dev/null +++ b/angular/src/app/_components/list/list-update-element-function-type.ts @@ -0,0 +1,4 @@ +// types.ts +import { Observable } from 'rxjs'; + +export type ListUpdateElementFunctionType = (element: any) => Observable; diff --git a/angular/src/app/_components/list/list.component.html b/angular/src/app/_components/list/list.component.html new file mode 100644 index 0000000..83526a3 --- /dev/null +++ b/angular/src/app/_components/list/list.component.html @@ -0,0 +1,171 @@ + + + + + +
+ +
+

{{ column.text | translate }}

+ +
+
+
+
+
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ {{ column.text | translate }} + + {{ column.text | translate }} + + + + +
+
+ + + + + + + {{ getElementValue(element, column) | currency: 'EUR' }} + + + + + + + + + + + + + + + + {{ getElementValue(element, column) | date:'dd.MM.YYYY - HH:mm':'GMT+0200' }} + + + + {{ getElementValue(element, column) }} + + + + + + + + + + + + + + + + + + {{ pagingComponent.getPageSize() * (pagingComponent.getPageIndex() - 1) + dataSource.filteredData.indexOf(element) + 1 }} + + + + {{ getElementValue(element, column) }} + + + + {{ getElementValue(element, column) | number:'1.0-0':'de-DE' }} + + + + {{ getElementValue(element, column) }} + + + + {{ getElementValue(element, column) | number:'1.0-0':'de-DE' }} + + + + {{ getElementValue(element, column) }} + + + + + {{ getElementValue(element, column) }} + + + + {{ getElementValue(element, column) }} + + +
+
+
+ +
\ No newline at end of file diff --git a/angular/src/app/_components/list/list.component.scss b/angular/src/app/_components/list/list.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_components/list/list.component.spec.ts b/angular/src/app/_components/list/list.component.spec.ts new file mode 100644 index 0000000..a82ee22 --- /dev/null +++ b/angular/src/app/_components/list/list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ListComponent } from './list.component'; + +describe('ListComponent', () => { + let component: ListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_components/list/list.component.ts b/angular/src/app/_components/list/list.component.ts new file mode 100644 index 0000000..18e5865 --- /dev/null +++ b/angular/src/app/_components/list/list.component.ts @@ -0,0 +1,474 @@ +import {AfterViewInit, Component, Input, OnDestroy, OnInit, ViewChild} from '@angular/core'; +import {MatSort, Sort} from "@angular/material/sort"; +import {PagingComponent} from "@app/_components/paging/paging.component"; +import {MatTableDataSource} from "@angular/material/table"; +import {ListColDefinition} from "@app/_components/list/list-col-definition"; +import {AppHelperService} from "@app/_helpers/app-helper.service"; +import {ListGetDataFunctionType} from "@app/_components/list/list-get-data-function-type"; +import {ListUpdateElementFunctionType} from "@app/_components/list/list-update-element-function-type"; +import {FilterBarComponent} from "@app/_components/filter-bar/filter-bar.component"; +import { Router } from '@angular/router'; +import {interval, Subscription} from "rxjs"; + +@Component({ + selector: 'app-list', + templateUrl: './list.component.html', + styleUrl: './list.component.scss' +}) + +export class ListComponent implements OnInit, AfterViewInit, OnDestroy { + @Input() public listId!: string; + @Input() public getDataFunction!: ListGetDataFunctionType; + @Input() public onSortFunction!: Function; + @Input() public onNavigateToDetailsFunction!: Function; + @Input() public onRemoveItemFunction!: Function; + @Input() public onEditFunction!: Function; + @Input() public onDownloadFunction!: Function; + @Input() public onRowSelectedFunction!: Function; + @Input() public onUpdateBooleanStateFunction!: ListUpdateElementFunctionType; + @Input() public searchable: boolean; + @Input() public showDetailButton: boolean; + @Input() public showPosition: boolean; + @Input() public showFilterBar: boolean; + @Input() public listColDefinitions!: ListColDefinition[]; + @Input() public hidePageSize: boolean; + @Input() public displayOptions!: { [key: string]: string }; + @Input() public defaultDisplayOption!: string; + @Input() public refreshIntervalSeconds?: number; + @ViewChild(MatSort) sort; + @ViewChild("pagingComponent", {static: false}) protected pagingComponent!: PagingComponent; + @ViewChild("filterBarComponent", {static: false}) protected filterBarComponent!: FilterBarComponent; + + public static COLUMN_TYPE_ADDRESS: string = 'address'; + public static COLUMN_TYPE_BOOLEAN: string = 'boolean'; + public static COLUMN_TYPE_BTN_DOWNLOAD: string = 'btn_download'; + public static COLUMN_TYPE_BTN_EDIT: string = 'btn_edit'; + public static COLUMN_TYPE_BTN_REMOVE: string = 'btn_remove'; + public static COLUMN_TYPE_CURRENCY: string = 'euro'; + public static COLUMN_TYPE_DATE: string = 'date'; + public static COLUMN_TYPE_DETAIL: string = 'detail'; + public static COLUMN_TYPE_DETAIL_LINK: string = 'detail_link'; + public static COLUMN_TYPE_EMAIL: string = 'email'; + public static COLUMN_TYPE_IMAGE: string = 'image'; + public static COLUMN_TYPE_COMBINED_IMAGES: string = 'combined_images'; + public static COLUMN_TYPE_NUMBER: string = 'number'; + public static COLUMN_TYPE_NUMBER_UNFORMATTED: string = 'number_unformatted'; + public static COLUMN_TYPE_NUMBER_BOLD: string = 'number_bold'; + public static COLUMN_TYPE_POSITION: string = 'position'; + public static COLUMN_TYPE_TEXT: string = 'text'; + public static COLUMN_TYPE_TEXT_BOLD: string = 'text_bold'; + public static COLUMN_TYPE_TEXT_LINKED: string = 'text_linked'; + public static COLUMN_TYPE_WEBSITE: string = 'website'; + + public activeFilterCount: number = 0; + + protected displayedColumns!: string[]; + protected selectedRowIndex: number | null = null; + protected dataSource; + protected currentGroup!: string; + protected filterExists!: boolean; + protected sortObj!: any; + protected filterObj!: any; + protected listColDefinitionsByField!: any; + protected filterConfig: string | null; + private refreshSubscription?: Subscription; + + constructor( + protected appHelperService: AppHelperService, + private router: Router, + ) { + this.searchable = true; + this.showDetailButton = true; + this.showPosition = true; + this.showFilterBar = true; + this.filterExists = false; + this.filterObj = {}; + this.sort = new MatSort(); + this.hidePageSize = false; + this.dataSource = new MatTableDataSource(); + this.filterConfig = null; + + } + + ngOnInit(): void { + this.loadColumnConfig(); + if (this.showPosition) { + this.listColDefinitions.unshift(ListComponent.getDefaultColPosition()); + } + if (this.showDetailButton) { + // this.listColDefinitions.unshift(ListComponent.getDefaultColDetailBtn()); + this.listColDefinitions.unshift(ListComponent.getDefaultColDetailBtnLink(this.router.routerState.snapshot.url)); + } + if (this.displayOptions !== undefined) { + this.currentGroup = this.defaultDisplayOption || Object.keys(this.displayOptions)[0] || ''; + } + + this.listColDefinitionsByField = {}; + this.listColDefinitions.forEach((value, index) => { + if (value.visible === undefined) { + value.visible = true; + } + this.listColDefinitionsByField[value['name']] = value; + if (value.filterType !== undefined) { + this.filterExists = true; + } + }) + this.updateDisplayedColumns(); + this.filterConfig = this.loadFilterConfig(); + this.setupAutoRefresh(); + } + + private setupAutoRefresh(): void { + this.clearAutoRefresh(); + if (this.refreshIntervalSeconds && this.refreshIntervalSeconds > 0) { + this.refreshSubscription = interval(this.refreshIntervalSeconds * 1000).subscribe(() => { + this.getData(); + }); + } + } + + private clearAutoRefresh(): void { + if (this.refreshSubscription) { + this.refreshSubscription.unsubscribe(); + } + } + + saveFilterConfig(): void { + localStorage.setItem(`filterConfig_${this.listId}`, this.getFilterJsonString()); + } + + loadFilterConfig(): string | null { + return localStorage.getItem(`filterConfig_${this.listId}`); + } + + saveColumnConfig(): void { + const config = this.listColDefinitions.map(col => ({ + name: col.name, + visible: col.visible + })); + localStorage.setItem(`listConfig_${this.listId}`, JSON.stringify(config)); + } + + loadColumnConfig(): void { + const savedConfig = localStorage.getItem(`listConfig_${this.listId}`); + if (savedConfig) { + const config = JSON.parse(savedConfig); + this.listColDefinitions.forEach(col => { + const savedCol = config.find((c: any) => c.name === col.name); + if (savedCol) { + col.visible = savedCol.visible; + } + }); + this.updateDisplayedColumns(); + } + } + + updateDisplayedColumns(): void { + this.displayedColumns = this.listColDefinitions + .filter(col => col.visible !== false && + (this.displayOptions === undefined || + col.groups?.includes(this.currentGroup) || + col.type === ListComponent.COLUMN_TYPE_DETAIL || + col.type === ListComponent.COLUMN_TYPE_POSITION)) + .map(col => col.name); + } + + onDisplayOptionChange(option: string): void { + this.currentGroup = option; + this.updateDisplayedColumns(); + } + + onToggleColumnVisibility(columnName: string): void { + const column = this.listColDefinitions.find(col => col.name === columnName); + if (column) { + column.visible = !column.visible; + this.updateDisplayedColumns(); + } + } + + showAllColumns() { + this.listColDefinitions.forEach((value, index) => { + value.visible = true; + }); + this.updateDisplayedColumns(); + } + + getColumnVisibility(): { [key: string]: boolean } { + const visibility: { [key: string]: boolean } = {}; + this.listColDefinitions.forEach(col => { + visibility[col.name] = col.visible !== false; + }); + return visibility; + } + + ngAfterViewInit(): void { + } + + getData = (): void => { + this.getDataFunction( + this.pagingComponent.getPageIndex(), + this.pagingComponent.getPageSize(), + this.pagingComponent.getSearchValue() + ).subscribe( + data => { + this.dataSource = new MatTableDataSource(data['hydra:member']); + this.pagingComponent.setDataLength(data["hydra:totalItems"]); + } + ) + } + + onSortChange = (sortState: Sort) => { + let listColDefinition: any = this.listColDefinitionsByField[sortState.active]; + this.sortObj = sortState; + this.sortObj['listColDefinition'] = listColDefinition; + this.pagingComponent.resetPageIndex(); + this.onSortFunction(sortState); + this.getData(); + } + + onRowSelected(row: any, index: number) { + this.selectedRowIndex = index; + if (this.onRowSelectedFunction !== undefined) { + this.onRowSelectedFunction(row, index); + } + } + + getElementValue(element: any, column: ListColDefinition, multipleFieldIndex?: number): any | null { + element = column.subResource !== undefined ? element[column.subResource] : element; + if (element === undefined) { + return null; + } + if (column.field !== undefined) { + if ( + column.displayedLength !== undefined && + element[column.field] !== undefined && + element[column.field].length > column.displayedLength + ) { + return element[column.field]?.slice(0, column.displayedLength) + '...'; + } + return element[column.field]; + } + if (column.multipleFields !== undefined) { + if (multipleFieldIndex !== undefined) { + return element[column.multipleFields[multipleFieldIndex]]; + } + let res: any[] = []; + column.multipleFields.forEach((field, index) => { + res.push(element[field]); + }) + return res; + } + if (column.address !== undefined) { + const field = column.address; + let addressString = ''; + if (element[field.street] !== undefined && element[field.street] !== null) { + addressString += `${element[field.street].trim()} `; + } + if (element[field.streetNo] !== undefined && element[field.streetNo] !== null) { + addressString += `${element[field.streetNo].trim()} `; + } + addressString += '
'; + if (element[field.zip] !== undefined && element[field.zip] !== null) { + addressString += `${element[field.zip].trim()} `; + } + if (element[field.city] !== undefined && element[field.city] !== null) { + addressString += `${element[field.city].trim()}`; + } + addressString += '
'; + + if (element[field.country] !== undefined && element[field.country] !== null) { + addressString += `${element[field.country].trim()}`; + } + return addressString; + } + return element; + } + + getElementImage(element: any, column: ListColDefinition): any { + let elementValue = this.getElementValue(element, column); + if (elementValue !== undefined && elementValue !== null) { + return elementValue; + } + return "/assets/images/icons/dummy-product.png" + } + + + getColCssClass(column: ListColDefinition): string { + switch (column.type) { + case ListComponent.COLUMN_TYPE_DETAIL: + return "spt-button-td"; + case ListComponent.COLUMN_TYPE_BTN_REMOVE: + return "spt-button-td text-end"; + case ListComponent.COLUMN_TYPE_TEXT: + return "spt-version-td"; + default: + return ""; + } + } + + public getPageIndex() { + return this.pagingComponent.getPageIndex(); + } + + public getPageSize() { + return this.pagingComponent.getPageSize(); + } + + public static getDefaultColDetailBtn(): ListColDefinition { + return { + name: 'detail', + text: '', + type: ListComponent.COLUMN_TYPE_DETAIL + } as ListColDefinition; + } + + public static getDefaultColDetailBtnLink(currentUrl: string): ListColDefinition { + return { + name: 'detaillink', + text: '', + url: currentUrl, + type: ListComponent.COLUMN_TYPE_DETAIL_LINK + } as ListColDefinition; + } + + public static getDefaultColPosition(): ListColDefinition { + return { + name: 'pos', + text: 'overview.number', + type: ListComponent.COLUMN_TYPE_POSITION + } as ListColDefinition; + } + + public getSortingJsonString(): any + { + return JSON.stringify(this.sortObj); + } + + public updateBooleanState = (element: any, index: number, column: ListColDefinition) => { + if (this.onUpdateBooleanStateFunction === undefined) { + throw new Error('no onUpdateBooleanStateFunction given'); + } + if (column.field !== undefined) { + element[column.field] = !element[column.field]; + } else { + throw new Error('column.field is undefined'); + } + this.onUpdateBooleanStateFunction(element).subscribe( + data => { + this.updateRow(data, index); + } + ) + } + + public updateRow(element: any, index: number) { + const data = this.dataSource.data as any; + data[index] = element; + this.dataSource.data = data; + } + + public onFilterInit(filterData: {filters: any, activeCount: number}) { + this.filterObj = filterData.filters; + this.activeFilterCount = filterData.activeCount; + } + + public onFilterChanged(filterData: {filters: any, activeCount: number}) { + console.log(filterData); + const filterJson = JSON.stringify(filterData.filters); + const currentFilterJson = JSON.stringify(this.filterObj); + + if (filterJson !== currentFilterJson) { + this.filterObj = filterData.filters; + this.activeFilterCount = filterData.activeCount; + this.getData(); + } + } + + public getFilterJsonString(): any + { + return JSON.stringify(this.filterObj); + } + + get COLUMN_TYPE_ADDRESS(): string { + return ListComponent.COLUMN_TYPE_ADDRESS; + } + + get COLUMN_TYPE_BOOLEAN(): string { + return ListComponent.COLUMN_TYPE_BOOLEAN; + } + + get COLUMN_TYPE_BTN_DOWNLOAD(): string { + return ListComponent.COLUMN_TYPE_BTN_DOWNLOAD; + } + + get COLUMN_TYPE_BTN_EDIT(): string { + return ListComponent.COLUMN_TYPE_BTN_EDIT; + } + + get COLUMN_TYPE_BTN_REMOVE(): string { + return ListComponent.COLUMN_TYPE_BTN_REMOVE; + } + + get COLUMN_TYPE_CURRENCY(): string { + return ListComponent.COLUMN_TYPE_CURRENCY; + } + + get COLUMN_TYPE_DATE(): string { + return ListComponent.COLUMN_TYPE_DATE; + } + + get COLUMN_TYPE_DETAIL(): string { + return ListComponent.COLUMN_TYPE_DETAIL; + } + + get COLUMN_TYPE_DETAIL_LINK(): string { + return ListComponent.COLUMN_TYPE_DETAIL_LINK; + } + + get COLUMN_TYPE_EMAIL(): string { + return ListComponent.COLUMN_TYPE_EMAIL; + } + + get COLUMN_TYPE_POSITION(): string { + return ListComponent.COLUMN_TYPE_POSITION; + } + + get COLUMN_TYPE_IMAGE(): string { + return ListComponent.COLUMN_TYPE_IMAGE; + } + + get COLUMN_TYPE_COMBINED_IMAGES(): string { + return ListComponent.COLUMN_TYPE_COMBINED_IMAGES; + } + + get COLUMN_TYPE_TEXT(): string { + return ListComponent.COLUMN_TYPE_TEXT; + } + + get COLUMN_TYPE_NUMBER(): string { + return ListComponent.COLUMN_TYPE_NUMBER; + } + + get COLUMN_TYPE_NUMBER_UNFORMATTED(): string { + return ListComponent.COLUMN_TYPE_NUMBER_UNFORMATTED; + } + + get COLUMN_TYPE_NUMBER_BOLD(): string { + return ListComponent.COLUMN_TYPE_NUMBER_BOLD; + } + + get COLUMN_TYPE_TEXT_BOLD(): string { + return ListComponent.COLUMN_TYPE_TEXT_BOLD; + } + + get COLUMN_TYPE_TEXT_LINKED(): string { + return ListComponent.COLUMN_TYPE_TEXT_LINKED; + } + + get COLUMN_TYPE_WEBSITE(): string { + return ListComponent.COLUMN_TYPE_WEBSITE; + } + + ngOnDestroy(): void { + this.clearAutoRefresh(); + } +} \ No newline at end of file diff --git a/angular/src/app/_components/paging/paging.component.html b/angular/src/app/_components/paging/paging.component.html new file mode 100644 index 0000000..0602474 --- /dev/null +++ b/angular/src/app/_components/paging/paging.component.html @@ -0,0 +1,52 @@ +
+ +
+
+
+
+ + +
+
+
+
+
+ +
+ +
+ +
+ + + +
+
+ +
{{'form.no_data' | translate}}
+
+ + +
diff --git a/angular/src/app/_components/paging/paging.component.scss b/angular/src/app/_components/paging/paging.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_components/paging/paging.component.spec.ts b/angular/src/app/_components/paging/paging.component.spec.ts new file mode 100644 index 0000000..f7c8e7d --- /dev/null +++ b/angular/src/app/_components/paging/paging.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PagingComponent } from './paging.component'; + +describe('ListComponent', () => { + let component: PagingComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [PagingComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(PagingComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_components/paging/paging.component.ts b/angular/src/app/_components/paging/paging.component.ts new file mode 100644 index 0000000..e7a40a7 --- /dev/null +++ b/angular/src/app/_components/paging/paging.component.ts @@ -0,0 +1,132 @@ +import { + AfterViewInit, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, + ViewChild +} from '@angular/core'; +import {MatPaginator, MatPaginatorIntl, PageEvent} from "@angular/material/paginator"; +import {FormBuilder, FormGroup} from "@angular/forms"; +import {debounceTime, distinctUntilChanged} from "rxjs"; + +@Component({ + selector: 'app-paging', + templateUrl: './paging.component.html', + styleUrl: './paging.component.scss' +}) +export class PagingComponent implements OnInit, AfterViewInit { + + @Input() public dataSource!: any; + @Input() public getDataFunction!: Function; + @Input() public pageSize!: number; + @Input() public pageSizeOptions!: number[]; + @Input() public searchable: boolean; + @Input() public hidePageSize: boolean; + @Input() public displayOptions!: { [key: string]: any }; + @Input() public defaultDisplayOption!: string; + @Output() public displayOptionChange = new EventEmitter(); + + @ViewChild(MatPaginator) public paginator!: MatPaginator; + + protected defaultPageSize: number = 50; + protected defaultPageSizeOptions: number[] = [20, 50, 100]; + + protected dataLength: number; + protected pageEvent: PageEvent; + protected pageIndex: number; + protected searchForm!: FormGroup; + protected dataInitialized: boolean = false; + protected selectedDisplayOption: string = ''; + protected displayOptionKeys: string[] = []; + + constructor( + private fb: FormBuilder + ) { + this.dataLength = 0; + this.pageEvent = new PageEvent(); + this.pageIndex = 0; + this.searchable = false; + this.hidePageSize = false; + } + + ngOnInit() { + this.pageSize = this.pageSize !== undefined ? this.pageSize : this.defaultPageSize; + this.pageSizeOptions = this.pageSizeOptions !== undefined ? this.pageSizeOptions : this.defaultPageSizeOptions; + this.paginator = new MatPaginator(new MatPaginatorIntl(), ChangeDetectorRef.prototype); + + if (this.searchable) { + this.searchForm = this.fb.group({ + inputText: [''] + }); + this.searchForm.get('inputText')?.valueChanges.pipe( + debounceTime(1000), + distinctUntilChanged() + ).subscribe(value => { + this.resetPageIndex(); + this.getData(); + }); + } + if (this.displayOptions !== undefined) { + this.displayOptionKeys = Object.keys(this.displayOptions); + this.selectedDisplayOption = this.defaultDisplayOption || Object.keys(this.displayOptions)[0] || ''; + } + + } + + ngAfterViewInit() { + + } + + getData() { + this.getDataFunction( + this.getPageIndex(), + this.getPageSize(), + this.searchForm ? this.searchForm.get('inputText')?.value : undefined + ); + } + + handlePageEvent(e: PageEvent) { + this.pageEvent = e; + this.dataLength = e.length; + this.pageIndex = e.pageIndex.valueOf(); + this.pageSize = e.pageSize.valueOf(); + this.getData(); + } + + resetPageIndex(): void { + this.pageIndex = 0; + } + + getPageIndex(): number { + return this.pageIndex + 1; + } + + getPageSize(): number { + return this.pageSize; + } + + setDataLength(dataLength: number): void { + this.dataInitialized = true; + this.dataLength = dataLength; + } + + clearForm() { + this.searchForm.get('inputText')!.setValue(''); + } + + getSearchValue() { + if (this.searchable) { + return this.searchForm.get('inputText')!.value; + } + return undefined; + } + + onDisplayOptionChange(event: Event): void { + this.displayOptionChange.emit(String(event)); + } + + protected readonly Object = Object; +} diff --git a/angular/src/app/_components/search-input/search-input-col-def.ts b/angular/src/app/_components/search-input/search-input-col-def.ts new file mode 100644 index 0000000..195fa52 --- /dev/null +++ b/angular/src/app/_components/search-input/search-input-col-def.ts @@ -0,0 +1,7 @@ +export interface SearchInputColDef { + column: string, + columnHeader: string, + columnType: string, + field?: string + subResource?: string +} \ No newline at end of file diff --git a/angular/src/app/_components/search-input/search-input.component.html b/angular/src/app/_components/search-input/search-input.component.html new file mode 100644 index 0000000..d2c655a --- /dev/null +++ b/angular/src/app/_components/search-input/search-input.component.html @@ -0,0 +1,11 @@ + + diff --git a/angular/src/app/_components/search-input/search-input.component.scss b/angular/src/app/_components/search-input/search-input.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_components/search-input/search-input.component.spec.ts b/angular/src/app/_components/search-input/search-input.component.spec.ts new file mode 100644 index 0000000..0e2124c --- /dev/null +++ b/angular/src/app/_components/search-input/search-input.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SearchInputComponent } from './search-input.component'; + +describe('SearchInputComponent', () => { + let component: SearchInputComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [SearchInputComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(SearchInputComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_components/search-input/search-input.component.ts b/angular/src/app/_components/search-input/search-input.component.ts new file mode 100644 index 0000000..25e30f6 --- /dev/null +++ b/angular/src/app/_components/search-input/search-input.component.ts @@ -0,0 +1,38 @@ +import {Component, Input} from '@angular/core'; +import {FormGroup} from "@angular/forms"; +import {debounceTime, distinctUntilChanged, Observable, OperatorFunction, switchMap} from "rxjs"; +import {filter, map} from "rxjs/operators"; + +@Component({ + selector: 'app-search-input', + templateUrl: './search-input.component.html', + styleUrl: './search-input.component.scss' +}) +export class SearchInputComponent { + + @Input() public formId!: string; + @Input() public formLabelLangKey!: string; + @Input() public dataField!: string; + @Input() public documentForm!: FormGroup; + @Input() public documentFormField!: string; + @Input() public fetchFunction!: (term: string) => Observable<{ id: any; name: any }[]>; + + + protected formatter = (apiData: any) => apiData.name; + + protected searchItem: OperatorFunction = (text$: Observable) => + text$.pipe( + debounceTime(200), + distinctUntilChanged(), + filter((term) => term.length >= 2), + switchMap((term) => this.fetchFunction(term)), + map((items: {id: any, name: any}[]) => items.slice(0, 10)), + ); + + protected onItemSelect(selectedItem: any): void { + this.documentForm.get(this.formId)?.setValue(selectedItem.item.id); + } +} diff --git a/angular/src/app/_components/search-select/search-select.component.html b/angular/src/app/_components/search-select/search-select.component.html new file mode 100644 index 0000000..9bca4b7 --- /dev/null +++ b/angular/src/app/_components/search-select/search-select.component.html @@ -0,0 +1,19 @@ +
+
+

+ +
+
{{ 'basic.pleaseChoose' | translate }}
+
+ + +
+
diff --git a/angular/src/app/_components/search-select/search-select.component.scss b/angular/src/app/_components/search-select/search-select.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_components/search-select/search-select.component.spec.ts b/angular/src/app/_components/search-select/search-select.component.spec.ts new file mode 100644 index 0000000..78691b5 --- /dev/null +++ b/angular/src/app/_components/search-select/search-select.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SearchSelectComponent } from './search-select.component'; + +describe('SearchSelectComponent', () => { + let component: SearchSelectComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [SearchSelectComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(SearchSelectComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_components/search-select/search-select.component.ts b/angular/src/app/_components/search-select/search-select.component.ts new file mode 100644 index 0000000..72ef45d --- /dev/null +++ b/angular/src/app/_components/search-select/search-select.component.ts @@ -0,0 +1,253 @@ +import {AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core'; +import {FormGroup} from "@angular/forms"; +import {ListComponent} from "@app/_components/list/list.component"; +import {ListColDefinition} from "@app/_components/list/list-col-definition"; +import {Observable} from "rxjs"; +import {Sort} from "@angular/material/sort"; +import {FilterBarComponent} from "@app/_components/filter-bar/filter-bar.component"; + +@Component({ + selector: 'app-search-select', + templateUrl: './search-select.component.html', + styleUrl: './search-select.component.scss' +}) +export class SearchSelectComponent implements OnInit, AfterViewInit { + @Input() public formId!: string; + @Input() public resultField!: string; + @Input() public formLabelLangKey!: string; + @Input() public documentForm!: FormGroup; + @Input() public documentFormField!: string; + @Input() public getDataFunction!: (index: number, pageSize: number, term?: string) => Observable; + @Input() public onRowSelectedFunction!: Function; + @Input() public dataSet!: any; + @Input() public displayedDataField!: string; + @Input() public displayedDataSubResource!: string; + @Input() public listColDefinitions!: ListColDefinition[]; + @Input() public displayAsButton: boolean; + @Input() public showHeader: boolean; + @Output() rowSelected = new EventEmitter(); + @ViewChild('paragraphRef', {static: false}) paragraphRef!: ElementRef; + @ViewChild("listComponent", {static: false}) listComponent!: ListComponent; + protected readonly SearchSelectComponent = SearchSelectComponent; + + protected selectedRowIndex: number | null = null; + protected searchBoxOpen: boolean; + protected searchBoxInitialized: boolean; + protected searchBoxFilled: boolean; + + constructor() { + this.searchBoxOpen = false; + this.searchBoxInitialized = false; + this.searchBoxFilled = false; + this.displayAsButton = false; + this.showHeader = false; + } + + ngOnInit(): void { + if (this.dataSet !== undefined) { + this.searchBoxFilled = true; + } + } + + ngAfterViewInit(): void { + if (this.dataSet !== undefined) { + this.paragraphRef.nativeElement.textContent = this.dataSet[this.displayedDataField]; + } + } + + onRowSelected = (row: any, index: number) => { + if (this.onRowSelectedFunction !== undefined) { + this.onRowSelectedFunction(row, index); + } else { + this.selectedRowIndex = index; + + const value = this.resultField !== undefined ? row[this.resultField] : row.id; + this.documentForm.get(this.formId)?.setValue(value); + if (this.displayedDataSubResource !== undefined) { + this.paragraphRef.nativeElement.textContent = row[this.displayedDataSubResource][this.displayedDataField]; + } else { + this.paragraphRef.nativeElement.textContent = row[this.displayedDataField]; + } + this.searchBoxFilled = true; + this.searchBoxOpen = false; + } + } + + openSearchBox() { + this.searchBoxOpen = !this.searchBoxOpen; + if (this.searchBoxOpen && !this.searchBoxInitialized) { + this.listComponent.getData(); + this.searchBoxInitialized = true; + } + } + + clearSearch() { + this.paragraphRef.nativeElement.textContent = ''; + this.searchBoxFilled = false; + this.documentForm.get(this.formId)?.setValue(null); + } + + public getPageIndex() { + return this.listComponent.getPageIndex(); + } + + public getPageSize() { + return this.listComponent.getPageSize(); + } + + onSortChange = (sortState: Sort) => { + } + + public static getDefaultColDefAccountsSniping(subResource?: string): ListColDefinition[] { + return [ + ListComponent.getDefaultColPosition(), + { + name: 'profile', + text: 'game_account.profile', + type: ListComponent.COLUMN_TYPE_TEXT_BOLD, + field: 'profile', + sortable: true, + //subResource: subResource, + } as ListColDefinition, + { + name: 'credits', + text: 'game_account.credits', + type: ListComponent.COLUMN_TYPE_NUMBER_BOLD, + field: 'credits', + //subResource: subResource, + sortable: true, + } as ListColDefinition, + { + name: 'running', + text: 'sniping.running', + type: ListComponent.COLUMN_TYPE_BOOLEAN, + field: 'running', + sortable: true, + filterType: FilterBarComponent.FILTER_TYPE_BOOLEAN, + } as ListColDefinition, + { + name: 'blocked', + text: 'sniping.blocked', + type: ListComponent.COLUMN_TYPE_BOOLEAN, + field: 'blocked', + sortable: true, + filterType: FilterBarComponent.FILTER_TYPE_BOOLEAN, + } as ListColDefinition, + { + name: 'snipingCnt1h', + text: 'sniping.snipingCnt1h', + type: ListComponent.COLUMN_TYPE_NUMBER, + field: 'snipingCnt1h', + sortable: true, + } as ListColDefinition, + { + name: 'snipingCnt3h', + text: 'sniping.snipingCnt3h', + type: ListComponent.COLUMN_TYPE_NUMBER, + field: 'snipingCnt3h', + sortable: true, + } as ListColDefinition, + { + name: 'snipingCnt6h', + text: 'sniping.snipingCnt6h', + type: ListComponent.COLUMN_TYPE_NUMBER, + field: 'snipingCnt6h', + sortable: true, + } as ListColDefinition, + { + name: 'snipingCnt12h', + text: 'sniping.snipingCnt12h', + type: ListComponent.COLUMN_TYPE_NUMBER, + field: 'snipingCnt12h', + sortable: true, + } as ListColDefinition, + { + name: 'snipingCnt24h', + text: 'sniping.snipingCnt24h', + type: ListComponent.COLUMN_TYPE_NUMBER, + field: 'snipingCnt24h', + sortable: true, + } as ListColDefinition, + { + name: 'snipingCnt3d', + text: 'sniping.snipingCnt3d', + type: ListComponent.COLUMN_TYPE_NUMBER, + field: 'snipingCnt3d', + sortable: true, + } as ListColDefinition, + { + name: 'snipingCnt1w', + text: 'sniping.snipingCnt1w', + type: ListComponent.COLUMN_TYPE_NUMBER, + field: 'snipingCnt1w', + sortable: true, + } as ListColDefinition, + { + name: 'snipingDate', + text: 'game_account.snipingDate', + type: ListComponent.COLUMN_TYPE_DATE, + field: 'snipingDate', + sortable: true, + } as ListColDefinition, + { + name: 'relistDate', + text: 'game_account.relistDate', + type: ListComponent.COLUMN_TYPE_DATE, + field: 'relistDate', + sortable: true, + } as ListColDefinition, + ]; + } + + public static getDefaultColDefCandidates(subResource?: string): ListColDefinition[] { + return [ + ListComponent.getDefaultColPosition(), + { + name: 'image', + text: 'basic.image', + type: ListComponent.COLUMN_TYPE_COMBINED_IMAGES, + multipleFields: ['cardImageUrl', 'imageUrl', 'rating'], + } as ListColDefinition, + { + name: 'firstname', + text: 'candidate.firstname', + type: ListComponent.COLUMN_TYPE_TEXT_BOLD, + field: 'firstname', + sortingSubResource: 'player', + sortable: true, + } as ListColDefinition, + { + name: 'lastname', + text: 'candidate.lastname', + type: ListComponent.COLUMN_TYPE_TEXT_BOLD, + field: 'lastname', + sortingSubResource: 'player', + sortable: true, + } as ListColDefinition, + { + name: 'nickname', + text: 'candidate.nickname', + type: ListComponent.COLUMN_TYPE_TEXT_BOLD, + field: 'nickname', + sortingSubResource: 'player', + sortable: true, + } as ListColDefinition, + { + name: 'rating', + text: 'candidate.rating', + type: ListComponent.COLUMN_TYPE_TEXT_BOLD, + field: 'rating', + sortable: true, + } as ListColDefinition, + { + name: 'rarityName', + text: 'candidate.rarityName', + type: ListComponent.COLUMN_TYPE_TEXT, + field: 'name', + subResource: 'rarity', + sortingSubResource: 'rarity', + sortable: true, + } as ListColDefinition, + ]; + } +} diff --git a/angular/src/app/_components/toggle/toggle.component.html b/angular/src/app/_components/toggle/toggle.component.html new file mode 100644 index 0000000..310ca90 --- /dev/null +++ b/angular/src/app/_components/toggle/toggle.component.html @@ -0,0 +1,9 @@ +
+ +
+ +
+
\ No newline at end of file diff --git a/angular/src/app/_components/toggle/toggle.component.scss b/angular/src/app/_components/toggle/toggle.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_components/toggle/toggle.component.spec.ts b/angular/src/app/_components/toggle/toggle.component.spec.ts new file mode 100644 index 0000000..d11a5b2 --- /dev/null +++ b/angular/src/app/_components/toggle/toggle.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ToggleComponent } from './toggle.component'; + +describe('ToggleComponent', () => { + let component: ToggleComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ToggleComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ToggleComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_components/toggle/toggle.component.ts b/angular/src/app/_components/toggle/toggle.component.ts new file mode 100644 index 0000000..491165f --- /dev/null +++ b/angular/src/app/_components/toggle/toggle.component.ts @@ -0,0 +1,23 @@ +import {Component, Input} from '@angular/core'; +import { v4 as uuidv4 } from 'uuid'; +@Component({ + selector: 'app-toggle', + templateUrl: './toggle.component.html', + styleUrl: './toggle.component.scss' +}) +export class ToggleComponent { + @Input() public headline!: string; + @Input() small: boolean = false; + @Input() activeFilterCount: number = 0; + + public isOpened: boolean = false; + protected toggleId: string; + + constructor() { + this.toggleId = uuidv4(); + } + + openToggle() { + this.isOpened = true; + } +} diff --git a/angular/src/app/_forms/apiForms.ts b/angular/src/app/_forms/apiForms.ts new file mode 100644 index 0000000..aea914b --- /dev/null +++ b/angular/src/app/_forms/apiForms.ts @@ -0,0 +1,620 @@ +import { FormGroup, FormControl, Validators } from '@angular/forms'; + +export const accountTradePileItemForm = new FormGroup({ + dbId: new FormControl(null, []), + account: new FormControl(null, []), + candidateItem: new FormControl(null, []), + eaId: new FormControl(null, []), + eaAssetId: new FormControl(null, []), + eaResourceId: new FormControl(null, []), + rareFlag: new FormControl(null, []), + itemType: new FormControl(null, []), + rating: new FormControl(null, []), + contracts: new FormControl(null, []), + playStyle: new FormControl(null, []), + startingBid: new FormControl(null, []), + binPrice: new FormControl(null, []), + individualPrice: new FormControl(null, []), + minRange: new FormControl(null, []), + maxRange: new FormControl(null, []), + lastSalePrice: new FormControl(null, []), + tradeState: new FormControl(null, []), + eaTradeId: new FormControl(null, []), + rebuy: new FormControl(null, []), + leagueId: new FormControl(null, []), + teamId: new FormControl(null, []), + nationId: new FormControl(null, []), + listCnt: new FormControl(null, []), + openBidCnt: new FormControl(null, []), + snipedItem: new FormControl(null, []), + marketAverage: new FormControl(null, []), + creationDate: new FormControl(null, []) +}); + +export const accountTradePileItemJsonldForm = new FormGroup({ + dbId: new FormControl(null, []), + account: new FormControl(null, []), + candidateItem: new FormControl(null, []), + eaId: new FormControl(null, []), + eaAssetId: new FormControl(null, []), + eaResourceId: new FormControl(null, []), + rareFlag: new FormControl(null, []), + itemType: new FormControl(null, []), + rating: new FormControl(null, []), + contracts: new FormControl(null, []), + playStyle: new FormControl(null, []), + startingBid: new FormControl(null, []), + binPrice: new FormControl(null, []), + individualPrice: new FormControl(null, []), + minRange: new FormControl(null, []), + maxRange: new FormControl(null, []), + lastSalePrice: new FormControl(null, []), + tradeState: new FormControl(null, []), + eaTradeId: new FormControl(null, []), + rebuy: new FormControl(null, []), + leagueId: new FormControl(null, []), + teamId: new FormControl(null, []), + nationId: new FormControl(null, []), + listCnt: new FormControl(null, []), + openBidCnt: new FormControl(null, []), + snipedItem: new FormControl(null, []), + marketAverage: new FormControl(null, []), + creationDate: new FormControl(null, []) +}); + +export const candidateForm = new FormGroup({ + dbId: new FormControl(null, []), + rarity: new FormControl(null, []), + candidateStat: new FormControl(null, []), + player: new FormControl(null, []), + firstname: new FormControl(null, []), + lastname: new FormControl(null, []), + nickname: new FormControl(null, []), + fullDisplayInfo: new FormControl(null, []), + eaAssetId: new FormControl(null, [Validators.required]), + eaResourceId: new FormControl(null, [Validators.required]), + rareFlag: new FormControl(null, [Validators.required]), + rarityName: new FormControl(null, []), + image: new FormControl(null, []), + imageUrl: new FormControl(null, []), + cardImageUrl: new FormControl(null, []), + stockCountTotal: new FormControl(null, []), + stockCountReal: new FormControl(null, []), + futBinId: new FormControl(null, []), + futBinName: new FormControl(null, []), + futBinPrice: new FormControl(null, []), + futBinSellingPrice: new FormControl(null, []), + lastFutBinUpdate: new FormControl(null, []), + futWizId: new FormControl(null, []), + futWizPrice: new FormControl(null, []), + futwizName: new FormControl(null, []), + futWizSellingPrice: new FormControl(null, []), + lastFutWizUpdate: new FormControl(null, []), + rating: new FormControl(null, [Validators.required]), + highestBuyBinPrice: new FormControl(null, []), + sellStartingBid: new FormControl(null, []), + sellBinPrice: new FormControl(null, []), + lastFoundMinRange: new FormControl(null, []), + lastFoundMaxRange: new FormControl(null, []), + lastFoundLowestBin: new FormControl(null, []), + lowestBinUpdateDate: new FormControl(null, []), + buy: new FormControl(null, [Validators.required]), + maxBuyPrice: new FormControl(null, []), + buyStyle: new FormControl(null, [Validators.required]), + newBuySelective: new FormControl(null, [Validators.required]), + remove: new FormControl(null, [Validators.required]), + leagueId: new FormControl(null, []), + nationId: new FormControl(null, []), + prio: new FormControl(null, []), + listCnt: new FormControl(null, [Validators.required]), + soldCnt: new FormControl(null, [Validators.required]), + note: new FormControl(null, []), + relevant: new FormControl(null, [Validators.required]), + adjust100: new FormControl(null, [Validators.required]), + directReBuy: new FormControl(null, [Validators.required]), + marketAverage: new FormControl(null, []), + creationDate: new FormControl(null, [Validators.required]) +}); + +export const candidateJsonldForm = new FormGroup({ + dbId: new FormControl(null, []), + rarity: new FormControl(null, []), + candidateStat: new FormControl(null, []), + player: new FormControl(null, []), + firstname: new FormControl(null, []), + lastname: new FormControl(null, []), + nickname: new FormControl(null, []), + fullDisplayInfo: new FormControl(null, []), + eaAssetId: new FormControl(null, [Validators.required]), + eaResourceId: new FormControl(null, [Validators.required]), + rareFlag: new FormControl(null, [Validators.required]), + rarityName: new FormControl(null, []), + image: new FormControl(null, []), + imageUrl: new FormControl(null, []), + cardImageUrl: new FormControl(null, []), + stockCountTotal: new FormControl(null, []), + stockCountReal: new FormControl(null, []), + futBinId: new FormControl(null, []), + futBinName: new FormControl(null, []), + futBinPrice: new FormControl(null, []), + futBinSellingPrice: new FormControl(null, []), + lastFutBinUpdate: new FormControl(null, []), + futWizId: new FormControl(null, []), + futWizPrice: new FormControl(null, []), + futwizName: new FormControl(null, []), + futWizSellingPrice: new FormControl(null, []), + lastFutWizUpdate: new FormControl(null, []), + rating: new FormControl(null, [Validators.required]), + highestBuyBinPrice: new FormControl(null, []), + sellStartingBid: new FormControl(null, []), + sellBinPrice: new FormControl(null, []), + lastFoundMinRange: new FormControl(null, []), + lastFoundMaxRange: new FormControl(null, []), + lastFoundLowestBin: new FormControl(null, []), + lowestBinUpdateDate: new FormControl(null, []), + buy: new FormControl(null, [Validators.required]), + maxBuyPrice: new FormControl(null, []), + buyStyle: new FormControl(null, [Validators.required]), + newBuySelective: new FormControl(null, [Validators.required]), + remove: new FormControl(null, [Validators.required]), + leagueId: new FormControl(null, []), + nationId: new FormControl(null, []), + prio: new FormControl(null, []), + listCnt: new FormControl(null, [Validators.required]), + soldCnt: new FormControl(null, [Validators.required]), + note: new FormControl(null, []), + relevant: new FormControl(null, [Validators.required]), + adjust100: new FormControl(null, [Validators.required]), + directReBuy: new FormControl(null, [Validators.required]), + marketAverage: new FormControl(null, []), + creationDate: new FormControl(null, [Validators.required]) +}); + +export const candidateStatJsonldForm = new FormGroup({ + candidateItem: new FormControl(null, []), + revRl6: new FormControl(null, []), + rl6: new FormControl(null, []), + sold6: new FormControl(null, []), + rat6: new FormControl(null, []), + rev6: new FormControl(null, []), + revRl12: new FormControl(null, []), + rl12: new FormControl(null, []), + sold12: new FormControl(null, []), + rat12: new FormControl(null, []), + rev12: new FormControl(null, []), + revRl24: new FormControl(null, []), + rl24: new FormControl(null, []), + sold24: new FormControl(null, []), + rat24: new FormControl(null, []), + rev24: new FormControl(null, []), + revRl3d: new FormControl(null, []), + rl3d: new FormControl(null, []), + sold3d: new FormControl(null, []), + rat3d: new FormControl(null, []), + rev3d: new FormControl(null, []), + revRl1w: new FormControl(null, []), + rl1w: new FormControl(null, []), + sold1w: new FormControl(null, []), + rat1w: new FormControl(null, []), + rev1w: new FormControl(null, []), + revRl2w: new FormControl(null, []), + rl2w: new FormControl(null, []), + sold2w: new FormControl(null, []), + rat2w: new FormControl(null, []), + rev2w: new FormControl(null, []), + revRl3w: new FormControl(null, []), + rl3w: new FormControl(null, []), + sold3w: new FormControl(null, []), + rat3w: new FormControl(null, []), + rev3w: new FormControl(null, []), + revRl4w: new FormControl(null, []), + rl4w: new FormControl(null, []), + sold4w: new FormControl(null, []), + rat4w: new FormControl(null, []), + rev4w: new FormControl(null, []), + revRl: new FormControl(null, []), + rl: new FormControl(null, []), + sold: new FormControl(null, []), + rat: new FormControl(null, []), + rev: new FormControl(null, []), + snipingRev: new FormControl(null, []), + creationDate: new FormControl(null, []), + lastUpdateDate: new FormControl(null, []) +}); + +export const candidateStockAccountsJsonldForm = new FormGroup({ + candidatesStockAccounts: new FormControl(null, []), + candidatesMissingAccounts: new FormControl(null, []) +}); + +export const configForm = new FormGroup({ + systemActive: new FormControl(null, []), + systemRunning: new FormControl(null, []), + lastUpdateDate: new FormControl(null, []), + lastCheckDate: new FormControl(null, []), + processCnt: new FormControl(null, []), + sleepHourStart: new FormControl(null, [ + Validators.min(0), + Validators.max(23) + ]), + sleepHourEnd: new FormControl(null, [Validators.min(0), Validators.max(23)]), + checkMaxSales: new FormControl(null, []), + numMaxSales: new FormControl(null, [Validators.min(0), Validators.max(20)]) +}); + +export const configJsonldForm = new FormGroup({ + systemActive: new FormControl(null, []), + systemRunning: new FormControl(null, []), + lastUpdateDate: new FormControl(null, []), + lastCheckDate: new FormControl(null, []), + processCnt: new FormControl(null, []), + sleepHourStart: new FormControl(null, [ + Validators.min(0), + Validators.max(23) + ]), + sleepHourEnd: new FormControl(null, [Validators.min(0), Validators.max(23)]), + checkMaxSales: new FormControl(null, []), + numMaxSales: new FormControl(null, [Validators.min(0), Validators.max(20)]) +}); + +export const gameAccountForm = new FormGroup({ + dbId: new FormControl(null, []), + email: new FormControl(null, [Validators.required, Validators.email]), + profile: new FormControl(null, [Validators.required]), + password: new FormControl(null, [Validators.required]), + emailPw: new FormControl(null, []), + credits: new FormControl(null, []), + cntItems: new FormControl(null, []), + cntSoldItems: new FormControl(null, []), + cntInactiveItems: new FormControl(null, []), + active: new FormControl(null, [Validators.required]), + running: new FormControl(null, [Validators.required]), + relist: new FormControl(null, [Validators.required]), + relistDate: new FormControl(null, []), + blocked: new FormControl(null, [Validators.required]), + sniping: new FormControl(null, [Validators.required]), + snipingDate: new FormControl(null, []), + tmOpen: new FormControl(null, [Validators.required]), + tmState: new FormControl(null, []), + dead: new FormControl(null, [Validators.required]), + lockedMsg: new FormControl(null, [Validators.required]), + dynPrices: new FormControl(null, [Validators.required]), + newBuy: new FormControl(null, [Validators.required]), + newBuyDate: new FormControl(null, []), + newBuySelective: new FormControl(null, [Validators.required]), + reBuy: new FormControl(null, [Validators.required]), + rebuyDate: new FormControl(null, []), + connectionDate: new FormControl(null, []), + importWatchlist: new FormControl(null, [Validators.required]), + autoReBuy: new FormControl(null, [Validators.required]), + directReBuy: new FormControl(null, [Validators.required]), + itemMaxBuyPrice: new FormControl(null, [ + Validators.min(0), + Validators.max(15000000) + ]), + revenue: new FormControl(null, []), + futWizValue: new FormControl(null, []), + eaMarketAvgValue: new FormControl(null, []), + mfaCode: new FormControl(null, []), + twoFactorAuthKey: new FormControl(null, []), + login2FaViaApp: new FormControl(null, []), + eaCode1: new FormControl(null, []), + eaCode2: new FormControl(null, []), + eaCode3: new FormControl(null, []), + eaCode4: new FormControl(null, []), + eaCode5: new FormControl(null, []), + eaCode6: new FormControl(null, []), + snipingCnt1h: new FormControl(null, []), + snipingCnt3h: new FormControl(null, []), + snipingCnt6h: new FormControl(null, []), + snipingCnt12h: new FormControl(null, []), + snipingCnt24h: new FormControl(null, []), + snipingCnt3d: new FormControl(null, []), + snipingCnt1w: new FormControl(null, []), + note: new FormControl(null, []), + loopStartDate: new FormControl(null, []), + loopFinishDate: new FormControl(null, []), + creationDate: new FormControl(null, []), + owner: new FormControl(null, []) +}); + +export const gameAccountJsonldForm = new FormGroup({ + dbId: new FormControl(null, []), + email: new FormControl(null, [Validators.required, Validators.email]), + profile: new FormControl(null, [Validators.required]), + password: new FormControl(null, [Validators.required]), + emailPw: new FormControl(null, []), + credits: new FormControl(null, []), + cntItems: new FormControl(null, []), + cntSoldItems: new FormControl(null, []), + cntInactiveItems: new FormControl(null, []), + active: new FormControl(null, [Validators.required]), + running: new FormControl(null, [Validators.required]), + relist: new FormControl(null, [Validators.required]), + relistDate: new FormControl(null, []), + blocked: new FormControl(null, [Validators.required]), + sniping: new FormControl(null, [Validators.required]), + snipingDate: new FormControl(null, []), + tmOpen: new FormControl(null, [Validators.required]), + tmState: new FormControl(null, []), + dead: new FormControl(null, [Validators.required]), + lockedMsg: new FormControl(null, [Validators.required]), + dynPrices: new FormControl(null, [Validators.required]), + newBuy: new FormControl(null, [Validators.required]), + newBuyDate: new FormControl(null, []), + newBuySelective: new FormControl(null, [Validators.required]), + reBuy: new FormControl(null, [Validators.required]), + rebuyDate: new FormControl(null, []), + connectionDate: new FormControl(null, []), + importWatchlist: new FormControl(null, [Validators.required]), + autoReBuy: new FormControl(null, [Validators.required]), + directReBuy: new FormControl(null, [Validators.required]), + itemMaxBuyPrice: new FormControl(null, [ + Validators.min(0), + Validators.max(15000000) + ]), + revenue: new FormControl(null, []), + futWizValue: new FormControl(null, []), + eaMarketAvgValue: new FormControl(null, []), + mfaCode: new FormControl(null, []), + twoFactorAuthKey: new FormControl(null, []), + login2FaViaApp: new FormControl(null, []), + eaCode1: new FormControl(null, []), + eaCode2: new FormControl(null, []), + eaCode3: new FormControl(null, []), + eaCode4: new FormControl(null, []), + eaCode5: new FormControl(null, []), + eaCode6: new FormControl(null, []), + snipingCnt1h: new FormControl(null, []), + snipingCnt3h: new FormControl(null, []), + snipingCnt6h: new FormControl(null, []), + snipingCnt12h: new FormControl(null, []), + snipingCnt24h: new FormControl(null, []), + snipingCnt3d: new FormControl(null, []), + snipingCnt1w: new FormControl(null, []), + note: new FormControl(null, []), + loopStartDate: new FormControl(null, []), + loopFinishDate: new FormControl(null, []), + creationDate: new FormControl(null, []), + owner: new FormControl(null, []) +}); + +export const logAccountCreditJsonldForm = new FormGroup({ + gameAccount: new FormControl(null, []), + credits: new FormControl(null, []), + revenue: new FormControl(null, []), + creationDate: new FormControl(null, []) +}); + +export const logAccountProfitJsonldForm = new FormGroup({ + gameAccount: new FormControl(null, []), + credits: new FormControl(null, []), + revenue: new FormControl(null, []), + tpValue: new FormControl(null, []), + revToday: new FormControl(null, []), + rev3hours: new FormControl(null, []), + rev6hours: new FormControl(null, []), + rev12hours: new FormControl(null, []), + rev24hours: new FormControl(null, []), + rev3days: new FormControl(null, []), + rev1week: new FormControl(null, []), + rev2weeks: new FormControl(null, []), + rev3weeks: new FormControl(null, []), + rev4weeks: new FormControl(null, []), + rev2months: new FormControl(null, []), + rev3months: new FormControl(null, []), + revTotal: new FormControl(null, []), + numSalesToday: new FormControl(null, []), + numSales3hours: new FormControl(null, []), + numSales6hours: new FormControl(null, []), + numSales12hours: new FormControl(null, []), + numSales24hours: new FormControl(null, []), + numSales3days: new FormControl(null, []), + numSales1week: new FormControl(null, []), + numSales2weeks: new FormControl(null, []), + numSales3weeks: new FormControl(null, []), + numSales4weeks: new FormControl(null, []), + numSales2months: new FormControl(null, []), + numSales3months: new FormControl(null, []), + numSalesTotal: new FormControl(null, []), + isDailyProfit: new FormControl(null, []), + creationDate: new FormControl(null, []) +}); + +export const logAccountSoldItemJsonldForm = new FormGroup({ + dbId: new FormControl(null, []), + gameAccount: new FormControl(null, []), + candidateItem: new FormControl(null, []), + eaId: new FormControl(null, []), + contracts: new FormControl(null, []), + playStyle: new FormControl(null, []), + lastSalePrice: new FormControl(null, []), + currentBid: new FormControl(null, []), + startingBid: new FormControl(null, []), + binPrice: new FormControl(null, []), + minRange: new FormControl(null, []), + maxRange: new FormControl(null, []), + tradeState: new FormControl(null, []), + eaTradeId: new FormControl(null, []), + listCnt: new FormControl(null, []), + revenue: new FormControl(null, []), + reBought: new FormControl(null, []), + snipedItem: new FormControl(null, []), + firstListDate: new FormControl(null, []), + creationDate: new FormControl(null, []) +}); + +export const logGeneralJsonldForm = new FormGroup({ + dbId: new FormControl(null, []), + gameAccount: new FormControl(null, []), + candidateItem: new FormControl(null, []), + logType: new FormControl(null, [Validators.required]), + message: new FormControl(null, []), + creationDate: new FormControl(null, []) +}); + +export const logTotalProfitForm = new FormGroup({ + credits: new FormControl(null, []), + revenue: new FormControl(null, []), + tpValueFutwiz: new FormControl(null, []), + tpValueEaAverage: new FormControl(null, []), + revToday: new FormControl(null, []), + rev3hours: new FormControl(null, []), + rev6hours: new FormControl(null, []), + rev12hours: new FormControl(null, []), + rev24hours: new FormControl(null, []), + rev3days: new FormControl(null, []), + rev1week: new FormControl(null, []), + rev2weeks: new FormControl(null, []), + rev3weeks: new FormControl(null, []), + rev4weeks: new FormControl(null, []), + rev2months: new FormControl(null, []), + rev3months: new FormControl(null, []), + revTotal: new FormControl(null, []), + numSalesToday: new FormControl(null, []), + numSales3hours: new FormControl(null, []), + numSales6hours: new FormControl(null, []), + numSales12hours: new FormControl(null, []), + numSales24hours: new FormControl(null, []), + numSales3days: new FormControl(null, []), + numSales1week: new FormControl(null, []), + numSales2weeks: new FormControl(null, []), + numSales3weeks: new FormControl(null, []), + numSales4weeks: new FormControl(null, []), + numSales2months: new FormControl(null, []), + numSales3months: new FormControl(null, []), + numSalesTotal: new FormControl(null, []), + isDailyProfit: new FormControl(null, []), + creationDate: new FormControl(null, []) +}); + +export const logTotalProfitJsonldForm = new FormGroup({ + credits: new FormControl(null, []), + revenue: new FormControl(null, []), + tpValueFutwiz: new FormControl(null, []), + tpValueEaAverage: new FormControl(null, []), + revToday: new FormControl(null, []), + rev3hours: new FormControl(null, []), + rev6hours: new FormControl(null, []), + rev12hours: new FormControl(null, []), + rev24hours: new FormControl(null, []), + rev3days: new FormControl(null, []), + rev1week: new FormControl(null, []), + rev2weeks: new FormControl(null, []), + rev3weeks: new FormControl(null, []), + rev4weeks: new FormControl(null, []), + rev2months: new FormControl(null, []), + rev3months: new FormControl(null, []), + revTotal: new FormControl(null, []), + numSalesToday: new FormControl(null, []), + numSales3hours: new FormControl(null, []), + numSales6hours: new FormControl(null, []), + numSales12hours: new FormControl(null, []), + numSales24hours: new FormControl(null, []), + numSales3days: new FormControl(null, []), + numSales1week: new FormControl(null, []), + numSales2weeks: new FormControl(null, []), + numSales3weeks: new FormControl(null, []), + numSales4weeks: new FormControl(null, []), + numSales2months: new FormControl(null, []), + numSales3months: new FormControl(null, []), + numSalesTotal: new FormControl(null, []), + isDailyProfit: new FormControl(null, []), + creationDate: new FormControl(null, []) +}); + +export const mediaObjectJsonldMediaObjectReadForm = new FormGroup({ + contentUrl: new FormControl(null, []) +}); + +export const modeConfigForm = new FormGroup({ + autoReBuyMinSoldItems: new FormControl(null, [ + Validators.min(0), + Validators.max(20) + ]), + autoReBuyMinLastHours: new FormControl(null, [ + Validators.min(0), + Validators.max(20) + ]) +}); + +export const modeConfigJsonldForm = new FormGroup({ + autoReBuyMinSoldItems: new FormControl(null, [ + Validators.min(0), + Validators.max(20) + ]), + autoReBuyMinLastHours: new FormControl(null, [ + Validators.min(0), + Validators.max(20) + ]) +}); + +export const playerForm = new FormGroup({ + eaAssetId: new FormControl(null, []), + firstname: new FormControl(null, []), + lastname: new FormControl(null, []), + nickname: new FormControl(null, []), + rating: new FormControl(null, []), + creationDate: new FormControl(null, []) +}); + +export const playerJsonldForm = new FormGroup({ + eaAssetId: new FormControl(null, []), + firstname: new FormControl(null, []), + lastname: new FormControl(null, []), + nickname: new FormControl(null, []), + rating: new FormControl(null, []), + creationDate: new FormControl(null, []) +}); + +export const rarityForm = new FormGroup({ + rareFlag: new FormControl(null, []), + name: new FormControl(null, []), + untradable: new FormControl(null, []), + image: new FormControl(null, []), + imageUrl: new FormControl(null, []), + imageBronze: new FormControl(null, []) +}); + +export const rarityJsonldForm = new FormGroup({ + rareFlag: new FormControl(null, []), + name: new FormControl(null, []), + untradable: new FormControl(null, []), + image: new FormControl(null, []), + imageUrl: new FormControl(null, []), + imageBronze: new FormControl(null, []) +}); + +export const systemStatJsonldForm = new FormGroup({ + totalLogProfit: new FormControl(null, []), + config: new FormControl(null, []), + modeConfig: new FormControl(null, []), + numAccounts: new FormControl(null, []), + numDeadAccounts: new FormControl(null, []), + numActiveAccounts: new FormControl(null, []), + numTmOpenAccounts: new FormControl(null, []), + numTmClosedAccounts: new FormControl(null, []), + numBlockedAccounts: new FormControl(null, []), + numRunningAccounts: new FormControl(null, []), + numTradepileItems: new FormControl(null, []), + numSoldTradepileItems: new FormControl(null, []), + numActiveTradepileItems: new FormControl(null, []), + numExpiredTradepileItems: new FormControl(null, []), + numInactiveTradepileItems: new FormControl(null, []), + numCandidates: new FormControl(null, []), + numRelevantCandidates: new FormControl(null, []), + numBuyCandidates: new FormControl(null, []), + totalSnipingRev: new FormControl(null, []) +}); + +export const userJsonldForm = new FormGroup({ + email: new FormControl(null, [Validators.required, Validators.email]), + firstName: new FormControl(null, [Validators.required]), + lastName: new FormControl(null, [Validators.required]), + image: new FormControl(null, []), + imageUrl: new FormControl(null, []), + fullName: new FormControl(null, []), + password: new FormControl(null, []), + active: new FormControl(null, []), + createdAt: new FormControl(null, []) +}); diff --git a/angular/src/app/_guards/admin.guard.spec.ts b/angular/src/app/_guards/admin.guard.spec.ts new file mode 100644 index 0000000..0cb3634 --- /dev/null +++ b/angular/src/app/_guards/admin.guard.spec.ts @@ -0,0 +1,17 @@ +import { TestBed } from '@angular/core/testing'; +import { CanActivateFn } from '@angular/router'; + +import { adminGuard } from './admin.guard'; + +describe('adminGuard', () => { + const executeGuard: CanActivateFn = (...guardParameters) => + TestBed.runInInjectionContext(() => adminGuard(...guardParameters)); + + beforeEach(() => { + TestBed.configureTestingModule({}); + }); + + it('should be created', () => { + expect(executeGuard).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_guards/admin.guard.ts b/angular/src/app/_guards/admin.guard.ts new file mode 100644 index 0000000..bcb4241 --- /dev/null +++ b/angular/src/app/_guards/admin.guard.ts @@ -0,0 +1,12 @@ +import {CanActivateFn, Router} from '@angular/router'; +import {inject} from "@angular/core"; +import {AccountService} from "@app/_services"; + +export const adminGuard: CanActivateFn = (route, state) => { + const accountService = inject(AccountService); + if (accountService.isLoggedIn() && accountService.isUserAdmin()) { + return true; + } + inject(Router).navigate(['/account/login'], { queryParams: { returnUrl: state.url }}); + return false; +}; diff --git a/angular/src/app/_guards/game-account-owner.guard.spec.ts b/angular/src/app/_guards/game-account-owner.guard.spec.ts new file mode 100644 index 0000000..3c1c27e --- /dev/null +++ b/angular/src/app/_guards/game-account-owner.guard.spec.ts @@ -0,0 +1,17 @@ +import { TestBed } from '@angular/core/testing'; +import { CanActivateFn } from '@angular/router'; + +import { gameAccountOwnerGuard } from './game-account-owner.guard'; + +describe('gameAccountOwnerGuard', () => { + const executeGuard: CanActivateFn = (...guardParameters) => + TestBed.runInInjectionContext(() => gameAccountOwnerGuard(...guardParameters)); + + beforeEach(() => { + TestBed.configureTestingModule({}); + }); + + it('should be created', () => { + expect(executeGuard).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_guards/game-account-owner.guard.ts b/angular/src/app/_guards/game-account-owner.guard.ts new file mode 100644 index 0000000..b9a6b7d --- /dev/null +++ b/angular/src/app/_guards/game-account-owner.guard.ts @@ -0,0 +1,27 @@ +import { CanActivateFn, Router } from '@angular/router'; +import { inject } from "@angular/core"; +import { map } from 'rxjs/operators'; +import {GameAccountService} from "@app/core/api/v1"; + +export const gameAccountOwnerGuard: CanActivateFn = (route, state) => { + const gameAccountService = inject(GameAccountService); + const router = inject(Router); + const gameAccountId = route.paramMap.get('id'); + + if (!gameAccountId) { + router.navigate(['/error']); // Oder eine andere geeignete Route + return false; + } + + return gameAccountService.gameAccountsIdGet(gameAccountId).pipe( + map(gameAccount => { + return true; + // if (isOwner) { + // return true; + // } else { + // router.navigate(['/' + ROUTE_DASHBOARD]); // Oder eine andere geeignete Route + // return false; + // } + }) + ); +}; \ No newline at end of file diff --git a/angular/src/app/_guards/sales.guard.spec.ts b/angular/src/app/_guards/sales.guard.spec.ts new file mode 100644 index 0000000..d78c234 --- /dev/null +++ b/angular/src/app/_guards/sales.guard.spec.ts @@ -0,0 +1,17 @@ +import { TestBed } from '@angular/core/testing'; +import { CanActivateFn } from '@angular/router'; + +import { salesGuard } from './sales.guard'; + +describe('salesGuard', () => { + const executeGuard: CanActivateFn = (...guardParameters) => + TestBed.runInInjectionContext(() => salesGuard(...guardParameters)); + + beforeEach(() => { + TestBed.configureTestingModule({}); + }); + + it('should be created', () => { + expect(executeGuard).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_guards/sales.guard.ts b/angular/src/app/_guards/sales.guard.ts new file mode 100644 index 0000000..7941907 --- /dev/null +++ b/angular/src/app/_guards/sales.guard.ts @@ -0,0 +1,13 @@ +import {CanActivateFn, Router} from '@angular/router'; +import {inject} from "@angular/core"; +import {AccountService} from "@app/_services"; +import {Role} from "@app/_helpers/role"; + +export const salesGuard: CanActivateFn = (route, state) => { + const accountService = inject(AccountService); + if (accountService.isLoggedIn() && accountService.userHasRole(Role.ROLE_ADMIN)) { + return true; + } + inject(Router).navigate(['/account/login'], { queryParams: { returnUrl: state.url }}); + return false; +}; diff --git a/angular/src/app/_guards/user.guard.spec.ts b/angular/src/app/_guards/user.guard.spec.ts new file mode 100644 index 0000000..202419b --- /dev/null +++ b/angular/src/app/_guards/user.guard.spec.ts @@ -0,0 +1,17 @@ +import { TestBed } from '@angular/core/testing'; +import { CanActivateFn } from '@angular/router'; + +import { userGuard } from './user.guard'; + +describe('userGuardGuard', () => { + const executeGuard: CanActivateFn = (...guardParameters) => + TestBed.runInInjectionContext(() => userGuard(...guardParameters)); + + beforeEach(() => { + TestBed.configureTestingModule({}); + }); + + it('should be created', () => { + expect(executeGuard).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_guards/user.guard.ts b/angular/src/app/_guards/user.guard.ts new file mode 100644 index 0000000..5e1c4ed --- /dev/null +++ b/angular/src/app/_guards/user.guard.ts @@ -0,0 +1,13 @@ +import {CanActivateFn, Router} from '@angular/router'; +import {inject} from "@angular/core"; +import {AccountService} from "@app/_services"; +import {Role} from "@app/_helpers/role"; + +export const userGuard: CanActivateFn = (route, state) => { + const accountService = inject(AccountService); + if (accountService.isLoggedIn() && accountService.userHasRole(Role.ROLE_USER)) { + return true; + } + inject(Router).navigate(['/account/login'], { queryParams: { returnUrl: state.url }}); + return false; +}; diff --git a/angular/src/app/_helpers/app-helper.service.ts b/angular/src/app/_helpers/app-helper.service.ts new file mode 100644 index 0000000..0e1f240 --- /dev/null +++ b/angular/src/app/_helpers/app-helper.service.ts @@ -0,0 +1,86 @@ +import {DomSanitizer, SafeHtml} from "@angular/platform-browser"; +import {Injectable} from "@angular/core"; +import {NgbModal, NgbModalOptions} from "@ng-bootstrap/ng-bootstrap"; +import {ModalStatus} from "@app/_helpers/modal.states"; + +@Injectable({providedIn: 'root'}) +export class AppHelperService { + + constructor( + private sanitizer: DomSanitizer, + private modalService: NgbModal, + ) { + } + + public extractId(iri: string | undefined | null): string { + if (iri !== undefined && iri !== null) { + const iriRegex = /\/(\d+)$/; + const match = iri.match(iriRegex); + if (match && match[1]) { + return match[1]; + } + } + return ""; + } + + public convertDate(dateString: string | null, withTime = false) { + // number 10 for input date (2024-03-15) + // number 16 for input datetime-local (2024-04-28T03:22) + if (dateString !== null) { + const date = new Date(dateString); + return date.toISOString().slice(0, withTime ? 16 : 10); + } + return ""; + } + + public getSafeLongtext(longtext: any): SafeHtml { + if (longtext) { + return this.sanitizer.bypassSecurityTrustHtml(longtext.replace(/\n/g, '
')); + } + return false; + } + + public getModalOptions(): NgbModalOptions { + return {centered: true} as NgbModalOptions; + } + + public openModal(component: any, data: any, callback?: (callbackParam?: any) => void, callbackParam?: any): Promise { + const modalRef = this.modalService.open(component); + for (const key in data) { + modalRef.componentInstance[key] = data[key]; + } + + return modalRef.componentInstance.submit.subscribe((modalStatus: ModalStatus) => { + if (modalStatus === ModalStatus.Submitted) { + modalRef.dismiss(); + if (callback) { + callback(callbackParam); + } + } + }); + } + + public assertType(value: any, type: string): asserts value is T { + if (typeof value !== type) { + throw new Error(`Expected ${type} but received ${typeof value}`); + } + } + + public getResourceLink(element: any, subResource?: any): string | null { + let resourceLink: string = '/'; + element = subResource !== undefined ? element[subResource] : element; + if (element === undefined) { + return null; + } + return resourceLink + '/' + this.extractId(element['id']); + } + + public getLink(element: any, url: any): string { + return url + "/" + this.extractId(element['id']); + } + + public dumpObject(obj: any): string { + return JSON.stringify(obj, null, 2); // Das `null, 2` formatiert das JSON mit Einrückungen + } + +} \ No newline at end of file diff --git a/angular/src/app/_helpers/error.interceptor.ts b/angular/src/app/_helpers/error.interceptor.ts new file mode 100644 index 0000000..d914796 --- /dev/null +++ b/angular/src/app/_helpers/error.interceptor.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; +import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpResponse } from '@angular/common/http'; +import { Observable, throwError } from 'rxjs'; +import { catchError, tap } from 'rxjs/operators'; + +import { AccountService, AlertService } from '@app/_services'; + +@Injectable() +export class ErrorInterceptor implements HttpInterceptor { + constructor( + private accountService: AccountService, + private alertService: AlertService, + ) {} + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + return next.handle(request).pipe( + tap(evt => { + if (evt instanceof HttpResponse) { + if ((request.method === 'POST' || request.method === 'PATCH') && evt.status === 200) { + // Erfolgsmeldung für POST und PATCH + this.alertService.success('Saved', {autoClose: true}); + } + } + }), + catchError(err => { + if ([401, 403].includes(err.status) && this.accountService.userValue) { + // auto logout if 401 or 403 response returned from api + this.accountService.logout(); + } + console.log(err); + this.alertService.error(err.message + ' - ' + err.error); + + const error = err.error?.message || err.statusText; + return throwError(() => error); + }) + ); + } +} \ No newline at end of file diff --git a/angular/src/app/_helpers/formgroup.initializer.ts b/angular/src/app/_helpers/formgroup.initializer.ts new file mode 100644 index 0000000..b308ee1 --- /dev/null +++ b/angular/src/app/_helpers/formgroup.initializer.ts @@ -0,0 +1,12 @@ +import {FormGroup} from "@angular/forms"; + +export class FormGroupInitializer { + public static initFormGroup(formGroup: FormGroup, model: any) { + for (const controlName in formGroup.controls) { + if (formGroup.controls.hasOwnProperty(controlName)) { + formGroup.patchValue({[controlName]: model[controlName] ?? null}); + } + } + return formGroup; + } +} \ No newline at end of file diff --git a/angular/src/app/_helpers/index.ts b/angular/src/app/_helpers/index.ts new file mode 100644 index 0000000..baef006 --- /dev/null +++ b/angular/src/app/_helpers/index.ts @@ -0,0 +1,2 @@ +export * from './error.interceptor'; +export * from './jwt.interceptor'; diff --git a/angular/src/app/_helpers/jwt.interceptor.ts b/angular/src/app/_helpers/jwt.interceptor.ts new file mode 100644 index 0000000..85a2550 --- /dev/null +++ b/angular/src/app/_helpers/jwt.interceptor.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { environment } from '@environments/environment'; +import { AccountService } from '@app/_services'; + +@Injectable() +export class JwtInterceptor implements HttpInterceptor { + constructor(private accountService: AccountService) { } + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + // add auth header with jwt if user is logged in and request is to the api url + const user = this.accountService.userValue; + const isLoggedIn = user && user.token; + const isApiUrl = request.url.startsWith(environment.apiUrl); + if (isLoggedIn && isApiUrl) { + request = request.clone({ + setHeaders: { + Authorization: `Bearer ${user.token}` + } + }); + } + + return next.handle(request); + } +} \ No newline at end of file diff --git a/angular/src/app/_helpers/loading-interceptor.service.ts b/angular/src/app/_helpers/loading-interceptor.service.ts new file mode 100644 index 0000000..175c0fa --- /dev/null +++ b/angular/src/app/_helpers/loading-interceptor.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from '@angular/core'; +import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http'; +import {finalize, Observable} from 'rxjs'; + +import {LoadingService} from "@app/_services/loading.service"; + +@Injectable() +export class LoadingInterceptor implements HttpInterceptor { + constructor( + private loadingService: LoadingService + ) { } + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + this.loadingService.setLoading(true); + return next.handle(request).pipe( + finalize(() => { + this.loadingService.setLoading(false); + }) + ); + } +} \ No newline at end of file diff --git a/angular/src/app/_helpers/modal.states.ts b/angular/src/app/_helpers/modal.states.ts new file mode 100644 index 0000000..31a5f71 --- /dev/null +++ b/angular/src/app/_helpers/modal.states.ts @@ -0,0 +1,4 @@ +export enum ModalStatus { + Cancelled = 'Cancelled', + Submitted = 'Submitted' +} \ No newline at end of file diff --git a/angular/src/app/_helpers/price-calculator.service.ts b/angular/src/app/_helpers/price-calculator.service.ts new file mode 100644 index 0000000..d9ddd69 --- /dev/null +++ b/angular/src/app/_helpers/price-calculator.service.ts @@ -0,0 +1,116 @@ +import { Injectable } from '@angular/core'; +import {FormGroup} from "@angular/forms"; +import {TranslateService} from "@ngx-translate/core"; +import {PriceError} from "@app/_models/priceError"; + +@Injectable({ + providedIn: 'root' +}) +export class PriceCalculatorService { + + + constructor( + protected translateService: TranslateService, + ) { + } + + public getCorrectPrice(event: FocusEvent, form: FormGroup) { + const eventElement = event.target as HTMLInputElement; + if (form.get(eventElement.id)?.value !== null && form.get(eventElement.id)?.value !== '') { + let validPrice = this.calculateValidPrice(Number(eventElement.value)); + form.get(eventElement.id)?.setValue(validPrice); + } + } + + + public calculateValidPrice(price: number): number { + price = Math.floor(price); + + if (price < 150) return 150; + if (price < 1000) return price - (price % 50); + if (price < 10000) return price - (price % 100); + if (price < 50000) return price - (price % 250); + if (price < 100000) return price - (price % 500); + return price - (price % 1000); + } + + public checkPriceConstellation( + sellStartingBid: number | string, + sellPriceBin: number | string, + lastFoundMinRange: number | string | undefined, + lastFoundMaxRange: number | string | undefined, + ): PriceError { + + let res = { + message: '', + error: false + } as PriceError; + + if ((sellStartingBid !== null && sellStartingBid !== '') && (sellPriceBin === null || sellPriceBin === '')) { + res.error = true; + res.message = this.translateService.instant('errors.sellPriceBinSellStartingBid'); + return res; + } + + if ((sellPriceBin !== null && sellPriceBin !== '') && (sellStartingBid === null || sellStartingBid === '')) { + res.error = true; + res.message = this.translateService.instant('errors.sellStartingBidSellPriceBin'); + return res; + } + + if (sellPriceBin <= sellStartingBid && (sellStartingBid !== null && sellStartingBid !== '') && (sellPriceBin !== null && sellPriceBin !== '')) { + res.error = true; + res.message = this.translateService.instant('errors.sellPriceBinSmallerSellStartingBid'); + return res; + } + + if (sellStartingBid >= sellPriceBin && (sellStartingBid !== null && sellStartingBid !== '') && (sellPriceBin !== null && sellPriceBin !== '')) { + res.error = true; + res.message = this.translateService.instant('errors.sellStartingBidLargerSellPriceBin'); + return res; + } + + if (lastFoundMinRange) { + if (sellStartingBid < lastFoundMinRange && (sellStartingBid !== null && sellStartingBid !== '')) { + res.error = true; + res.message = this.translateService.instant('errors.sellStartingBidSmallerLastFoundMinRange'); + return res; + } + } + + if (lastFoundMaxRange) { + if (sellPriceBin > lastFoundMaxRange && (sellPriceBin !== null && sellPriceBin !== '')) { + res.error = true; + res.message = this.translateService.instant('errors.sellPriceBinLargerLastFoundMaxRange'); + return res; + } + } + + if (lastFoundMinRange && lastFoundMaxRange) { + if (lastFoundMaxRange <= lastFoundMinRange) { + res.error = true; + res.message = this.translateService.instant('errors.sellStartingBidSellPriceBin'); + return res; + } + + if (lastFoundMinRange >= lastFoundMaxRange) { + res.error = true; + res.message = this.translateService.instant('errors.lastFoundMinRangeLargerLastFoundMaxRange'); + return res; + } + if ((lastFoundMinRange !== '') && (lastFoundMaxRange === '')) { + res.error = true; + res.message = this.translateService.instant('errors.lastFoundMaxRangeLastFoundMinRange'); + return res; + } + + if ((lastFoundMaxRange !== null && lastFoundMaxRange !== '') && (lastFoundMinRange === '')) { + res.error = true; + res.message = this.translateService.instant('errors.lastFoundMinRangeLastFoundMaxRange'); + return res; + } + } + + return res; + } +} \ No newline at end of file diff --git a/angular/src/app/_helpers/property.interceptor.ts b/angular/src/app/_helpers/property.interceptor.ts new file mode 100644 index 0000000..4fef097 --- /dev/null +++ b/angular/src/app/_helpers/property.interceptor.ts @@ -0,0 +1,75 @@ +import { Injectable } from '@angular/core'; +import { + HttpInterceptor, + HttpRequest, + HttpHandler, + HttpEvent, HttpResponse, +} from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Injectable() +export class PropertyInterceptor implements HttpInterceptor { + intercept( + request: HttpRequest, + next: HttpHandler + ): Observable> { + return next.handle(request).pipe( + map((event) => { + if (event instanceof HttpResponse && event.body) { + let modifiedBody; + + if (Array.isArray(event.body)) { + // Wenn es sich um ein Array von Ressourcen handelt + modifiedBody = this.mapDataItems(event.body); + } else if (event.body['hydra:member']) { + // Wenn es sich um eine Ressourcenkollektion handelt + modifiedBody = { + ...event.body, + 'hydra:member': this.mapDataItems( + event.body['hydra:member'] + ), + }; + } else { + // Wenn es sich um eine einzelne Ressource handelt + modifiedBody = this.mapDataItem(event.body); + } + + return event.clone({ + body: modifiedBody, + }); + } + + return event; + }) + ); + } + + private mapDataItems(items: any[]): any[] { + return items.map((item) => this.mapDataItem(item)); + } + + private mapDataItem(item: any): any { + if (item && typeof item === 'object') { + // Wenn es ein Objekt ist, überprüfe rekursiv + const mappedItem = { ...item }; + + for (const key in mappedItem) { + if (mappedItem.hasOwnProperty(key) && key === '@id') { + mappedItem['id'] = mappedItem[key]; + delete mappedItem[key]; + } else if (Array.isArray(mappedItem[key])) { + // Wenn es sich um ein Array handelt, überprüfe rekursiv jedes Element + mappedItem[key] = this.mapDataItems(mappedItem[key]); + } else if (mappedItem[key] && typeof mappedItem[key] === 'object') { + // Wenn es ein Objekt ist, überprüfe rekursiv + mappedItem[key] = this.mapDataItem(mappedItem[key]); + } + } + + return mappedItem; + } + + return item; + } +} diff --git a/angular/src/app/_helpers/role.ts b/angular/src/app/_helpers/role.ts new file mode 100644 index 0000000..59b9774 --- /dev/null +++ b/angular/src/app/_helpers/role.ts @@ -0,0 +1,6 @@ + +export class Role { + public static ROLE_ADMIN: string = 'ROLE_ADMIN'; + public static ROLE_USER: string = 'ROLE_USER'; + public static ROLE_SALES: string = 'ROLE_SALES'; +} diff --git a/angular/src/app/_models/alert.ts b/angular/src/app/_models/alert.ts new file mode 100644 index 0000000..e623372 --- /dev/null +++ b/angular/src/app/_models/alert.ts @@ -0,0 +1,25 @@ +export class Alert { + id?: string; + type?: AlertType; + message?: string; + autoClose?: boolean; + keepAfterRouteChange?: boolean; + fade?: boolean; + + constructor(init?:Partial) { + Object.assign(this, init); + } +} + +export enum AlertType { + Success, + Error, + Info, + Warning +} + +export class AlertOptions { + id?: string; + autoClose?: boolean; + keepAfterRouteChange?: boolean; +} \ No newline at end of file diff --git a/angular/src/app/_models/index.ts b/angular/src/app/_models/index.ts new file mode 100644 index 0000000..a039b12 --- /dev/null +++ b/angular/src/app/_models/index.ts @@ -0,0 +1,2 @@ +export * from './alert'; +export * from './user'; \ No newline at end of file diff --git a/angular/src/app/_models/orderFilter.ts b/angular/src/app/_models/orderFilter.ts new file mode 100644 index 0000000..d4c88d1 --- /dev/null +++ b/angular/src/app/_models/orderFilter.ts @@ -0,0 +1,6 @@ +export type OrderFilter = 'asc' | 'desc' | undefined; +export const OrderFilter = { + Asc: 'asc' as OrderFilter, + Desc: 'desc' as OrderFilter, + Undefined: undefined as OrderFilter +} \ No newline at end of file diff --git a/angular/src/app/_models/priceError.ts b/angular/src/app/_models/priceError.ts new file mode 100644 index 0000000..b54f310 --- /dev/null +++ b/angular/src/app/_models/priceError.ts @@ -0,0 +1,4 @@ +export interface PriceError { + message: string; + error: boolean; +} \ No newline at end of file diff --git a/angular/src/app/_models/snipingResponse.ts b/angular/src/app/_models/snipingResponse.ts new file mode 100644 index 0000000..fa06b50 --- /dev/null +++ b/angular/src/app/_models/snipingResponse.ts @@ -0,0 +1,11 @@ +export interface SnipingResponse { + messages: string[]; + excludedAccountIds: number[], + errorAccountIds: number[], + snipingAccountIds: number[], + abortSniping: boolean, + boughtItems: number; + priceCheckFoundItems: number; + priceCheckFoundPrices: number[]; + priceCheckMessages: string[]; +} \ No newline at end of file diff --git a/angular/src/app/_models/user.ts b/angular/src/app/_models/user.ts new file mode 100644 index 0000000..e2c3bd7 --- /dev/null +++ b/angular/src/app/_models/user.ts @@ -0,0 +1,12 @@ +import {UserJsonld} from "@app/core/api/v1"; + +export class User { + id?: string; + email?: string; + password?: string; + firstName?: string; + lastName?: string; + roles?: string[]; + token?: string; + userResource?: UserJsonld; +} diff --git a/angular/src/app/_services/account.service.ts b/angular/src/app/_services/account.service.ts new file mode 100644 index 0000000..84defb6 --- /dev/null +++ b/angular/src/app/_services/account.service.ts @@ -0,0 +1,101 @@ +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { HttpClient } from '@angular/common/http'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { environment } from '@environments/environment'; +import { User } from '@app/_models'; + +@Injectable({ providedIn: 'root' }) +export class AccountService { + + private userSubject: BehaviorSubject; + public user: Observable; + + constructor( + private router: Router, + private http: HttpClient + ) { + this.userSubject = new BehaviorSubject(JSON.parse(localStorage.getItem('user')!)); + this.user = this.userSubject.asObservable(); + } + + public get userValue() { + return this.userSubject.value; + } + + login(email: string, password: string) { + return this.http.post(`${environment.apiUrl}/auth`, { email, password }) + .pipe(map(user => { + // store user details and jwt token in local storage to keep user logged in between page refreshes + localStorage.setItem('user', JSON.stringify(user)); + this.userSubject.next(user); + return user; + })); + } + + logout() { + // remove user from local storage and set current user to null + localStorage.removeItem('user'); + this.userSubject.next(null); + this.router.navigate(['/account/login']); + } + + isLoggedIn() { + return this.userValue !== null; + } + + isUserAdmin(): boolean { + if (this.userValue && this.userValue?.roles) { + return this.userValue?.roles?.includes('ROLE_ADMIN'); + } + return false; + } + + userHasRole(role: string): boolean { + if (this.userValue && this.userValue?.roles) { + return this.userValue?.roles?.includes(role); + } + return false; + } + + register(user: User) { + return this.http.post(`${environment.apiUrl}/users/register`, user); + } + + getAll() { + return this.http.get(`${environment.apiUrl}/users`); + } + + getById(id: string) { + return this.http.get(`${environment.apiUrl}/users/${id}`); + } + + update(id: string, params: any) { + return this.http.put(`${environment.apiUrl}/users/${id}`, params) + .pipe(map(x => { + // update stored user if the logged in user updated their own record + if (id == this.userValue?.id) { + // update local storage + const user = { ...this.userValue, ...params }; + localStorage.setItem('user', JSON.stringify(user)); + + // publish updated user to subscribers + this.userSubject.next(user); + } + return x; + })); + } + + delete(id: string) { + return this.http.delete(`${environment.apiUrl}/users/${id}`) + .pipe(map(x => { + // auto logout if the logged in user deleted their own record + if (id == this.userValue?.id) { + this.logout(); + } + return x; + })); + } +} diff --git a/angular/src/app/_services/alert.service.ts b/angular/src/app/_services/alert.service.ts new file mode 100644 index 0000000..9ecd8c4 --- /dev/null +++ b/angular/src/app/_services/alert.service.ts @@ -0,0 +1,44 @@ +import { Injectable } from '@angular/core'; +import { Observable, Subject } from 'rxjs'; +import { filter } from 'rxjs/operators'; + +import { Alert, AlertType, AlertOptions } from '@app/_models'; + +@Injectable({ providedIn: 'root' }) +export class AlertService { + private subject = new Subject(); + private defaultId = 'default-alert'; + + // enable subscribing to alerts observable + onAlert(id = this.defaultId): Observable { + return this.subject.asObservable().pipe(filter(x => x && x.id === id)); + } + + // convenience methods + success(message: string, options?: AlertOptions) { + this.alert(new Alert({ ...options, type: AlertType.Success, message })); + } + + error(message: string, options?: AlertOptions) { + this.alert(new Alert({ ...options, type: AlertType.Error, message })); + } + + info(message: string, options?: AlertOptions) { + this.alert(new Alert({ ...options, type: AlertType.Info, message })); + } + + warn(message: string, options?: AlertOptions) { + this.alert(new Alert({ ...options, type: AlertType.Warning, message })); + } + + // main alert method + alert(alert: Alert) { + alert.id = alert.id || this.defaultId; + this.subject.next(alert); + } + + // clear alerts + clear(id = this.defaultId) { + this.subject.next(new Alert({ id })); + } +} \ No newline at end of file diff --git a/angular/src/app/_services/data-import.service.ts b/angular/src/app/_services/data-import.service.ts new file mode 100644 index 0000000..76a8231 --- /dev/null +++ b/angular/src/app/_services/data-import.service.ts @@ -0,0 +1,65 @@ +import { Injectable } from '@angular/core'; +import {HttpClient, HttpHeaders} from "@angular/common/http"; +import {User} from "@app/_models"; +import {environment} from "@environments/environment"; + +@Injectable({ + providedIn: 'root' +}) +export class DataImportService { + + constructor( + private httpClient: HttpClient + ) { + + } + + futwizImport( + futwizCandidateUrl: string, + futbinCandidateUrl: string, + updateCandidate: boolean = false, + buyCandidate: boolean = false, + relevantCandidate: boolean = false, + futwizCandidateHtml: string | null, + bid: number | null, + bin: number | null, + optionalEaResourceId: number | null, + ) { + const formData = new FormData(); + formData.append('futwizCandidateUrl', futwizCandidateUrl); + formData.append('futbinCandidateUrl', futbinCandidateUrl); + formData.append('updateCandidate', updateCandidate ? '1' : '0'); + formData.append('buyCandidate', buyCandidate ? '1' : '0'); + formData.append('relevantCandidate', relevantCandidate ? '1' : '0'); + if (futwizCandidateHtml !== null && futwizCandidateHtml !== "") { + formData.append('futwizCandidateHtml', futwizCandidateHtml); + } + if (bid !== null) { + formData.append('bid', bid.toString()); + } + if (bin !== null) { + formData.append('bin', bin.toString()); + } + if (optionalEaResourceId !== null) { + formData.append('optionalEaResourceId', optionalEaResourceId.toString()); + } + + return this.httpClient.post( + `${environment.apiUrl}/data-import/import-futwiz-player`, + formData + ); + } + + eaDataImport() { + return this.httpClient.get( + `${environment.apiUrl}/data-import/import-ea-data` + ); + } + + futwizRaritiesImport() { + return this.httpClient.get( + `${environment.apiUrl}/data-import/import-futwiz-rarities` + ); + } + +} diff --git a/angular/src/app/_services/ea-data-connect.service.ts b/angular/src/app/_services/ea-data-connect.service.ts new file mode 100644 index 0000000..e21d1ba --- /dev/null +++ b/angular/src/app/_services/ea-data-connect.service.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@angular/core'; +import {HttpClient, HttpHeaders} from "@angular/common/http"; +import {User} from "@app/_models"; +import {environment} from "@environments/environment"; + +@Injectable({ + providedIn: 'root' +}) +export class EaDataConnectService { + + constructor( + private httpClient: HttpClient + ) { + + } + + connectAccount(accountId: string) { + const formData = new FormData(); + formData.append('accountId', accountId.toString()); + return this.httpClient.post( + `${environment.apiUrl}/ea-data-connect/connect-account`, + formData + ); + } + + deleteCachefile(accountId: string) { + const formData = new FormData(); + formData.append('accountId', accountId.toString()); + return this.httpClient.post( + `${environment.apiUrl}/ea-data-connect/delete-cache-file`, + formData + ); + } + +} diff --git a/angular/src/app/_services/index.ts b/angular/src/app/_services/index.ts new file mode 100644 index 0000000..a2b99f0 --- /dev/null +++ b/angular/src/app/_services/index.ts @@ -0,0 +1,2 @@ +export * from './account.service'; +export * from './alert.service'; diff --git a/angular/src/app/_services/loading.service.ts b/angular/src/app/_services/loading.service.ts new file mode 100644 index 0000000..61517ea --- /dev/null +++ b/angular/src/app/_services/loading.service.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject, Observable } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class LoadingService { + private loadingSubject: BehaviorSubject = new BehaviorSubject(false); + public loading: Observable = this.loadingSubject.asObservable(); + + constructor() { } + + setLoading(loading: boolean): void { + this.loadingSubject.next(loading); + } + + getLoading(): Observable { + return this.loading; + } +} \ No newline at end of file diff --git a/angular/src/app/_services/log.service.ts b/angular/src/app/_services/log.service.ts new file mode 100644 index 0000000..6dc254f --- /dev/null +++ b/angular/src/app/_services/log.service.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@angular/core'; +import {HttpClient, HttpHeaders} from "@angular/common/http"; +import {User} from "@app/_models"; +import {environment} from "@environments/environment"; + +@Injectable({ + providedIn: 'root' +}) +export class LogService { + + constructor( + private httpClient: HttpClient + ) { + + } + + getLogs(lines: number) { + return this.httpClient.get( + `${environment.apiUrl}/logs/logs/${lines}`, + ); + } + +} diff --git a/angular/src/app/_services/sniping.service.ts b/angular/src/app/_services/sniping.service.ts new file mode 100644 index 0000000..462d447 --- /dev/null +++ b/angular/src/app/_services/sniping.service.ts @@ -0,0 +1,100 @@ +import { Injectable } from '@angular/core'; +import {HttpClient, HttpHeaders} from "@angular/common/http"; +import {User} from "@app/_models"; +import {environment} from "@environments/environment"; + +@Injectable({ + providedIn: 'root' +}) +export class SnipingService { + + constructor( + private httpClient: HttpClient + ) { + + } + + snipingPrepare( + accountIdsJson: number[] + ) { + const formData = new FormData(); + formData.append('accountIdsJson', JSON.stringify(accountIdsJson)); + return this.httpClient.post( + `${environment.apiUrl}/sniping/prepare`, + formData + ); + } + + snipingExecute( + eaResourceId: number, + snipeTimeMin: number, + snipeTimeMax: number, + buyItemsMax: number, + buyBin: number, + sellBin: number, + accountIdsJson: number[], + round: number, + gapTimeMin: number, + gapTimeMax: number, + putOnTpOnly: boolean, + priceCheckBin: number | undefined, + doPriceCheck: boolean, + ) { + const formData = new FormData(); + formData.append('eaResourceId', eaResourceId.toString()); + formData.append('snipeTimeMin', snipeTimeMin.toString()); + formData.append('snipeTimeMax', snipeTimeMax.toString()); + formData.append('buyItemsMax', buyItemsMax.toString()); + formData.append('buyBin', buyBin.toString()); + formData.append('sellBin', sellBin.toString()); + formData.append('accountIdsJson', JSON.stringify(accountIdsJson)); + formData.append('round', round.toString()); + formData.append('gapTimeMin', gapTimeMin.toString()); + formData.append('gapTimeMax', gapTimeMax.toString()); + formData.append('putOnTpOnly', putOnTpOnly ? "1" : "0"); + if (priceCheckBin) { + formData.append('priceCheckBin', priceCheckBin.toString()); + } + formData.append('doPriceCheck', doPriceCheck ? "1" : "0"); + return this.httpClient.post( + `${environment.apiUrl}/sniping/execute`, + formData + ); + + } + + snipingStop( + accountIdsJson: number[] + ) { + const formData = new FormData(); + formData.append('accountIdsJson', JSON.stringify(accountIdsJson)); + return this.httpClient.post( + `${environment.apiUrl}/sniping/stop`, + formData + ); + } + + checkPrice( + accountId: number, + eaResourceId: number, + priceCheckBin: number, + ) { + const formData = new FormData(); + formData.append('accountId', accountId.toString()); + formData.append('eaResourceId', eaResourceId.toString()); + formData.append('priceCheckBin', priceCheckBin.toString()); + return this.httpClient.post( + `${environment.apiUrl}/sniping/check-bin-price`, + formData + ); + } + + updateAccountSnipingCounts() { + const formData = new FormData(); + return this.httpClient.post( + `${environment.apiUrl}/sniping/update-account-sniping-counts`, + formData + ); + } + +} diff --git a/angular/src/app/_validators/minMaxValidator.ts b/angular/src/app/_validators/minMaxValidator.ts new file mode 100644 index 0000000..71930c9 --- /dev/null +++ b/angular/src/app/_validators/minMaxValidator.ts @@ -0,0 +1,16 @@ +import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; + +export function minMaxValidator(minKey: string, maxKey: string, errorKey: string): ValidatorFn { + return (formGroup: AbstractControl): ValidationErrors | null => { + const minControl = formGroup.get(minKey); + const maxControl = formGroup.get(maxKey); + if (minControl && maxControl && minControl.value > maxControl.value) { + return { + [errorKey]: { + message: `${minKey} (${minControl.value}) must be less than or equal to ${maxKey} (${maxControl.value})` + } + }; + } + return null; + }; +} \ No newline at end of file diff --git a/angular/src/app/_views/account/account-routing.module.ts b/angular/src/app/_views/account/account-routing.module.ts new file mode 100644 index 0000000..05b795b --- /dev/null +++ b/angular/src/app/_views/account/account-routing.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { LayoutComponent } from './layout.component'; +import { LoginComponent } from './login.component'; +import { RegisterComponent } from './register.component'; + +const routes: Routes = [ + { + path: '', component: LayoutComponent, + children: [ + { path: 'login', component: LoginComponent }, + { path: 'register', component: RegisterComponent } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class AccountRoutingModule { } \ No newline at end of file diff --git a/angular/src/app/_views/account/account.module.ts b/angular/src/app/_views/account/account.module.ts new file mode 100644 index 0000000..1276469 --- /dev/null +++ b/angular/src/app/_views/account/account.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; + +import { AccountRoutingModule } from './account-routing.module'; +import { LayoutComponent } from './layout.component'; +import { LoginComponent } from './login.component'; +import { RegisterComponent } from './register.component'; + +@NgModule({ + imports: [ + CommonModule, + ReactiveFormsModule, + AccountRoutingModule + ], + declarations: [ + LayoutComponent, + LoginComponent, + RegisterComponent + ] +}) +export class AccountModule { } \ No newline at end of file diff --git a/angular/src/app/_views/account/layout.component.html b/angular/src/app/_views/account/layout.component.html new file mode 100644 index 0000000..7e3b7ce --- /dev/null +++ b/angular/src/app/_views/account/layout.component.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/angular/src/app/_views/account/layout.component.ts b/angular/src/app/_views/account/layout.component.ts new file mode 100644 index 0000000..f94aaf8 --- /dev/null +++ b/angular/src/app/_views/account/layout.component.ts @@ -0,0 +1,17 @@ +import { Component } from '@angular/core'; +import { Router } from '@angular/router'; + +import { AccountService } from '@app/_services'; + +@Component({ templateUrl: 'layout.component.html' }) +export class LayoutComponent { + constructor( + private router: Router, + private accountService: AccountService + ) { + // redirect to home if already logged in + if (this.accountService.userValue) { + this.router.navigate(['/']); + } + } +} \ No newline at end of file diff --git a/angular/src/app/_views/account/login.component.html b/angular/src/app/_views/account/login.component.html new file mode 100644 index 0000000..fb13da6 --- /dev/null +++ b/angular/src/app/_views/account/login.component.html @@ -0,0 +1,28 @@ + diff --git a/angular/src/app/_views/account/login.component.ts b/angular/src/app/_views/account/login.component.ts new file mode 100644 index 0000000..8f5a526 --- /dev/null +++ b/angular/src/app/_views/account/login.component.ts @@ -0,0 +1,58 @@ +import { Component, OnInit } from '@angular/core'; +import { Router, ActivatedRoute } from '@angular/router'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { first } from 'rxjs/operators'; + +import { AccountService, AlertService } from '@app/_services'; + +@Component({ templateUrl: 'login.component.html' }) +export class LoginComponent implements OnInit { + form!: FormGroup; + loading = false; + submitted = false; + + constructor( + private formBuilder: FormBuilder, + private route: ActivatedRoute, + private router: Router, + private accountService: AccountService, + private alertService: AlertService + ) { } + + ngOnInit() { + this.form = this.formBuilder.group({ + username: ['', Validators.required], + password: ['', Validators.required] + }); + } + + // convenience getter for easy access to form fields + get f() { return this.form.controls; } + + onSubmit() { + this.submitted = true; + + // reset alerts on submit + this.alertService.clear(); + + // stop here if form is invalid + if (this.form.invalid) { + return; + } + + this.loading = true; + this.accountService.login(this.f['username'].value, this.f['password'].value) + .pipe(first()) + .subscribe({ + next: () => { + // get return url from query parameters or default to home page + const returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/'; + this.router.navigateByUrl(returnUrl); + }, + error: error => { + this.alertService.error(error); + this.loading = false; + } + }); + } +} diff --git a/angular/src/app/_views/account/register.component.html b/angular/src/app/_views/account/register.component.html new file mode 100644 index 0000000..3c31d7b --- /dev/null +++ b/angular/src/app/_views/account/register.component.html @@ -0,0 +1,43 @@ +
+

Register

+
+
+
+ + +
+
First Name is required
+
+
+
+ + +
+
Last Name is required
+
+
+
+ + +
+
Username is required
+
+
+
+ + +
+
Password is required
+
Password must be at least 6 characters
+
+
+
+ + Cancel +
+
+
+
diff --git a/angular/src/app/_views/account/register.component.ts b/angular/src/app/_views/account/register.component.ts new file mode 100644 index 0000000..1b24209 --- /dev/null +++ b/angular/src/app/_views/account/register.component.ts @@ -0,0 +1,59 @@ +import { Component, OnInit } from '@angular/core'; +import { Router, ActivatedRoute } from '@angular/router'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { first } from 'rxjs/operators'; + +import { AccountService, AlertService } from '@app/_services'; + +@Component({ templateUrl: 'register.component.html' }) +export class RegisterComponent implements OnInit { + form!: FormGroup; + loading = false; + submitted = false; + + constructor( + private formBuilder: FormBuilder, + private route: ActivatedRoute, + private router: Router, + private accountService: AccountService, + private alertService: AlertService + ) { } + + ngOnInit() { + this.form = this.formBuilder.group({ + firstName: ['', Validators.required], + lastName: ['', Validators.required], + username: ['', Validators.required], + password: ['', [Validators.required, Validators.minLength(6)]] + }); + } + + // convenience getter for easy access to form fields + get f() { return this.form.controls; } + + onSubmit() { + this.submitted = true; + + // reset alerts on submit + this.alertService.clear(); + + // stop here if form is invalid + if (this.form.invalid) { + return; + } + + this.loading = true; + this.accountService.register(this.form.value) + .pipe(first()) + .subscribe({ + next: () => { + this.alertService.success('Registration successful', { keepAfterRouteChange: true }); + this.router.navigate(['../login'], { relativeTo: this.route }); + }, + error: error => { + this.alertService.error(error); + this.loading = false; + } + }); + } +} \ No newline at end of file diff --git a/angular/src/app/_views/dashboard/dashboard.component.html b/angular/src/app/_views/dashboard/dashboard.component.html new file mode 100644 index 0000000..3400001 --- /dev/null +++ b/angular/src/app/_views/dashboard/dashboard.component.html @@ -0,0 +1,13 @@ +
+
+

{{ 'dashboard.view' | translate }}

+
+ + + OVERVIEW + + + OVERVIEW 2 + + +
diff --git a/angular/src/app/_views/dashboard/dashboard.component.scss b/angular/src/app/_views/dashboard/dashboard.component.scss new file mode 100644 index 0000000..10a0256 --- /dev/null +++ b/angular/src/app/_views/dashboard/dashboard.component.scss @@ -0,0 +1,5 @@ +pre { + white-space: pre-wrap; /* Erlaubt Zeilenumbrüche */ + word-wrap: break-word; /* Bricht lange Wörter um */ + overflow-wrap: break-word; /* Sicherstellt, dass Wörter, die zu lang sind, auch umgebrochen werden */ +} \ No newline at end of file diff --git a/angular/src/app/_views/dashboard/dashboard.component.spec.ts b/angular/src/app/_views/dashboard/dashboard.component.spec.ts new file mode 100644 index 0000000..0571781 --- /dev/null +++ b/angular/src/app/_views/dashboard/dashboard.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DashboardComponent } from './dashboard.component'; + +describe('DashboardComponent', () => { + let component: DashboardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [DashboardComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DashboardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/dashboard/dashboard.component.ts b/angular/src/app/_views/dashboard/dashboard.component.ts new file mode 100644 index 0000000..56120f4 --- /dev/null +++ b/angular/src/app/_views/dashboard/dashboard.component.ts @@ -0,0 +1,30 @@ +import {AfterViewInit, Component, OnInit, ViewChild} from '@angular/core'; +import {SystemStatService, SystemStatJsonld} from "@app/core/api/v1"; +import {LogService} from "@app/_services/log.service"; +import {FormControl} from "@angular/forms"; + +@Component({ + selector: 'app-dashboard', + templateUrl: './dashboard.component.html', + styleUrl: './dashboard.component.scss' +}) +export class DashboardComponent implements OnInit, AfterViewInit { + + + protected logs: string[] = []; + protected error: string | null = null; + protected linesControl = new FormControl(100); + + constructor( + ) { + + } + + ngOnInit() { + } + + ngAfterViewInit(): void { + + } + +} diff --git a/angular/src/app/_views/home/home.component.html b/angular/src/app/_views/home/home.component.html new file mode 100644 index 0000000..1fc40ed --- /dev/null +++ b/angular/src/app/_views/home/home.component.html @@ -0,0 +1,78 @@ + diff --git a/angular/src/app/_views/home/home.component.scss b/angular/src/app/_views/home/home.component.scss new file mode 100644 index 0000000..f9cb343 --- /dev/null +++ b/angular/src/app/_views/home/home.component.scss @@ -0,0 +1,92 @@ +.home-container { + max-width: 1100px; + margin-left: auto; + margin-right: auto; +} +.spt-home-cards { + .card { + width: 100%; + text-decoration: none; + border-top: 3px solid #c1c1c1; + } + .card-body { + min-height: 200px; + text-transform: uppercase; + text-align: right; + &:after { + content: ">"; + position: absolute; + right: 0; + bottom: 0; + background: rgba(229,38,30,1); + width: 40px; + height: 40px; + color: #fff; + font-family: Helvetica; + font-size: 20px; + line-height: 40px; + text-align: center; + } + &:before { + content: ""; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%,-50%); + width: 95px; + height: 95px; + border: 2px solid #2b3b44; + border-radius: 50%; + } + &[data-cat="customer"]:before { + background: transparent url("/assets/images/icons/customer.svg") no-repeat center center; + background-size: 50% auto; + } + &[data-cat="supplier"]:before { + background: transparent url("/assets/images/icons/supplier.svg") no-repeat center center; + background-size: 50% auto; + } + &[data-cat="service"]:before { + background: transparent url("/assets/images/icons/service.svg") no-repeat center center; + background-size: 50% auto; + } + &[data-cat="product"]:before { + background: transparent url("/assets/images/icons/product.svg") no-repeat center center; + background-size: 50% auto; + } + &[data-cat="task"]:before { + background: transparent url("/assets/images/icons/task.svg") no-repeat center center; + background-size: 50% auto; + } + &[data-cat="document"]:before { + background: transparent url("/assets/images/icons/document.svg") no-repeat center center; + background-size: 50% auto; + } + &[data-cat="sale"]:before { + background: transparent url("/assets/images/icons/sale.svg") no-repeat center center; + background-size: 50% auto; + } + &[data-cat="profile"]:before { + background: transparent url("/assets/images/icons/profile.svg") no-repeat center center; + background-size: 50% auto; + } + &[data-cat="user"]:before { + background: transparent url("/assets/images/icons/user.svg") no-repeat center center; + background-size: 50% auto; + } + + //&.bi { + // &:before { + // position: absolute; + // left: 50%; + // top: 50%; + // transform: translate(-50%,-50%); + // font-size: 50px; + // } + //} + h3 { + left: 30px; + bottom: 10px; + } + } +} \ No newline at end of file diff --git a/angular/src/app/_views/home/home.component.ts b/angular/src/app/_views/home/home.component.ts new file mode 100644 index 0000000..f42e9ab --- /dev/null +++ b/angular/src/app/_views/home/home.component.ts @@ -0,0 +1,27 @@ +import {AfterViewInit, Component, OnInit} from '@angular/core'; + +import {User} from '@app/_models'; +import {AccountService} from '@app/_services'; +import {AppHelperService} from "@app/_helpers/app-helper.service"; + +@Component({ + templateUrl: 'home.component.html', + styleUrl: 'home.component.scss' +}) +export class HomeComponent implements OnInit, AfterViewInit { + + protected user: User | null; + + constructor( + private accountService: AccountService, + protected appHelperService: AppHelperService + ) { + this.user = this.accountService.userValue; + } + + ngOnInit(): void { + } + + ngAfterViewInit() { + } +} diff --git a/angular/src/app/_views/home/index.ts b/angular/src/app/_views/home/index.ts new file mode 100644 index 0000000..1c212fb --- /dev/null +++ b/angular/src/app/_views/home/index.ts @@ -0,0 +1 @@ +export * from './home.component'; \ No newline at end of file diff --git a/angular/src/app/_views/profile/profile.component.html b/angular/src/app/_views/profile/profile.component.html new file mode 100644 index 0000000..3846160 --- /dev/null +++ b/angular/src/app/_views/profile/profile.component.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/angular/src/app/_views/profile/profile.component.scss b/angular/src/app/_views/profile/profile.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/profile/profile.component.spec.ts b/angular/src/app/_views/profile/profile.component.spec.ts new file mode 100644 index 0000000..7d6e545 --- /dev/null +++ b/angular/src/app/_views/profile/profile.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ProfileComponent } from './profile.component'; + +describe('ProfileComponent', () => { + let component: ProfileComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ProfileComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ProfileComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/profile/profile.component.ts b/angular/src/app/_views/profile/profile.component.ts new file mode 100644 index 0000000..6a7d254 --- /dev/null +++ b/angular/src/app/_views/profile/profile.component.ts @@ -0,0 +1,43 @@ +import {AfterViewInit, Component, OnInit, ViewChild} from '@angular/core'; +import {AccountService} from "@app/_services"; +import {UserJsonld, UserService} from "@app/core/api/v1"; +import {UserDetailComponent} from "@app/_views/user/user-detail/user-detail.component"; +import {AppHelperService} from "@app/_helpers/app-helper.service"; + +@Component({ + selector: 'app-profile', + templateUrl: './profile.component.html', + styleUrl: './profile.component.scss' +}) +export class ProfileComponent implements OnInit, AfterViewInit { + + @ViewChild("userDetailComponent", {static: false}) userDetailComponent!: UserDetailComponent; + + protected user!: UserJsonld; + + constructor( + private accountService: AccountService, + private userService: UserService, + private appHelperService: AppHelperService + ) { + const user = this.accountService.userValue; + if (user?.id !== null && user?.id !== undefined) { + this.userService.usersIdGet( + this.appHelperService.extractId(user.id) + ).subscribe( + data => { + this.user = data; + } + ); + } + } + + ngOnInit() { + + } + + ngAfterViewInit(): void { + } + + +} diff --git a/angular/src/app/_views/user/user-detail/user-detail.component.html b/angular/src/app/_views/user/user-detail/user-detail.component.html new file mode 100644 index 0000000..4ea9e7b --- /dev/null +++ b/angular/src/app/_views/user/user-detail/user-detail.component.html @@ -0,0 +1,18 @@ +
+
+
+
+

{{ user.firstName }} {{ user.lastName }}

+
+
{{ ('user.email' | translate) }}
+
{{ user.email }}
+
+
+
+ + + +
+
+
+
diff --git a/angular/src/app/_views/user/user-detail/user-detail.component.scss b/angular/src/app/_views/user/user-detail/user-detail.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/user/user-detail/user-detail.component.spec.ts b/angular/src/app/_views/user/user-detail/user-detail.component.spec.ts new file mode 100644 index 0000000..80a4877 --- /dev/null +++ b/angular/src/app/_views/user/user-detail/user-detail.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UserDetailComponent } from './user-detail.component'; + +describe('UserDetailComponent', () => { + let component: UserDetailComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [UserDetailComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(UserDetailComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/user/user-detail/user-detail.component.ts b/angular/src/app/_views/user/user-detail/user-detail.component.ts new file mode 100644 index 0000000..11e7569 --- /dev/null +++ b/angular/src/app/_views/user/user-detail/user-detail.component.ts @@ -0,0 +1,57 @@ +import {AfterViewInit, Component, Input, OnInit, ViewChild} from '@angular/core'; +import {UserJsonld, UserService} from "@app/core/api/v1"; +import {AccountService} from "@app/_services"; +import {AppHelperService} from "@app/_helpers/app-helper.service"; +import {ActivatedRoute} from "@angular/router"; + +@Component({ + selector: 'app-user-detail', + templateUrl: './user-detail.component.html', + styleUrl: './user-detail.component.scss' +}) +export class UserDetailComponent implements OnInit, AfterViewInit { + @Input() public user!: UserJsonld; + + protected isCurrentUser: boolean; + + constructor( + private accountService: AccountService, + private userService: UserService, + protected appHelperService: AppHelperService, + private route: ActivatedRoute, + ) { + this.isCurrentUser = false; + } + + ngOnInit() { + if (this.user === undefined) { + this.route.params.subscribe(params => { + this.getUserData(params['id']); + }); + } else { + this.setIsCurrentUser(); + } + } + + ngAfterViewInit(): void { + + } + + getUserData(userId: string) { + this.userService.usersIdGet( + userId + ).subscribe( + data => { + this.user = data; + this.setIsCurrentUser(); + } + ); + } + + setIsCurrentUser() { + if (this.accountService.userValue?.userResource) { + let user = this.accountService.userValue?.userResource; + this.isCurrentUser = this.appHelperService.extractId(this.user.id) == user?.id; + } + } +} diff --git a/angular/src/app/_views/user/user-list/user-list.component.html b/angular/src/app/_views/user/user-list/user-list.component.html new file mode 100644 index 0000000..835ee42 --- /dev/null +++ b/angular/src/app/_views/user/user-list/user-list.component.html @@ -0,0 +1,9 @@ +
+ +
diff --git a/angular/src/app/_views/user/user-list/user-list.component.scss b/angular/src/app/_views/user/user-list/user-list.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/user/user-list/user-list.component.spec.ts b/angular/src/app/_views/user/user-list/user-list.component.spec.ts new file mode 100644 index 0000000..c2d437e --- /dev/null +++ b/angular/src/app/_views/user/user-list/user-list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UserListComponent } from './user-list.component'; + +describe('UserListComponent', () => { + let component: UserListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [UserListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(UserListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/user/user-list/user-list.component.ts b/angular/src/app/_views/user/user-list/user-list.component.ts new file mode 100644 index 0000000..64433ba --- /dev/null +++ b/angular/src/app/_views/user/user-list/user-list.component.ts @@ -0,0 +1,98 @@ +import {AfterViewInit, Component, OnInit, ViewChild} from '@angular/core'; +import {Sort} from "@angular/material/sort"; +import {UserJsonld, UserService} from "@app/core/api/v1"; +import {OrderFilter} from "@app/_models/orderFilter"; +import {Router} from "@angular/router"; +import {AppHelperService} from "@app/_helpers/app-helper.service"; +import {ListComponent} from "@app/_components/list/list.component"; +import {ListColDefinition} from "@app/_components/list/list-col-definition"; +import {ListGetDataFunctionType} from "@app/_components/list/list-get-data-function-type"; + +@Component({ + selector: 'app-user-list', + templateUrl: './user-list.component.html', + styleUrl: './user-list.component.scss' +}) +export class UserListComponent implements OnInit, AfterViewInit { + + @ViewChild("listComponent", {static: false}) listComponent!: ListComponent; + + protected firstNameOrderFilter: OrderFilter; + protected lastNameOrderFilter: OrderFilter; + protected listColDefinitions!: ListColDefinition[]; + + constructor( + private userService: UserService, + private router: Router, + protected appHelperService: AppHelperService, + ) { + this.firstNameOrderFilter = OrderFilter.Undefined; + this.lastNameOrderFilter = OrderFilter.Asc; + + this.listColDefinitions = [ + { + name: 'image', + text: 'overview.image', + type: ListComponent.COLUMN_TYPE_IMAGE, + field: 'imageUrl', + } as ListColDefinition, + { + name: 'firstName', + text: 'overview.firstName', + type: ListComponent.COLUMN_TYPE_TEXT, + field: 'firstName', + sortable: true, + } as ListColDefinition, + { + name: 'lastName', + text: 'overview.lastName', + type: ListComponent.COLUMN_TYPE_TEXT, + field: 'lastName', + sortable: true, + } as ListColDefinition, + { + name: 'email', + text: 'overview.email', + type: ListComponent.COLUMN_TYPE_EMAIL, + field: 'email', + } as ListColDefinition, + ]; + } + + ngOnInit() { + + } + + ngAfterViewInit() { + this.listComponent.getData(); + } + + getData: ListGetDataFunctionType = (index: number, pageSize: number, term?: string) => { + return this.userService.usersGetCollection( + index, + pageSize, + undefined, + undefined, + term, + this.listComponent.getSortingJsonString() + ); + } + + onSortChange = (sortState: Sort) => { + this.firstNameOrderFilter = OrderFilter.Undefined; + this.lastNameOrderFilter = OrderFilter.Undefined; + switch (sortState.active) { + case "firstName": + this.firstNameOrderFilter = sortState.direction as OrderFilter; + break; + case "lastName": + this.lastNameOrderFilter = sortState.direction as OrderFilter; + break; + } + } + + navigateToUserDetails = (element: any) => { + const user: UserJsonld = element as UserJsonld; + this.router.navigate(['/user', this.appHelperService.extractId(user.id)]); + } +} diff --git a/angular/src/app/_views/user/users.component.html b/angular/src/app/_views/user/users.component.html new file mode 100644 index 0000000..36eebb5 --- /dev/null +++ b/angular/src/app/_views/user/users.component.html @@ -0,0 +1,6 @@ +
+
+

{{ 'basic.users' | translate }}

+
+ +
diff --git a/angular/src/app/_views/user/users.component.scss b/angular/src/app/_views/user/users.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/app/_views/user/users.component.spec.ts b/angular/src/app/_views/user/users.component.spec.ts new file mode 100644 index 0000000..fd55374 --- /dev/null +++ b/angular/src/app/_views/user/users.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UsersComponent } from './users.component'; + +describe('UserComponent', () => { + let component: UsersComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [UsersComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(UsersComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/_views/user/users.component.ts b/angular/src/app/_views/user/users.component.ts new file mode 100644 index 0000000..5bd470f --- /dev/null +++ b/angular/src/app/_views/user/users.component.ts @@ -0,0 +1,43 @@ +import {AfterViewInit, Component, Input, OnInit} from '@angular/core'; +import {UserJsonld, UserService} from "@app/core/api/v1"; +import {AccountService} from "@app/_services"; +import {AppHelperService} from "@app/_helpers/app-helper.service"; + +@Component({ + selector: 'app-users', + templateUrl: './users.component.html', + styleUrl: './users.component.scss' +}) +export class UsersComponent implements OnInit, AfterViewInit { + + @Input() public user!: UserJsonld; + + constructor( + private accountService: AccountService, + private userService: UserService, + protected appHelperService: AppHelperService + ) { + } + + ngOnInit() { + + } + + ngAfterViewInit(): void { + this.getData(); + } + + getData() { + const user = this.accountService.userValue; + if (user?.id !== null && user?.id !== undefined) { + this.userService.usersIdGet( + this.appHelperService.extractId(user.id) + ).subscribe( + data => { + this.user = data; + } + ); + } + } + +} diff --git a/angular/src/app/app-routing.module.ts b/angular/src/app/app-routing.module.ts new file mode 100644 index 0000000..7b906b4 --- /dev/null +++ b/angular/src/app/app-routing.module.ts @@ -0,0 +1,60 @@ +import {NgModule} from '@angular/core'; +import {Routes, RouterModule} from '@angular/router'; +import {ProfileComponent} from "@app/_views/profile/profile.component"; +import {UserDetailComponent} from "@app/_views/user/user-detail/user-detail.component"; +import {userGuard} from "@app/_guards/user.guard"; +import {adminGuard} from "@app/_guards/admin.guard"; +import {UsersComponent} from "@app/_views/user/users.component"; +import {TwoColumnComponent} from "@app/_components/layout/two-column/two-column.component"; +import {DashboardComponent} from "@app/_views/dashboard/dashboard.component"; + +const accountModule = () => import('@app/_views/account/account.module').then(x => x.AccountModule); + +export const ROUTE_DASHBOARD = 'dashboard'; +export const ROUTE_PROFILE = 'profile'; +export const ROUTE_USERS = 'users'; + +const routes: Routes = [ + { + path: 'account', + loadChildren: + accountModule + }, + { + path: ROUTE_DASHBOARD, + component: TwoColumnComponent, + canActivate: [userGuard], + children: [ + {path: '', component: DashboardComponent}, + ] + }, + { + path: ROUTE_PROFILE, + component: TwoColumnComponent, + canActivate: [userGuard], + children: [ + {path: '', component: ProfileComponent}, + ] + }, + { + path: ROUTE_USERS, + component: TwoColumnComponent, + canActivate: [userGuard, adminGuard], + children: [ + {path: '', component: UsersComponent}, + {path: ':id', component: UserDetailComponent}, + ] + }, + // otherwise redirect to home + { + path: '**', + redirectTo: ROUTE_DASHBOARD + } +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes, {scrollPositionRestoration: 'enabled'})], + exports: [RouterModule] +}) +export class AppRoutingModule { +} diff --git a/angular/src/app/app.component.html b/angular/src/app/app.component.html new file mode 100644 index 0000000..c14c871 --- /dev/null +++ b/angular/src/app/app.component.html @@ -0,0 +1,38 @@ + + + + +
+ + +
+
+ +
\ No newline at end of file diff --git a/angular/src/app/app.component.scss b/angular/src/app/app.component.scss new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/angular/src/app/app.component.scss @@ -0,0 +1 @@ + diff --git a/angular/src/app/app.component.ts b/angular/src/app/app.component.ts new file mode 100644 index 0000000..6729ef5 --- /dev/null +++ b/angular/src/app/app.component.ts @@ -0,0 +1,105 @@ +import {ChangeDetectorRef, Component, Inject, OnInit, Renderer2} from '@angular/core'; +import {AccountService} from './_services'; +import {User} from './_models'; +import {TranslateService} from "@ngx-translate/core"; +import {environment} from "@environments/environment"; +import {Subscription} from "rxjs"; +import {LoadingService} from "@app/_services/loading.service"; +import {DOCUMENT} from "@angular/common"; + +@Component({ + selector: 'app-root', + templateUrl: 'app.component.html', + styleUrl: 'app.component.scss' +}) +export class AppComponent implements OnInit { + protected readonly environment = environment; + protected user?: User | null; + protected loadingSub: Subscription; + protected loading: boolean = false; + protected isLeftHanded = false; + protected isDarkMode = false; + + constructor( + private accountService: AccountService, + private translate: TranslateService, + private loadingService: LoadingService, + private cdr: ChangeDetectorRef, + private renderer: Renderer2, + @Inject(DOCUMENT) private document: Document + ) { + translate.setDefaultLang('en'); + translate.use('en'); + this.accountService.user.subscribe(x => this.user = x); + this.loadingSub = new Subscription(); + this.isLeftHanded = localStorage.getItem('isLeftHanded') === 'true'; + this.isDarkMode = localStorage.getItem('isDarkMode') === 'true'; + this.updateLeftHandedState(); + this.updateDarkModeState(); + } + + ngOnInit(): void { + this.loadingSub = this.loadingService.getLoading().subscribe( + loading => { + this.loading = loading; + // To avoid Error: NG0100 + this.cdr.detectChanges(); + } + ); + } + + logout() { + this.accountService.logout(); + } + + // TODO: Hilfsfunktion - entfernen + copyTokenToClipboard() { + const el = document.createElement('textarea'); + el.value = this.user?.token !== undefined ? this.user.token : ""; + document.body.appendChild(el); + el.select(); + document.execCommand('copy'); + document.body.removeChild(el); + } + + // For our left handed friends + leftHanded() { + this.isLeftHanded = !this.isLeftHanded; + this.updateLeftHandedState(); + } + + private updateLeftHandedState() { + if (this.isLeftHanded) { + this.renderer.addClass(this.document.body, 'left-handed'); + } else { + this.renderer.removeClass(this.document.body, 'left-handed'); + } + + // Save the state to localStorage + localStorage.setItem('isLeftHanded', this.isLeftHanded.toString()); + } + + darkMode() { + this.isDarkMode = !this.isDarkMode; + this.updateDarkModeState(); + } + + private updateDarkModeState() { + if (this.isDarkMode) { + this.renderer.addClass(this.document.body, 'dark-mode'); + } else { + this.renderer.removeClass(this.document.body, 'dark-mode'); + } + + // Save the state to localStorage + localStorage.setItem('isDarkMode', this.isDarkMode.toString()); + } + + get buttonClassLefties(): string { + return this.isLeftHanded ? 'btn-primary' : 'btn-secondary'; + } + + get buttonClassDarkMode(): string { + return this.isDarkMode ? 'btn-primary' : 'btn-secondary'; + } +} diff --git a/angular/src/app/app.config.server.ts b/angular/src/app/app.config.server.ts new file mode 100644 index 0000000..85967a6 --- /dev/null +++ b/angular/src/app/app.config.server.ts @@ -0,0 +1,10 @@ +import {mergeApplicationConfig, ApplicationConfig} from '@angular/core'; +import {appConfig} from './app.config'; + +const serverConfig: ApplicationConfig = { + providers: [ + // provideServerRendering() + ] +}; + +export const config = mergeApplicationConfig(appConfig, serverConfig); diff --git a/angular/src/app/app.config.ts b/angular/src/app/app.config.ts new file mode 100644 index 0000000..ae86af5 --- /dev/null +++ b/angular/src/app/app.config.ts @@ -0,0 +1,10 @@ +import {ApplicationConfig} from '@angular/core'; +import {provideRouter} from '@angular/router'; + +import {routes} from './app.routes'; +import {provideClientHydration} from '@angular/platform-browser'; +import {provideAnimations} from '@angular/platform-browser/animations'; + +export const appConfig: ApplicationConfig = { + providers: [provideRouter(routes), provideClientHydration(), provideAnimations()] +}; diff --git a/angular/src/app/app.module.server.ts b/angular/src/app/app.module.server.ts new file mode 100644 index 0000000..795380c --- /dev/null +++ b/angular/src/app/app.module.server.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { ServerModule } from '@angular/platform-server'; + +import { AppModule } from './app.module'; +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + AppModule, + ServerModule, + ], + bootstrap: [AppComponent], +}) +export class AppServerModule {} diff --git a/angular/src/app/app.module.ts b/angular/src/app/app.module.ts new file mode 100644 index 0000000..12a234f --- /dev/null +++ b/angular/src/app/app.module.ts @@ -0,0 +1,118 @@ +import {LOCALE_ID, NgModule} from '@angular/core'; +import {BrowserModule} from '@angular/platform-browser'; +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {HttpClientModule, HTTP_INTERCEPTORS, HttpClient} from '@angular/common/http'; + +import {AppRoutingModule} from './app-routing.module'; +import {JwtInterceptor, ErrorInterceptor} from './_helpers'; +import {AppComponent} from './app.component'; +import {AlertComponent} from './_components'; +import {HomeComponent} from './_views/home'; +import {NgbModule} from "@ng-bootstrap/ng-bootstrap"; + +import {environment} from "@environments/environment"; +import {MatCardModule} from "@angular/material/card"; +import {TranslateLoader, TranslateModule} from "@ngx-translate/core"; +import {TranslateHttpLoader} from "@ngx-translate/http-loader"; +import {NgOptimizedImage, registerLocaleData} from "@angular/common"; +import {BrowserAnimationsModule} from "@angular/platform-browser/animations"; +import {TwoColumnComponent} from "./_components/layout/two-column/two-column.component"; +import {PropertyInterceptor} from "@app/_helpers/property.interceptor"; +import {MatPaginatorModule} from "@angular/material/paginator"; +import {MatSortModule} from "@angular/material/sort"; +import {MatTableModule} from "@angular/material/table"; +import {MatOptionModule} from "@angular/material/core"; +import {MatAutocompleteModule} from "@angular/material/autocomplete"; +import {MatFormFieldModule} from "@angular/material/form-field"; +import {MatInputModule} from "@angular/material/input"; +import {ToggleComponent} from './_components/toggle/toggle.component'; +import {ProfileComponent} from './_views/profile/profile.component'; +import {ApiModule, Configuration, ConfigurationParameters} from "@app/core/api/v1"; +import {SearchInputComponent} from './_components/search-input/search-input.component'; +import {PagingComponent} from '@app/_components/paging/paging.component'; +import {UsersComponent} from './_views/user/users.component'; +import {UserDetailComponent} from './_views/user/user-detail/user-detail.component'; +import {UserListComponent} from './_views/user/user-list/user-list.component'; +import {LinkedLabelComponent} from './_components/linked-label/linked-label.component'; +import {LoadingInterceptor} from "@app/_helpers/loading-interceptor.service"; +import {SearchSelectComponent} from './_components/search-select/search-select.component'; +import {ListComponent} from './_components/list/list.component'; +import {MatTabsModule} from "@angular/material/tabs"; +import {DashboardComponent} from './_views/dashboard/dashboard.component'; +import localeDe from '@angular/common/locales/de'; +import { FilterBarComponent } from './_components/filter-bar/filter-bar.component'; + +registerLocaleData(localeDe, 'de-DE'); + +export function apiConfigFactory(): Configuration { + const params: ConfigurationParameters = { + basePath: environment.basePath, + withCredentials: false + }; + return new Configuration(params); +} + +// AoT requires an exported function for factories +export function HttpLoaderFactory(http: HttpClient) { + return new TranslateHttpLoader(http); +} + +@NgModule({ + imports: [ + ApiModule.forRoot(apiConfigFactory), + BrowserModule, + BrowserAnimationsModule, + TranslateModule.forRoot({ + defaultLanguage: 'en', + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }), + ReactiveFormsModule, + HttpClientModule, + NgbModule, + AppRoutingModule, + MatCardModule, + NgOptimizedImage, + MatPaginatorModule, + MatSortModule, + MatTableModule, + MatOptionModule, + MatAutocompleteModule, + MatFormFieldModule, + MatInputModule, + MatTabsModule, + TranslateModule, + FormsModule, + ], + declarations: [ + AppComponent, + AlertComponent, + HomeComponent, + TwoColumnComponent, + ToggleComponent, + ProfileComponent, + SearchInputComponent, + PagingComponent, + UsersComponent, + UserDetailComponent, + UserListComponent, + LinkedLabelComponent, + SearchSelectComponent, + ListComponent, + DashboardComponent, + FilterBarComponent, + ], + providers: [ + {provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true}, + {provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true}, + {provide: HTTP_INTERCEPTORS, useClass: PropertyInterceptor, multi: true}, + {provide: HTTP_INTERCEPTORS, useClass: LoadingInterceptor, multi: true}, + {provide: LOCALE_ID, useValue: 'de-DE'}, + ], + bootstrap: [AppComponent] +}) +export class AppModule { +} diff --git a/angular/src/app/app.routes.ts b/angular/src/app/app.routes.ts new file mode 100644 index 0000000..dc39edb --- /dev/null +++ b/angular/src/app/app.routes.ts @@ -0,0 +1,3 @@ +import { Routes } from '@angular/router'; + +export const routes: Routes = []; diff --git a/angular/src/app/core/api/v1/.gitignore b/angular/src/app/core/api/v1/.gitignore new file mode 100644 index 0000000..149b576 --- /dev/null +++ b/angular/src/app/core/api/v1/.gitignore @@ -0,0 +1,4 @@ +wwwroot/*.js +node_modules +typings +dist diff --git a/angular/src/app/core/api/v1/.openapi-generator-ignore b/angular/src/app/core/api/v1/.openapi-generator-ignore new file mode 100644 index 0000000..7484ee5 --- /dev/null +++ b/angular/src/app/core/api/v1/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/angular/src/app/core/api/v1/.openapi-generator/FILES b/angular/src/app/core/api/v1/.openapi-generator/FILES new file mode 100644 index 0000000..e0382e8 --- /dev/null +++ b/angular/src/app/core/api/v1/.openapi-generator/FILES @@ -0,0 +1,74 @@ +.gitignore +README.md +api.module.ts +api/accountTradePileItem.service.ts +api/api.ts +api/candidate.service.ts +api/candidateStat.service.ts +api/candidateStockAccounts.service.ts +api/config.service.ts +api/gameAccount.service.ts +api/logAccountCredit.service.ts +api/logAccountProfit.service.ts +api/logAccountSoldItem.service.ts +api/logGeneral.service.ts +api/logTotalProfit.service.ts +api/loginCheck.service.ts +api/mediaObject.service.ts +api/modeConfig.service.ts +api/player.service.ts +api/rarity.service.ts +api/systemStat.service.ts +api/user.service.ts +configuration.ts +encoder.ts +git_push.sh +index.ts +model/accountTradePileItem.ts +model/accountTradePileItemJsonld.ts +model/accountTradePileItemJsonldContext.ts +model/accountTradePileItemJsonldContextOneOf.ts +model/apiAccountTradePileItemsGetCollection200Response.ts +model/apiAccountTradePileItemsGetCollection200ResponseHydraSearch.ts +model/apiAccountTradePileItemsGetCollection200ResponseHydraSearchHydraMappingInner.ts +model/apiAccountTradePileItemsGetCollection200ResponseHydraView.ts +model/apiCandidateStatsGetCollection200Response.ts +model/apiCandidatesGetCollection200Response.ts +model/apiGameAccountsGetCollection200Response.ts +model/apiLogAccountCreditsGetCollection200Response.ts +model/apiLogAccountProfitsGetCollection200Response.ts +model/apiLogAccountSoldItemsGetCollection200Response.ts +model/apiLogGeneralsGetCollection200Response.ts +model/apiLogTotalProfitsGetCollection200Response.ts +model/apiMediaObjectsGetCollection200Response.ts +model/apiPlayersGetCollection200Response.ts +model/apiRaritiesGetCollection200Response.ts +model/apiUsersGetCollection200Response.ts +model/candidate.ts +model/candidateJsonld.ts +model/candidateStatJsonld.ts +model/candidateStockAccountsJsonld.ts +model/config.ts +model/configJsonld.ts +model/gameAccount.ts +model/gameAccountJsonld.ts +model/logAccountCreditJsonld.ts +model/logAccountProfitJsonld.ts +model/logAccountSoldItemJsonld.ts +model/logGeneralJsonld.ts +model/logTotalProfit.ts +model/logTotalProfitJsonld.ts +model/loginCheckPost200Response.ts +model/loginCheckPostRequest.ts +model/mediaObjectJsonldMediaObjectRead.ts +model/modeConfig.ts +model/modeConfigJsonld.ts +model/models.ts +model/player.ts +model/playerJsonld.ts +model/rarity.ts +model/rarityJsonld.ts +model/systemStatJsonld.ts +model/userJsonld.ts +param.ts +variables.ts diff --git a/angular/src/app/core/api/v1/.openapi-generator/VERSION b/angular/src/app/core/api/v1/.openapi-generator/VERSION new file mode 100644 index 0000000..8b23b8d --- /dev/null +++ b/angular/src/app/core/api/v1/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.3.0 \ No newline at end of file diff --git a/angular/src/app/core/api/v1/README.md b/angular/src/app/core/api/v1/README.md new file mode 100644 index 0000000..de16f95 --- /dev/null +++ b/angular/src/app/core/api/v1/README.md @@ -0,0 +1,226 @@ +## @ + +### Building + +To install the required dependencies and to build the typescript sources run: +``` +npm install +npm run build +``` + +### publishing + +First build the package then run ```npm publish dist``` (don't forget to specify the `dist` folder!) + +### consuming + +Navigate to the folder of your consuming project and run one of next commands. + +_published:_ + +``` +npm install @ --save +``` + +_without publishing (not recommended):_ + +``` +npm install PATH_TO_GENERATED_PACKAGE/dist.tgz --save +``` + +_It's important to take the tgz file, otherwise you'll get trouble with links on windows_ + +_using `npm link`:_ + +In PATH_TO_GENERATED_PACKAGE/dist: +``` +npm link +``` + +In your project: +``` +npm link +``` + +__Note for Windows users:__ The Angular CLI has troubles to use linked npm packages. +Please refer to this issue https://github.com/angular/angular-cli/issues/8284 for a solution / workaround. +Published packages are not effected by this issue. + + +#### General usage + +In your Angular project: + + +``` +// without configuring providers +import { ApiModule } from ''; +import { HttpClientModule } from '@angular/common/http'; + +@NgModule({ + imports: [ + ApiModule, + // make sure to import the HttpClientModule in the AppModule only, + // see https://github.com/angular/angular/issues/20575 + HttpClientModule + ], + declarations: [ AppComponent ], + providers: [], + bootstrap: [ AppComponent ] +}) +export class AppModule {} +``` + +``` +// configuring providers +import { ApiModule, Configuration, ConfigurationParameters } from ''; + +export function apiConfigFactory (): Configuration { + const params: ConfigurationParameters = { + // set configuration parameters here. + } + return new Configuration(params); +} + +@NgModule({ + imports: [ ApiModule.forRoot(apiConfigFactory) ], + declarations: [ AppComponent ], + providers: [], + bootstrap: [ AppComponent ] +}) +export class AppModule {} +``` + +``` +// configuring providers with an authentication service that manages your access tokens +import { ApiModule, Configuration } from ''; + +@NgModule({ + imports: [ ApiModule ], + declarations: [ AppComponent ], + providers: [ + { + provide: Configuration, + useFactory: (authService: AuthService) => new Configuration( + { + basePath: environment.apiUrl, + accessToken: authService.getAccessToken.bind(authService) + } + ), + deps: [AuthService], + multi: false + } + ], + bootstrap: [ AppComponent ] +}) +export class AppModule {} +``` + +``` +import { DefaultApi } from ''; + +export class AppComponent { + constructor(private apiGateway: DefaultApi) { } +} +``` + +Note: The ApiModule is restricted to being instantiated once app wide. +This is to ensure that all services are treated as singletons. + +#### Using multiple OpenAPI files / APIs / ApiModules +In order to use multiple `ApiModules` generated from different OpenAPI files, +you can create an alias name when importing the modules +in order to avoid naming conflicts: +``` +import { ApiModule } from 'my-api-path'; +import { ApiModule as OtherApiModule } from 'my-other-api-path'; +import { HttpClientModule } from '@angular/common/http'; + +@NgModule({ + imports: [ + ApiModule, + OtherApiModule, + // make sure to import the HttpClientModule in the AppModule only, + // see https://github.com/angular/angular/issues/20575 + HttpClientModule + ] +}) +export class AppModule { + +} +``` + + +### Set service base path +If different than the generated base path, during app bootstrap, you can provide the base path to your service. + +``` +import { BASE_PATH } from ''; + +bootstrap(AppComponent, [ + { provide: BASE_PATH, useValue: 'https://your-web-service.com' }, +]); +``` +or + +``` +import { BASE_PATH } from ''; + +@NgModule({ + imports: [], + declarations: [ AppComponent ], + providers: [ provide: BASE_PATH, useValue: 'https://your-web-service.com' ], + bootstrap: [ AppComponent ] +}) +export class AppModule {} +``` + + +#### Using @angular/cli +First extend your `src/environments/*.ts` files by adding the corresponding base path: + +``` +export const environment = { + production: false, + API_BASE_PATH: 'http://127.0.0.1:8080' +}; +``` + +In the src/app/app.module.ts: +``` +import { BASE_PATH } from ''; +import { environment } from '../environments/environment'; + +@NgModule({ + declarations: [ + AppComponent + ], + imports: [ ], + providers: [{ provide: BASE_PATH, useValue: environment.API_BASE_PATH }], + bootstrap: [ AppComponent ] +}) +export class AppModule { } +``` + +### Customizing path parameter encoding + +Without further customization, only [path-parameters][parameter-locations-url] of [style][style-values-url] 'simple' +and Dates for format 'date-time' are encoded correctly. + +Other styles (e.g. "matrix") are not that easy to encode +and thus are best delegated to other libraries (e.g.: [@honoluluhenk/http-param-expander]). + +To implement your own parameter encoding (or call another library), +pass an arrow-function or method-reference to the `encodeParam` property of the Configuration-object +(see [General Usage](#general-usage) above). + +Example value for use in your Configuration-Provider: +```typescript +new Configuration({ + encodeParam: (param: Param) => myFancyParamEncoder(param), +}) +``` + +[parameter-locations-url]: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-locations +[style-values-url]: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#style-values +[@honoluluhenk/http-param-expander]: https://www.npmjs.com/package/@honoluluhenk/http-param-expander diff --git a/angular/src/app/core/api/v1/api.module.ts b/angular/src/app/core/api/v1/api.module.ts new file mode 100644 index 0000000..58d341f --- /dev/null +++ b/angular/src/app/core/api/v1/api.module.ts @@ -0,0 +1,30 @@ +import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { Configuration } from './configuration'; +import { HttpClient } from '@angular/common/http'; + + +@NgModule({ + imports: [], + declarations: [], + exports: [], + providers: [] +}) +export class ApiModule { + public static forRoot(configurationFactory: () => Configuration): ModuleWithProviders { + return { + ngModule: ApiModule, + providers: [ { provide: Configuration, useFactory: configurationFactory } ] + }; + } + + constructor( @Optional() @SkipSelf() parentModule: ApiModule, + @Optional() http: HttpClient) { + if (parentModule) { + throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); + } + if (!http) { + throw new Error('You need to import the HttpClientModule in your AppModule! \n' + + 'See also https://github.com/angular/angular/issues/20575'); + } + } +} diff --git a/angular/src/app/core/api/v1/api/accountTradePileItem.service.ts b/angular/src/app/core/api/v1/api/accountTradePileItem.service.ts new file mode 100644 index 0000000..5882811 --- /dev/null +++ b/angular/src/app/core/api/v1/api/accountTradePileItem.service.ts @@ -0,0 +1,381 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { AccountTradePileItem } from '../model/accountTradePileItem'; +// @ts-ignore +import { AccountTradePileItemJsonld } from '../model/accountTradePileItemJsonld'; +// @ts-ignore +import { ApiAccountTradePileItemsGetCollection200Response } from '../model/apiAccountTradePileItemsGetCollection200Response'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class AccountTradePileItemService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of AccountTradePileItem resources. + * Retrieves the collection of AccountTradePileItem resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param account + * @param account2 + * @param candidateItem + * @param candidateItem2 + * @param candidateNameSearch + * @param accountTmOpenFilter Filter items based on the tmOpen value of the associated account + * @param customJsonFilter + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public accountTradePileItemsGetCollection(page?: number, itemsPerPage?: number, account?: string, account2?: Array, candidateItem?: string, candidateItem2?: Array, candidateNameSearch?: string, accountTmOpenFilter?: boolean, customJsonFilter?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public accountTradePileItemsGetCollection(page?: number, itemsPerPage?: number, account?: string, account2?: Array, candidateItem?: string, candidateItem2?: Array, candidateNameSearch?: string, accountTmOpenFilter?: boolean, customJsonFilter?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public accountTradePileItemsGetCollection(page?: number, itemsPerPage?: number, account?: string, account2?: Array, candidateItem?: string, candidateItem2?: Array, candidateNameSearch?: string, accountTmOpenFilter?: boolean, customJsonFilter?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public accountTradePileItemsGetCollection(page?: number, itemsPerPage?: number, account?: string, account2?: Array, candidateItem?: string, candidateItem2?: Array, candidateNameSearch?: string, accountTmOpenFilter?: boolean, customJsonFilter?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (account !== undefined && account !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + account, 'account'); + } + if (account2) { + account2.forEach((element) => { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + element, 'account[]'); + }) + } + if (candidateItem !== undefined && candidateItem !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + candidateItem, 'candidateItem'); + } + if (candidateItem2) { + candidateItem2.forEach((element) => { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + element, 'candidateItem[]'); + }) + } + if (candidateNameSearch !== undefined && candidateNameSearch !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + candidateNameSearch, 'candidateNameSearch'); + } + if (accountTmOpenFilter !== undefined && accountTmOpenFilter !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + accountTmOpenFilter, 'accountTmOpenFilter'); + } + if (customJsonFilter !== undefined && customJsonFilter !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonFilter, 'custom_json_filter'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/account_trade_pile_items`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a AccountTradePileItem resource. + * Retrieves a AccountTradePileItem resource. + * @param id AccountTradePileItem identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public accountTradePileItemsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public accountTradePileItemsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public accountTradePileItemsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public accountTradePileItemsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling accountTradePileItemsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/account_trade_pile_items/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the AccountTradePileItem resource. + * Updates the AccountTradePileItem resource. + * @param id AccountTradePileItem identifier + * @param accountTradePileItem The updated AccountTradePileItem resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public accountTradePileItemsIdPatch(id: string, accountTradePileItem: AccountTradePileItem, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public accountTradePileItemsIdPatch(id: string, accountTradePileItem: AccountTradePileItem, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public accountTradePileItemsIdPatch(id: string, accountTradePileItem: AccountTradePileItem, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public accountTradePileItemsIdPatch(id: string, accountTradePileItem: AccountTradePileItem, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling accountTradePileItemsIdPatch.'); + } + if (accountTradePileItem === null || accountTradePileItem === undefined) { + throw new Error('Required parameter accountTradePileItem was null or undefined when calling accountTradePileItemsIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/account_trade_pile_items/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: accountTradePileItem, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/api.ts b/angular/src/app/core/api/v1/api/api.ts new file mode 100644 index 0000000..2c562c6 --- /dev/null +++ b/angular/src/app/core/api/v1/api/api.ts @@ -0,0 +1,37 @@ +export * from './accountTradePileItem.service'; +import { AccountTradePileItemService } from './accountTradePileItem.service'; +export * from './candidate.service'; +import { CandidateService } from './candidate.service'; +export * from './candidateStat.service'; +import { CandidateStatService } from './candidateStat.service'; +export * from './candidateStockAccounts.service'; +import { CandidateStockAccountsService } from './candidateStockAccounts.service'; +export * from './config.service'; +import { ConfigService } from './config.service'; +export * from './gameAccount.service'; +import { GameAccountService } from './gameAccount.service'; +export * from './logAccountCredit.service'; +import { LogAccountCreditService } from './logAccountCredit.service'; +export * from './logAccountProfit.service'; +import { LogAccountProfitService } from './logAccountProfit.service'; +export * from './logAccountSoldItem.service'; +import { LogAccountSoldItemService } from './logAccountSoldItem.service'; +export * from './logGeneral.service'; +import { LogGeneralService } from './logGeneral.service'; +export * from './logTotalProfit.service'; +import { LogTotalProfitService } from './logTotalProfit.service'; +export * from './loginCheck.service'; +import { LoginCheckService } from './loginCheck.service'; +export * from './mediaObject.service'; +import { MediaObjectService } from './mediaObject.service'; +export * from './modeConfig.service'; +import { ModeConfigService } from './modeConfig.service'; +export * from './player.service'; +import { PlayerService } from './player.service'; +export * from './rarity.service'; +import { RarityService } from './rarity.service'; +export * from './systemStat.service'; +import { SystemStatService } from './systemStat.service'; +export * from './user.service'; +import { UserService } from './user.service'; +export const APIS = [AccountTradePileItemService, CandidateService, CandidateStatService, CandidateStockAccountsService, ConfigService, GameAccountService, LogAccountCreditService, LogAccountProfitService, LogAccountSoldItemService, LogGeneralService, LogTotalProfitService, LoginCheckService, MediaObjectService, ModeConfigService, PlayerService, RarityService, SystemStatService, UserService]; diff --git a/angular/src/app/core/api/v1/api/candidate.service.ts b/angular/src/app/core/api/v1/api/candidate.service.ts new file mode 100644 index 0000000..039f1c5 --- /dev/null +++ b/angular/src/app/core/api/v1/api/candidate.service.ts @@ -0,0 +1,434 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiCandidatesGetCollection200Response } from '../model/apiCandidatesGetCollection200Response'; +// @ts-ignore +import { Candidate } from '../model/candidate'; +// @ts-ignore +import { CandidateJsonld } from '../model/candidateJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class CandidateService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of Candidate resources. + * Retrieves the collection of Candidate resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param candidateNameSearch + * @param customJsonFilter + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public candidatesGetCollection(page?: number, itemsPerPage?: number, candidateNameSearch?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public candidatesGetCollection(page?: number, itemsPerPage?: number, candidateNameSearch?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidatesGetCollection(page?: number, itemsPerPage?: number, candidateNameSearch?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidatesGetCollection(page?: number, itemsPerPage?: number, candidateNameSearch?: string, customJsonFilter?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (candidateNameSearch !== undefined && candidateNameSearch !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + candidateNameSearch, 'candidateNameSearch'); + } + if (customJsonFilter !== undefined && customJsonFilter !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonFilter, 'custom_json_filter'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/candidates`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a Candidate resource. + * Retrieves a Candidate resource. + * @param id Candidate identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public candidatesIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public candidatesIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidatesIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidatesIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling candidatesIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/candidates/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the Candidate resource. + * Updates the Candidate resource. + * @param id Candidate identifier + * @param candidate The updated Candidate resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public candidatesIdPatch(id: string, candidate: Candidate, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public candidatesIdPatch(id: string, candidate: Candidate, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidatesIdPatch(id: string, candidate: Candidate, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidatesIdPatch(id: string, candidate: Candidate, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling candidatesIdPatch.'); + } + if (candidate === null || candidate === undefined) { + throw new Error('Required parameter candidate was null or undefined when calling candidatesIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/candidates/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: candidate, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a Candidate resource. + * Creates a Candidate resource. + * @param candidateJsonld The new Candidate resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public candidatesPost(candidateJsonld: CandidateJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public candidatesPost(candidateJsonld: CandidateJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidatesPost(candidateJsonld: CandidateJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidatesPost(candidateJsonld: CandidateJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (candidateJsonld === null || candidateJsonld === undefined) { + throw new Error('Required parameter candidateJsonld was null or undefined when calling candidatesPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/candidates`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: candidateJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/candidateStat.service.ts b/angular/src/app/core/api/v1/api/candidateStat.service.ts new file mode 100644 index 0000000..bc57161 --- /dev/null +++ b/angular/src/app/core/api/v1/api/candidateStat.service.ts @@ -0,0 +1,259 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiCandidateStatsGetCollection200Response } from '../model/apiCandidateStatsGetCollection200Response'; +// @ts-ignore +import { CandidateStatJsonld } from '../model/candidateStatJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class CandidateStatService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of CandidateStat resources. + * Retrieves the collection of CandidateStat resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param candidateNameSearch + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public candidateStatsGetCollection(page?: number, itemsPerPage?: number, candidateNameSearch?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public candidateStatsGetCollection(page?: number, itemsPerPage?: number, candidateNameSearch?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidateStatsGetCollection(page?: number, itemsPerPage?: number, candidateNameSearch?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidateStatsGetCollection(page?: number, itemsPerPage?: number, candidateNameSearch?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (candidateNameSearch !== undefined && candidateNameSearch !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + candidateNameSearch, 'candidateNameSearch'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/candidate_stats`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a CandidateStat resource. + * Retrieves a CandidateStat resource. + * @param id CandidateStat identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public candidateStatsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public candidateStatsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidateStatsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidateStatsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling candidateStatsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/candidate_stats/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/candidateStockAccounts.service.ts b/angular/src/app/core/api/v1/api/candidateStockAccounts.service.ts new file mode 100644 index 0000000..0e3def4 --- /dev/null +++ b/angular/src/app/core/api/v1/api/candidateStockAccounts.service.ts @@ -0,0 +1,166 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { CandidateStockAccountsJsonld } from '../model/candidateStockAccountsJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class CandidateStockAccountsService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the stock and missing accounts for a candidate item + * Retrieves a CandidateStockAccounts resource. + * @param id Candidate Item ID + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public candidateItemsIdstockAccountsGet(id: number, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public candidateItemsIdstockAccountsGet(id: number, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidateItemsIdstockAccountsGet(id: number, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public candidateItemsIdstockAccountsGet(id: number, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling candidateItemsIdstockAccountsGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/candidate-items/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "number", dataFormat: undefined})}/stock-accounts`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/config.service.ts b/angular/src/app/core/api/v1/api/config.service.ts new file mode 100644 index 0000000..0712f7d --- /dev/null +++ b/angular/src/app/core/api/v1/api/config.service.ts @@ -0,0 +1,246 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { Config } from '../model/config'; +// @ts-ignore +import { ConfigJsonld } from '../model/configJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class ConfigService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves a Config resource. + * Retrieves a Config resource. + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public configGet(observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public configGet(observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public configGet(observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public configGet(observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/config`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the Config resource. + * Updates the Config resource. + * @param config The updated Config resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public configPatch(config: Config, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public configPatch(config: Config, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public configPatch(config: Config, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public configPatch(config: Config, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (config === null || config === undefined) { + throw new Error('Required parameter config was null or undefined when calling configPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/config`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: config, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/gameAccount.service.ts b/angular/src/app/core/api/v1/api/gameAccount.service.ts new file mode 100644 index 0000000..7e761e4 --- /dev/null +++ b/angular/src/app/core/api/v1/api/gameAccount.service.ts @@ -0,0 +1,456 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiGameAccountsGetCollection200Response } from '../model/apiGameAccountsGetCollection200Response'; +// @ts-ignore +import { GameAccount } from '../model/gameAccount'; +// @ts-ignore +import { GameAccountJsonld } from '../model/gameAccountJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class GameAccountService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of GameAccount resources. + * Retrieves the collection of GameAccount resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param owner + * @param owner2 + * @param email + * @param profile + * @param tmOpen + * @param customJsonFilter + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public gameAccountsGetCollection(page?: number, itemsPerPage?: number, owner?: string, owner2?: Array, email?: string, profile?: string, tmOpen?: boolean, customJsonFilter?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public gameAccountsGetCollection(page?: number, itemsPerPage?: number, owner?: string, owner2?: Array, email?: string, profile?: string, tmOpen?: boolean, customJsonFilter?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public gameAccountsGetCollection(page?: number, itemsPerPage?: number, owner?: string, owner2?: Array, email?: string, profile?: string, tmOpen?: boolean, customJsonFilter?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public gameAccountsGetCollection(page?: number, itemsPerPage?: number, owner?: string, owner2?: Array, email?: string, profile?: string, tmOpen?: boolean, customJsonFilter?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (owner !== undefined && owner !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + owner, 'owner'); + } + if (owner2) { + owner2.forEach((element) => { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + element, 'owner[]'); + }) + } + if (email !== undefined && email !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + email, 'email'); + } + if (profile !== undefined && profile !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + profile, 'profile'); + } + if (tmOpen !== undefined && tmOpen !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + tmOpen, 'tmOpen'); + } + if (customJsonFilter !== undefined && customJsonFilter !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonFilter, 'custom_json_filter'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/game_accounts`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a GameAccount resource. + * Retrieves a GameAccount resource. + * @param id GameAccount identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public gameAccountsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public gameAccountsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public gameAccountsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public gameAccountsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling gameAccountsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/game_accounts/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the GameAccount resource. + * Updates the GameAccount resource. + * @param id GameAccount identifier + * @param gameAccount The updated GameAccount resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public gameAccountsIdPatch(id: string, gameAccount: GameAccount, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public gameAccountsIdPatch(id: string, gameAccount: GameAccount, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public gameAccountsIdPatch(id: string, gameAccount: GameAccount, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public gameAccountsIdPatch(id: string, gameAccount: GameAccount, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling gameAccountsIdPatch.'); + } + if (gameAccount === null || gameAccount === undefined) { + throw new Error('Required parameter gameAccount was null or undefined when calling gameAccountsIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/game_accounts/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: gameAccount, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a GameAccount resource. + * Creates a GameAccount resource. + * @param gameAccountJsonld The new GameAccount resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public gameAccountsPost(gameAccountJsonld: GameAccountJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public gameAccountsPost(gameAccountJsonld: GameAccountJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public gameAccountsPost(gameAccountJsonld: GameAccountJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public gameAccountsPost(gameAccountJsonld: GameAccountJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (gameAccountJsonld === null || gameAccountJsonld === undefined) { + throw new Error('Required parameter gameAccountJsonld was null or undefined when calling gameAccountsPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/game_accounts`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: gameAccountJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/logAccountCredit.service.ts b/angular/src/app/core/api/v1/api/logAccountCredit.service.ts new file mode 100644 index 0000000..a6ca308 --- /dev/null +++ b/angular/src/app/core/api/v1/api/logAccountCredit.service.ts @@ -0,0 +1,264 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiLogAccountCreditsGetCollection200Response } from '../model/apiLogAccountCreditsGetCollection200Response'; +// @ts-ignore +import { LogAccountCreditJsonld } from '../model/logAccountCreditJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class LogAccountCreditService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of LogAccountCredit resources. + * Retrieves the collection of LogAccountCredit resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param orderCreationDate + * @param orderCredits + * @param orderRevenue + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logAccountCreditsGetCollection(page?: number, itemsPerPage?: number, orderCreationDate?: 'asc' | 'desc', orderCredits?: 'asc' | 'desc', orderRevenue?: 'asc' | 'desc', observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logAccountCreditsGetCollection(page?: number, itemsPerPage?: number, orderCreationDate?: 'asc' | 'desc', orderCredits?: 'asc' | 'desc', orderRevenue?: 'asc' | 'desc', observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountCreditsGetCollection(page?: number, itemsPerPage?: number, orderCreationDate?: 'asc' | 'desc', orderCredits?: 'asc' | 'desc', orderRevenue?: 'asc' | 'desc', observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountCreditsGetCollection(page?: number, itemsPerPage?: number, orderCreationDate?: 'asc' | 'desc', orderCredits?: 'asc' | 'desc', orderRevenue?: 'asc' | 'desc', observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (orderCreationDate !== undefined && orderCreationDate !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + orderCreationDate, 'order[creationDate]'); + } + if (orderCredits !== undefined && orderCredits !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + orderCredits, 'order[credits]'); + } + if (orderRevenue !== undefined && orderRevenue !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + orderRevenue, 'order[revenue]'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_account_credits`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a LogAccountCredit resource. + * Retrieves a LogAccountCredit resource. + * @param id LogAccountCredit identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logAccountCreditsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logAccountCreditsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountCreditsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountCreditsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling logAccountCreditsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_account_credits/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/logAccountProfit.service.ts b/angular/src/app/core/api/v1/api/logAccountProfit.service.ts new file mode 100644 index 0000000..3ae373b --- /dev/null +++ b/angular/src/app/core/api/v1/api/logAccountProfit.service.ts @@ -0,0 +1,281 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiLogAccountProfitsGetCollection200Response } from '../model/apiLogAccountProfitsGetCollection200Response'; +// @ts-ignore +import { LogAccountProfitJsonld } from '../model/logAccountProfitJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class LogAccountProfitService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of LogAccountProfit resources. + * Retrieves the collection of LogAccountProfit resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param gameAccount + * @param gameAccount2 + * @param isDailyProfit + * @param gameAccountProfile + * @param customJsonFilter + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logAccountProfitsGetCollection(page?: number, itemsPerPage?: number, gameAccount?: string, gameAccount2?: Array, isDailyProfit?: boolean, gameAccountProfile?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logAccountProfitsGetCollection(page?: number, itemsPerPage?: number, gameAccount?: string, gameAccount2?: Array, isDailyProfit?: boolean, gameAccountProfile?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountProfitsGetCollection(page?: number, itemsPerPage?: number, gameAccount?: string, gameAccount2?: Array, isDailyProfit?: boolean, gameAccountProfile?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountProfitsGetCollection(page?: number, itemsPerPage?: number, gameAccount?: string, gameAccount2?: Array, isDailyProfit?: boolean, gameAccountProfile?: string, customJsonFilter?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (gameAccount !== undefined && gameAccount !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + gameAccount, 'gameAccount'); + } + if (gameAccount2) { + gameAccount2.forEach((element) => { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + element, 'gameAccount[]'); + }) + } + if (isDailyProfit !== undefined && isDailyProfit !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + isDailyProfit, 'isDailyProfit'); + } + if (gameAccountProfile !== undefined && gameAccountProfile !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + gameAccountProfile, 'gameAccountProfile'); + } + if (customJsonFilter !== undefined && customJsonFilter !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonFilter, 'custom_json_filter'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_account_profits`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a LogAccountProfit resource. + * Retrieves a LogAccountProfit resource. + * @param id LogAccountProfit identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logAccountProfitsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logAccountProfitsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountProfitsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountProfitsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling logAccountProfitsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_account_profits/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/logAccountSoldItem.service.ts b/angular/src/app/core/api/v1/api/logAccountSoldItem.service.ts new file mode 100644 index 0000000..83332f4 --- /dev/null +++ b/angular/src/app/core/api/v1/api/logAccountSoldItem.service.ts @@ -0,0 +1,288 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiLogAccountSoldItemsGetCollection200Response } from '../model/apiLogAccountSoldItemsGetCollection200Response'; +// @ts-ignore +import { LogAccountSoldItemJsonld } from '../model/logAccountSoldItemJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class LogAccountSoldItemService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of LogAccountSoldItem resources. + * Retrieves the collection of LogAccountSoldItem resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param account + * @param account2 + * @param candidateItem + * @param candidateItem2 + * @param candidateNameSearch + * @param customJsonFilter + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logAccountSoldItemsGetCollection(page?: number, itemsPerPage?: number, account?: string, account2?: Array, candidateItem?: string, candidateItem2?: Array, candidateNameSearch?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logAccountSoldItemsGetCollection(page?: number, itemsPerPage?: number, account?: string, account2?: Array, candidateItem?: string, candidateItem2?: Array, candidateNameSearch?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountSoldItemsGetCollection(page?: number, itemsPerPage?: number, account?: string, account2?: Array, candidateItem?: string, candidateItem2?: Array, candidateNameSearch?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountSoldItemsGetCollection(page?: number, itemsPerPage?: number, account?: string, account2?: Array, candidateItem?: string, candidateItem2?: Array, candidateNameSearch?: string, customJsonFilter?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (account !== undefined && account !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + account, 'account'); + } + if (account2) { + account2.forEach((element) => { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + element, 'account[]'); + }) + } + if (candidateItem !== undefined && candidateItem !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + candidateItem, 'candidateItem'); + } + if (candidateItem2) { + candidateItem2.forEach((element) => { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + element, 'candidateItem[]'); + }) + } + if (candidateNameSearch !== undefined && candidateNameSearch !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + candidateNameSearch, 'candidateNameSearch'); + } + if (customJsonFilter !== undefined && customJsonFilter !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonFilter, 'custom_json_filter'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_account_sold_items`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a LogAccountSoldItem resource. + * Retrieves a LogAccountSoldItem resource. + * @param id LogAccountSoldItem identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logAccountSoldItemsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logAccountSoldItemsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountSoldItemsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logAccountSoldItemsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling logAccountSoldItemsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_account_sold_items/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/logGeneral.service.ts b/angular/src/app/core/api/v1/api/logGeneral.service.ts new file mode 100644 index 0000000..9463efd --- /dev/null +++ b/angular/src/app/core/api/v1/api/logGeneral.service.ts @@ -0,0 +1,264 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiLogGeneralsGetCollection200Response } from '../model/apiLogGeneralsGetCollection200Response'; +// @ts-ignore +import { LogGeneralJsonld } from '../model/logGeneralJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class LogGeneralService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of LogGeneral resources. + * Retrieves the collection of LogGeneral resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param gameAccountProfile + * @param customJsonFilter + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logGeneralsGetCollection(page?: number, itemsPerPage?: number, gameAccountProfile?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logGeneralsGetCollection(page?: number, itemsPerPage?: number, gameAccountProfile?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logGeneralsGetCollection(page?: number, itemsPerPage?: number, gameAccountProfile?: string, customJsonFilter?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logGeneralsGetCollection(page?: number, itemsPerPage?: number, gameAccountProfile?: string, customJsonFilter?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (gameAccountProfile !== undefined && gameAccountProfile !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + gameAccountProfile, 'gameAccountProfile'); + } + if (customJsonFilter !== undefined && customJsonFilter !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonFilter, 'custom_json_filter'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_generals`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a LogGeneral resource. + * Retrieves a LogGeneral resource. + * @param id LogGeneral identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logGeneralsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logGeneralsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logGeneralsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logGeneralsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling logGeneralsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_generals/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/logTotalProfit.service.ts b/angular/src/app/core/api/v1/api/logTotalProfit.service.ts new file mode 100644 index 0000000..3e82f5c --- /dev/null +++ b/angular/src/app/core/api/v1/api/logTotalProfit.service.ts @@ -0,0 +1,419 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiLogTotalProfitsGetCollection200Response } from '../model/apiLogTotalProfitsGetCollection200Response'; +// @ts-ignore +import { LogTotalProfit } from '../model/logTotalProfit'; +// @ts-ignore +import { LogTotalProfitJsonld } from '../model/logTotalProfitJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class LogTotalProfitService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of LogTotalProfit resources. + * Retrieves the collection of LogTotalProfit resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logTotalProfitsGetCollection(page?: number, itemsPerPage?: number, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logTotalProfitsGetCollection(page?: number, itemsPerPage?: number, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logTotalProfitsGetCollection(page?: number, itemsPerPage?: number, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logTotalProfitsGetCollection(page?: number, itemsPerPage?: number, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_total_profits`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a LogTotalProfit resource. + * Retrieves a LogTotalProfit resource. + * @param id LogTotalProfit identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logTotalProfitsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logTotalProfitsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logTotalProfitsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logTotalProfitsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling logTotalProfitsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_total_profits/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the LogTotalProfit resource. + * Updates the LogTotalProfit resource. + * @param id LogTotalProfit identifier + * @param logTotalProfit The updated LogTotalProfit resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logTotalProfitsIdPatch(id: string, logTotalProfit: LogTotalProfit, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logTotalProfitsIdPatch(id: string, logTotalProfit: LogTotalProfit, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logTotalProfitsIdPatch(id: string, logTotalProfit: LogTotalProfit, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logTotalProfitsIdPatch(id: string, logTotalProfit: LogTotalProfit, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling logTotalProfitsIdPatch.'); + } + if (logTotalProfit === null || logTotalProfit === undefined) { + throw new Error('Required parameter logTotalProfit was null or undefined when calling logTotalProfitsIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_total_profits/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: logTotalProfit, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a LogTotalProfit resource. + * Creates a LogTotalProfit resource. + * @param logTotalProfitJsonld The new LogTotalProfit resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public logTotalProfitsPost(logTotalProfitJsonld: LogTotalProfitJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public logTotalProfitsPost(logTotalProfitJsonld: LogTotalProfitJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logTotalProfitsPost(logTotalProfitJsonld: LogTotalProfitJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public logTotalProfitsPost(logTotalProfitJsonld: LogTotalProfitJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (logTotalProfitJsonld === null || logTotalProfitJsonld === undefined) { + throw new Error('Required parameter logTotalProfitJsonld was null or undefined when calling logTotalProfitsPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/log_total_profits`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: logTotalProfitJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/loginCheck.service.ts b/angular/src/app/core/api/v1/api/loginCheck.service.ts new file mode 100644 index 0000000..e9cfb64 --- /dev/null +++ b/angular/src/app/core/api/v1/api/loginCheck.service.ts @@ -0,0 +1,178 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { LoginCheckPost200Response } from '../model/loginCheckPost200Response'; +// @ts-ignore +import { LoginCheckPostRequest } from '../model/loginCheckPostRequest'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class LoginCheckService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Creates a user token. + * Creates a user token. + * @param loginCheckPostRequest The login data + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public checkPost(loginCheckPostRequest: LoginCheckPostRequest, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable; + public checkPost(loginCheckPostRequest: LoginCheckPostRequest, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable>; + public checkPost(loginCheckPostRequest: LoginCheckPostRequest, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable>; + public checkPost(loginCheckPostRequest: LoginCheckPostRequest, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable { + if (loginCheckPostRequest === null || loginCheckPostRequest === undefined) { + throw new Error('Required parameter loginCheckPostRequest was null or undefined when calling checkPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/auth`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: loginCheckPostRequest, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/mediaObject.service.ts b/angular/src/app/core/api/v1/api/mediaObject.service.ts new file mode 100644 index 0000000..6575af0 --- /dev/null +++ b/angular/src/app/core/api/v1/api/mediaObject.service.ts @@ -0,0 +1,425 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiMediaObjectsGetCollection200Response } from '../model/apiMediaObjectsGetCollection200Response'; +// @ts-ignore +import { MediaObjectJsonldMediaObjectRead } from '../model/mediaObjectJsonldMediaObjectRead'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class MediaObjectService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + /** + * @param consumes string[] mime-types + * @return true: consumes contains 'multipart/form-data', false: otherwise + */ + private canConsumeForm(consumes: string[]): boolean { + const form = 'multipart/form-data'; + for (const consume of consumes) { + if (form === consume) { + return true; + } + } + return false; + } + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of MediaObject resources. + * Retrieves the collection of MediaObject resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public mediaObjectsGetCollection(page?: number, itemsPerPage?: number, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public mediaObjectsGetCollection(page?: number, itemsPerPage?: number, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public mediaObjectsGetCollection(page?: number, itemsPerPage?: number, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public mediaObjectsGetCollection(page?: number, itemsPerPage?: number, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/media_objects`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Removes the MediaObject resource. + * Removes the MediaObject resource. + * @param id MediaObject identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public mediaObjectsIdDelete(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: undefined, context?: HttpContext, transferCache?: boolean}): Observable; + public mediaObjectsIdDelete(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: undefined, context?: HttpContext, transferCache?: boolean}): Observable>; + public mediaObjectsIdDelete(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: undefined, context?: HttpContext, transferCache?: boolean}): Observable>; + public mediaObjectsIdDelete(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: undefined, context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling mediaObjectsIdDelete.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/media_objects/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('delete', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a MediaObject resource. + * Retrieves a MediaObject resource. + * @param id MediaObject identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public mediaObjectsIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public mediaObjectsIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public mediaObjectsIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public mediaObjectsIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling mediaObjectsIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/media_objects/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a MediaObject resource. + * Creates a MediaObject resource. + * @param file + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public mediaObjectsPost(file?: Blob, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public mediaObjectsPost(file?: Blob, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public mediaObjectsPost(file?: Blob, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public mediaObjectsPost(file?: Blob, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + // to determine the Content-Type header + const consumes: string[] = [ + 'multipart/form-data' + ]; + + const canConsumeForm = this.canConsumeForm(consumes); + + let localVarFormParams: { append(param: string, value: any): any; }; + let localVarUseForm = false; + let localVarConvertFormParamsToString = false; + // use FormData to transmit files using content-type "multipart/form-data" + // see https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data + localVarUseForm = canConsumeForm; + if (localVarUseForm) { + localVarFormParams = new FormData(); + } else { + localVarFormParams = new HttpParams({encoder: this.encoder}); + } + + if (file !== undefined) { + localVarFormParams = localVarFormParams.append('file', file) as any || localVarFormParams; + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/media_objects`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: localVarConvertFormParamsToString ? localVarFormParams.toString() : localVarFormParams, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/modeConfig.service.ts b/angular/src/app/core/api/v1/api/modeConfig.service.ts new file mode 100644 index 0000000..00d0f26 --- /dev/null +++ b/angular/src/app/core/api/v1/api/modeConfig.service.ts @@ -0,0 +1,246 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ModeConfig } from '../model/modeConfig'; +// @ts-ignore +import { ModeConfigJsonld } from '../model/modeConfigJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class ModeConfigService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves a ModeConfig resource. + * Retrieves a ModeConfig resource. + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public modeConfigGet(observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public modeConfigGet(observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public modeConfigGet(observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public modeConfigGet(observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/mode_config`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the ModeConfig resource. + * Updates the ModeConfig resource. + * @param modeConfig The updated ModeConfig resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public modeConfigPatch(modeConfig: ModeConfig, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public modeConfigPatch(modeConfig: ModeConfig, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public modeConfigPatch(modeConfig: ModeConfig, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public modeConfigPatch(modeConfig: ModeConfig, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (modeConfig === null || modeConfig === undefined) { + throw new Error('Required parameter modeConfig was null or undefined when calling modeConfigPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/mode_config`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: modeConfig, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/player.service.ts b/angular/src/app/core/api/v1/api/player.service.ts new file mode 100644 index 0000000..bf451e0 --- /dev/null +++ b/angular/src/app/core/api/v1/api/player.service.ts @@ -0,0 +1,424 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiPlayersGetCollection200Response } from '../model/apiPlayersGetCollection200Response'; +// @ts-ignore +import { Player } from '../model/player'; +// @ts-ignore +import { PlayerJsonld } from '../model/playerJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class PlayerService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of Player resources. + * Retrieves the collection of Player resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public playersGetCollection(page?: number, itemsPerPage?: number, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public playersGetCollection(page?: number, itemsPerPage?: number, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public playersGetCollection(page?: number, itemsPerPage?: number, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public playersGetCollection(page?: number, itemsPerPage?: number, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/players`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a Player resource. + * Retrieves a Player resource. + * @param id Player identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public playersIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public playersIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public playersIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public playersIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling playersIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/players/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the Player resource. + * Updates the Player resource. + * @param id Player identifier + * @param player The updated Player resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public playersIdPatch(id: string, player: Player, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public playersIdPatch(id: string, player: Player, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public playersIdPatch(id: string, player: Player, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public playersIdPatch(id: string, player: Player, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling playersIdPatch.'); + } + if (player === null || player === undefined) { + throw new Error('Required parameter player was null or undefined when calling playersIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/players/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: player, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a Player resource. + * Creates a Player resource. + * @param playerJsonld The new Player resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public playersPost(playerJsonld: PlayerJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public playersPost(playerJsonld: PlayerJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public playersPost(playerJsonld: PlayerJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public playersPost(playerJsonld: PlayerJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (playerJsonld === null || playerJsonld === undefined) { + throw new Error('Required parameter playerJsonld was null or undefined when calling playersPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/players`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: playerJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/rarity.service.ts b/angular/src/app/core/api/v1/api/rarity.service.ts new file mode 100644 index 0000000..e1b1120 --- /dev/null +++ b/angular/src/app/core/api/v1/api/rarity.service.ts @@ -0,0 +1,424 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiRaritiesGetCollection200Response } from '../model/apiRaritiesGetCollection200Response'; +// @ts-ignore +import { Rarity } from '../model/rarity'; +// @ts-ignore +import { RarityJsonld } from '../model/rarityJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class RarityService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of Rarity resources. + * Retrieves the collection of Rarity resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public raritiesGetCollection(page?: number, itemsPerPage?: number, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public raritiesGetCollection(page?: number, itemsPerPage?: number, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public raritiesGetCollection(page?: number, itemsPerPage?: number, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public raritiesGetCollection(page?: number, itemsPerPage?: number, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/rarities`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a Rarity resource. + * Retrieves a Rarity resource. + * @param id Rarity identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public raritiesIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public raritiesIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public raritiesIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public raritiesIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling raritiesIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/rarities/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Updates the Rarity resource. + * Updates the Rarity resource. + * @param id Rarity identifier + * @param rarity The updated Rarity resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public raritiesIdPatch(id: string, rarity: Rarity, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public raritiesIdPatch(id: string, rarity: Rarity, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public raritiesIdPatch(id: string, rarity: Rarity, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public raritiesIdPatch(id: string, rarity: Rarity, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling raritiesIdPatch.'); + } + if (rarity === null || rarity === undefined) { + throw new Error('Required parameter rarity was null or undefined when calling raritiesIdPatch.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/merge-patch+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/rarities/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('patch', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: rarity, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a Rarity resource. + * Creates a Rarity resource. + * @param rarityJsonld The new Rarity resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public raritiesPost(rarityJsonld: RarityJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public raritiesPost(rarityJsonld: RarityJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public raritiesPost(rarityJsonld: RarityJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public raritiesPost(rarityJsonld: RarityJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (rarityJsonld === null || rarityJsonld === undefined) { + throw new Error('Required parameter rarityJsonld was null or undefined when calling raritiesPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/rarities`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: rarityJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/systemStat.service.ts b/angular/src/app/core/api/v1/api/systemStat.service.ts new file mode 100644 index 0000000..ef73a43 --- /dev/null +++ b/angular/src/app/core/api/v1/api/systemStat.service.ts @@ -0,0 +1,162 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { SystemStatJsonld } from '../model/systemStatJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class SystemStatService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves a SystemStat resource. + * Retrieves a SystemStat resource. + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public systemStatsGet(observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public systemStatsGet(observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public systemStatsGet(observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public systemStatsGet(observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/system_stats`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/api/user.service.ts b/angular/src/app/core/api/v1/api/user.service.ts new file mode 100644 index 0000000..15751b8 --- /dev/null +++ b/angular/src/app/core/api/v1/api/user.service.ts @@ -0,0 +1,351 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { ApiUsersGetCollection200Response } from '../model/apiUsersGetCollection200Response'; +// @ts-ignore +import { UserJsonld } from '../model/userJsonld'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; + + + +@Injectable({ + providedIn: 'root' +}) +export class UserService { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + if (Array.isArray(basePath) && basePath.length > 0) { + basePath = basePath[0]; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * Retrieves the collection of User resources. + * Retrieves the collection of User resources. + * @param page The collection page number + * @param itemsPerPage The number of items per page + * @param firstName + * @param lastName + * @param userNameSearch + * @param customJsonOrder + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public usersGetCollection(page?: number, itemsPerPage?: number, firstName?: string, lastName?: string, userNameSearch?: string, customJsonOrder?: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public usersGetCollection(page?: number, itemsPerPage?: number, firstName?: string, lastName?: string, userNameSearch?: string, customJsonOrder?: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public usersGetCollection(page?: number, itemsPerPage?: number, firstName?: string, lastName?: string, userNameSearch?: string, customJsonOrder?: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public usersGetCollection(page?: number, itemsPerPage?: number, firstName?: string, lastName?: string, userNameSearch?: string, customJsonOrder?: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + + let localVarQueryParameters = new HttpParams({encoder: this.encoder}); + if (page !== undefined && page !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + page, 'page'); + } + if (itemsPerPage !== undefined && itemsPerPage !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + itemsPerPage, 'itemsPerPage'); + } + if (firstName !== undefined && firstName !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + firstName, 'firstName'); + } + if (lastName !== undefined && lastName !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + lastName, 'lastName'); + } + if (userNameSearch !== undefined && userNameSearch !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + userNameSearch, 'userNameSearch'); + } + if (customJsonOrder !== undefined && customJsonOrder !== null) { + localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, + customJsonOrder, 'custom_json_order'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/users`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + params: localVarQueryParameters, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Retrieves a User resource. + * Retrieves a User resource. + * @param id User identifier + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public usersIdGet(id: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public usersIdGet(id: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public usersIdGet(id: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public usersIdGet(id: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (id === null || id === undefined) { + throw new Error('Required parameter id was null or undefined when calling usersIdGet.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/users/${this.configuration.encodeParam({name: "id", value: id, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + + /** + * Creates a User resource. + * Creates a User resource. + * @param userJsonld The new User resource + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public usersPost(userJsonld: UserJsonld, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable; + public usersPost(userJsonld: UserJsonld, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public usersPost(userJsonld: UserJsonld, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable>; + public usersPost(userJsonld: UserJsonld, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/ld+json', context?: HttpContext, transferCache?: boolean}): Observable { + if (userJsonld === null || userJsonld === undefined) { + throw new Error('Required parameter userJsonld was null or undefined when calling usersPost.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarCredential: string | undefined; + // authentication (JWT) required + localVarCredential = this.configuration.lookupCredential('JWT'); + if (localVarCredential) { + localVarHeaders = localVarHeaders.set('Authorization', 'Bearer ' + localVarCredential); + } + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/ld+json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + // to determine the Content-Type header + const consumes: string[] = [ + 'application/ld+json' + ]; + const httpContentTypeSelected: string | undefined = this.configuration.selectHeaderContentType(consumes); + if (httpContentTypeSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected); + } + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/api/users`; + return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + body: userJsonld, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/angular/src/app/core/api/v1/configuration.ts b/angular/src/app/core/api/v1/configuration.ts new file mode 100644 index 0000000..7012fcc --- /dev/null +++ b/angular/src/app/core/api/v1/configuration.ts @@ -0,0 +1,175 @@ +import { HttpParameterCodec } from '@angular/common/http'; +import { Param } from './param'; + +export interface ConfigurationParameters { + /** + * @deprecated Since 5.0. Use credentials instead + */ + apiKeys?: {[ key: string ]: string}; + username?: string; + password?: string; + /** + * @deprecated Since 5.0. Use credentials instead + */ + accessToken?: string | (() => string); + basePath?: string; + withCredentials?: boolean; + /** + * Takes care of encoding query- and form-parameters. + */ + encoder?: HttpParameterCodec; + /** + * Override the default method for encoding path parameters in various + * styles. + *

+ * See {@link README.md} for more details + *

+ */ + encodeParam?: (param: Param) => string; + /** + * The keys are the names in the securitySchemes section of the OpenAPI + * document. They should map to the value used for authentication + * minus any standard prefixes such as 'Basic' or 'Bearer'. + */ + credentials?: {[ key: string ]: string | (() => string | undefined)}; +} + +export class Configuration { + /** + * @deprecated Since 5.0. Use credentials instead + */ + apiKeys?: {[ key: string ]: string}; + username?: string; + password?: string; + /** + * @deprecated Since 5.0. Use credentials instead + */ + accessToken?: string | (() => string); + basePath?: string; + withCredentials?: boolean; + /** + * Takes care of encoding query- and form-parameters. + */ + encoder?: HttpParameterCodec; + /** + * Encoding of various path parameter + * styles. + *

+ * See {@link README.md} for more details + *

+ */ + encodeParam: (param: Param) => string; + /** + * The keys are the names in the securitySchemes section of the OpenAPI + * document. They should map to the value used for authentication + * minus any standard prefixes such as 'Basic' or 'Bearer'. + */ + credentials: {[ key: string ]: string | (() => string | undefined)}; + + constructor(configurationParameters: ConfigurationParameters = {}) { + this.apiKeys = configurationParameters.apiKeys; + this.username = configurationParameters.username; + this.password = configurationParameters.password; + this.accessToken = configurationParameters.accessToken; + this.basePath = configurationParameters.basePath; + this.withCredentials = configurationParameters.withCredentials; + this.encoder = configurationParameters.encoder; + if (configurationParameters.encodeParam) { + this.encodeParam = configurationParameters.encodeParam; + } + else { + this.encodeParam = param => this.defaultEncodeParam(param); + } + if (configurationParameters.credentials) { + this.credentials = configurationParameters.credentials; + } + else { + this.credentials = {}; + } + + // init default JWT credential + if (!this.credentials['JWT']) { + this.credentials['JWT'] = () => { + return typeof this.accessToken === 'function' + ? this.accessToken() + : this.accessToken; + }; + } + } + + /** + * Select the correct content-type to use for a request. + * Uses {@link Configuration#isJsonMime} to determine the correct content-type. + * If no content type is found return the first found type if the contentTypes is not empty + * @param contentTypes - the array of content types that are available for selection + * @returns the selected content-type or undefined if no selection could be made. + */ + public selectHeaderContentType (contentTypes: string[]): string | undefined { + if (contentTypes.length === 0) { + return undefined; + } + + const type = contentTypes.find((x: string) => this.isJsonMime(x)); + if (type === undefined) { + return contentTypes[0]; + } + return type; + } + + /** + * Select the correct accept content-type to use for a request. + * Uses {@link Configuration#isJsonMime} to determine the correct accept content-type. + * If no content type is found return the first found type if the contentTypes is not empty + * @param accepts - the array of content types that are available for selection. + * @returns the selected content-type or undefined if no selection could be made. + */ + public selectHeaderAccept(accepts: string[]): string | undefined { + if (accepts.length === 0) { + return undefined; + } + + const type = accepts.find((x: string) => this.isJsonMime(x)); + if (type === undefined) { + return accepts[0]; + } + return type; + } + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + * application/vnd.company+json + * @param mime - MIME (Multipurpose Internet Mail Extensions) + * @return True if the given MIME is JSON, false otherwise. + */ + public isJsonMime(mime: string): boolean { + const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i'); + return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json'); + } + + public lookupCredential(key: string): string | undefined { + const value = this.credentials[key]; + return typeof value === 'function' + ? value() + : value; + } + + private defaultEncodeParam(param: Param): string { + // This implementation exists as fallback for missing configuration + // and for backwards compatibility to older typescript-angular generator versions. + // It only works for the 'simple' parameter style. + // Date-handling only works for the 'date-time' format. + // All other styles and Date-formats are probably handled incorrectly. + // + // But: if that's all you need (i.e.: the most common use-case): no need for customization! + + const value = param.dataFormat === 'date-time' && param.value instanceof Date + ? (param.value as Date).toISOString() + : param.value; + + return encodeURIComponent(String(value)); + } +} diff --git a/angular/src/app/core/api/v1/encoder.ts b/angular/src/app/core/api/v1/encoder.ts new file mode 100644 index 0000000..138c4d5 --- /dev/null +++ b/angular/src/app/core/api/v1/encoder.ts @@ -0,0 +1,20 @@ +import { HttpParameterCodec } from '@angular/common/http'; + +/** + * Custom HttpParameterCodec + * Workaround for https://github.com/angular/angular/issues/18261 + */ +export class CustomHttpParameterCodec implements HttpParameterCodec { + encodeKey(k: string): string { + return encodeURIComponent(k); + } + encodeValue(v: string): string { + return encodeURIComponent(v); + } + decodeKey(k: string): string { + return decodeURIComponent(k); + } + decodeValue(v: string): string { + return decodeURIComponent(v); + } +} diff --git a/angular/src/app/core/api/v1/git_push.sh b/angular/src/app/core/api/v1/git_push.sh new file mode 100644 index 0000000..f53a75d --- /dev/null +++ b/angular/src/app/core/api/v1/git_push.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=$(git remote) +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' diff --git a/angular/src/app/core/api/v1/index.ts b/angular/src/app/core/api/v1/index.ts new file mode 100644 index 0000000..104dd3d --- /dev/null +++ b/angular/src/app/core/api/v1/index.ts @@ -0,0 +1,6 @@ +export * from './api/api'; +export * from './model/models'; +export * from './variables'; +export * from './configuration'; +export * from './api.module'; +export * from './param'; diff --git a/angular/src/app/core/api/v1/model/accountTradePileItem.ts b/angular/src/app/core/api/v1/model/accountTradePileItem.ts new file mode 100644 index 0000000..1a29463 --- /dev/null +++ b/angular/src/app/core/api/v1/model/accountTradePileItem.ts @@ -0,0 +1,47 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface AccountTradePileItem { + readonly dbId?: number | null; + readonly account?: string; + readonly candidateItem?: string; + readonly eaId?: number; + readonly eaAssetId?: number; + readonly eaResourceId?: number; + readonly rareFlag?: number; + readonly itemType?: string; + readonly rating?: number; + readonly contracts?: number | null; + readonly playStyle?: number | null; + startingBid?: number; + binPrice?: number; + individualPrice?: boolean; + readonly minRange?: number; + readonly maxRange?: number; + readonly lastSalePrice?: number; + readonly tradeState?: string | null; + readonly eaTradeId?: number | null; + readonly rebuy?: boolean; + readonly leagueId?: number | null; + readonly teamId?: number | null; + readonly nationId?: number | null; + readonly listCnt?: number; + readonly openBidCnt?: number | null; + readonly snipedItem?: boolean; + readonly marketAverage?: number | null; + readonly creationDate?: string; +} + diff --git a/angular/src/app/core/api/v1/model/accountTradePileItemJsonld.ts b/angular/src/app/core/api/v1/model/accountTradePileItemJsonld.ts new file mode 100644 index 0000000..470fd7b --- /dev/null +++ b/angular/src/app/core/api/v1/model/accountTradePileItemJsonld.ts @@ -0,0 +1,53 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { GameAccountJsonld } from './gameAccountJsonld'; +import { CandidateJsonld } from './candidateJsonld'; +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface AccountTradePileItemJsonld { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + readonly dbId?: number | null; + readonly account?: GameAccountJsonld; + readonly candidateItem?: CandidateJsonld; + readonly eaId?: number; + readonly eaAssetId?: number; + readonly eaResourceId?: number; + readonly rareFlag?: number; + readonly itemType?: string; + readonly rating?: number; + readonly contracts?: number | null; + readonly playStyle?: number | null; + startingBid?: number; + binPrice?: number; + individualPrice?: boolean; + readonly minRange?: number; + readonly maxRange?: number; + readonly lastSalePrice?: number; + readonly tradeState?: string | null; + readonly eaTradeId?: number | null; + readonly rebuy?: boolean; + readonly leagueId?: number | null; + readonly teamId?: number | null; + readonly nationId?: number | null; + readonly listCnt?: number; + readonly openBidCnt?: number | null; + readonly snipedItem?: boolean; + readonly marketAverage?: number | null; + readonly creationDate?: string; +} + diff --git a/angular/src/app/core/api/v1/model/accountTradePileItemJsonldContext.ts b/angular/src/app/core/api/v1/model/accountTradePileItemJsonldContext.ts new file mode 100644 index 0000000..d464863 --- /dev/null +++ b/angular/src/app/core/api/v1/model/accountTradePileItemJsonldContext.ts @@ -0,0 +1,20 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { AccountTradePileItemJsonldContextOneOf } from './accountTradePileItemJsonldContextOneOf'; + + +/** + * @type AccountTradePileItemJsonldContext + * @export + */ +export type AccountTradePileItemJsonldContext = AccountTradePileItemJsonldContextOneOf | string; + diff --git a/angular/src/app/core/api/v1/model/accountTradePileItemJsonldContextOneOf.ts b/angular/src/app/core/api/v1/model/accountTradePileItemJsonldContextOneOf.ts new file mode 100644 index 0000000..b06ffed --- /dev/null +++ b/angular/src/app/core/api/v1/model/accountTradePileItemJsonldContextOneOf.ts @@ -0,0 +1,28 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface AccountTradePileItemJsonldContextOneOf { + [key: string]: any | any; + + + vocab: string; + hydra: AccountTradePileItemJsonldContextOneOf.HydraEnum; +} +export namespace AccountTradePileItemJsonldContextOneOf { + export type HydraEnum = 'http://www.w3.org/ns/hydra/core#'; + export const HydraEnum = { + HttpWwwW3OrgNsHydraCore: 'http://www.w3.org/ns/hydra/core#' as HydraEnum + }; +} + + diff --git a/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200Response.ts new file mode 100644 index 0000000..5b93b23 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { AccountTradePileItemJsonld } from './accountTradePileItemJsonld'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; + + +export interface ApiAccountTradePileItemsGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraSearch.ts b/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraSearch.ts new file mode 100644 index 0000000..dbbb608 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraSearch.ts @@ -0,0 +1,21 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearchHydraMappingInner } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearchHydraMappingInner'; + + +export interface ApiAccountTradePileItemsGetCollection200ResponseHydraSearch { + type?: string; + 'hydra:template'?: string; + 'hydra:variableRepresentation'?: string; + 'hydra:mapping'?: Array; +} + diff --git a/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraSearchHydraMappingInner.ts b/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraSearchHydraMappingInner.ts new file mode 100644 index 0000000..69d83c7 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraSearchHydraMappingInner.ts @@ -0,0 +1,20 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface ApiAccountTradePileItemsGetCollection200ResponseHydraSearchHydraMappingInner { + type?: string; + variable?: string; + property?: string | null; + required?: boolean; +} + diff --git a/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraView.ts b/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraView.ts new file mode 100644 index 0000000..2d589cd --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiAccountTradePileItemsGetCollection200ResponseHydraView.ts @@ -0,0 +1,22 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface ApiAccountTradePileItemsGetCollection200ResponseHydraView { + id?: string; + type?: string; + 'hydra:first'?: string; + 'hydra:last'?: string; + 'hydra:previous'?: string; + 'hydra:next'?: string; +} + diff --git a/angular/src/app/core/api/v1/model/apiCandidateStatsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiCandidateStatsGetCollection200Response.ts new file mode 100644 index 0000000..556deb1 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiCandidateStatsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; +import { CandidateStatJsonld } from './candidateStatJsonld'; + + +export interface ApiCandidateStatsGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiCandidatesGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiCandidatesGetCollection200Response.ts new file mode 100644 index 0000000..30f8b3e --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiCandidatesGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { CandidateJsonld } from './candidateJsonld'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; + + +export interface ApiCandidatesGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiGameAccountsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiGameAccountsGetCollection200Response.ts new file mode 100644 index 0000000..a7212cd --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiGameAccountsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { GameAccountJsonld } from './gameAccountJsonld'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; + + +export interface ApiGameAccountsGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiLogAccountCreditsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiLogAccountCreditsGetCollection200Response.ts new file mode 100644 index 0000000..2fa2a14 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiLogAccountCreditsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; +import { LogAccountCreditJsonld } from './logAccountCreditJsonld'; + + +export interface ApiLogAccountCreditsGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiLogAccountProfitsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiLogAccountProfitsGetCollection200Response.ts new file mode 100644 index 0000000..843925e --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiLogAccountProfitsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { LogAccountProfitJsonld } from './logAccountProfitJsonld'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; + + +export interface ApiLogAccountProfitsGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiLogAccountSoldItemsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiLogAccountSoldItemsGetCollection200Response.ts new file mode 100644 index 0000000..8c97da0 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiLogAccountSoldItemsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { LogAccountSoldItemJsonld } from './logAccountSoldItemJsonld'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; + + +export interface ApiLogAccountSoldItemsGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiLogGeneralsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiLogGeneralsGetCollection200Response.ts new file mode 100644 index 0000000..e9fb5fb --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiLogGeneralsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { LogGeneralJsonld } from './logGeneralJsonld'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; + + +export interface ApiLogGeneralsGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiLogTotalProfitsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiLogTotalProfitsGetCollection200Response.ts new file mode 100644 index 0000000..60bfc25 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiLogTotalProfitsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; +import { LogTotalProfitJsonld } from './logTotalProfitJsonld'; + + +export interface ApiLogTotalProfitsGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiMediaObjectsGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiMediaObjectsGetCollection200Response.ts new file mode 100644 index 0000000..c25e377 --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiMediaObjectsGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; +import { MediaObjectJsonldMediaObjectRead } from './mediaObjectJsonldMediaObjectRead'; + + +export interface ApiMediaObjectsGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiPlayersGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiPlayersGetCollection200Response.ts new file mode 100644 index 0000000..ef1b51b --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiPlayersGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { PlayerJsonld } from './playerJsonld'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; + + +export interface ApiPlayersGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiRaritiesGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiRaritiesGetCollection200Response.ts new file mode 100644 index 0000000..c855d5c --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiRaritiesGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { RarityJsonld } from './rarityJsonld'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; + + +export interface ApiRaritiesGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/apiUsersGetCollection200Response.ts b/angular/src/app/core/api/v1/model/apiUsersGetCollection200Response.ts new file mode 100644 index 0000000..183aeef --- /dev/null +++ b/angular/src/app/core/api/v1/model/apiUsersGetCollection200Response.ts @@ -0,0 +1,23 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ApiAccountTradePileItemsGetCollection200ResponseHydraView } from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +import { UserJsonld } from './userJsonld'; +import { ApiAccountTradePileItemsGetCollection200ResponseHydraSearch } from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; + + +export interface ApiUsersGetCollection200Response { + 'hydra:member': Array; + 'hydra:totalItems'?: number; + 'hydra:view'?: ApiAccountTradePileItemsGetCollection200ResponseHydraView; + 'hydra:search'?: ApiAccountTradePileItemsGetCollection200ResponseHydraSearch; +} + diff --git a/angular/src/app/core/api/v1/model/candidate.ts b/angular/src/app/core/api/v1/model/candidate.ts new file mode 100644 index 0000000..174ddcd --- /dev/null +++ b/angular/src/app/core/api/v1/model/candidate.ts @@ -0,0 +1,70 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface Candidate { + readonly dbId?: number | null; + readonly rarity?: string; + readonly candidateStat?: string; + readonly player?: string; + readonly firstname?: string | null; + readonly lastname?: string | null; + readonly nickname?: string | null; + readonly fullDisplayInfo?: string | null; + readonly eaAssetId: number | null; + readonly eaResourceId: number | null; + readonly rareFlag: number | null; + readonly rarityName?: string | null; + readonly image?: string | null; + readonly imageUrl?: string | null; + readonly cardImageUrl?: string | null; + readonly stockCountTotal?: number | null; + readonly stockCountReal?: number | null; + futBinId?: number | null; + futBinName?: string | null; + futBinPrice?: number | null; + futBinSellingPrice?: number | null; + readonly lastFutBinUpdate?: string | null; + futWizId?: number | null; + futWizPrice?: number | null; + futwizName?: string | null; + futWizSellingPrice?: number | null; + readonly lastFutWizUpdate?: string | null; + rating: number | null; + highestBuyBinPrice?: number | null; + sellStartingBid?: number | null; + sellBinPrice?: number | null; + lastFoundMinRange?: number | null; + lastFoundMaxRange?: number | null; + lastFoundLowestBin?: number | null; + readonly lowestBinUpdateDate?: string | null; + buy: boolean | null; + maxBuyPrice?: number | null; + buyStyle: number | null; + newBuySelective: boolean | null; + remove: boolean | null; + leagueId?: number | null; + nationId?: number | null; + prio?: number | null; + listCnt: number | null; + soldCnt: number | null; + note?: string | null; + relevant: boolean | null; + adjust100: boolean | null; + directReBuy: boolean | null; + readonly marketAverage?: number | null; + readonly creationDate: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/candidateJsonld.ts b/angular/src/app/core/api/v1/model/candidateJsonld.ts new file mode 100644 index 0000000..5abc26b --- /dev/null +++ b/angular/src/app/core/api/v1/model/candidateJsonld.ts @@ -0,0 +1,77 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { RarityJsonld } from './rarityJsonld'; +import { PlayerJsonld } from './playerJsonld'; +import { CandidateStatJsonld } from './candidateStatJsonld'; +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface CandidateJsonld { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + readonly dbId?: number | null; + readonly rarity?: RarityJsonld; + readonly candidateStat?: CandidateStatJsonld; + readonly player?: PlayerJsonld; + readonly firstname?: string | null; + readonly lastname?: string | null; + readonly nickname?: string | null; + readonly fullDisplayInfo?: string | null; + readonly eaAssetId: number | null; + readonly eaResourceId: number | null; + readonly rareFlag: number | null; + readonly rarityName?: string | null; + readonly image?: string | null; + readonly imageUrl?: string | null; + readonly cardImageUrl?: string | null; + readonly stockCountTotal?: number | null; + readonly stockCountReal?: number | null; + futBinId?: number | null; + futBinName?: string | null; + futBinPrice?: number | null; + futBinSellingPrice?: number | null; + readonly lastFutBinUpdate?: string | null; + futWizId?: number | null; + futWizPrice?: number | null; + futwizName?: string | null; + futWizSellingPrice?: number | null; + readonly lastFutWizUpdate?: string | null; + rating: number | null; + highestBuyBinPrice?: number | null; + sellStartingBid?: number | null; + sellBinPrice?: number | null; + lastFoundMinRange?: number | null; + lastFoundMaxRange?: number | null; + lastFoundLowestBin?: number | null; + readonly lowestBinUpdateDate?: string | null; + buy: boolean | null; + maxBuyPrice?: number | null; + buyStyle: number | null; + newBuySelective: boolean | null; + remove: boolean | null; + leagueId?: number | null; + nationId?: number | null; + prio?: number | null; + listCnt: number | null; + soldCnt: number | null; + note?: string | null; + relevant: boolean | null; + adjust100: boolean | null; + directReBuy: boolean | null; + readonly marketAverage?: number | null; + readonly creationDate: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/candidateStatJsonld.ts b/angular/src/app/core/api/v1/model/candidateStatJsonld.ts new file mode 100644 index 0000000..647559c --- /dev/null +++ b/angular/src/app/core/api/v1/model/candidateStatJsonld.ts @@ -0,0 +1,73 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { CandidateJsonld } from './candidateJsonld'; +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface CandidateStatJsonld { + readonly id?: string; + readonly type?: string; + context?: AccountTradePileItemJsonldContext; + readonly candidateItem?: CandidateJsonld; + revRl6?: number; + rl6?: number; + sold6?: number; + rat6?: number; + rev6?: number; + revRl12?: number; + rl12?: number; + sold12?: number; + rat12?: number; + rev12?: number; + revRl24?: number; + rl24?: number; + sold24?: number; + rat24?: number; + rev24?: number; + revRl3d?: number; + rl3d?: number; + sold3d?: number; + rat3d?: number; + rev3d?: number; + revRl1w?: number; + rl1w?: number; + sold1w?: number; + rat1w?: number; + rev1w?: number; + revRl2w?: number; + rl2w?: number; + sold2w?: number; + rat2w?: number; + rev2w?: number; + revRl3w?: number; + rl3w?: number; + sold3w?: number; + rat3w?: number; + rev3w?: number; + revRl4w?: number; + rl4w?: number; + sold4w?: number; + rat4w?: number; + rev4w?: number; + revRl?: number; + rl?: number; + sold?: number; + rat?: number; + rev?: number; + snipingRev?: number; + readonly creationDate?: string | null; + readonly lastUpdateDate?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/candidateStockAccountsJsonld.ts b/angular/src/app/core/api/v1/model/candidateStockAccountsJsonld.ts new file mode 100644 index 0000000..aea3ac7 --- /dev/null +++ b/angular/src/app/core/api/v1/model/candidateStockAccountsJsonld.ts @@ -0,0 +1,26 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { GameAccountJsonld } from './gameAccountJsonld'; +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface CandidateStockAccountsJsonld { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + candidatesStockAccounts?: Array; + candidatesMissingAccounts?: any | null; +} + diff --git a/angular/src/app/core/api/v1/model/config.ts b/angular/src/app/core/api/v1/model/config.ts new file mode 100644 index 0000000..8798ce7 --- /dev/null +++ b/angular/src/app/core/api/v1/model/config.ts @@ -0,0 +1,28 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface Config { + systemActive?: boolean; + systemRunning?: boolean; + readonly lastUpdateDate?: string; + readonly lastCheckDate?: string; + readonly processCnt?: number; + sleepHourStart?: number | null; + sleepHourEnd?: number | null; + checkMaxSales?: boolean; + numMaxSales?: number | null; +} + diff --git a/angular/src/app/core/api/v1/model/configJsonld.ts b/angular/src/app/core/api/v1/model/configJsonld.ts new file mode 100644 index 0000000..e737543 --- /dev/null +++ b/angular/src/app/core/api/v1/model/configJsonld.ts @@ -0,0 +1,32 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface ConfigJsonld { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + systemActive?: boolean; + systemRunning?: boolean; + readonly lastUpdateDate?: string; + readonly lastCheckDate?: string; + readonly processCnt?: number; + sleepHourStart?: number | null; + sleepHourEnd?: number | null; + checkMaxSales?: boolean; + numMaxSales?: number | null; +} + diff --git a/angular/src/app/core/api/v1/model/gameAccount.ts b/angular/src/app/core/api/v1/model/gameAccount.ts new file mode 100644 index 0000000..883fe18 --- /dev/null +++ b/angular/src/app/core/api/v1/model/gameAccount.ts @@ -0,0 +1,74 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface GameAccount { + readonly dbId?: number | null; + email: string | null; + profile: string | null; + password: string | null; + emailPw?: string | null; + readonly credits?: number | null; + readonly cntItems?: number | null; + readonly cntSoldItems?: number | null; + readonly cntInactiveItems?: number | null; + active: boolean | null; + running: boolean | null; + relist: boolean | null; + relistDate?: string | null; + blocked: boolean | null; + sniping: boolean | null; + readonly snipingDate?: string | null; + tmOpen: boolean | null; + tmState?: number | null; + dead: boolean | null; + lockedMsg: boolean | null; + dynPrices: boolean | null; + newBuy: boolean | null; + readonly newBuyDate?: string | null; + newBuySelective: boolean | null; + reBuy: boolean | null; + readonly rebuyDate?: string | null; + readonly connectionDate?: string | null; + importWatchlist: boolean | null; + autoReBuy: boolean | null; + directReBuy: boolean | null; + itemMaxBuyPrice?: number | null; + readonly revenue?: number | null; + readonly futWizValue?: number | null; + readonly eaMarketAvgValue?: number | null; + mfaCode?: string | null; + twoFactorAuthKey?: string | null; + login2FaViaApp?: boolean | null; + eaCode1?: string | null; + eaCode2?: string | null; + eaCode3?: string | null; + eaCode4?: string | null; + eaCode5?: string | null; + eaCode6?: string | null; + snipingCnt1h?: number | null; + snipingCnt3h?: number | null; + snipingCnt6h?: number | null; + snipingCnt12h?: number | null; + snipingCnt24h?: number | null; + snipingCnt3d?: number | null; + snipingCnt1w?: number | null; + note?: string | null; + readonly loopStartDate?: string | null; + readonly loopFinishDate?: string | null; + readonly creationDate?: string | null; + readonly owner?: string; +} + diff --git a/angular/src/app/core/api/v1/model/gameAccountJsonld.ts b/angular/src/app/core/api/v1/model/gameAccountJsonld.ts new file mode 100644 index 0000000..db1ff77 --- /dev/null +++ b/angular/src/app/core/api/v1/model/gameAccountJsonld.ts @@ -0,0 +1,79 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { UserJsonld } from './userJsonld'; +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface GameAccountJsonld { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + readonly dbId?: number | null; + email: string | null; + profile: string | null; + password: string | null; + emailPw?: string | null; + readonly credits?: number | null; + readonly cntItems?: number | null; + readonly cntSoldItems?: number | null; + readonly cntInactiveItems?: number | null; + active: boolean | null; + running: boolean | null; + relist: boolean | null; + relistDate?: string | null; + blocked: boolean | null; + sniping: boolean | null; + readonly snipingDate?: string | null; + tmOpen: boolean | null; + tmState?: number | null; + dead: boolean | null; + lockedMsg: boolean | null; + dynPrices: boolean | null; + newBuy: boolean | null; + readonly newBuyDate?: string | null; + newBuySelective: boolean | null; + reBuy: boolean | null; + readonly rebuyDate?: string | null; + readonly connectionDate?: string | null; + importWatchlist: boolean | null; + autoReBuy: boolean | null; + directReBuy: boolean | null; + itemMaxBuyPrice?: number | null; + readonly revenue?: number | null; + readonly futWizValue?: number | null; + readonly eaMarketAvgValue?: number | null; + mfaCode?: string | null; + twoFactorAuthKey?: string | null; + login2FaViaApp?: boolean | null; + eaCode1?: string | null; + eaCode2?: string | null; + eaCode3?: string | null; + eaCode4?: string | null; + eaCode5?: string | null; + eaCode6?: string | null; + snipingCnt1h?: number | null; + snipingCnt3h?: number | null; + snipingCnt6h?: number | null; + snipingCnt12h?: number | null; + snipingCnt24h?: number | null; + snipingCnt3d?: number | null; + snipingCnt1w?: number | null; + note?: string | null; + readonly loopStartDate?: string | null; + readonly loopFinishDate?: string | null; + readonly creationDate?: string | null; + readonly owner?: UserJsonld; +} + diff --git a/angular/src/app/core/api/v1/model/logAccountCreditJsonld.ts b/angular/src/app/core/api/v1/model/logAccountCreditJsonld.ts new file mode 100644 index 0000000..0573365 --- /dev/null +++ b/angular/src/app/core/api/v1/model/logAccountCreditJsonld.ts @@ -0,0 +1,28 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { GameAccountJsonld } from './gameAccountJsonld'; +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface LogAccountCreditJsonld { + readonly id?: string; + readonly type?: string; + context?: AccountTradePileItemJsonldContext; + readonly gameAccount?: GameAccountJsonld; + readonly credits?: number | null; + readonly revenue?: number | null; + readonly creationDate?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/logAccountProfitJsonld.ts b/angular/src/app/core/api/v1/model/logAccountProfitJsonld.ts new file mode 100644 index 0000000..e2dff5f --- /dev/null +++ b/angular/src/app/core/api/v1/model/logAccountProfitJsonld.ts @@ -0,0 +1,56 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { GameAccountJsonld } from './gameAccountJsonld'; +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface LogAccountProfitJsonld { + readonly id?: string; + readonly type?: string; + context?: AccountTradePileItemJsonldContext; + readonly gameAccount?: GameAccountJsonld; + credits?: number | null; + revenue?: number | null; + tpValue?: number | null; + revToday?: number | null; + rev3hours?: number | null; + rev6hours?: number | null; + rev12hours?: number | null; + rev24hours?: number | null; + rev3days?: number | null; + rev1week?: number | null; + rev2weeks?: number | null; + rev3weeks?: number | null; + rev4weeks?: number | null; + rev2months?: number | null; + rev3months?: number | null; + revTotal?: number | null; + numSalesToday?: number | null; + numSales3hours?: number | null; + numSales6hours?: number | null; + numSales12hours?: number | null; + numSales24hours?: number | null; + numSales3days?: number | null; + numSales1week?: number | null; + numSales2weeks?: number | null; + numSales3weeks?: number | null; + numSales4weeks?: number | null; + numSales2months?: number | null; + numSales3months?: number | null; + numSalesTotal?: number | null; + isDailyProfit?: boolean | null; + creationDate?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/logAccountSoldItemJsonld.ts b/angular/src/app/core/api/v1/model/logAccountSoldItemJsonld.ts new file mode 100644 index 0000000..fc6c88b --- /dev/null +++ b/angular/src/app/core/api/v1/model/logAccountSoldItemJsonld.ts @@ -0,0 +1,45 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { GameAccountJsonld } from './gameAccountJsonld'; +import { CandidateJsonld } from './candidateJsonld'; +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface LogAccountSoldItemJsonld { + readonly id?: string; + readonly type?: string; + context?: AccountTradePileItemJsonldContext; + readonly dbId?: number | null; + readonly gameAccount?: GameAccountJsonld; + readonly candidateItem?: CandidateJsonld; + readonly eaId?: number; + readonly contracts?: number | null; + readonly playStyle?: number | null; + readonly lastSalePrice?: number; + readonly currentBid?: number; + readonly startingBid?: number; + readonly binPrice?: number; + readonly minRange?: number; + readonly maxRange?: number; + readonly tradeState?: string; + readonly eaTradeId?: number; + readonly listCnt?: number; + readonly revenue?: number; + readonly reBought?: boolean; + readonly snipedItem?: boolean; + readonly firstListDate?: string | null; + readonly creationDate?: string; +} + diff --git a/angular/src/app/core/api/v1/model/logGeneralJsonld.ts b/angular/src/app/core/api/v1/model/logGeneralJsonld.ts new file mode 100644 index 0000000..f21c8aa --- /dev/null +++ b/angular/src/app/core/api/v1/model/logGeneralJsonld.ts @@ -0,0 +1,56 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { GameAccountJsonld } from './gameAccountJsonld'; +import { CandidateJsonld } from './candidateJsonld'; +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface LogGeneralJsonld { + readonly id?: string; + readonly type?: string; + context?: AccountTradePileItemJsonldContext; + readonly dbId?: number; + readonly gameAccount?: GameAccountJsonld; + readonly candidateItem?: CandidateJsonld; + logType: LogGeneralJsonld.LogTypeEnum; + readonly message?: string | null; + readonly creationDate?: string | null; +} +export namespace LogGeneralJsonld { + export type LogTypeEnum = 'alert' | 'alert_low' | 'cant_buy' | 'debug' | 'debug_server_logs' | 'info' | 'moved_to_club' | 'new_buy' | 'player_price_changed' | 'preview_pack' | 'preview_pack_alert' | 'price_range_errors' | 'profit_overview' | 'removed' | 'rebuy' | 'sales' | 'server_logs' | 'stats' | 'hourly_stats'; + export const LogTypeEnum = { + Alert: 'alert' as LogTypeEnum, + AlertLow: 'alert_low' as LogTypeEnum, + CantBuy: 'cant_buy' as LogTypeEnum, + Debug: 'debug' as LogTypeEnum, + DebugServerLogs: 'debug_server_logs' as LogTypeEnum, + Info: 'info' as LogTypeEnum, + MovedToClub: 'moved_to_club' as LogTypeEnum, + NewBuy: 'new_buy' as LogTypeEnum, + PlayerPriceChanged: 'player_price_changed' as LogTypeEnum, + PreviewPack: 'preview_pack' as LogTypeEnum, + PreviewPackAlert: 'preview_pack_alert' as LogTypeEnum, + PriceRangeErrors: 'price_range_errors' as LogTypeEnum, + ProfitOverview: 'profit_overview' as LogTypeEnum, + Removed: 'removed' as LogTypeEnum, + Rebuy: 'rebuy' as LogTypeEnum, + Sales: 'sales' as LogTypeEnum, + ServerLogs: 'server_logs' as LogTypeEnum, + Stats: 'stats' as LogTypeEnum, + HourlyStats: 'hourly_stats' as LogTypeEnum + }; +} + + diff --git a/angular/src/app/core/api/v1/model/logTotalProfit.ts b/angular/src/app/core/api/v1/model/logTotalProfit.ts new file mode 100644 index 0000000..54213e7 --- /dev/null +++ b/angular/src/app/core/api/v1/model/logTotalProfit.ts @@ -0,0 +1,51 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface LogTotalProfit { + credits?: number | null; + revenue?: number | null; + tpValueFutwiz?: number | null; + tpValueEaAverage?: number | null; + revToday?: number | null; + rev3hours?: number | null; + rev6hours?: number | null; + rev12hours?: number | null; + rev24hours?: number | null; + rev3days?: number | null; + rev1week?: number | null; + rev2weeks?: number | null; + rev3weeks?: number | null; + rev4weeks?: number | null; + rev2months?: number | null; + rev3months?: number | null; + revTotal?: number | null; + numSalesToday?: number | null; + numSales3hours?: number | null; + numSales6hours?: number | null; + numSales12hours?: number | null; + numSales24hours?: number | null; + numSales3days?: number | null; + numSales1week?: number | null; + numSales2weeks?: number | null; + numSales3weeks?: number | null; + numSales4weeks?: number | null; + numSales2months?: number | null; + numSales3months?: number | null; + numSalesTotal?: number | null; + isDailyProfit?: boolean | null; + creationDate?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/logTotalProfitJsonld.ts b/angular/src/app/core/api/v1/model/logTotalProfitJsonld.ts new file mode 100644 index 0000000..564e993 --- /dev/null +++ b/angular/src/app/core/api/v1/model/logTotalProfitJsonld.ts @@ -0,0 +1,55 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface LogTotalProfitJsonld { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + credits?: number | null; + revenue?: number | null; + tpValueFutwiz?: number | null; + tpValueEaAverage?: number | null; + revToday?: number | null; + rev3hours?: number | null; + rev6hours?: number | null; + rev12hours?: number | null; + rev24hours?: number | null; + rev3days?: number | null; + rev1week?: number | null; + rev2weeks?: number | null; + rev3weeks?: number | null; + rev4weeks?: number | null; + rev2months?: number | null; + rev3months?: number | null; + revTotal?: number | null; + numSalesToday?: number | null; + numSales3hours?: number | null; + numSales6hours?: number | null; + numSales12hours?: number | null; + numSales24hours?: number | null; + numSales3days?: number | null; + numSales1week?: number | null; + numSales2weeks?: number | null; + numSales3weeks?: number | null; + numSales4weeks?: number | null; + numSales2months?: number | null; + numSales3months?: number | null; + numSalesTotal?: number | null; + isDailyProfit?: boolean | null; + creationDate?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/loginCheckPost200Response.ts b/angular/src/app/core/api/v1/model/loginCheckPost200Response.ts new file mode 100644 index 0000000..ee7303b --- /dev/null +++ b/angular/src/app/core/api/v1/model/loginCheckPost200Response.ts @@ -0,0 +1,17 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface LoginCheckPost200Response { + readonly token: string; +} + diff --git a/angular/src/app/core/api/v1/model/loginCheckPostRequest.ts b/angular/src/app/core/api/v1/model/loginCheckPostRequest.ts new file mode 100644 index 0000000..1d223b5 --- /dev/null +++ b/angular/src/app/core/api/v1/model/loginCheckPostRequest.ts @@ -0,0 +1,18 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface LoginCheckPostRequest { + email: string; + password: string; +} + diff --git a/angular/src/app/core/api/v1/model/mediaObjectJsonldMediaObjectRead.ts b/angular/src/app/core/api/v1/model/mediaObjectJsonldMediaObjectRead.ts new file mode 100644 index 0000000..2fcbe96 --- /dev/null +++ b/angular/src/app/core/api/v1/model/mediaObjectJsonldMediaObjectRead.ts @@ -0,0 +1,24 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface MediaObjectJsonldMediaObjectRead { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + contentUrl?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/modeConfig.ts b/angular/src/app/core/api/v1/model/modeConfig.ts new file mode 100644 index 0000000..dfbe12a --- /dev/null +++ b/angular/src/app/core/api/v1/model/modeConfig.ts @@ -0,0 +1,21 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface ModeConfig { + autoReBuyMinSoldItems?: number; + autoReBuyMinLastHours?: number; +} + diff --git a/angular/src/app/core/api/v1/model/modeConfigJsonld.ts b/angular/src/app/core/api/v1/model/modeConfigJsonld.ts new file mode 100644 index 0000000..6d83998 --- /dev/null +++ b/angular/src/app/core/api/v1/model/modeConfigJsonld.ts @@ -0,0 +1,25 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface ModeConfigJsonld { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + autoReBuyMinSoldItems?: number; + autoReBuyMinLastHours?: number; +} + diff --git a/angular/src/app/core/api/v1/model/models.ts b/angular/src/app/core/api/v1/model/models.ts new file mode 100644 index 0000000..5d5198e --- /dev/null +++ b/angular/src/app/core/api/v1/model/models.ts @@ -0,0 +1,45 @@ +export * from './accountTradePileItem'; +export * from './accountTradePileItemJsonld'; +export * from './accountTradePileItemJsonldContext'; +export * from './accountTradePileItemJsonldContextOneOf'; +export * from './apiAccountTradePileItemsGetCollection200Response'; +export * from './apiAccountTradePileItemsGetCollection200ResponseHydraSearch'; +export * from './apiAccountTradePileItemsGetCollection200ResponseHydraSearchHydraMappingInner'; +export * from './apiAccountTradePileItemsGetCollection200ResponseHydraView'; +export * from './apiCandidateStatsGetCollection200Response'; +export * from './apiCandidatesGetCollection200Response'; +export * from './apiGameAccountsGetCollection200Response'; +export * from './apiLogAccountCreditsGetCollection200Response'; +export * from './apiLogAccountProfitsGetCollection200Response'; +export * from './apiLogAccountSoldItemsGetCollection200Response'; +export * from './apiLogGeneralsGetCollection200Response'; +export * from './apiLogTotalProfitsGetCollection200Response'; +export * from './apiMediaObjectsGetCollection200Response'; +export * from './apiPlayersGetCollection200Response'; +export * from './apiRaritiesGetCollection200Response'; +export * from './apiUsersGetCollection200Response'; +export * from './candidate'; +export * from './candidateJsonld'; +export * from './candidateStatJsonld'; +export * from './candidateStockAccountsJsonld'; +export * from './config'; +export * from './configJsonld'; +export * from './gameAccount'; +export * from './gameAccountJsonld'; +export * from './logAccountCreditJsonld'; +export * from './logAccountProfitJsonld'; +export * from './logAccountSoldItemJsonld'; +export * from './logGeneralJsonld'; +export * from './logTotalProfit'; +export * from './logTotalProfitJsonld'; +export * from './loginCheckPost200Response'; +export * from './loginCheckPostRequest'; +export * from './mediaObjectJsonldMediaObjectRead'; +export * from './modeConfig'; +export * from './modeConfigJsonld'; +export * from './player'; +export * from './playerJsonld'; +export * from './rarity'; +export * from './rarityJsonld'; +export * from './systemStatJsonld'; +export * from './userJsonld'; diff --git a/angular/src/app/core/api/v1/model/player.ts b/angular/src/app/core/api/v1/model/player.ts new file mode 100644 index 0000000..6fc38ae --- /dev/null +++ b/angular/src/app/core/api/v1/model/player.ts @@ -0,0 +1,25 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface Player { + eaAssetId?: number; + firstname?: string | null; + lastname?: string | null; + nickname?: string | null; + rating?: number; + readonly creationDate?: string; +} + diff --git a/angular/src/app/core/api/v1/model/playerJsonld.ts b/angular/src/app/core/api/v1/model/playerJsonld.ts new file mode 100644 index 0000000..df13f63 --- /dev/null +++ b/angular/src/app/core/api/v1/model/playerJsonld.ts @@ -0,0 +1,29 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface PlayerJsonld { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + eaAssetId?: number; + firstname?: string | null; + lastname?: string | null; + nickname?: string | null; + rating?: number; + readonly creationDate?: string; +} + diff --git a/angular/src/app/core/api/v1/model/rarity.ts b/angular/src/app/core/api/v1/model/rarity.ts new file mode 100644 index 0000000..00ffd29 --- /dev/null +++ b/angular/src/app/core/api/v1/model/rarity.ts @@ -0,0 +1,25 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +/** + * + */ +export interface Rarity { + readonly rareFlag?: number; + name?: string | null; + readonly untradable?: boolean; + readonly image?: string | null; + readonly imageUrl?: string | null; + readonly imageBronze?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/rarityJsonld.ts b/angular/src/app/core/api/v1/model/rarityJsonld.ts new file mode 100644 index 0000000..81c7f57 --- /dev/null +++ b/angular/src/app/core/api/v1/model/rarityJsonld.ts @@ -0,0 +1,29 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface RarityJsonld { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + readonly rareFlag?: number; + name?: string | null; + readonly untradable?: boolean; + readonly image?: string | null; + readonly imageUrl?: string | null; + readonly imageBronze?: string | null; +} + diff --git a/angular/src/app/core/api/v1/model/systemStatJsonld.ts b/angular/src/app/core/api/v1/model/systemStatJsonld.ts new file mode 100644 index 0000000..6a989b5 --- /dev/null +++ b/angular/src/app/core/api/v1/model/systemStatJsonld.ts @@ -0,0 +1,45 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { ConfigJsonld } from './configJsonld'; +import { ModeConfigJsonld } from './modeConfigJsonld'; +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; +import { LogTotalProfitJsonld } from './logTotalProfitJsonld'; + + +/** + * + */ +export interface SystemStatJsonld { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + readonly totalLogProfit?: LogTotalProfitJsonld; + readonly config?: ConfigJsonld; + readonly modeConfig?: ModeConfigJsonld; + numAccounts?: number | null; + numDeadAccounts?: number | null; + numActiveAccounts?: number | null; + numTmOpenAccounts?: number | null; + numTmClosedAccounts?: number | null; + numBlockedAccounts?: number | null; + numRunningAccounts?: number | null; + numTradepileItems?: number | null; + numSoldTradepileItems?: number | null; + numActiveTradepileItems?: number | null; + numExpiredTradepileItems?: number | null; + numInactiveTradepileItems?: number | null; + numCandidates?: number | null; + numRelevantCandidates?: number | null; + numBuyCandidates?: number | null; + totalSnipingRev?: number | null; +} + diff --git a/angular/src/app/core/api/v1/model/userJsonld.ts b/angular/src/app/core/api/v1/model/userJsonld.ts new file mode 100644 index 0000000..8721099 --- /dev/null +++ b/angular/src/app/core/api/v1/model/userJsonld.ts @@ -0,0 +1,35 @@ +/** + * Hello API Platform + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { AccountTradePileItemJsonldContext } from './accountTradePileItemJsonldContext'; + + +/** + * + */ +export interface UserJsonld { + context?: AccountTradePileItemJsonldContext; + readonly id?: string; + readonly type?: string; + email: string | null; + firstName: string | null; + lastName: string | null; + image?: string | null; + readonly imageUrl?: string | null; + readonly fullName?: string | null; + /** + * The plaintext password when being set or changed. + */ + password?: string | null; + active?: boolean; + readonly createdAt?: string | null; +} + diff --git a/angular/src/app/core/api/v1/param.ts b/angular/src/app/core/api/v1/param.ts new file mode 100644 index 0000000..78a2d20 --- /dev/null +++ b/angular/src/app/core/api/v1/param.ts @@ -0,0 +1,69 @@ +/** + * Standard parameter styles defined by OpenAPI spec + */ +export type StandardParamStyle = + | 'matrix' + | 'label' + | 'form' + | 'simple' + | 'spaceDelimited' + | 'pipeDelimited' + | 'deepObject' + ; + +/** + * The OpenAPI standard {@link StandardParamStyle}s may be extended by custom styles by the user. + */ +export type ParamStyle = StandardParamStyle | string; + +/** + * Standard parameter locations defined by OpenAPI spec + */ +export type ParamLocation = 'query' | 'header' | 'path' | 'cookie'; + +/** + * Standard types as defined in OpenAPI Specification: Data Types + */ +export type StandardDataType = + | "integer" + | "number" + | "boolean" + | "string" + | "object" + | "array" + ; + +/** + * Standard {@link DataType}s plus your own types/classes. + */ +export type DataType = StandardDataType | string; + +/** + * Standard formats as defined in OpenAPI Specification: Data Types + */ +export type StandardDataFormat = + | "int32" + | "int64" + | "float" + | "double" + | "byte" + | "binary" + | "date" + | "date-time" + | "password" + ; + +export type DataFormat = StandardDataFormat | string; + +/** + * The parameter to encode. + */ +export interface Param { + name: string; + value: unknown; + in: ParamLocation; + style: ParamStyle, + explode: boolean; + dataType: DataType; + dataFormat: DataFormat | undefined; +} diff --git a/angular/src/app/core/api/v1/variables.ts b/angular/src/app/core/api/v1/variables.ts new file mode 100644 index 0000000..6fe5854 --- /dev/null +++ b/angular/src/app/core/api/v1/variables.ts @@ -0,0 +1,9 @@ +import { InjectionToken } from '@angular/core'; + +export const BASE_PATH = new InjectionToken('basePath'); +export const COLLECTION_FORMATS = { + 'csv': ',', + 'tsv': ' ', + 'ssv': ' ', + 'pipes': '|' +} 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/fonts/material-icons-v142-latin-regular.woff2 b/angular/src/assets/fonts/material-icons-v142-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5492a6e75937db19f9ba860cd2575744887fa26b GIT binary patch literal 128352 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

l*K8_>P7#5$l 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 C0pEB4 literal 0 HcmV?d00001 diff --git a/angular/src/assets/fonts/montserrat-v26-latin-600italic.woff2 b/angular/src/assets/fonts/montserrat-v26-latin-600italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..40f6d9a9aa50d2030f996e4ff7908cff0398ba64 GIT binary patch literal 15624 zcmV+jJ@>+QPew8T0RR9106ho*5C8xG0F!(G06e4s0RR9100000000000000000000 z0000Qfi@fAUL1>d24Fu^R6$fg0EI*m2nvCTWbX$Hg#Z8nHUcCAiF^bg1%-MCj}#0C z8;61w+!&X^c@T)=zB_xOC{?p?6w>ZZD)a3B?+HrA*zc_y13}1y%giQXRfeu?RH;UF zs%y}SyBDK6b9Jp!y7l;daRhV>SVA*g_*vH0K})xqJ5Su9K5@J9uitY55epXFz@~_( zy=pDo+No1>YP7%%E5G;A?;r7#g9Vc@4KMkbGq7#sPjd1S1$9x8)w2Q)1YRUxME^W( z^ZkFv!9goxfg&~rM%2RUS%E!c8R=Xz7tUB@=r(nwZVmi@-1EP+*12B_9@KaufkxH@ z`UwLMW349J!}HVGgF&H6XrxJF-kAI(jrosh+ca&HRFj%f#|p)L3R5Y&A#=v&Wv*;@ z$He)6>K^pmx8E`oi(15@iA1ngFITMQrOp&+`^)rec+ z_S@>l&tiys65Z~hevwGYUrZ497BF#5b8GU&6drH{3dp!wudaH^x~&6%5Qri!sWg^% zHS9eAaB8QAkP>Bp|G%8zzi;^N&Iy|z9%U&*S;{1^lr@x6b%dj8bQcaG{iCSe68OtY z6DEOQ0IZtnu&#F6)`l%}DfJe&t`xZlFUW;1`nxbE5E2N_kf&48$ZDU}|kj2@={-+jRU4-a1uLD51H1gaeY zpm_|6Y6TwtAp6p@Dg++%kCfDPe z?1}&Xw;ktxNAGuznVE{JioU4Gi;AkVnNE~2mRQ@QZcvTt8b`2Syg1BkdyLII;$5H;h3m21o}nfeZ)f!iv5mL{a5p2tg5p=|FTLdTb$f z+#nu2AYObRenKJPA|ZoBLt>RfD%C?q7!4U~9OS%K1g#i|fXQUUjVL41}p%Bg$uP?nyKGO>GMS_AV0dNT3rA7Cco!ZkS{OvU5l$|UUaPPMr?mo9 zUC*nxVM!BwF{=LZ=(pBXT|ZwWUvicUbJ~;`6@Oh5BU0EZE5p=N1oZdAK6~x*wNKY{ z-(TMJGSAyQ;|ZJi(>`~&$u%x>fwP>#Vw}U?#+PdBG;5;?Lrhuz&7)nT8s!S*NRuE& z1b$V5NciukZ@Rtr5~_l*KrOF#dkG2?)jgmpUCV<{r@}rYMLQ$fqkZhlvs_Ql=E*fK zvtLG`(Uu%BF0_^mUl7ySlRGy!qGHl91O-V>MU!tMedQ_~W{LxdlI5 zoHr2iiKCbII|Z)jyK^@~O^W}o$*$dFJb{?)-cA&_m}?B>(TET*93)nza9JdfhdNeL zJoSa&^FI60smFCM)u~@=_C-!m`B4L1IIRw~-FvM|=!XoSd)?NrQ zb-195prZ&t6ae5D1u*Ia0AsAhD%JsJ08ju2mkjudfFuBb9>NMrWx!p41;A1HZUJWZ~3yYL_%x~0Qb?uwVe(59|mWa z0;|p%JKu@Qtq4#I#Xx?BB}IqWT~SwAL8$R@+-`F{tq#XFX1aNoh@J*G{a2-=~{&ZA?sA;g=ugcNOQ%U{_4Y&i(1C>&LU#TF))+AGz- z>Nw6uUt>inQQqK~SLsH&QE3Z> z>%BCxc>va4S8l*irW_=&v)UnZ3T;nb?N6Ra@K$ zfav>E4rFtjMld9R0m6>h&w2$3X-+2{yWm_UI1+tDHV91keOv=+rKrG(QqYW2#7Lb6 zAbzB&gK4! zd*QBt!bD!NK1B~YztHI?o#MP}VUb30X3jO~L`*7TTSzoM=Y_a$5w#&f1orYvYrqC< z2q=hUKQ_gBa@t~Y#)A2*=raWi8;hjsGtA}}=}j#ZgGz>M2GK#-Qp#czq6x}S*iQzP zx=!;Ua|+3Y!gAZzf9QU$K-$6%fcb62YYXWE%i4&oG2dt8IMH!==h*eCsMRd_l+q^d zYB_8{G!;93sDeH{8;T>-b8#0@Z|xh>chJuvT%Hl4oHl~oJ@INtTp~7_$HbyIMD-m-nX-~|IBl&GU->Am_cF1L;DdMA?* zw@SC%;GisaNv0*%35gN2aM+emt}ykr3&sou*ZY(oALXf@hK>OWA9aE@+M?mW2LNn7 z0y8tth3P5fwp%7Y?5_*|!fq*IO1nXecRH@AYKtK91;+Q;%qVp@X2%Nx!Q5RHcW39) zOEn_1rGKF%!4b#h{~g1*(-HvR3vl2lWao~9KXr^@FY3I(Tf z*{4$RtJhVHhP>H~>U5O7p0eM!8VtOKL)~nqT`aWgwQRF7Znv`C&dBppL5LAW`Qc!= z_)h4ipVZS&re1#0Nf8CvY{&NFZt~yw&L|+qr?VwtZS5IgZqvP<~6iUP8|df`SlbBuwEKs&I_Xr{Z*4+Jw zU}jitp!K4&!8inp`pnMdxNV_g&aDeu1~#>@m2EE|m}K5EffJn$K=@B=FXCBF=TASv=ZUIe&FYo zfz#RQ21%``cdZap*vN7zon8w~kV$_cQhWp(b5)9A%WfcfNa64Oy@U?;!=Pg=fhxH%$UA_=VnJ+K z@G(8GVxtk0F((82CB(26wCftlD{w(c%8&n;Tq%}w1cEtxKB_lwSqJeqKj4`nh2v<} zuEMqI9JFe5uwVTecdVjZ$Su)R5t<9JB^&()J1dfb?ZCuS{)rn$-9bh5H!cV=VkboealmrXT7w{CE z3oz@Oi94EOh^!g$BT|m+)+83Wjw62TitdT3D}V%2bUtEWbcH2D3B8(7LkaW(>yhNH zWMnvA(Wmi#`#BuPsZO84KuGm@MV5-DfLAWO#bhPHKyv5B1FZ^7RNd^r?^~2??lOyM zV{}MDTH4niP}2qWSsCf{TL8+;35JUJ1jHQM%u7lGF)dq40*$LMWjg5+T*#?^3B;VFn@NWUVhAC|wvsTWh*dgi& z)@RyMc0ZQdLqF#8xs&L)rZuq5AJ=&rL=jWdv_{7@Ae9J+!>I7**rPVA=6s(jyg`pO z`cN)ACj^!xH8ZQkM>_VLqM&3@JJdia(F5z)_zh)1qppOHJFMDm89vyIPY1J&L?%5) zK0kk`58KYLW~b^KYz7h$M9<{!VB?#$ z2L87W*OM+G0YcxK88`ykq`=?%=>A{lAxe=zl)!9}lm>|wA=Vf}j5EPVjT(*7L=Nci%_5GoWQOc+wQ2znw#5*Z{KAx<2Y3>i#h z$|N#OHkKSkNX3c~N|Yj%DPyQyIUN-$kSbN;sZ)>EpaI7SqtHehO=z5PM8=!IOru6- znj9u@)G;y|8ZzzL30!rJzzsJD+;WS+ZMVrh@PN!S&**vXIdd<(pzEcVxZZk4pi?J- zZrudF`3CFL2O01KhG3vO#2yI@s08}FchgO0oUzOT<1A3CLcU=VTn?5Vi(;Kf^v zcuCTzH9M!pD{o*)OeAANMi9fI?j7P)`|V7pagnaOB#jqm0yGYPiVft@eFIyV^co<3 z=p-(Z`AHQlLwF{j6eto2?m2xt*jEBXV3EfZ1@4gO+qVwhNMe z!vO|}x5kEmp3(88D;vlc`Afx%@-l<#Y!vW-#S~eUW0sI>6Ktw;^~QLt;kqQ9%bFB| zR}=zptScQ%&Q704(>S|vx^Y(H%*H8C#&%3Vte7AH&>NN(6l4m$;6VRvX1jX|VAmTz zUkcce?`UfVtMWaWJXn$=^T-S`iHsrjt5j7D75YJGO&0_C^|0Gv5F7|YVn9TMPk4ky zxI{o`A_SxE4P9b-D(Hw#a%BpW@!59)v#Sp~V7KwWQ;bk$jhHU{_r+6*E;9pzs^s#z zfV`E_aF-YtW!z|)#=_zuNDM^jzYSX%g=z=DkU5qD^-C3S2cUprg^h4EfjHKcVQ|MX z>wzAmvJM%lY_Jnjy3dl*4JtmD93Uo6ZDnGrOfuV|Qy5TjeB9rHFz%EPp%m5yei~_l zuNx?c2}1?++Ab672YQN#)`eK0?xZoWv@!UCbTDQhk$CSv$JR!p(F)__OB2J55rP;W zE7sr`%K}GV4mdI`SU4@E5qcUSV?ts{r2dE)2`p17jsrw0CE+|;br7Poz;_A|m+&Yj zFoj@D82(sbq5vinL6l9KMJdF&+)!VyFaPz5MNInNH4_2+@bek$gJ9kku~sO675gKU?9Ahl z;-w*LL~{nD|CKKL$W&11sd9ivX$% zZU&4;KqAJ$;J!3@je~xa)*}G!54B6Q0uUih9FSiGAb<=n0ib{e7>s~`!N_U^tSATr z1@xifZ33+rIUDYL9X;;pA%Y}m!u$(O`AGRJH=-NtK3H(MyaRlGgFu?He0ID zQRr#4Kp%2Wd~D*_F4UqMh=yQI{UkS#OPg_#doNA^H_j@5JgGGU`2YLg{5K>3|NVdY z@+QD%f52xyKil=$m6t0&Yv1#VeqZF2?Vab>0Rb!vZ0S89SGxs(TsdXkSB8JTyyv*n zPI}?9@6NdBl16VGb(O|BN1XLhmk&<)24Umi5fIZOp-)Q2gef@%C3_AWsW@@x!IKvs z9S*tRua))N3%pXl;IL*X@xLo_XcD*Z%0w zn*rlp*W;QW`SQyryY0z?UVWPKWS0qUIAFhnno%$k3j-64OP7#{4r2xk8R0Wy#he8j zmfo}G#+eIO-t1He;x9mmK*2&qh&I>|L#0ZTBw3Vf1#;ynlCM*tTGeU{H&UrlY!#xf*R`&*-t9Pv?BDd!&YE+wHqXFqYLZ5`@EvxzLjo4ZJGGsRZ%ch`CDypZo zs#(r>>+H~u4z5O}<}};lW@vF0YcCh(oQDXJh+~FPYK*(IY+?yjT&Nn*+`K`-PwJ}r z$WQz-{9#|pQcz4KES?D_(!ZeV1+g8nZ6ERG>xQu8m1wf2iHRK20U6XG(pWjC5UwIX z)au0ZZjyAJ>Ok;K7L-FctxjAJBJ7N-PMX>qCHaMMP6jP!x8fBcB`^;;ejW>&?K=b@ zWnC%Nx>PVopn+k1(RJ9%K^{TV`f`Jw0YUva%_NbiorFfCX0{|{jN(XoAbaksy8?4< zqx~XdQg*cDaM6M7d0W>ow@uQy-bN2BkNJRu%d$S1np|*5^}$1u=CEQ5C3IETR)+~a zH`_^_bZlzvN!6ncXz)W!;M@JU;Cvgw=R5I?eCWb27f0P`6b^@IKusEZa$Ix^{H?XZvV%Gxhjge!B#Ely$dPJod#-KP zB;D55U~?NL;)UmCCLE5_vkV#~Y2tw}M)=~IPN^`?I%dHPjl^fs7S4%IDRQ8tha8ZQ zR{d2n-5cULF5Gc0-~QTg>wRPi&C2IQ0Gcm)41!pi{T^vVJ*G0&-1&!PY9TR8{g??l zi(-3@xhkM^C`>7mCDc3PXY&8G$qer8Lg}3TY>UGA!co_W6R{UPe;XcR3F5I*(E=)d-fGb56ss(5p(T6^4xDVS8)pJ1>y=D%@;0^wjOqoe@b!sD97SwUG z(gXDm#4ck?Z2%MR4_))0ILl(NscAns&uC6opw9JPTj_pN3T0?E~d1sHif@| zuE~5}LWB1FocVUMK`PFBMGMyV!{)QcfjuH+ld(9gs==mIx#1#C**Zf?2RXjOe*V!b^fn}p_rh56S#Zn$KFyW;KFU0)m-x{bq} zx?gSB#eohUX}jSb<0hvqCHNebpx>9Wb#2&mLTD!5`F2%z9%$Wb^|)S5eW8aIB}Ag_ zZOFZmP|{bZHpQoCm0+G~#@DS|^8Ghn^=1op6TBrGGs9m7_ZGp0k}ljrB_kcl_h1!wm7F$r?9GLqnzH|rZ{P6T z7YF1PJb|Hp2FKgxoSr^}$(FhCARG&U6CBtvq!`B;xu`57Trb?D zqlj|PXzOS)4=L|^uMR5( zDp-X5it#&X%9D%xFqk)2qFp|!9KI;#zGwDVa?Ip;r(ok>|4>7u zgQIOIWN?`7eNK+nDFy$IEkC^F@N}(O*_GI`mZ9?o`Ho+}Y+PY!1J zQ>9Pvz2=1p^_-p#d1O)y!Lbb&s=p-1dTD!{@7KOlJ#f7?^hy6qA_nTAFnbBW+X4~W z-D;zO^>+X5;IZQWzSc3o)0bsT5X-5B9oBuN7*0r-{hg25y9D}{I>EyqSGhuSUZP|z z_t%aK@A3C>T4(*_(g@-r@IYn^zdb5CxfXZXUrQstL=^NVq`9NAF$ZxVf2>se~vi<|H z>^2jrqutp#o5D70S|`)e!4=ampQ zxSCQ{))KAR8T>v#<)-$9A4Aj>VBV`W($KdmnA@$0taZiJQrJ7pX%Tt8pN8Fo+!)s< ziw+yJlYd{^P38YD6)m0N*n)soS3S8b&faZ)UhN*0FO0HID|2Ir9PpJcZmI0-t5^K6 zDSWyr7p}~CPA@F}t(Tunf3kqiCk2?!6uJ}G&Rw*05Ba@jbFy8ao%J{SJT71JR&m4g zxz~fqT8+rW(0+r=UJ*O7Sr+GW&EsI9xa%Ms*px_W5B2pOH@4Josdc7&&n3BfOP2r+ zvGY2$B;G7?)MnZ3aFDx4Dc``?KX~@QY$ByU*xz|l({fMY!NyG<$NGp`5^fQ=PlNv& zQmD=p;leg_zIWlX7g9B)bL={kU~X~8K{zzz_)Zx!P1|d4OL@7C41=}6 z_XfFngBf#1Ze@2f9U1MQcH-qwY^OMF6=}cdT{)fA?wSSQnDbRd+(Ay5wAF~Yi7vX zjV>&+JFkG;1^@QSu2I_pz>GT+>YdYOc>rt++-B;X~ya;QvZ!?+D~9l zs7eyzrQO*?U}`0^Mz+ee(h@opR%8mQAL1^>jwnE_1A@A4dLJ(c} zde93>>CAesd|PGOw{^}pKeyV`Vyxn;0$gQXh26V(#=nbn`0gX%SI^?6J)_}$qnpn! zf~%Q}v%wKdWMnKbVhE1R_Af4Y)oi62@N2fMcD*#Z^)PAAO8maMk>##;wlAC!pIIva zZ+c)V!dHHqd}c2UB9_hX{oO7CVL*j2CSad>5mPX(jq%y{eT*&u3pz5zea(=)H%n0_ zThpix-@>eKH~H9I2ZC15%zCWBeEiJ(?DO-sNt%{9 zmbF;+jRh5*%Aiz~tkt_57DZ_Jo9vlP)fja5t9LV+I~OW)&o=zo0k1;jZ?VGSY3AraE1biOTU;j!K|&wNy4rxMdq|n zR&RwF6VAF;vDw_A9K$gRU0UB9U`_dlHHLOaU2xmZKx1%F|97VnZKjLm;YPJ_G?>1> zUgwzAgL2B$1?h}3-)K$?da7kkIJ!!xor;iD2*dfl_8~4cQLtl_-_gvz$-Q3yE^W`t zbagtnt9#lIR>kRR^OO&XNS7{4w>CFX9L3)(&*9vw*$rDPzL}JZys@?~5$PAIavn+?x^=KYz-vg0;FwsAtCWI<)H~)Kha{M z3!#9N*Pu7KZGJ(Ja8?%E*Utcg;SeI+)l^6O$Su0FeK&7t|Jc?g*R|LT{LX;Cn{U=MbJTUqT+8C7 zZDRp-hcYM>hU99O(TwXa3M$lYBiN0%HA3wC8lQ$esb-WJB~G&~39s=&sM~Opj<%DD zemNkj(XMmdp^MB9r)3RK*D&Uf<*Ac-GV?#+#CY{#BiO_HuUU-!U$r*u9KY|Ut$jY+t*>VEmNn`=7CNOX-7mOqyJ*?T7`V<@+Zj71nrDXNpTZ#MJ9pTTyfPg^^v? zfXuWXFLyGGec}*ixbM|sSK6~CEH47LDf<|8l`LJ@9aq4nrW$zwGU&5C8n<0r&z8fG)6uz313stZZayV+N8>w_ zjc-SuWLLVsLD%1JDSzjoI9U!+mPQrZ<@R1`6gy3pI=JEx)P&1i2L-rm9KEh%$-r8g z@}a?@W^{jWNmH`a6-ke9`7F+KUZy5hj z{rZQXyvXt3vbws8GXyf&EOee{UYqQ(x-1qaKKbw*XR`ezAmsb@Y_CfqGf%GZ?cP4# zh0Fk{8a>gDMl_z8pM7o~&~4}+iDdN~IE-(%6ljwLCL-LIU6tYF`}>=>`;}TucW;D4 zxX+t7<41A)Zb!M3e*dF4sqUvScGxid_PKgS48u^7-ds_K34;G#iHpHC)+iOh24QWI zI1^VWLiIwKox*#H!uXm=Biu)#zXRx&UDu*%7bc0rWUjL*rJ?K2Ycol0RkT`|ty(ld zfK7V}I?Z4xCA~E@y}=RmRDU7*RJh0M$uZjKK^Iqo4@f0Do&6{7)f$|NABs80q?7IQme+sOCAPk%zh`j-vDVur5kCHoJMcHSYHIF6e-r4onzr zGmRR;n6@XK*eH!Fo6##ZEe}{KSn?q8a*YM;Wt9=iK8sll34%=5D%2-UE?d{A#-G#s zEjqbVrQw^&5QFsTt5C6i^V#igJ>%gq!RHi2Y*QB4(UEbHIaX`6H*Jun;^RDHSZ#A> zH!7n!Pu!>$dzCggZc>SS(A@Q4FGu5%o2(7vQa{|w)B7QVF*za(`Hiqz%(IHr23RHI zn8d)_9vnB?rqdd{zOU7S{<$L8g7ISbWo2(DtVUBO)wR{SZJl+#oKAAM1SYa$AMB-ocM=uXVDgXX^%_75{JXJ_-gY(;UplSmmIe%%-{3Ro@992M_ zAfF%<@S6q#djXqHZsqScXDT{ahGfd9=E2g~rNYFm==|^uyF3e9=3KD1XWJOlbZpXW znW}@C8y%gk-Z`$fHj9SLNT1pf0#N{K5{OOsFa_6Dddq4vqzH0zUT8Eo)9vV*Q3rFj zh*_&}t7|20$~=SkKO-3&d0_JkcT$(OB6fV_Ksr7twnQ~nSJQ&5xnYuTu8YRv%`8Ci zTqtFN#39HNsyC~IL1^Rk$bflZyb8U&VMZ475AqEGNNY|^iz9w}KrP|A#70{{CE+-w zV4^*-&TN^ihZ!3koo(J(ji+Fg#4i!XRb5*4h1_ANCn(KbLQ|a)c6Lr1*;+4kQMS-W z`nPdqAeIO@WCJZ$YjAS~9rD4Uv@T8?A;guv!r{7+Yb39N8O5$a)b=v#g}}ZSi>*<^ z-?spJ=W7Qp|DY+yjV2ty3>UKqoX?xtYl z?Apf?GM*i)}w6|Uccx^u%-yA z$8Ths_qxy=>1hh~Hu)y|H>h&^ja1p4o7>}FgV@sR2OU(bxgq2-^o^LpOjBu|VOBqf z)4*Jojj(#n>JL1Aj?xe|X!K2iu$jxG5r1TGbCfk@ArL5-jFx?kE(Guk{kQ*942~4V zvKA$4Rh*!S<+Kp1I8M=+B!fh}L3n?iMB&Z;29;FVVhZ^ibu#+pV6}z!6Rzq#Zp}aD zPPz(iY>hY7hg`psQGRPae#@ zM7=`gh-vh5^y=YOu;q5bJ9iUlZ|EpNy6Z9XrVh|nx)KC(lXvS!#ymyAy^ z{t#CdW?F`;p&hF9ajP}MQ98uDs~_?HC`?S}TJe!*UX)P|tDq?7M%eoBPW?(I^$rp? z8mXe4B{Kd2xjO`?E*%QA7f|T;3~Ls!4p{@=uqp5)k2F%e*zd`NVKV)FP;n1$CXz>q z>wQBS1GidSEgT%Ym;IcRg`y*KG|cS|?rVrp3a*nOb7;=`7S@H4W1naApJ&g|A0GXh ziU|=gsO8p*;%?u|U0;}mHzGGkDzk8^;hR~{IoK!~GDkz-=B#-Q5lngN0K7gkemu7K z?|!d;%?8^pUf0R>C8_Vu`w1FaUe|9Z&B^LX52(+E5BjDcd*o#8?WB7WHq1t}9ay$N zj_3)^qb1QBG4_E^F>Pz>NDrfmXdjwjoh%V3Di!!h;tF-?~m^ z*8K{{UTVGg(1pRJAE=gzUqSvZ`$3tPwn*hr7}P~t<;AZukAm>A><6XZiIa>o&(Tj# z`t8gkZnDWfY>jw#Z}H7Vq2dRNz{<;gy>_>T zd^QC*y1AE^`k&iU9_*_BV<)oZ>e#{RW$gM4j3u9M4NQo=W)_p9&D3HkPu^#`L;ntxniBtkTB(5o4zb^AyIv2a$PlfqGb=i8%K(9609KaK=lHG`SO%k5nXY0$| zVi_FOpGwuc=XZJ9Wlfb2uJv8+$MBxfrKM1lNzdtU2C@QOQ??7_L%h#?e^ApT^Gf(p zrPglHNjyScM6IvkP;gH@T-(lS3oV3oLSsR=>A zShC*Tw(q-b`@RDiOB@=!iAj+I3Ss+Tne!Ns?5>l{TAKiDaWcg}u@&UW1j7qA`e`>A#a7YLl!+kt(Y&krw zNH@u+-EPHnx@krM!!z>6w0sJN6*EmuGI3aG>=O6`{DQ&2>+< z@m(ohTBfMiYE{K|L7h4#j5|cdtB4fsn@r}LS_*Mhu|trEi3UlLjy4~NEyv|Twzu0l zoZWhhFYYp!;trpGbkWWIoJ#$S>jvkfp%boo4(B(HFL)xMrlPL?U)leQ;+Z{Zjqk0n z&(PR|3V>NJ^747GP^4;1i^Lv2KdDqX5uu6j;$1}IJueW5?;Ix)kG}&@I_Cq-0>d+H zsR7&imFw~<1Kas4PPR6lOa&$s-%fy>9RgHdj{;3)u$39{T{ZS^EGbf5MZ^)a?_tZ+ z^Rign-`5R{EhCxnj4KqP1y5fD@$5bGd-C%DmwjOVz#**NpJ4LbYyBi5vGWI@h4B8P~G5Cm3*Yfie&&OnPRGJWcX13Fyv ze`k~EGbb2VNt-9qeqd1#5SSl;2kNTtumlTMWYqK)HYs6j)om>SsqERo&2@voG<#}r z>n($zIZb_{1c^Q;w{HAXMLmZ@R-KcXvVTGQ@G@Hiqo70Gk|HwknCp$Rm=EFVs*k=A z4De$1^n7>2d^+79o#+SH3M>O)8xh@wC&iQOSyhE!af3=g1?&JqC8Z8@x1*fxs5wX0 zB#BZ0o@CD|f)`cNPe=T>?%bQ~T_xj#6g_Mmgq9?Z0_;iltn$P+;UNUIiinfMGyqSs zXBEK{m4iqk+9pLc9;=&xwkcZSSwc#Q&4DHp*A9!ND6I$U$h1I6NLaC3>{kSwdsE)7 z-Y(vROq%KPh&q_1rOkolBq?3i9;_y`O+z-3ya`SfsY+5-fCsAyts`U&Bc4ljRntlk zh{1!zH^@0;(z0P0?}+kpd4;@EUL~)V*T`$-b)oe#oWVI5$ScXJ;jL^0rrFm4faA=U z2UN(brnwnmO^u;VRs@;@qH${cifj6g#2IGb879L4{REo!#|H*57e+V$U%$SZ_OaLBbpZ9yO*kw!nw6i8G#Rfe?Z0)v z1I?U13tLck)#Sq^qj6i_1NpJw%}tZDL2ENnW^~}(kOzmx*gaCM=8A5)S_{#jYegz_ zoQ?tY8xNl1{%UbuW!}J)^Mp@Rr8y(Sqx%Y~hK4?c?lO>tZUs1Rs!Kl9xl5lp=jivf zXY}===c$&rwGJF2`l|xu!81N%_qTu3G^GrU;05!nNP`cru#NL<0`2!R>_Odl<)J_!*0I_uM1}|m;Mk}3055uD-sGJBSq?h@uDsiQ!JGB_`X=z(P_|mH>WU`2 z+|ErYx(h$oTMGDd43~bhyxu?wPbpAY6cC2%JmLbE=IvoMA*zdhmgA7OUu54TzULX% zqgwO>r86qNVXI5$=xfrhR5wgbIf(ZDYGo1njCQ+EU;L#_NZJbuaJ;{tC+BJ&-rBwc z0o}oV{~D9?(*9+F=mL1>WyefRyY8D;n$-rbfHQ#_px?pwF9*gYtU zdFNv!sFlrzu%)GJ>`(iVMJ?*si=I^2^EK-bP4?_oc{|>g}hnMu$o0b~5A+ zwF%cIiJE=A==!>y@GGizs5;!%MEJI0l+vP|$B&Q$cK3^eHn~VFiZy$_*oS2~s$*?56}QcL~Xk5Y@lhkIxAI zV%Vn~hIWRWMBw6LD;A|EayvmD@VSw{zVxp^76CjBd;~J`sRHg8?E{d003HLL0szl@ zJaaWO18@bfF=+n-T1ZoDy#Ra({0*`&3$IZ)%HU6cFCzHX)oWm&k1YtOLj$<2 zT~jyW)TkTdrov5#iR2~)cjZR;@hs85pwhsMKdj8?m0qH-=wICC~RIYs1*JWje-D^sK(iUw;yyi~PZNjaMhW!9DA zCDf_W2Kn4lfohdh25WF!6#2lDee-!#pC(%vw10lfwCixudK9x1V6sbLxFFwt1rAum zl9fW%KCn^bqRXzZrDVt6Ro7g1BN)TAcUH{BO}CV|W3hu8x$5B-rs2W3>z-2gdGq1R z&nN!f1Yy+5RVY)X(k9^|REzXclo~M-!wm|9Fxmt4Mi|)&Xb|1X01tQPC<#UzYn(AQ z8}E=ry^v0Zlz=RM=r`-rZvaoARx`;6>_ys&BBHPb1DgpQA=StuTdn{> zIJgdLB8<;&dz^7ryCaS|=D0RQ926>2%rvJlNRN8q*;qrZQ6C{)TLWkk6wNH4Hz_J*oaYM#!Z;C z&Uzb6*=X7(n{6>;)|{=j*=~oOcA2+e<=tRD_z)h#0$_p1@C+WIo+49Ae{ML3a5ZO! z26Jh*FyE8O`#jd-j`4*@Lh!1g?hdh31|d2=-=-5koG&w5R=pR`5`(QpJ>9uMcyL4! ztM4_h`M|0N(BrVRV>qpDpkovtv`=ez-+WrD>+a|l#a#4eTY=SxBZ?G62_lMO#4#dL zC?X)T2_jpFA_7BtQ!WZPqJY2v5dp^t2na}FK!E|)5D-wBgxIVe%2J!`P^lP_7h>&+~ni3)pRb+-G%|ooOhy|)7KHDYI8KMkTWQN5EWkM)}&8)&CD}RYR zrL25~rzx+JmsVzF?(&WzQ_K*RS-g`RBJ7X}ci}-Xmn~8W`aJvDRzRPu;CDu^&!||g i=-#b;v$B*Ox!TN@Vc5LlUq)No2nvCT1nh7Ng#-WrHUcCAiUb581%)yPk30+q z8?b>TW7mM&fq2|jSxCEg+n+(Dhg@F z)Km}3Z0;Vcso8@~3vEQAQP zSAFI_iP4u4L5c*gA`sC=#QZ$Y+51VFrk18{Dpb-`3@sf)is_6oY-I*hM|A4!?wFqn z6Jsi8Q(&^zH zH-Z08-P?&Ynm4|Y{G%U54$5|50jNZ(N@|Mj%dH9mBE0<-wVRYk)d&b7<9Sk5-+{Jq zfh!eQ>a>_r+A?Jsve#u8KB{mT;KlSV^`*K0FPXLGc|4Zb8dYgc?uv-Hk?VxREkBzWasKml|!msshXWX;O^{TNdOFoATa9m2=HhD z2VS7?s0XY;z9qm@h?MCZcL}2At=o* zaT3}N4e}B|p}u9BzxKkKp44zqZ(Z;TJf}VZ55YaH-3_8MtIr7<-Rs{z#qDImM~FxR=VD&^c?QApv|A}w@(WG!Q9iYYNhd}h(7yy<_Iw%pFu zTv*a6K0lJf)VVj?vngxnyWjI;zRuDt&b-XXBs#B6xwXj8jmnVpORp3sk5fnfTSk%+ z8(%`>3?F^i(1^lM7<`xkUU}lan_9c>pl-uJBLGEToObyMu)E$G@n{$?sS~tvx53R= z*CmIM`t>si>B5)A@TyE9Ipdw`1g+dP&dY3FW{&)5$|1&9jv({|t=uiRRm?Jr!=$yE z#ufA^P@wQa<8OYC3D+}LkO&bXloMO6E1|+H0ZmYdmYu$cp_lW#y&5S}0{q6l^E22D zP(ibw0PmrpRAcyE8@pZyvVmBhzNA8h1LR47?}I@KvivGggA*FTIts)^>b*@syr7#d zb&;HNPd8wP$r~qG-BB>NlKfN>q2Q}-R)&HUf&rsplRpOpm~w5KxBv(4a^B3W+vpQA zfE)s^6~y7(kqLk$QbA`>B4(%T0IL#sD4L|K0>Y9(Daa@iAQ%fHR1}UUAZiP#>KOVq zVm@n&aKy8HK+ND(tI5bmQX=F!3|2hfk_sk3Xq8c|ga!lb08UHL?>k3L;3bF#c;+Yr zREBH}CKGUsky#LU0Qnn`{Ob!+yi7AcMJbNas1yQzbKX}&ci>^~0;W~uBg+t8wt*MO zubk@uo**9rJ~`)xXD!@F5GndNqa?bi%I}>|Z-<K*bqSO-2qQ14@S_X}yI@+VvC5+1KrXx^ z9@>cU?m8v$`V?Ha7>6T+p;UEXhSzH13ouJ=iUr){0fZ;2QUi>lr%Ydr7Eq8ARu%+N zM+tI|2@U*dW#fZQbt^%X1H#1bsn(^jvdern60WH@oih&CP;3~}23gwXduxD79bj5m z(%e8A(v#AQs%dgWL_%AhNNSRrBX#vW6vZ0u5zEx>lPhS^+%4SiE;;qJRnaj8M&PV3 zu)p?=SpmdU94NcIl*}}KCDW`+V^)H@=Xw^KP+=4&3zMOIB<02Y3MBBHigs)W&{&b| z4n=O)YOtu)>BGvK=THLjI-Dvdjo8+d&%WwVazis@syuH4hthuk(TM+ zEHtvvy8RQ_Q-BD)4P96kUL#54*u;7J%P6}do{I%&;Bt~GYGaH`i{0> zb%!IkU!4oqK!%EjLPJJ&>*DMYi=qv4@e)B%eS~>N(o#7^?ASe!Bc_j zjzgq%0%4Y1I8D|E_9F4^QbsMedd}>M)wP@&=b6iXqyzDtEm8hS$6CG9F4Z%xrYbj$ zOXWqag&Ezk*AU6>KxA%7*;d2M52JG{X`Kt3YK&nSL--^wypUbT&YXg07A`=E_a1rY z#s8pdjuh;|;yRaNLu0;bn?V&z!SbnD<{F+OmHZfC?a%#%OP9{wk!U ze!u)@aN}P^gZRC%i0k4pF4R8c^TErCa!h#v&FG;vMcGCdF)S1aqAZng*~e_n8M~iH z3SM6TX7z;$*M3{EA2F6MkG7|@pgBDv37?hvd&s<0-lYpuIW6o9vue%YOi=~AQ!ux( zekU=b$sOuI0-Sx5a%g=dv;Lx5O`B&;E?9t|ruL1xaOAvFEnh}g>kA0`QzsAVWfqI> z?tq-Pj20xsSOv9pjc0`GX5BOw(W-KwAsYk0;gFjs&7NiBUPHd>E7CT-#iwfcxBe7C zb`pFlhPm^k?X$Tz3SYv5=At!PfiZsf@&fC*jBh$i)D06eILmwsBxT#T$DWN*PG6CJ z$qEGNdb3VzNx_#8h6J9C zLQOCIm!#Ffrap9X$qwUOC)T1RL2TTwE`%|DRne!^8~$!X5kJrA&>9}p@@tMz!>ph% zxX@Fiq?^b;CS@f2f+8g)V4rc2s=>T1yBoB$NH(uo^u>ny78nU#u=KGA)Ah3%FQ#US zWS4cUX}Mh1Yl@wn+mOu~Lv>0Wt8Q$?3t~lkJ1<^RrsN7=9?+O_!@S*9)}mjbAOm~} zYS@rLXJme@FI9>D%LGuimNN!T^`xPtrYALd@db{{dWY9FRcR)p&aKj^rd2%UTno7_ zPVyyF9}~Ff@KE8S^>VqRwyltc5D&2;f_{$XN{18W)bA?056pz~-88wGaJ;&+!`pfL zWC8wisHxH66B;*??{1yU>!e9^pnUo5g*oNnZFSS~B^^`~u<8@Wj1!8yV|8uFO9b2*SSAr?APiO9S?&a}d6IxBO()?O zn&Xp9x0|TWf-qOCX|v?CCYJ1GTULh4w*VBJ7_;^NFRUo&9SH{3%NDGIF0yo0tCM;Y zR9R!KS{rOoZ;Ndj9CFws|M}k(C!I9SX{Swh*;O;#bjuuf+%Zp^HuF99*aFWzx6n&3 zE%MqMjSv)o(O+H!ZvojwW(FmSjgCHtCP4ydyi&~lQ$a-Q7Qz~AFv6w;==7LbIS z1coWda4C(Dz{pr?ymBHHu|%b6A~lk$?^S3pfn^XenJI6@*ao+ZBMc@OV-_K`R@q#U z%2k&QC=84%cH(7)<2YHfO<@jxwNy;HwtWXi+ zE{i&ttD8arL)rXyi*0uJ*Ad5Db0YwykV6p#q&p5$iG|78scunKuCGFQIl!l+w-OrU znUFVg+a}K=JNE;z3<`O$Zod_ZQzSumNqSH;C=G#)*dzkw8uMECc`(5q1M@xSRJ>ew zT6nYe4MVvdzU2-v_EWrakGkCu!vS2N9S_DPq2LcV)WqoyiUZd(gu5Q6!Nbn`skX)Y z^Zk7Pf(NOU{>sNi>PVj_aevm6663bvpm$^bzylu)klUEHh}$A+3)L23Tgc{uwWA?@ zThs_kby|TA50X?m`+_KelLSCUOE8}CdYfCob-SQ16mABW{*Tb1U%)+0!8$iM(-ihL zfny&IG0P;w^!Ig*YHN;w*qD3hOp8Co5By{A9%Yaf3Ka*{`D0>|0EprB=RJsK|?g5yO(46bRFc1#~X5 z1xAAej-OsI_OPB%9~dJfB77J&MyQ1hcn}Z9C&cI!px^SX#P-{2jVAT_3CI;i567ZW ziG;-wFD#b$U~wfN+!v8h5|%=UxQRp%XS*SGX(gL!qXCtdL`pA0Y$uff#-|8P%m9Js~UEmN?={$RDToV?28Clr^^4UE!?4U2iBfVF^z}yoro2 z?b?!!xi5#W=VQQR81@7t0boRDBFO>vhsFp3B-JgD*l!Id$bss4jtZrcucRi4DLUK5 zF?WfI5R8ytZ!r=WjF2xFJp!Z-L*kn%ArbwUIf*YXl*;vRwtD`X&XErl0KNd0-oy`g0T_-9%|j0YY6P|& zSPX}Rd_ll;7_c06+1d56H~@d^R9>74!Xl98U||907YxW~oCheN0n-l;_`oM>9k7=a z0wgd&gg6s?PNB#Y)b<{%3w5a>oWMo6ZLx?S$4}?=JjYvkC*O|u^BH_O|EI-jX|#M{ zRa(`bKZ6N)UVh)w9F||(8Ub%Ob;LAY#~at<o2^l$-nueB<3CE0Q6)aSka1p%P zixwl6-vK)v^vJ(4Nsu8^whnT2m8YA49(wAfw^D-*HOz1$jWS-j3YBW?^U;27&fDa& zYg%3R$*UN>*5HJP4to>MI}iNk_XK(Dr7h9>)dVLs`^#!ANEiY|KuAPNg`uEipc6!o zX5nOG=jL#mOO!}H?ZgQ&LW)F5(j-fjE=w03b<$aP1qv0((MNw}`WmR8I|dkMv@yo2 zGDJ0xK>_F^CQ$v2KIXXp9C6hD5Y#`L1jw#{x)EesFy#iotRDa)J_m+901DR4umP4Y z>uQfe_2W>eKVaKYdLr1cdRouWx4A)_IvM5`l?W8%k*OEvUj&uMP6gw;&PbvQ5W%pr zX^G9YyI#5V-KsBw)=NNot#NsUgpUGa0GA zY-d_Tk>;gx$v`W8(Q~zo^I4WN6oXQ!Ob;)&SVnJ@qJ&h@XaW=6&^4RbQk6r~?$s2< zvN5G<+2r5>b}|v3Jk}{vS`25j<1(Zh*%%HQrFH4J$&8a%n|T%RzqA!<{xnWvd}GS^2G>fl_f&_YR@yC4vGi9D1Y(Oz0L_O?FAm~ zut1L6q|fRH{hQ^DLA#D?QfbYZ^qO1B*v4-wwSY`Q^iI-~7MXhY!|4UE=I-4o1=*=}*sJucfSkWHS#4kH$i2YM!J84O9304a8W7)ha|MDL`L^D@RGVA+0?wxT?dvgp zpXXg-wUiSoFHG4}h8(1Ritf_M|N2aYb2HOXMbA9siB64AS|B_bOB0*wExIfEUYrzl zp1o(O(t>7zSeUcO$qz&9iDx?^P;0I~ADv|N?#ZM{fpEhfb*yN%J5o5tZ`$b??ob`B zL2|xQ6&f94NPw95=DXwne-c1b65}+zFJ1b!^*mc=3XodpAj5p?TaPfM*fW|boPh## zHcuw0CkEs*S+AJMb6i)ClJt37%UN}LN(?*wAc`M1b;?<>i!w?Z`djf`6083a6k!4G zBnOAuomUArPN*Haz@I7G@O+Q+a^dUSAbnT0x)+4eD~38+qo%G5wg!@^@nF6?+P$%a ziiC*q4+-|kZorERC5|+`7*a!df4&%fO;5yD+HHq-VR;A5Av5{xdyqE2go$Ek;j3&X z6saHM+?4BFwc{JYnTkocYqxFgyxYMA8EjZBaiartJs8Y4hmEL z{%%c}%wtKh^*o7>nG)CX<`bx7 zsOZ|0%f&kdZQUF&{HO39O6{!*Q%p&-U6{0Aw0&9Xy8tLkwY)AVz6tRK77EpfH zdmPSkHmL3V4Wc{rTKIs1n1975n$Busg-~H5nG7pK~BahKXa7K6!(B-VUj|3Z)?`rs73gs}YoQrjk&du^DkrLHD<2P6RAL$46 zDR$A8wNCm?FdTHd)F0shV~C5+bMr^J#a>q@)y+9;VIzhjK80v!AV1}MZbqLt%-X1` zN93RL8E;9a14($A&FVaK<@5cWighoPoZl|uMKB5N_+rrfIioxj!42e(}%SEY{Vk(CS1E}%;ZpW5d*uQ?QK+}^;nn2K&kQM z*6lEYcBSb^*1o?+q|-J!6|9J-+m2LU2Jmg;fwMN`&GdW^#^Gtz!W!2{Hw)FcB52f2rrN(woZ`jDZZnUyZHFv&u~|z|HXw~m5HlL zoUhBi9~M^4mD8%GB)Yp+a<1( zLh?!aEXJJf@o~)4D`us~a33CCK6aRbJMsreN=IHFxywEdMn(_X$mn3($U-}xQ>NN( zgVOv7)Q^N2ekDcJEo5OV4np>eZrroT#!hsP&>o@k!!t<|Ml+@LTFkN70dPuNk9D04 zp_}nUv%>Y7pKys<0PI}X!3paLHgG7LMwWU8X`y$Q=aF>+;TX(UKvuq(n7TIa{yVse zs2Ax@1G$XVOq!ThuqxxHInoo4d=}=1hl20k&uJy@ zu(XLsvN!N5i>0+Az&iE2Zl{!R2f;ZpmsGL6wNv;WOARxq->2`(7b`)(6x6QBz53Vo zdo)$-Dv%Jh@&td|vp-Z8KkD%#(2V1~6(lrlyE*@ByIC7a9RV}G*;cYu98evaxaY?fRc&CBxn?zLYB_s1>C|x zi-oCBy^>P*Ayr;aYlbBkqH8haOg)oH26+zAA;ZY9mt-AM19-bJ_MqK!xT(=|MBHP8 zM|&jY430x0<=Ceumh^zX?xSbIKclL774o}VZ`;&@)5y~KR62Fzdc+d(^E4Nk;CiG0q@3b>C0MqMx72ZXf>Ujf= zeHSkg$^*#qujlJD;jQAJ zw|+n?o8r!yU+f!r-R(U8c+Rm*~;ub{&EOBVfk;eLS$Bv0BM(k1v$03H8I(A11&MH}5FO}Ri zE;Yt1W@B``(Dhso;1BKpEig?fhFps_?b&wIcDmC=-`oAVvf9EH6jJ4lj7vVpeB@X6e>(ZVr=7pC z_O=lt9beOu+Vg155Ht{Q*z)hrlA9{y|T$l$Hs9ePVE>@c|C7w3S!? za`whK_tUq5pFUjqZ>@LT|DBs|IK59gcYL^V>LeyyTnDhoMKDP@{@w~*16LDYr7W4` zKlt&Qv1%m~{6=NA3%0!QL08R(UAqg!^mZyBbszpbBlF&)RhKu|6GuTy*%vZ++UbOP zo~75CY`brDj3}8qP}FFR-imI!cktk~)q@Gy2PPQx|NnZJOOj*Wu`KI`LAqeJt=}79nNTPvA&d10O7oc`7Q|DbhFVh|1P60$-98V?v;$p3Vth|+ zVYtP)#dRrt?=7|t!Sy0wZ;%*7brdtq3@8%g(ITqbJ#vvkMh+up%l zQHH*-nNVi9*O{Ww>uWQ?3_@Qf&fDd#h5E_G8bhZF?sk-|uv2{u@#&f^{sLTZc1+=! zUwS;Bhw-d@{?dIJ23D$ap4Qx3Qey6zge$9uOc;39K#33tPCpv_MQ?;6l#yE0b^%m` zp<1o&E^~CZPL%<6i8;G!-FedzV*CL-^G%QE^)Q~md|m#Dcr$FtloMQtzhGPY6mXE{ z29dr|r&jt}^EG@+=6M8*h`^fid`=FGSH|B-ov$^Z;|sn8gB@PMJ>Q&WECvmDAO@3o;H6jUNy!A9S=5E5Un5 zPdJ(_^FyMbEq^UT^l>nUzQWwJc6+Vg>X(gvAjPfW0OhVTBVjUP_&5RefkVE=c%yCL zO)v4`+pm7`^WQGhmKQ&bPkjFD(YD6zZXng;!N1uu4qIBe?S@uuE!ZTSI$ z%sMP)uu)Hy&B}YsQMjzU7gpb2b#JfM_IfzhR63&5_FAoQZy#(k?~xaGS0EAS6F&3= zif&Rz=imW zrjQxW{KDh;B8T*f22UdT67nrf} z7vVzn^7}xFTRwJQcca8~?_+q0NL#4=17J!sC96X);P9h4Y*lg+YeW^VW_Dv(Jc*@^ zWf#WM+XemY<|H!PpOlm|szRt0yU{F2Vs6g^rw}+b0#?m#r=(}PTp1)@9)I?Q8W;I3 zcL>D(b?x2C&N~Mr#r6(Cp-YlSHNZRvhCw%5Vk~*3QX_XqxPXPIA0McHVeKgP35wXl z8tl^~Sf-imUno36IfN?;+4I(tWS@i>-)ITjxW+Bd(^i5a@bbIZeQWo7wm!Lh1q*AB zVmBOm(((0^r*wAr2>IX{Vn$i=AZMYabbnvS8HU@v6l^hLW(AgQR%v|$} zHdRhpjjs5@I~(M0X-qw2wiHUx(+LS-HubqO$#fZb{e-`a1{v8L$WTrb=qSg)$%av0 zJYg-)MkLyBSRaw#2a?CGt}(J-#IVxE{ikQQ{ejPw<4qlG;E+|$v71lEVx7{3Dl1^u z@{{<@m~y=VQ??mj-b*vf4EoIS&0toW&HCDW&MLrlZ~Xb%`Thjr%`m5epqRC0EB2Y| ztUI~tS_Ls#2^p}@?cz1Nj)JW+{UVY@J9jvM<#3ltS!u%3o|U^P>4Et_>*+r-S9JcK z;aIgq9vo5v^w5Ct(lhK0P7LWNb!d3wk*bvikdD+flH~B*y*?}iy=qgp?9E>z9$K64 z^f}T~eU8KRJtCo}uu$GKqym1KXOYP=-`Z7k&$)__xCvdRoqAbL6Rj?HP4Wif4&Fd9 zilc1GS9nxy$DSR*pxZBl$)pIc)N84{y(CiC|0)9}S=CH_kw>L0 zsvc!mR*tfZs+B6EXOv$#&YsGpPP5t5)ZD4OwUTb8)*+R_6+KW%X*UE{$fU5NhiMIG zziPFA;&8lTx4sI5JN*}#EQcb@HHJlv=sKu90~8`6ZN`Lx>h=$3)-HFrIc3#z?UvJ# zsO1zywWbI~BO^sd)k#7Qw)`X7H{=i?7x1P$Q1;IJ_4%iV4`80n`rdpVD5~G|^PSgc z1qPX81(m3q`!-||iEi4=YH>}^ zox5r2WAmBackVi(^9RRb)e=Q;OldAzmtMecD8s}ZHBPUK_#>k)%mP@(Z%lIH$lAHL z!lryO`%$gt_z$s9IhH;%KgWMm0xr=}q1Y>z${RFd`bGolxI{Y3WIpMXo13`)EOG~h^r^CFaK)9oc|Qd{dyatU;Gt3=s!X0qe$_bij>rA3uidk5&ojQA_I~A^ zQd=wXtxo6k<4{aebM#i8de zy0~>tj;_Q7i*R3vdq*_>>;-oa`TiY0F`O?LRU|SmCFu!Us(DxB%irDA=I+QW+2+s` zkZAIX9I&xd{xX=p3?9;XuN#Yyp5*Aa;Bf@co&E!(`dy8JNcs4HQn@2Lexten(c~wb z%Hju%c7ixN|Me-Sg3l1%@r|__S)f%|Oo0=6!YXr@P~xw`WgAid;8a;$I*eb)p|j*x zlCT_;o1THr#8hT%`}Jwy+}g_jyrepEa<_TO3|>V@%JJwNYIZqBEUv($Q*+Q2c#$JZ zv^`yzl_gByPRnX84G0AV0cEMpuPhJ*ge5A>t4if72E!{##cOZ`L4gyyiPwA`wic_x zFU$BY-^TMs8(iwbx`;6Am*W!1U!LBs7i46Jz-#ZUEPS}aB!aDwakvTzo1H^kj{f)o zIY$iZ(T&ib5Kk`VaQ@~dh+n%}*a!@t$g3Yxwi`A>|IitKLeQ6?A>Y6UILFlw$t}js z(AS|MU-^80(HVb(zkdnJ-{k+AQ*m)QR5^t+XUL;Lx0mHA=&LNS>rjq0=U`I7 z_F(lfX^Hatv9Us1=4E+Q{84>9D6+xD$1bNvMFS;DgO>{{6cI`*0eyRdL;cRf8EvV= zSz>B?`eEn$0R$B@2_!YCAG&=0qqG~pY=ZjJGo3I4raj8W#21OgnY21io!*{Gm?fmP zW$YPf_AL5lV#Bc+Absp=Q3&L{wAeliK52c?`c&>dM)gB}u2*)~kDolQ|AWhwOK7L( z5#!nSWQ(_}J2fEiOKx42EwQ8@zd62tX~vVo2f(UcjGOhxk)^p$0^Y%`q!ZgnU~3iK zNpnKq3Yoj_Yih1p{pvtvD_XfW=71rcb^ZET~Fzn3X=TiyX z8ye4@KbMvHKF7UpGUKq%(^ufe^hU_u7xqY zY936D;AZeP?N&^6>GZTcBv&##%5}N%w$3S*vrQ~0HX~7l-BLAgId;9jn zA=RphZzf>hk5=6Sx)jvQOhue05Y&){qYF||uRt3t)c~^36)xOgIs;e}mroxc|K5dI zNj(^QXJyfAqpO^2WilO7DbsFcad{RN%Py6$$}CK%28HDFkth^%i841XI)OrKEiB%l zQkFyED%d(KYDWf;eKG&R!kr$Unem*mmf047mfio`jyM`xuj%VnpZ9pw=lXXoYr>5W zD0>bPjMW z9ADZda>LEOpwMmc0I9U4s7Mm_NhOLh2|ZM7%5AYrP$SrD`zVyzYuL=YlO5zecL5)1 zX@GPUf&#WZpf%&+i~Y&luVrG9>BuGYW=pm|c07VTuf^sIEkTA>;mY9~c`TOEB{Se& z99W4;oB7cqatq+*ZKkEn?SaVrIS2U2yX#T6S6C*NO3PdFjGcysoBji!x3Si7{)2SY zMrWH`rHp6f3rpMC71*M9qv|-Xzr7@d#@V?&`NLixe%AcSf(q?Vqy{?@jJmzNeyt~y zMiHf@Zji{g{>VWvgfjch+U^HX#Y`#N^2)X_dHJ>mHW*lEoXD?r@%jt~exJDX^Nq%S zUQI2pcN*aLyIkH%4MwqtrZ-UiVsVa7tM^bPVsEbAsE;NR<@j}mOkI(z7AmN?(oSV% zGFeqVyHRvorA}L?(xX-D(zd7G9;vy51%yV{pX|N2=W!{XvSU2RD}L*H?Y;MxR2t;! zO4!P+f0S`kG6nCsX?%VB?ZcAp|Mm^q^FycMv9hHFR{E;P0 zwi)7dzm)}Xsf0O@&SpXtD2IIq4WM?|9Ymq~vp^*68S}NF=0#-9ta+g3etmKS`<;Y0 zZML^8mbY->H($aTK(D5^GcG`1g3%5(_StrDZRjAlQ!`zZm65VO0|(FGl5y{3cjz|) zy4}`fUuP)CJ#MkQNXIb42s@w`Qy$JGk*OCb*{7&vQtrcK4eGzm2JG08h(;xXn(mn0 z85a`LcI|M+>C)^X%naf&WZL*9Cuq_gAW#(;4*+xF{4)}H>R=l731^4a7x8|bjLXUb z^fxT$**wJ?u;~G+69Q$p`B{n~ylq>Nj)H3TzV&jSk!>#kBF)t^4txy^&aTJ1fUcpG z>e}+p0lk9v2c7;0kM}E``6bLa@rwk)5+1))$BSQQwT!Q2;jevuwc-d+Cq3Q0HCPY+ zd$&{5iBnd-AO!{Fs-u;qka7|D5c>h*%^1pr$K0VCr& z(R#3Z+|qCykBSs}`#PbJEP=N6!98w~L$PhwMkQ=eG8a2?(xs9qv#lMk4jYu(#g0VQ z^4}Si=sw0CshAiOq5$%~gi_V}-j!BSDlI6pb+IESH*}-3EUr-n6$UPLBvO?d6eN_? za^H^9Ex+tl&zq9TmmmxHiYAt@lw~Yu1uLJgqG50LX76wJ=JXA)%AaWlLa%oOh_ZCf zcQ=KP*MJ<1v?j=FGqk3+CVXd2leeA@<^N)b|3X?F+IpIOT>A{ zcbb?y96u+VB5g00lX@O#PaIZvLH)|vfbLg|#h(Y1#FwElVOBqD z!jp#6TjL(G#^dF$X=Be?C~T~=F@&uuMoCHW)CoJIHXeQcwt@P}8N%)BimTUU-kYA5 z3#SB_w`}E=i$VcAEU$O+a8b^(?1a; zWDs+i#YGcr-tfb{3@F9 z>GD}#+23e*9k*oXc%4dN1~G2`k#LS7V@rVDW=w67*kfiLo0HR6K+?)RS(=}^eJ}3H z9BCaTZc^12#~!baaCyG5A@IKpZl7Fkv(y2elEF~jy!3?qTauUUYjqY&!*J_sSUqd` ze_C2J_S&z@<|iV75#Z$G+b6f`y^fwN(Bew9TebSNU9)C#g;IgMZBUgLgRRkEX}COa z>fk9EJduWueVGL_eZ5X}q+#&T=xHlg zkmhq(&Ascl^g-6mbqE*@uKM?MK3SgdHwwq^0)BY)X)nMp{*KxI+0)r!(GdlVgaHKn zu}o5|^(yD!) zUS*J%?`X3IOMP{JvF0meb?v&W1xeq87pBrMz{Hzw?UfevM3VMcp?4*j2knoR97t)3|JOpvEIzoz-9>Z z(b*i~@$43{fpP8u_}E+V?KC}{HSxIq#_^{e>e|@8`~Z2a`DNH0?4y}oeZt&*B&DSq;mDxt;9D*Y^@tC4=`YOONa1Oi# zCp%BKEu9S?Tfe}jwr{{cfL|d1#ZvRto(_#20HLh7Q|^%W%v|U>XJVHZ_vGW;D{GLcdzFxgn8a74@iGK8YSJL2*$Eo3Fs(1?wA4tlm449v4ZS9&U5B+HphA}j zrXzS$R?AnTPQ6;+X|Ps-M+y}wHd}WA6HGGML?sg!yd-V5>Kzhx+hdilBLvmt2z+7z z_7C~#PazQ!BMFis8KRLKF;PSrRoJMbi8i_fMIS?qF@=jc{FEXeDjwUt@X{*^aweQV z5Po3wy?thqAt@y%I3XmY`Y4km1(Q(gte0lL12!!3;Qh_-Tkj$uhEG-UACPHw5GK-e zP4S^U_CyPwh1nN=cK4$iZm96^Vh@fi-$~dO8tR3(1xZ0KHyMTwLtLdwcs!iV zVgWK78mL5K9VSUFxvo`HI2SvrUBOECx@fQ(=bUFBTt1$C>O#R$QWPH>NlH+SYqW-t zVnUK4LLCzNV}wBBS|sj~5rPvNaSDMN4G0b-1nLk727GgH;$T3a4(lh$Rti-Ws^V_) zu?u*Zh3BpQD-OVFji;v;9xQ(r8aEzAk3xN^VjI3}36WN=Qfjh9f zc=4U4(ALQbV?nB#zn~&M7926aH}V?I;`I@6Ucj*bNn2l3c;ILSlnBnVPV*XpuvBopgm1xi?{BVQjIQ6G(psWFYyHt`OUh zSXYQjx(X}yX`2S&Ihp#iwP=w|I5U;iSs3L-xO@W*N_Uk7o?vPoigl@&N zUJSilI@)uje>>=?WvH(Qj4EUj=WS*($7~u=mZYY4if;<%6bMsR-%w<=`Bk4+GRy}G Cvw8ji literal 0 HcmV?d00001 diff --git a/angular/src/assets/fonts/montserrat-v26-latin-800italic.woff2 b/angular/src/assets/fonts/montserrat-v26-latin-800italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..527a0fe0883a91f1fac0cc4631bbd3ec32f94a4f GIT binary patch literal 15924 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 W+FW*Dl5sipsjwvt{cRgQoD2ZTioa(7 literal 0 HcmV?d00001 diff --git a/angular/src/assets/fonts/montserrat-v26-latin-italic.woff2 b/angular/src/assets/fonts/montserrat-v26-latin-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..17a8120cfe0a6e5fd982cd08b85c95f579f7dd65 GIT binary patch literal 15396 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

R=SIOV@jHsYhkmY`1 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 aM!fESPFnthy4$L`_wt`08~ZmiWBd + + + + + + + + + + + diff --git a/angular/src/assets/images/icons/details.svg b/angular/src/assets/images/icons/details.svg new file mode 100644 index 0000000..abd34a0 --- /dev/null +++ b/angular/src/assets/images/icons/details.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/angular/src/assets/images/icons/document.svg b/angular/src/assets/images/icons/document.svg new file mode 100644 index 0000000..0ead5c6 --- /dev/null +++ b/angular/src/assets/images/icons/document.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/angular/src/assets/images/icons/dummy-company.png b/angular/src/assets/images/icons/dummy-company.png new file mode 100644 index 0000000000000000000000000000000000000000..895c0bbed869d077bfe6d425afbb7011b154e122 GIT binary patch literal 51954 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�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¨so_m39{nJN-OT}%Y0msG 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 Z&OaRFQ(rZjmiGbplMs~^sT9)p`yYeSt@{7~ literal 0 HcmV?d00001 diff --git a/angular/src/assets/images/icons/dummy-person.png b/angular/src/assets/images/icons/dummy-person.png new file mode 100644 index 0000000000000000000000000000000000000000..5fc23ab5c2e3d186b40a52c285594bcbe4d8ecac GIT binary patch literal 6932 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 literal 0 HcmV?d00001 diff --git a/angular/src/assets/images/icons/dummy-product.png b/angular/src/assets/images/icons/dummy-product.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0d97c3ca43871bad15660eaeee743b892e8dab GIT binary patch literal 19208 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 M8J#UWV;}W@0sBPa9{>OV literal 0 HcmV?d00001 diff --git a/angular/src/assets/images/icons/icon-round-danger.svg b/angular/src/assets/images/icons/icon-round-danger.svg new file mode 100644 index 0000000..084f6a0 --- /dev/null +++ b/angular/src/assets/images/icons/icon-round-danger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/angular/src/assets/images/icons/icon-round-info.svg b/angular/src/assets/images/icons/icon-round-info.svg new file mode 100644 index 0000000..46060fe --- /dev/null +++ b/angular/src/assets/images/icons/icon-round-info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/angular/src/assets/images/icons/icon-round-success.svg b/angular/src/assets/images/icons/icon-round-success.svg new file mode 100644 index 0000000..4c57458 --- /dev/null +++ b/angular/src/assets/images/icons/icon-round-success.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/angular/src/assets/images/icons/icon-round-warning.svg b/angular/src/assets/images/icons/icon-round-warning.svg new file mode 100644 index 0000000..fd3a844 --- /dev/null +++ b/angular/src/assets/images/icons/icon-round-warning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/angular/src/assets/images/icons/logo-futbin.png b/angular/src/assets/images/icons/logo-futbin.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d0da459792970618f61bb6771a51e2541c72d1 GIT binary patch literal 4093 zcmbVP2{=^k9!Hie(W)$I8l>-<-Fhbbt{TFqQITV2jKM5shOvIuLLtPjqxpP3im!!YacF2P003wV4voVhAq0{e#N>g2NG4bH2ZIHbOXkqoJUWXB6EK1v zEPtLM9CG%16b$wfEt9*LDJW;?K#+~bqA-G}7JwA;5{~W9@m(-ZA)~3jR0fsF<3d>M z5|-`7;<311tiPaMn*KKfP<9D~B^$r=g~3=d!R1*7Kw&H<y z834JdDu{-SH|J169*aX{v3!5jYS#~!VK^NW0NY9c$#kY5h~Iu%LbU*SR71F+Zb*zi z5~EAR>f*8bc&xT22C5$BJCwkp&^?2G2?d}k{~Hw24F%+Z{}W6h<2_j%1_*^rXMi*+ zn$4uaVM~d`o3ngb9LO-_oz{XE1Oncc$>o7eGS$|?5DrC+qSGmOtez*Jjf32$VD$Bo z+8%%>67;|TNQ@_0AJF#jq~bu}$9fAE*6t4~FGcu*;jSNb?4 z2!dFoj;^l2T`esgT~MIs1&QEo=v=6HL5oj_6V-3=%9jpXPz4?&3)F51Ckx6QE8k^YzBf49zMdGh!mhiXcLa`!jnh5k$TSe5}`_jpvAX;<)ld|~qF4YIdW5NEVmcO*a1q1$jlK!4(zDNJdB>gP=|1U|4 zB_Ml&Od1vH)M&UM9JHXJeHQ@wKee$i_fzxx0f#!O;Bu*(LxZLF0hI|+bD(a&g)_b! zda-!hT9^_8yGHiU>{+vC!-%m9yS%Jyw1b%&+?~$sXy04(w5w~c-})%${U$_FOXA(s z61C)*801Q`h~$;a!C^+*D@t-!b5sA$u8F~Bmcgy68#8HhJ)a0Kf-B!uRb8#>OoNO`2RG|}h#%T_ zxuEl&Uw!b|tBGZtiJHRk=j&#PCj+|Me7HBJ?ve}|*F65nV_9Zu45hT});oYxD9$@K zk)yq$JT|tMQC-+MtWsB9kqYzNF?aF()Fys+fBtxA__3Lhmg#Aw$Y;Nm?nrhPzS7ZGzD z8L2~E-bSPgy_EE?C&sNu!lfqrtExH@0*ab6?`CThE6xu*4J;|y(W0bO7uLk{R;{pi zWYs#i%@NHN_3xP_XI`d_aETwT1v5&V?;w<8pJr!fwW=XPrCf}$>z@x*(2Pi*AJn5h zFv441RZaXVCy#e}_|VDq)*bgUO}@EfNcAG81`RGsC5s0Nhel>p=e)QM(}4F*h|+Eq zSN+LUh$AGs=9x)m%wHT6y8@hVJ~g$sZk85r3$vOv#sSoCn-E~WQ+(08zx_D*~dK#QtA?%uPOo#_q67t`3x>cr+O}#}O z-f7(9(#}zs)7_r7ze0}R`v#tOZqw(pueXf#X~xV-MAvlrY94KMeW5(M(o3tgW>r>u z{O6R(kF(L|bBiThwmk{!4J}E!sp9v+#yx#}H_AV$?)()i*Q8C4Im(CaFSni1?iWK; z+zD$`N-2@g_4c30N6=+g%ZJ9Yn~YN%g^R-;2N3cGlIEU%~%&yf$`lV{uN-ACi_0oODP7 zj-lsu-`WM;chop~B;W2%Ot*wtdEN~C)Np)46m9dFF~9DIq$I!i6!GYqn;3WXUBcFD z3-ZFn9<6^J=DkYfQB~>8E03%QbAsP09^YD7sjIQ$y4(ECH>WjM@Be(iqoIbFz_-IH z)U8_~rGZebDRpRDNx1(Zd%(P`bn`yvJ2xu$LCQRqn_8@DqrBaQF)`(FQ-k;Am%3_k z#agRP?1L|T8yIeD6y16yBgqp(dKq~`E~4U$>BDC-dFyIr!+Ogo!!I3xqalC9CrR3v zKZrh9_tF5t&F!{wI#*m#5)Q*reF9}AHq564R(aC zb{E-r&~LP7qnXAZ52Brq*(&yUY3}pte&W0dn7dZqm-wvzYRmSAF0%Es##*~+BZb_c zo_{>O_m%kVtoWzIyw_6gYYeu+>o$+Slh`&|U~aUx5n;x;5*NoVQXWN= zr9~Y?%NXug@U5A>9IV2wG3SyPvZUDTKfl;)#9qjZEZB6I@cY=MrVXns6sIie0{A^* z+YauzJ2$N+N5>sb3YI%LA<{8M+*pVDRA86AYp_(|zRAq%7v9oyPOeRJwpNEiKP9Lb zMUP5l4{VT;5BQ?}WJkcWO<617*2?0G;t|o(_nq6QO`V2= zNw8d9%0A}bx^@4#yAdgz4-i+cQsTZjE8LT3b^eW{tfYVC*H)?5HD>XB*8Lvj z(e8b%%jn0K(bVqPMsIetvvWV~=|2EAZ**0&C&}M-Me4Dx{qaFkFZ4_;ApQG|D6!tb zD(npL=EEoxzx?@KcuA9}*HIE(u!#d(CFn4ekToFG4}?OWE!b8cs1FSa}}HjoZlK_NxCtJihA>}ANzh~jDsc9KUSjr*)twkNF@ zFMa@57m>fY!f5b!XRqd*5KYc8tM`bJ@{gBnI*-K6h#ZlVl|Fid%Mz2^bvu38qXD!E z+)PYVF1ltfSY6*<$j7UhFs6aRE%cqvV%e7OTvr*z9Zq6Sgu79*sy#5e4ecd&wzN#$ z?r)5=dM~Pxac1m6&QJ*5h}2L69$a2Qn>>0$^_+?mOYHpfXD$U_(>0@!l==GRCtD2B z6NA#lp$X9R?AwgF;ZP5lZlBZqwPoQwMVyNEF9(3V?VM+6vDiys zR?_GC*J+Q+>buD)rjM`P%Nrv=U7OYtu+xYz&y literal 0 HcmV?d00001 diff --git a/angular/src/assets/images/icons/logo-futwiz.png b/angular/src/assets/images/icons/logo-futwiz.png new file mode 100644 index 0000000000000000000000000000000000000000..40418d99d8afa3c10fe1751033049e44cee9c054 GIT binary patch literal 3326 zcmbVP2~-p38V$IDbwQL(!59!(oMcEyNFpIx0t6-OB8XZhlLMK~qEviUkFff>hC3gsP=ht%7|ML~7r$eLXMdOlG_Pz29=@n=@Z{y1UHP zHqyr7aC2R`9B*uIuij?Q#QvFMcVyU3OUez9<8X6y)td$`ufPC@o5>LQ`YZf-ZcG>z z6CnZ0M~IPPDTc-tvm>Ptyd6>C`AD!x!Xi99+eE;N1T4ZvDi7pI9gz?bH(G}HM7#UK z(c58$fWUUZ+eb1n0x_b1@R8zBiJTe9B24fyv19dR5&=H}QEX=s)~W^Z{ya~-BPv7i z45AGHgCH4i#~?y9h(=-1=+G)W86?}1Kne+@0X8;FDwzpV@smFSCMXjKncf`dNjdC{ zMF>$Sq)ZYiA|iqqK_Q~DV3G}k!61QT5}6EO2tXbsQ9zM^L~i>Z~S!0(c514U>gVhznp65{ifsi9(KH zZKkl&5LAK6L(spWp1S=P0j#<_-jv2iV-bs|B;*RGa4e07D?1eSbnes;Xn$6MNsz*0Oa0L^B)oy1IV0D`j0b%m8=p*&`SIU#? zBSH|2^dFl4PF;=)6%mjOSsRSi?qAr8^ta)ol5j-!K>|`p24Ry1k;z#Ep$rw{A*nP} z1Vid3R9buzdxFh&@gd8AZNyV*(>2lN?REbg!kF@jT%n3=cu*8tmmxPgnlFA*(ot34diwell;#xIyWT6uFYN2wrR#lY+fdPMX_fUYGhGWS%NEOX zR(!vESuGd+wRBu^h?U9wOqKq0SJtc2ntjSba0|!gvJ+*_vIg%ThF^F7exv5nxn09& z<>$i+mt5_*8FjZ^-ag}0uGztcl(-)QCP=5GGW z(Vp46Y0uXV^rJ|IQpcruR$PN_b^=&fk*PA>boFA{Si=@naJ_0Er+j_;DzK$()=25g zbL$VKbGk5mQ-S;i4pJkki`SBHHH5(YgNZcz& zIHff$uZm}{Pwz_WA4vPvg}(JO>*G;ftM5dY4(d7i_txh1L-l8>VU;mU$2uS*ok(@^CtKN%747#uNuIv5*OcteN!S@F zK3AaKnnKVGd1~UQN*7-%sJ$~oq~qZiBhYFe;+v{cO>tlI%hIwm1`{Ia2?;Co58CKw ztKzkjoXkPTeVhcBuELk_Y8>F8)iHT5xk^ES!EJZ%5| z(!`^ZR@R--`_0qz7uCdFO+GQ>4_=%W8STn5wSTg5m6QJY$K1q@jO`Aw z@d=Na9lhnL!xnv9VQ_Hni$`akes`^jIqp6>=)tCp=j9#L?s?sDV$b|fT6#-QRCLCj zNR71+0=fD5bF}U>^+}paAJpu8Gb`uCvg)lX>Z)8jj@|2;Ms;H!TRC`luIe|!=4RK1 zX7kJOS!|t+ou&nYibS_Y>a6*egFoso);)CN%Bk$ECX37`&!4AS4r%_N(y2bEwxgzSAxjmHOZTyzKz>a2A{MFDj zq3ZaRmU#1}sft?T>bSwWU6=f~*ohx+o*)0f*=~N3q0n4B{F865cXvPU;1^Hg=-r(q zeHlAHTmDP*d5yCC%sfdzBiUhTkiA76Z~TC%X^`UAx`CMEM8=)r5BiuY#O^J=#Mu214|4R%LaB|S_`oaR!YHR z3%V(Q;UkTibwB;smXUEyb6)oav1oMQ@Zm&Gkf%Z6Z=*A&U9R-{`jI{OWO;f=Nq)bH z$C{q&DIJ7#VqEPOvn@Hrep++-9Vr^P5cqCXgq}l?Xte74HY%KKUovaGNyqa&wM{t* zjUW!M{R`fH;m^xW%#)MIdn)GL@0UTFyznNMMk?kt@AC$@fgEwAQ>L3Ee;ea5UAZdP zd|ftShT-WU@AC=t^y^;v3wo@h)eRoWXYK3yDVX0>lqYO9jq+PNGEBwM+C6Z=J@ z>eQODr0-NM(ZM + + + + + + + + + + + + + diff --git a/angular/src/assets/images/icons/profile.svg b/angular/src/assets/images/icons/profile.svg new file mode 100644 index 0000000..01790b5 --- /dev/null +++ b/angular/src/assets/images/icons/profile.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/assets/images/icons/sale.svg b/angular/src/assets/images/icons/sale.svg new file mode 100644 index 0000000..e0f5c6f --- /dev/null +++ b/angular/src/assets/images/icons/sale.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/angular/src/assets/images/icons/service.svg b/angular/src/assets/images/icons/service.svg new file mode 100644 index 0000000..63bc8d8 --- /dev/null +++ b/angular/src/assets/images/icons/service.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/angular/src/assets/images/icons/supplier.svg b/angular/src/assets/images/icons/supplier.svg new file mode 100644 index 0000000..da992d8 --- /dev/null +++ b/angular/src/assets/images/icons/supplier.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/assets/images/icons/task.svg b/angular/src/assets/images/icons/task.svg new file mode 100644 index 0000000..1ffa2df --- /dev/null +++ b/angular/src/assets/images/icons/task.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/angular/src/assets/images/icons/user.svg b/angular/src/assets/images/icons/user.svg new file mode 100644 index 0000000..9c68ff0 --- /dev/null +++ b/angular/src/assets/images/icons/user.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/angular/src/assets/images/specific/futcoinbase.jpg b/angular/src/assets/images/specific/futcoinbase.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78ead9a3ead084f549a2781d8e5cf50372f882a5 GIT binary patch literal 63622 zcmb5VbwE?!`v-o(fuuC3Gy)Q%yIV==l5T^LZWtgTEv15lgru}|PeN)S;^>J;H>2}+ z=llEl51prv!1Gt$5lmJ`^4lWJ^ z7Z(Tj_HA4|0#X73e0&1RJ0wJ;G?aJm(oj-U-=}9|yifapj+&YY%JhK!Atx8-Jw_gW z9u9ss4o(itBv`j^-zLB#pdcWi;J8nHpX2{`yXgVQ@E`yLxP`?6V3T3pBE!1*2GC+y zy@iG0_kRrw`xeOTZSc$c;OGC^|Gol+!oCFxb29@F-NFK}NpFz?0QOlm01)C}uEB-@ z03`r`=LFz84$Mb7m=3_A20J_efS3RP3;;5~OHJefps+RteE097JOBU>DEP#T_yo@K zuVL!~0KPItnE;tJ0LTNtT^K;g0>gZ10uso>5CbV;IRF4t8F-3^p$s;4CIFiQ2H;f# zkZJ&n5d7pDAr7qiA5YkW|JVf2L0W}*Kw%-sGnukZnmWFsE)|A8?EiQK*#rPm0KjDe zs%yayL82gMAPF4+OCCI!z>7`gF`okfc?>vV+`r4oy8!TjfFBBA=jCC(#Ha<-4#+Ge z*kN}8WlS8{g?hbYYLqG%!PrQ# zssn6f%7!2nkUTy$paR3UrUXZWTKjK_aG9XkX)w$Tpor8uAk&mM9Mpgg2W47#n3}|JsVL=DNLfv=07`IW!Gr1FN|6K9ILz|k3>dA0Q{(|U`CWN=d4=WVu}_s) zglZx}OI8<9Ut}Gx9H&lKXO
Wjj~C9K?c?m-Q-tP>yBICy0aOt22>*!-8VNK;8Zm z5+fXe1_vd$E+(JAsX2gJ7_dxzrp}zV;h>o+R2|x4m z^ARh?&mEoGgQkIV?WEnQnx;giM2>d2I=yKuScMjW`ZK{&BzH!wH%# zTKu9RoXVk=rY870T~C*dl*|Dpk6BZYG++x_nwoVUcm^6AC7?qcQ-nipsCUoh$Z@fi zzU`>o(W7tsDlk{B0sZ%Q-|w2o;=JIcd#_OM<~!}jByLixDCE(@)M+o%H4p!bdjs%ApA`Rmws$DFJnRiFHOMI-b7xWEe#Jeyfk@` zEmAB6&`l%%**=zHMgAZsL19^exc5Cf)0#o^ntuDlZIs}O|Fx4=X2segQFF`YS4Wme z9{<2uW15lC#hhKLA;UDorXN#Wy4Ho{@Ox?ea7Xq8hGFjR=th-H!S^{y#!`+}7Sop( zRYO)v2RDFmEg~Y@(sHWehX%f2hMIK-z5_PsNT7N$z@-E26!czz61#+wvbwe`QdFt1 zX;RR@Ipt(!%W=<2q>gpXwr4P4xpj5I{g(_)oCyjo$=~3dz(tg7-}gb_v*vRh2R1zN z9t|RQ#C>GcoHlQgPnL8-=15l1barmxX{ZzZRsXP0@bD#M!&8#=X`cf=v=$qi00vQK z!USEg`!7flP&wdGn;23X8tH5_pcjY^1e{Zr=HT=3PuO=;*I6uU;;@{`%o`D9%ca|% zyn<(ulMZp3Z>gwK2qIV?X+BRSOC?JS&m+~~vP%ne*DDW1 z%CoV(?&q+Hn$t%VPnNZ9?Fr4VPV?EVU(+_jEpn4CD%lVtg8j9cHLT^V)p1+^IT)e4 z03aNO@oI3}pd`?Bh)j10zmUEG)DZeSA6_lAHR$WR6-&(Km_NBZ`xqEtmVhit6+!sO zFa)gm?jb*(T^q}onX#vHD5MaC=Y5a*Va8(aQ8W}{>3HQG!5rI#$B7LZK-B%?KmJDn zB1SFjyN^>typLq863<=vvR1E(2V9?Lc&Rz0m@uni128-j00*L=0J1{}2AHoLwP08= zDz{BjzZ`)*0*<7i})cPinVj7u>mvyjg2nU!45-LngxCvlJx zF0OoD@ql-Tt)c#`E%Zi%!@Gj!k>Mkk1Dl}iP^ZU;-E*SUH@VjCURMxVr=eql)9*(? zy-Q-xe~_p2fJ?bKUooCI?Cdi6u_GrpqNqRgargFj#9}q7pgm=XwHjP;Oe_Sj^S}-O zN;t5dQR}KU=sK8p6n|J)Y)+Mx{2=70*{HePzY(PU+27ea6_;hH!@Q+~v2wY}DtF@G zX@4Yb10JP-c&NDzuMq&OGdv_3OAXl&+2 z8qC+YHdd3mwU^H*>erxB0zvSHh2=B0IpX^7G69mPo*xI^l zTlL)gDW_IOBavU{+M-)ejECJOzCH@G!I6J|SZDqVN24@2vk|>8iY^cmIlF$U?Z#{I zgQwr(CmyrM@Iu7nN86yVgqpPb{hW$_da{aq4WTesPuU`A(D2l(kNrtgr zEO@4P_-fX8n79SzX_Oim?y%&!!W5LvWSqtV_B)MRA}yogd4IvwBIs7`1AG~ zWol*}1M2Q#?Ya?1YG?xucS8K}i`uK)$BP|^NaQZsS?$2z^Vl{UFPxf%nhj(L_AjY` z=nat%;^_d`-HKrf3d)v9+6{@#$yaRw&IrrrU)hB=_q=3{8~moSrxx8+`fVDEN6r(? zwml>}SrD@QraAx<0x|v$@waJO@7+Z4e8N#k^oalJn{LFN*TTwp<$!XjN_ejobhfhV zo}C@E2DHPJq%m2y-h%9=@4rkkSg^5mB4KzSE0_?XAdjVEPz{DO>@gi(hR(vjM}A&I zJpPVb2%~}N){*V^K@TS`-#usRujr@6y^?+78(cgZtj(VE=A1FR>`84N7H>g_*;#Y# z{fyzH$8PCI=DxdUuB(0K173=FCNNMvR5(pP@=A?#Oyb<{sg^S_)}ODm-vDOcw)TToXk@GP0eMi+ zAvH<2CIwgkFyw+_gMupnI9PgJV1CJ?Zcs42wBdMkx9M;sQq-y3)+@{3q6ToZ@+7m|KU7 zR#l-Ek31KAAx^ItDjOfxjI5rK6rUx2=%=gM6v&|Q$=;tj&;5ALCwl!dX>9dmm^KCw zS$(skc>~xTgqp3cAIw=6^Hs8nF+(_^kpGduBG3DGnh&B0u;D9$`!#?Q zlZRadoVZOi(hJ(gS5h7yH?`;RGLn25*!_@@^?rz`ogq}YQ)&K>kMztL3H!Ee{HGH6 zYSp)Oh*o(jPh_nWO8)>fG0|(Q?sas45L<>Kwhjj2fKeuo37Zge0szboY5!iaK%fCO z#X$f^J@EKBf?mi*Gdb{r&a#TIYx&TBAzst@XR_d-|4IM&k@%IIn05*>r&C*sfT@Jl z)~VPh1=1?wY>5~Px&b_gkjs}B_2&{SdXz9sE|0B~2Vm=ghzHXk|A*SJ0W2MikPsc9 zI?(l=lfS^dInMDlbbxH|P3eoAD6xFF(SnDj6Wv6#C^n z*{Votk%^YFNPMV2G#gehxqRrM_=y9Pbp1yFi<6}boL;d92KN7DAXwI=@&Le61l*d) zsaQF%6>Lh()kvQ}yM-;Dps%D0o2IdR*XG(s5rnOOHxKR~zdSmS2k^^XQ$rHY$q5`1 zb$_iN1cZdl?UHDGm`yQNb6|r3Y+>>MfeOAnnX)bjBC)~v{ZEYmHf5MKxCsIVg|#rC zh7xc^7=14b&s#fe4rZX2FdwaY*eELMCTLFMBcq;l#io2ZcDE1SUB$gC+bLPGK} zJzzow!g9cXR`kWxq=HUh`(;No{raDiQ`+GSuWuQ|ndrpmz|{+LDUUV_UMEY1JUrq+ zkfz|z5_J7NCy3;+!_OkfW-Fp*;7+McX^8d)OdB@xUJa1^vU5i}iNS0w=jgZlLJ;_;amvhSQEw>hE^ zP)O9}M-a!AnOf6INz3NS9G}vUT1owmc4jkx=u!fCgNaggo8ahWVf8IvtEBP13ps%! zIib-_`sNrDe48l0H;H~aBu+_QohrqQ##vRP<>Q0cT=_BihHNJ3hDL0{{S-fFkoLZ!q*?<|t;Qe=`Rf0efa-xj9~&6qg3TAR?f9Ko z$vvU0o9NTPBF;gO6pO7jGtBvUEs|bOG zRwESD%hapO)JMgxisK67J=9i^Tm6U$L=6lbP&2oGpVy_IG@UH(j!LrT+mA9xTw^OD9sKTLQCz-S?lm5rcL_3 zv@}+|ODfLwMxBi!Tda};gF@o}W5p!JflHl98C1#t6awxgY@lsm*|_wTZlUQlCJh(lm0SFzR%8*}?5LPWM zO=LrN2befH-Y*jwkvrf$;7t;<@6_!@jV&Uh27Ok!-YV$0Y-$XhyZKzCztf3PN>^gf zN^59(yR^6({W3~oso7)lZR_MBLTs&FPG)SeBQ$l>-$JPW!;`5#2O>k0l7H0|u!5xd ziAq;l*Fc3#mrD1441$#~y$y#12-NuT#OTTXdVl})()J)WR-J`pFfXH9v?~L{E{Q7> zK!qhRc(;Q5jrE~-lVxS#u7^y=Lck)b@MM>fwr<;J`hebYiN`FTix3Y_gSnJ2hYq?q ziG~KeUlv6s4(k(n8jNUVlkoXwT;0344$Kj6dH18w0owbBtHM-K6SQ*5w;Gi1X9Vn7 zVvAx`2gx)j--6n!0n24jUCKvF#AZjCTc&y+F3vi@bbVk8Z8s`ugJnHEwh|yziKMCf zv)T!44={0ILD?nXq$z-mlh4UIP@}AyfGLX&_|tlu+;S~zCtN-DSnqe8K&F^rc_N=gYe)WCLVlfT_Va!KBLf51#89l51ov;wR}YOq=%+g z{IfFp@**Rdh=#T%j?8y{jhGirY@SK(*>`-1FSwUhD)@$)%n&rRM_dn>V?lPfGX7U6 zj46yY!4wQ*^8IDrGbq@0H%|XPbPDM(w(5PC?DfqAdN1J8e`sOF^=N;y*C{%LLmosZ zly-u5OJdpd95{1K9C)2Q(iNv|i=Kw(RTC!9N=|ol^id?fny%99Ajuu#U5C!4a@dyj zs{J1a(AT;Nc!jYXnB5f%EN*gOf!l#LZ*FLOH%~(5`p%K3%w@~L{<>#?hk6N4M5uAx zdf&NpPDjOpb6pib49L)f5<&)S2WrPKpt#1Fy4zVrL2*K$HURA#OzTUuw35^6eHmTQ zJMNNAZfXzK%cxm(Ddlkh2*!|A^?GA;sW|`wc>usp#(@>;vMc2#wf5RqJ9UnHYBx%hA<~)E7OL$}hp?i(1a9*kHbd4#(ygB%h zY?8E}tXv8z~O@{5H?_{tLlx z0l{NpA)uwf9Kf0Qt(Ic9Oe7K_^+k(H#; z>sV3!b>qY%_%5nAdlJbf=#=!t-TD^vae-TstM}wu(DhCr3b7MldKPV*H6b~z9?JqF z2>;>WY3?z*Hge#0w9{7~Ak)qu*1dhWX6KugG&p~J%DxltspWu0AWsg%0DC4741{4R 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 Nfj>LDq<8(9`9D~u^(g=V literal 0 HcmV?d00001 diff --git a/angular/src/assets/scss/_accordion.scss b/angular/src/assets/scss/_accordion.scss new file mode 100644 index 0000000..e69de29 diff --git a/angular/src/assets/scss/_basics.scss b/angular/src/assets/scss/_basics.scss new file mode 100644 index 0000000..df41c58 --- /dev/null +++ b/angular/src/assets/scss/_basics.scss @@ -0,0 +1,858 @@ +/* montserrat-regular - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: 'Montserrat'; + font-style: normal; + font-weight: 400; + src: url('../fonts/montserrat-v26-latin-regular.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} + +/* montserrat-italic - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: 'Montserrat'; + font-style: italic; + font-weight: 400; + src: url('../fonts/montserrat-v26-latin-italic.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} + +/* montserrat-600 - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: 'Montserrat'; + font-style: normal; + font-weight: 600; + src: url('../fonts/montserrat-v26-latin-600.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} + +/* montserrat-600italic - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: 'Montserrat'; + font-style: italic; + font-weight: 600; + src: url('../fonts/montserrat-v26-latin-600italic.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} + +/* montserrat-800 - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: 'Montserrat'; + font-style: normal; + font-weight: 800; + src: url('../fonts/montserrat-v26-latin-800.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} + +/* montserrat-800italic - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: 'Montserrat'; + font-style: italic; + font-weight: 800; + src: url('../fonts/montserrat-v26-latin-800italic.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} + +/* material-icons-regular - latin */ +@font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: url('../fonts/material-icons-v142-latin-regular.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} + +html, body { + height: 100%; +} + +body { + margin: 0; + font-family: "Montserrat", "Helvetica Neue", sans-serif; + background: #2b3a44; +} + +.app-container { + border-top: 5px solid #c1c1c1; + min-height: 500px; + overflow: hidden; + color: #fff; +} + +label, +.form-label { + font-size: 13px; + margin-bottom: 5px !important; + a { + color: rgba(33, 37, 41); + } +} + +h1 { + .icons { + align-self: center; + display: flex; + padding-left: 20px; + + a { + padding-left: 10px; + display: block; + } + + img { + width: 24px; + height: auto; + } + } +} + +img { + display: block; + max-width: 100%; + width: auto; + height: auto; +} + +.logo { + img { + max-height: 60px; + width: auto; + } +} + +textarea#pasteCodes { + min-height: 200px; +} + +.error { + background: #f00; + color: #fff; + padding: 5px 10px; + margin: 0 0 10px 0; +} + +.alert-box { + position: fixed; + right: 20px; + top: 20px; + z-index: 9998; + + .alert { + position: relative; + max-width: 450px; + padding-left: 40px; + + &:after { + content: ""; + position: absolute; + left: 10px; + top: 16px; + width: 20px; + height: 20px; + background-size: 20px auto; + } + + &.alert-success:after { + background: transparent url("../images/icons/icon-round-success.svg") no-repeat left top; + } + + &.alert-danger:after { + background: transparent url("../images/icons/icon-round-danger.svg") no-repeat left top; + } + + &.alert-info:after { + background: transparent url("../images/icons/icon-round-info.svg") no-repeat left top; + } + + &.alert-warning:after { + background: transparent url("../images/icons/icon-round-warning.svg") no-repeat left top; + } + } + + .alerts-remove { + padding-left: 16px; + cursor: pointer; + background: #6d757c; + @include transition(); + + &:hover { + background: #2b3b44; + } + } +} + +.navbar-primary { + background: #f6f6f6; +} + +.card { + border-radius: 0; + border: none; + + .card-header:first-child { + border-radius: 0; + } +} + +.icon-mini { + height: 15px; + display: inline; + margin-right: 6px; + margin-top: -2px; +} + +.spt-main { + min-height: calc(100vh - 126px); + background: #fff; + color: rgba(33, 37, 41); + width: 85.5%; + min-width: calc(100% - 200px); + @media only screen and (max-width: 1199px) { + width: auto; + //width: calc(100% - calc(var(--bs-gutter-x) * 0.5) - calc(var(--bs-gutter-x) * 0.5)); + } +} + +.spt-container { + position: relative; + min-height: 1px; + margin-bottom: 3rem; + + .top-btn { + display: flex; + justify-content: flex-end; + } + + .card:not(.contacts .card, .tasks .card, .post .card) { + border: none; + border-radius: 0; + border-top: 1px solid #2B3A44; + border-bottom: 1px solid #2B3A44; + + .card-body { + padding: 5px 0; + + .spt-col { + padding-top: 20px; + } + + .has-image { + border-left: 1px solid #c1c1c1; + display: flex; + align-items: center; + justify-content: center; + + &.image-left { + border-left: none; + border-right: 1px solid #c1c1c1; + } + } + + img { + //margin: 0 auto; + //max-width: 80%; + } + } + + .mat-h1, + .mat-headline-5, + .mat-h2, + .mat-headline-6, + .mat-typography & { + .mat-h1, + .mat-headline-5, + h1, + .mat-h2, + .mat-headline-6, + h2 { + text-transform: none; + font-weight: 600; + } + } + } +} + +.toggle-component { + .spt-container { + background: #fafafa; + margin-bottom: 20px; + } + + .top-btn { + position: absolute; + //right: 0; + //top: -63px; + right: 10px; + top: -53px; + margin: 0; + + .btn { + //padding-top: 17px; + //padding-bottom: 17px; + } + } + + app-paging > .mat-mdc-paginator:first-child { + border: none; + } + + .mat-mdc-cell { + background: #fafafa; + } +} + +.toggle { + background: #dee2e3; + color: #2a3a43; + padding: 14px 10px 14px 83px; + margin-bottom: 3px; + position: relative; + cursor: pointer; + &.small { + padding: 6px 10px 6px 83px; + &:before, + &:after { + top: 14px; + } + } + + h2 { + text-transform: uppercase; + } + + p { + text-transform: uppercase; + } + + * { + margin: 0 !important; + } + + &:before, + &:after { + content: ""; + position: absolute; + top: 28px; + width: 15px; + height: 4px; + background: #2a3a43; + @include transition(); + } + + &:before { + transform: rotate(45deg); + left: 26px; + } + + &:after { + transform: rotate(-45deg); + left: 34px; + } + + &.collapsed { + &:before { + transform: rotate(-45deg); + } + + &:after { + transform: rotate(45deg); + } + } +} + +.dropdown-menu { + border-radius: 0; +} + +.info-box { + display: flex; + justify-content: flex-start; + align-items: center; + @media only screen and (max-width: 767px) { + display: block; + } +} + +.spt-loader-box { + position: fixed; + left: 50%; + top: 50%; + z-index: 9999; + //background: #9eb3c1; + width: 130px; + height: 130px; + //border: 3px solid #2b3a44; + //border-radius: 50%; + transform: translate(-50%, -50%); +} + +.spt-loader { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); +} + +.spt-loader:after { + content: '$'; + display: inline-block; + width: 96px; + height: 96px; + border-radius: 50%; + text-align: center; + line-height: 80px; + font-size: 64px; + font-weight: bold; + background: #FFD700; + color: #DAA520; + border: 4px double; + box-sizing: border-box; + box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, .1); + animation: coin-flip 4s cubic-bezier(0, 0.2, 0.8, 1) infinite; +} + +@keyframes coin-flip { + 0%, 100% { + animation-timing-function: cubic-bezier(0.5, 0, 1, 0.5); + } + 0% { + transform: rotateY(0deg); + } + 50% { + transform: rotateY(1800deg); + animation-timing-function: cubic-bezier(0, 0.5, 0.5, 1); + } + 100% { + transform: rotateY(3600deg); + } +} + +.table-responsive { + .mat-mdc-row { + height: auto; + } + + .mat-mdc-table .mdc-data-table__cell, + .mat-mdc-table .mdc-data-table__header-cell { + padding: 2px 8px; + } +} + +.search-select { + .hide-header { + table { + thead { + display: block; + } + } + } + .mat-mdc-header-row { + height: auto; + } + img { + width: 30px; + } + + .mat-mdc-paginator-range-actions { + justify-content: flex-end; + flex-wrap: wrap; + margin-right: -15px; + } + + .mat-mdc-paginator-range-label { + text-align: right; + flex-basis: 100%; + flex-grow: 0; + margin: 0 7px 0 0; + } + + .mat-mdc-icon-button.mat-mdc-button-base { + width: 30px; + height: 30px; + padding: 0; + } + + .mat-mdc-table .mdc-data-table__cell, + .mat-mdc-table .mdc-data-table__header-cell { + padding-top: 4px; + padding-bottom: 4px; + } + + .spt-tools.single { + display: none; + } + + .show-name { + position: relative; + + p { + border: 1px solid #dee2e6; + padding: 6px 12px; + font-size: 16px; + line-height: 24px; + min-height: 38px; + cursor: text; + + &.search-empty { + &:before { + content: "Bitte wählen"; + font-style: italic; + color: #999; + } + } + } + } + + .search-toggle { + display: none; + + td { + cursor: pointer; + } + } + + .search-box-open { + display: block; + } +} + +/* Traffic lights */ +.traffic-light { + display: inline-block; + width: 16px; + height: 16px; + border-radius: 50%; + position: relative; + overflow: visible; + + &.has-function { + cursor: pointer; + } +} + +.traffic-light::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + border-radius: 50%; + background: radial-gradient(circle at 33% 33%, + rgba(255, 255, 255, 0.3) 0%, + rgba(255, 255, 255, 0.1) 15%, + rgba(255, 255, 255, 0) 60%); +} + +.traffic-light.red { + background-color: #e74c3c; +} + +.traffic-light.green { + background-color: #2ecc71; +} + +.traffic-light::after { + content: ''; + position: absolute; + top: -1px; + left: -1px; + right: -1px; + bottom: -1px; + border-radius: 50%; + opacity: 0.7; + filter: blur(2px); + animation: glow 2s infinite ease-in-out; +} + +.traffic-light.red::after { + background-color: #e74c3c; +} + +.traffic-light.green::after { + background-color: #2ecc71; +} + +@keyframes glow { + 0%, 100% { + opacity: 0.4; + transform: scale(1); + } + 50% { + opacity: 0.7; + transform: scale(1.05); + } +} + +.switch-widget { + .switch { + position: relative; + display: inline-block; + width: 54px; + height: 28px; + margin: 0 !important; + input { + opacity: 0; + width: 0; + height: 0; + } + } + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + transition: .4s; + &:before { + position: absolute; + content: ""; + height: 20px; + width: 20px; + left: 4px; + bottom: 4px; + background-color: white; + transition: .4s; + } + } + input:checked + .slider { + background-color: #2ecc71; + } + input:checked + .slider:before { + transform: translateX(26px); + } + .slider.round { + border-radius: 34px; + } + .slider.round:before { + border-radius: 50%; + } +} + +input[readonly], input:disabled { + background: #ffeaea !important; +} + +.mat-mdc-option { + .mdc-list-item__primary-text { + position: relative; + z-index: 100; + } +} + +.combined-images { + position: relative; + width: 300px; + height: 355px; + + .mat-mdc-cell & { + width: 60px; + height: 71px; + + .rating { + font-size: 10px; + line-height: 13px; + } + .lastname { + top: 75%; + font-size: 8px; + line-height: 10px; + letter-spacing: -0.03em; + } + } + + img { + width: 100%; + height: auto; + } + + .imgBg { + + } + + .imgFront { + position: absolute; + //left: 50%; + //top: 50%; + //transform: translate(-50%, -50%); + right: 0; + bottom: 0; + transform: translate(-10%,-46.3%); + width: 65%; + } + + .rating { + position: absolute; + left: 15%; + top: 27%; + color: #000; + font-weight: 600; + font-size: 30px; + line-height: 39px; + } + + .lastname { + position: absolute; + left: 10%; + top: 76%; + width: 80%; + max-height: 30%; + overflow: hidden; + text-align: center; + color: #000; + font-weight: 600; + font-size: 22px; + line-height: 26px; + } +} + +.spt-dl { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + + dt { + width: 50%; + padding: 7px 0; + border-top: 1px solid #2b3a44; + + &:first-of-type { + border: none; + } + } + + dd { + width: 50%; + margin: 0; + padding: 7px 0; + text-align: right; + border-top: 1px solid #2b3a44; + + &:first-of-type { + border: none; + } + } +} + +.spt-mini-list { + li { + padding: 7px 0; + border-top: 1px solid #2b3a44; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + align-items: center; + + &:first-child { + border: none; + } + > div { + display: flex; + justify-content: flex-start; + align-items: center; + padding-left: 20px; + div { + &:first-child { + min-width: 300px; + } + } + } + } +} + +.sniping-accounts { + border-bottom: 1px solid #2B3A44; +} + +.sniping-accounts-selected { + li { + list-style: none; + display: flex; + align-items: center; + border-top: 1px solid #2B3A44; + padding: 5px 0; + + &:first-child { + border: none; + } + + .first { + width: 37px; + margin-right: 10px; + } + + .btn { + padding-top: 0; + padding-bottom: 0; + } + + div { + display: flex; + justify-content: space-between; + width: 100%; + + span { + + } + } + } +} + +.log-area { + overflow: auto; + border: 1px solid #2b3b44; + padding: 10px 0; + max-height: 600px; + ul { + margin-right: 20px; + li { + border-bottom: 1px solid #eee; + padding: 3px 0; + } + } + p { + margin-bottom: 0; + } +} + +.overlayed { + .search-toggle { + width: calc(400% + 72px); + @media only screen and (max-width: 991px) { + width: calc(300% + 48px); + } + @media only screen and (max-width: 767px) { + width: calc(200% + 24px); + } + @media only screen and (max-width: 575px) { + width: 100%; + } + } +} + +.top-button-row { + margin-top: -50px; + @media only screen and (max-width: 575px) { + margin-top: 0; + } +} + +.active-filter-count { + font-size: 16px; + color: $color-matsen; +} + +#c-btn { + @media only screen and (max-width: 1199px) { + display: none; + } +} + +#go-back { + .left-handed & { + @media only screen and (max-width: 1199px) { + margin-left: 70px; + } + } +} \ No newline at end of file diff --git a/angular/src/assets/scss/_button.scss b/angular/src/assets/scss/_button.scss new file mode 100644 index 0000000..ea64004 --- /dev/null +++ b/angular/src/assets/scss/_button.scss @@ -0,0 +1,110 @@ +.btn { + border-radius: 0; + white-space: nowrap; + @include transition(); +} + +.btn-primary { + background-color: $color-matsen; + border-color: $color-matsen; + &:hover, + &:focus, + &:active { + background-color: $color-matsen-dark !important; + border-color: $color-matsen-dark !important; + } +} + +body { + .spt-btn-low { + background-color: #a7adb1 !important; + &:hover { + background-color: #75797c !important; + } + } +} + +.btn-delete-user { + width: 40px; + text-align: center; + box-sizing: content-box; +} + +[data-type="action-icon"] { + font-size: 20px; +} + +[data-type="user-tool"] { + cursor: pointer; + font-size: 20px; + @include transition(); + + &:not(.btn):hover { + color: $color-matsen; + } + &.btn { + &:hover { + background-color: $color-matsen; + } + } +} + +[data-action="edit"] { + right: 0; + bottom: 0; + width: auto; +} + +[data-action="follow"] { + right: 0; + top: 0; + width: auto; + background: $color-matsen; + color: #fff; + &:before { + @include transition(); + } + + &:hover:before { + content: "\f415"; + color: #fff; + } + + &.user-follows { + &:hover:before { + content: "\f417"; + color: #fff; + } + } +} + +.badge { + border-radius: 0; + background: #2b3b44 !important; + font-weight: 400; + text-transform: uppercase; + @include transition(); + &:hover { + background: #556169 !important; + } +} + +.spt-icon-details { + display: block; + width: 32px; + height: 32px; + background: #2e3a43 url("/assets/images/icons/details.svg") no-repeat center center; + background-size: 20px auto; + border-color: #2e3a43; + &:hover { + background-color: #6d757c !important; + border-color: #6d757c !important; + } +} + +.spt-icon-unassign { + display: inline-block; + width: 20px; + height: 30px; + @include delete-image(); +} \ No newline at end of file diff --git a/angular/src/assets/scss/_contacts.scss b/angular/src/assets/scss/_contacts.scss new file mode 100644 index 0000000..a564776 --- /dev/null +++ b/angular/src/assets/scss/_contacts.scss @@ -0,0 +1,25 @@ +.contacts { + .row:not(.card .row) { + border-top: 1px solid #2B3A44; + padding-bottom: 20px; + } + .card { + background: #f2f2f2; + border-top: 2px solid #c1c1c1; + margin-top: 20px; + height: calc(100% - 20px); + } + .spt-contact-box { + position: relative; + .badge { + position: absolute; + right: 0; + bottom: 0; + } + } + img { + object-fit: cover; + height: 120px; + width: 100%; + } +} \ No newline at end of file diff --git a/angular/src/assets/scss/_dark.scss b/angular/src/assets/scss/_dark.scss new file mode 100644 index 0000000..ccec16d --- /dev/null +++ b/angular/src/assets/scss/_dark.scss @@ -0,0 +1,62 @@ +.dark-mode { + .navbar-primary, + .spt-main, + .mat-mdc-table, + .mat-elevation-z8 th, .mat-mdc-elevation-specific.mat-elevation-z8 th, + .card { + background: #2b3a44 !important; + } + + h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1, + .mat-mdc-select, + .mat-mdc-select-arrow svg, + .mat-mdc-icon-button, + .mat-mdc-row, + .mat-mdc-header-row, + .toggle p, + .form-label, + .mat-mdc-tab .mdc-tab__text-label, .mat-mdc-tab:hover .mdc-tab__text-label, + .spt-dl dt, + .spt-dl dd, + .form-control, + .form-control::placeholder, + .spt-main, + select, + label a, + .form-label a, + .card-body { + color: #fff !important; + } + + .mat-mdc-paginator-icon { + fill: #fff; + } + + .toggle:before, .toggle:after { + background: #fff; + } + .spt-dl dt, + .spt-dl dd, + .mat-mdc-cell, + .spt-container .card:not(.contacts .card, .tasks .card, .post .card) { + border-color: #fff; + } + .mat-mdc-icon-button[disabled] .mat-mdc-paginator-icon { + fill: #3e525f; + } + .mat-mdc-tab-list .mat-ripple { + background: #4e697b; + } + .mat-mdc-table .mat-mdc-row:hover .mdc-data-table__cell, + .toggle, + .mat-mdc-tab-list .mdc-tab-indicator--active .mat-ripple { + background: #3e525f; + } + .spt-icon-details { + border-color: #3e525f; + } + .form-control, + select { + background: #1d262d !important; + } +} \ No newline at end of file diff --git a/angular/src/assets/scss/_form.scss b/angular/src/assets/scss/_form.scss new file mode 100644 index 0000000..656c7a8 --- /dev/null +++ b/angular/src/assets/scss/_form.scss @@ -0,0 +1,36 @@ +.form-control { + border-radius: 0; + padding: 0.4rem 0.5rem; + font-size: 13px; +} + +.spt-form { + .delete-image { + display: flex; + justify-content: flex-start; + align-items: center; + cursor: pointer; + padding: 2px 0; + @include transition(); + &:hover { + background: $color-matsen; + color: #fff; + } + img { + width: 40px; + height: 40px; + object-fit: cover; + } + p { + margin: 0; + } + } +} + +.mini-check { + margin-right: 10px; + + .form-label { + margin: 0 !important; + } +} + diff --git a/angular/src/assets/scss/_mixins.scss b/angular/src/assets/scss/_mixins.scss new file mode 100644 index 0000000..b7e1700 --- /dev/null +++ b/angular/src/assets/scss/_mixins.scss @@ -0,0 +1,25 @@ +@mixin transition { + transition: all 0.3s ease-out; +} + +@mixin delete-image { + position: relative; + cursor: pointer; + &:before, &:after { + content: ""; + position: absolute; + left: 50%; + top: 50%; + width: 10px; + height: 2px; + background: #000; + } + + &:before { + transform: translate(-50%, -50%) rotate(45deg); + } + + &:after { + transform: translate(-50%, -50%) rotate(-45deg); + } +} \ No newline at end of file diff --git a/angular/src/assets/scss/_modal.scss b/angular/src/assets/scss/_modal.scss new file mode 100644 index 0000000..10d94b1 --- /dev/null +++ b/angular/src/assets/scss/_modal.scss @@ -0,0 +1,30 @@ +.modal { + cursor: not-allowed; +} +.modal-dialog { + margin-top: 3rem; + margin-bottom: 3rem; + cursor: auto; +} +.modal-content { + padding: 1rem; + &:before, + &:after { + content: ""; + display: block; + width: 30px; + height: 3px; + position: absolute; + right: 0; + top: -30px; + pointer-events: none; + background: #fff; + cursor: pointer; + } + &:before { + transform: rotate(45deg); + } + &:after { + transform: rotate(-45deg); + } +} \ No newline at end of file diff --git a/angular/src/assets/scss/_sales.scss b/angular/src/assets/scss/_sales.scss new file mode 100644 index 0000000..c702c50 --- /dev/null +++ b/angular/src/assets/scss/_sales.scss @@ -0,0 +1,60 @@ +.sales-summary-container { + + .sales-summary-bar { + background: #f2f2f2; + color: #fff; + div { + animation: expand 2.5s ease; + span { + display: block; + padding: 10px 13px; + white-space: nowrap; + } + } + } + .sales-summary-turnover { + background: #2b3a44; + //background: rgb(45,209,159); + //background: linear-gradient(109deg, rgba(45,209,159,1) 0%, rgba(64,208,203,1) 36%, rgba(44,138,181,1) 100%); + } + .sales-summary-profit { + background: #589476; + background: linear-gradient(109deg, #589476 0%, #a9ebaa 100%); + //background: rgb(179,208,47); + //background: linear-gradient(109deg, rgba(179,208,47,1) 0%, rgba(64,208,70,1) 36%, rgba(44,181,91,1) 100%); + } +} + +@keyframes expand { + from { + width: 0; + } + to { + width: 100%; + } +} + +.mat-mdc-tab-list .mat-ripple { + background: #f6f6f6; +} +.mat-mdc-tab-list .mdc-tab-indicator--active .mat-ripple { + background: #f2f2f2; +} +.mat-ripple:not(:empty) { + background: #f6f6f6; +} +.mat-mdc-tab .mdc-tab__text-label, +.mat-mdc-tab:hover .mdc-tab__text-label { + color: #000 !important; +} +.mat-mdc-tab .mdc-tab-indicator__content--underline, +.mat-mdc-tab.mdc-tab--active:hover .mdc-tab-indicator__content--underline { + border-color: $color-matsen !important; +} +.mat-mdc-tab.mdc-tab--active .mdc-tab__text-label, +.mat-mdc-tab.mdc-tab--active:hover .mdc-tab__text-label { + color: $color-matsen !important; +} +.mat-mdc-tab-body { + padding-top: 30px; +} \ No newline at end of file diff --git a/angular/src/assets/scss/_sidebar.scss b/angular/src/assets/scss/_sidebar.scss new file mode 100644 index 0000000..f6d0ccc --- /dev/null +++ b/angular/src/assets/scss/_sidebar.scss @@ -0,0 +1,170 @@ +#btn-sidebar { + @media only screen and (min-width: 1200px) { + display: none; + } + position: absolute; + right: 28px; + top: 24px; + width: 34px; + height: 20px; + padding: 0; + cursor: pointer; + @include transition(); + .left-handed & { + right: auto; + left: 28px; + } + + &:before, &:after { + content: ""; + display: block; + position: absolute; + left: 0; + top: 0; + width: 100%; + } + + &:before { + height: 11px; + border-top: 2px solid rgb(43, 58, 68); + border-bottom: 2px solid rgb(43, 58, 68); + } + + &:after { + top: 18px; + height: 2px; + background: rgb(43, 58, 68); + } + + &.nav-open { + right: 228px; + .left-handed & { + right: auto; + left: 228px; + } + } +} + +.spt-sidebar { + position: relative; + padding: 0; + width: 14.5%; + max-width: 200px; + @include transition(); + @media only screen and (max-width: 1199px) { + position: absolute; + right: -248px; + top: 0; + z-index: 100; + background: rgb(43, 58, 68); + width: 260px; + height: 100%; + &.nav-open { + right: 12px; + .left-handed & { + right: auto; + left: 12px; + } + } + } + + .card { + background: transparent; + color: #fff; + border-bottom: 1px solid #fff; + width: 100%; + text-decoration: none; + + &:hover { + background: #556169; + } + + .card-body { + min-height: 50px; + text-transform: uppercase; + text-align: right; + + h3 { + right: 10px; + bottom: 10px; + } + } + + &.active { + background: #556169; + + .card-body { + min-height: 100px; + position: relative; + + //&:before { + // content: ""; + // position: absolute; + // left: 20px; + // top: 50%; + // transform: translate(0, -50%); + // width: 65px; + // height: 100%; + // filter: brightness(600%); + // border-right: 1px solid #fff; + //} + // + //&[data-cat="customer"]:before { + // background: transparent url("/assets/images/icons/customer.svg") no-repeat left center; + // background-size: 45px auto; + //} + // + //&[data-cat="supplier"]:before { + // background: transparent url("/assets/images/icons/supplier.svg") no-repeat left center; + // background-size: 45px auto; + //} + // + //&[data-cat="service"]:before { + // background: transparent url("/assets/images/icons/service.svg") no-repeat left center; + // background-size: 45px auto; + //} + // + //&[data-cat="product"]:before { + // background: transparent url("/assets/images/icons/product.svg") no-repeat left center; + // background-size: 45px auto; + //} + // + //&[data-cat="task"]:before { + // background: transparent url("/assets/images/icons/task.svg") no-repeat left center; + // background-size: 45px auto; + //} + // + //&[data-cat="document"]:before { + // background: transparent url("/assets/images/icons/document.svg") no-repeat left center; + // background-size: 45px auto; + //} + // + //&[data-cat="sale"]:before { + // background: transparent url("/assets/images/icons/sale.svg") no-repeat left center; + // background-size: 45px auto; + //} + // + //&[data-cat="profile"]:before { + // background: transparent url("/assets/images/icons/profile.svg") no-repeat left center; + // background-size: 45px auto; + //} + // + //&[data-cat="user"]:before { + // background: transparent url("/assets/images/icons/user.svg") no-repeat left center; + // background-size: 45px auto; + //} + + h3 { + bottom: 50%; + transform: translate(0, 50%); + } + } + } + } + + .nav { + li { + margin: 0 !important; + } + } +} \ No newline at end of file diff --git a/angular/src/assets/scss/_table.scss b/angular/src/assets/scss/_table.scss new file mode 100644 index 0000000..85bf9d4 --- /dev/null +++ b/angular/src/assets/scss/_table.scss @@ -0,0 +1,126 @@ +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; +} + +table { + width: 100%; + + img { + width: 40px; + height: auto; + } +} + +th.mat-sort-header-sorted { + color: black; +} + +.mat-mdc-table { + .mdc-data-table__cell, + .mdc-data-table__header-cell { + padding-top: 8px; + padding-bottom: 8px; + @include transition(); + } + + .mat-mdc-row { + &:hover { + .mdc-data-table__cell { + background: #f6f6f6; + } + } + } +} + +.mat-elevation-z8, +.mat-mdc-elevation-specific.mat-elevation-z8 { + box-shadow: none; + + th { + background: #f2f2f2 !important; + border-top: 1px solid #304049; + font-weight: 600; + } +} + +.spt-tools { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + border-top: 1px solid #2b3a44; + min-height: 57px; + padding: 5px 0; + + &.single { + justify-content: flex-end; + } +} + +.spt-clear { + @include delete-image(); + position: absolute; + right: 10px; + top: 50%; + background: #fff; + width: 20px; + height: 30px; + transform: translate(0, -50%); +} + +.spt-no-entries { + padding: 20px 16px; +} + +.mat-mdc-paginator { + background: transparent !important; + + .mat-mdc-paginator-container { + display: flex; + justify-content: flex-start; + } + + .mat-mdc-paginator-page-size-label, + .mat-mdc-paginator-range-label { + color: #C1C1C1; + } + + .mat-mdc-text-field-wrapper { + border-radius: 0; + } + + .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__leading, + .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__notch, + .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline .mdc-notched-outline__trailing { + border: none; + } + + .mat-mdc-header-cell { + border: none; + } + + .mat-mdc-cell { + border-bottom: 1px solid #c1c1c1; + } + + tbody { + tr:first-child { + td { + + } + } + } +} + +app-paging > .mat-mdc-paginator:first-child { + border-width: 4px; +} + +.spt-button-td { + width: 85px; +} +.spt-version-td { + min-width: 160px; +} \ No newline at end of file diff --git a/angular/src/assets/scss/_tasks-posts.scss b/angular/src/assets/scss/_tasks-posts.scss new file mode 100644 index 0000000..da89642 --- /dev/null +++ b/angular/src/assets/scss/_tasks-posts.scss @@ -0,0 +1,103 @@ +.posts .post, +.tasks-box { + border-top: 1px solid #525f66; + padding-top: 3px; + background: #fff; +} +.posts .post, +.tasks { + .card { + background: #fafafa; + &.task-completed { + background: #e5f9e4; + } + .spt-border { + border-left: 1px solid #c1c1c1; + } + } + [data-type="user-tool"]:not(.spt-comments [data-type="user-tool"]) { + right: 0; + top: 5px; + bottom: auto; + } +} + +.spt-comments-box { + right: 0; + bottom: 0; +} +.spt-comments { + margin: 5px 0 0 200px; +} + +.importance { + display: block; + width: 50%; + max-width: 800px; + height: 5px; + position: absolute; + right: 0; + top: 0px; + + &[data-importance="low"] { + background: #77bb33; + } + + &[data-importance="medium"] { + background: #ffee55; + } + + &[data-importance="high"] { + background: #bb1414; + } +} + +.taskCompactModeBox { + position: relative; + padding-left: 20px; + cursor: pointer; + &:before { + content: ""; + position: absolute; + left: 0; + top: 3px; + width: 14px; + height: 14px; + border: 1px solid rgb(33, 37, 41); + } + &.taskCompactMode, + &.taskHideCompleted { + &:after { + content: ""; + position: absolute; + left: 3px; + top: 6px; + width: 8px; + height: 8px; + background: rgb(33, 37, 41); + } + } +} +.spt-compact { + position: relative; + padding-top: 4px; + padding-bottom: 12px; + &:before { + content: ""; + position: absolute; + left: 12px; + top: 0; + height: 1px; + width: calc(100% - 12px); + background: #c1c1c1; + } + //&:after { + // content: ""; + // position: absolute; + // left: 0; + // top: 11px; + // bottom: 19px; + // width: 1px; + // background: #c1c1c1; + //} +} \ No newline at end of file diff --git a/angular/src/assets/scss/_text.scss b/angular/src/assets/scss/_text.scss new file mode 100644 index 0000000..2c12d7e --- /dev/null +++ b/angular/src/assets/scss/_text.scss @@ -0,0 +1,109 @@ +strong { + font-weight: 600; +} + +.mat-h1, +.mat-headline-5, +.mat-typography .mat-h1, +.mat-typography .mat-headline-5, +.mat-typography h1, +.mat-h2, +.mat-headline-6, +.mat-typography .mat-h2, +.mat-typography .mat-headline-6, +.mat-typography h2, +.mat-h3, +.mat-subtitle-1, +.mat-typography .mat-h3, +.mat-typography .mat-subtitle-1, +.mat-typography h3, +.mat-h4, +.mat-body-1, +.mat-typography .mat-h4, +.mat-typography .mat-body-1, +.mat-typography h4, +.mat-h5, +.mat-typography .mat-h5, +.mat-typography h5, +.mat-h6, +.mat-typography .mat-h6, +.mat-typography h6 { + font-family: "Montserrat", "Helvetica Neue", sans-serif !important; + font-weight: 600; +} +.mat-body, +.mat-body-2, +.mat-typography .mat-body, +.mat-typography .mat-body-2, +.mat-typography, +.mat-mdc-header-row, +.mat-mdc-row, +.mdc-data-table__content, +.mat-mdc-paginator, +.mat-mdc-select, +.mat-mdc-option { + font-family: "Montserrat", "Helvetica Neue", sans-serif !important; +} + +.login-form h1, +.home-container .mat-h1, +.home-container .mat-headline-5, +.home-container .mat-typography .mat-h1, +.mat-typography .home-container .mat-headline-5, +.mat-typography .home-container h1 { + text-transform: uppercase; + font-weight: 800; +} + +h2.spt-headline { + text-transform: uppercase; + font-weight: 800; +} + +h3.spt-headline { + background: #2b3a44; + color: #fff; + padding: 2px 10px; +} + +.spt-back-btn { + position: relative; + font-size: 14px; + line-height: 18px; + cursor: pointer; + display: inline-block; + &:before { + content: "< "; + } + &:hover { + text-decoration: underline; + } +} + +dt { + font-weight: 600; +} + +table, +p, +ul, +ol, +dl, +.post h3, +.tasks h3 { + a { + color: $color-matsen; + @include transition(); + &:hover { + color: $color-matsen-dark; + } + } +} +.btn-link { + color: $color-matsen; + cursor: pointer; + @include transition(); + &:hover { + color: $color-matsen-dark; + } +} \ No newline at end of file diff --git a/angular/src/assets/scss/_variables.scss b/angular/src/assets/scss/_variables.scss new file mode 100644 index 0000000..37d39e3 --- /dev/null +++ b/angular/src/assets/scss/_variables.scss @@ -0,0 +1,2 @@ +$color-matsen: rgba(229,38,30,1); +$color-matsen-dark: rgba(160,27,21,1); \ No newline at end of file diff --git a/angular/src/environments/environment.beta.ts b/angular/src/environments/environment.beta.ts new file mode 100644 index 0000000..29e3650 --- /dev/null +++ b/angular/src/environments/environment.beta.ts @@ -0,0 +1,5 @@ +export const environment = { + production: false, + basePath: 'https://futbase.ddev.site:8454', + apiUrl: 'https://futbase.ddev.site:8454/api' +}; diff --git a/angular/src/environments/environment.development.ts b/angular/src/environments/environment.development.ts new file mode 100644 index 0000000..29e3650 --- /dev/null +++ b/angular/src/environments/environment.development.ts @@ -0,0 +1,5 @@ +export const environment = { + production: false, + basePath: 'https://futbase.ddev.site:8454', + apiUrl: 'https://futbase.ddev.site:8454/api' +}; diff --git a/angular/src/environments/environment.prod.ts b/angular/src/environments/environment.prod.ts new file mode 100644 index 0000000..7b71a3b --- /dev/null +++ b/angular/src/environments/environment.prod.ts @@ -0,0 +1,5 @@ +export const environment = { + production: true, + basePath: '', + apiUrl: '' +}; diff --git a/angular/src/environments/environment.ts b/angular/src/environments/environment.ts new file mode 100644 index 0000000..f036a83 --- /dev/null +++ b/angular/src/environments/environment.ts @@ -0,0 +1,18 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: true, + basePath: '', + apiUrl: '' +}; + +/* + * For easier debugging in development mode, you can importApi the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This importApi should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// importApi 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/angular/src/favicon.ico b/angular/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 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 Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/angular/src/index.html b/angular/src/index.html new file mode 100644 index 0000000..1df660b --- /dev/null +++ b/angular/src/index.html @@ -0,0 +1,14 @@ + + + + + Fut Machine + + + + + + + + + diff --git a/angular/src/main.ts b/angular/src/main.ts new file mode 100644 index 0000000..c7b673c --- /dev/null +++ b/angular/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/angular/src/styles.scss b/angular/src/styles.scss new file mode 100644 index 0000000..56d6a93 --- /dev/null +++ b/angular/src/styles.scss @@ -0,0 +1,16 @@ +/* You can add global styles to this file, and also importApi other style files */ + +@import "assets/scss/variables"; +@import "assets/scss/mixins"; +@import "assets/scss/basics"; +@import "assets/scss/modal"; +@import "assets/scss/sidebar"; +@import "assets/scss/form"; +@import "assets/scss/table"; +@import "assets/scss/text"; +@import "assets/scss/contacts"; +@import "assets/scss/tasks-posts"; +@import "assets/scss/sales"; +@import "assets/scss/button"; +@import "assets/scss/accordion"; +@import "assets/scss/dark"; diff --git a/angular/tsconfig.app.json b/angular/tsconfig.app.json new file mode 100644 index 0000000..374cc9d --- /dev/null +++ b/angular/tsconfig.app.json @@ -0,0 +1,14 @@ +/* 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" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/angular/tsconfig.json b/angular/tsconfig.json new file mode 100644 index 0000000..a0595e6 --- /dev/null +++ b/angular/tsconfig.json @@ -0,0 +1,37 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": [ + "ES2022", + "dom" + ], + "paths": { + "@app/*": ["./src/app/*"], + "@environments/*": ["./src/environments/*"] + } + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/angular/tsconfig.spec.json b/angular/tsconfig.spec.json new file mode 100644 index 0000000..be7e9da --- /dev/null +++ b/angular/tsconfig.spec.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/httpdocs b/httpdocs new file mode 160000 index 0000000..126f39d --- /dev/null +++ b/httpdocs @@ -0,0 +1 @@ +Subproject commit 126f39d57256a1f050e94597981da8832cae9063