From 7b5f74ff2b3ea81f4fdce986c74457503ccbb470 Mon Sep 17 00:00:00 2001 From: Rami Souai Date: Wed, 15 Nov 2023 11:00:42 +0100 Subject: [PATCH] Update custom code to be consistent with Jhipster module model --- .husky/pre-commit | 5 - .vscode/settings.json | 3 + Makefile | 16 +- angular.json | 3 +- build.gradle | 2 + diff.txt | 81968 ---------------- gradle/swagger.gradle | 2 +- package-lock.json | 1488 +- package.json | 6 + .../teamdojo/service/dto/TeamSkillDTO.java | 5 + .../custom/ExtendedSkillQueryServiceImpl.java | 3 +- .../teamdojo/web/rest/BadgeResource.java | 2 +- .../PersistentAuditEventDataResource.java | 195 + .../rest/PersistentAuditEventResource.java | 190 + .../teamdojo/web/rest/UserResource.java | 4 +- .../20210510110913_added_entity_Skill.xml | 4 +- src/main/webapp/app/app.module.ts | 18 - src/main/webapp/app/custom/common.resolver.ts | 21 +- src/main/webapp/app/custom/custom.types.ts | 35 + .../app/custom/feedback/feedback.component.ts | 4 +- .../app/custom/feedback/feedback.module.ts | 22 - .../app/custom/feedback/feedback.route.ts | 11 +- .../webapp/app/custom/home/home.module.ts | 16 - .../breadcrumb-trail.component.ts | 6 +- .../layouts/navbar/breadcrumb.service.ts | 2 +- .../extension/navbar-extension.component.scss | 4 +- .../extension/navbar-extension.component.ts | 12 +- .../achievements/overview-achievements.scss | 4 +- .../app/custom/overview/overview.module.ts | 68 - .../webapp/app/custom/overview/overview.scss | 4 +- .../overview/skills/overview-skills.scss | 4 +- .../skill-details/overview-skill-details.scss | 4 +- .../custom/overview/teams/overview-teams.scss | 4 +- .../custom/server-info/server-info.module.ts | 17 - .../achievement-item.component.ts | 8 + .../achievement-item/achievement-item.scss | 4 +- .../custom/shared/background/background.scss | 4 +- .../app/custom/shared/custom-shared.module.ts | 24 - .../item/notification-item.component.ts | 17 +- .../menu/notification-menu.component.ts | 8 + .../notification/menu/notification-menu.scss | 4 +- .../number-input/number-input.component.ts | 5 + .../app/custom/shared/pipe/image-url.pipe.ts | 2 +- .../shared/pipe/truncate-string.pipe.ts | 5 +- .../app/custom/shared/shared-common.module.ts | 67 - .../app/custom/shared/shared-libs.module.ts | 23 - .../skill-card/skill-card.component.scss | 4 +- .../comments/skill-details-comments.scss | 4 +- .../info/skill-details-info.scss | 4 +- .../team-image/team-image.component.html | 4 +- .../shared/team-image/team-image.component.ts | 22 +- .../translate-model/translate-model.pipe.ts | 1 + .../teams-selection.component.ts | 13 +- .../teams-selection.service.ts | 13 +- .../teams/skill-details/skill-details.scss | 4 +- .../app/custom/teams/skills/teams-skills.scss | 4 +- .../teams-achievements.component.scss | 4 +- .../teams/teams-edit/teams-edit.component.ts | 30 +- .../webapp/app/custom/teams/teams.module.ts | 57 - .../webapp/app/custom/teams/teams.route.ts | 8 +- .../detail/comment-detail.component.ts | 12 +- .../comment/list/comment.component.ts | 4 + .../update/comment-update.component.ts | 10 +- .../app/layouts/navbar/navbar.component.html | 1 - .../app/layouts/navbar/navbar.component.ts | 15 +- src/main/webapp/content/scss/vendor.scss | 10 +- tools/wait-for-container.sh | 2 +- 67 files changed, 2132 insertions(+), 82417 deletions(-) delete mode 100755 .husky/pre-commit create mode 100644 .vscode/settings.json delete mode 100644 diff.txt create mode 100644 src/main/java/com/iteratec/teamdojo/web/rest/PersistentAuditEventDataResource.java create mode 100644 src/main/java/com/iteratec/teamdojo/web/rest/PersistentAuditEventResource.java create mode 100644 src/main/webapp/app/custom/custom.types.ts delete mode 100644 src/main/webapp/app/custom/feedback/feedback.module.ts delete mode 100644 src/main/webapp/app/custom/home/home.module.ts delete mode 100644 src/main/webapp/app/custom/overview/overview.module.ts delete mode 100644 src/main/webapp/app/custom/server-info/server-info.module.ts delete mode 100644 src/main/webapp/app/custom/shared/custom-shared.module.ts delete mode 100644 src/main/webapp/app/custom/shared/shared-common.module.ts delete mode 100644 src/main/webapp/app/custom/shared/shared-libs.module.ts delete mode 100644 src/main/webapp/app/custom/teams/teams.module.ts diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index adefefb3..00000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - - -"$(dirname "$0")/../npmw" exec --no-install lint-staged diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..e0f15db2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "automatic" +} \ No newline at end of file diff --git a/Makefile b/Makefile index ee2b3c25..abb349a1 100644 --- a/Makefile +++ b/Makefile @@ -76,7 +76,7 @@ generate-all: generate-app generate-jdl generate-ci-cd ## Generate everything. .PHONY: start-keycloak start-keycloak: ## Start the Keycloak container for authentication. - docker-compose -f $(COMPOSE_FILES)/keycloak.yml up -d + docker compose -f $(COMPOSE_FILES)/keycloak.yml up -d $(TOOLS_DIR)/wait-for-container.sh \ 'Keycloak' \ $(COMPOSE_FILES)/keycloak.yml \ @@ -84,19 +84,19 @@ start-keycloak: ## Start the Keycloak container for authentication. .PHONY: stop-keycloak stop-keycloak: ## Stop the Keycloak container. - docker-compose -f $(COMPOSE_FILES)/keycloak.yml down || true + docker compose -f $(COMPOSE_FILES)/keycloak.yml down || true .PHONY: start-postgres start-postgres: ## Start the PostgreSQL container. - docker-compose -f $(COMPOSE_FILES)/postgresql.yml up -d + docker compose -f $(COMPOSE_FILES)/postgresql.yml up -d .PHONY: stop-postgres stop-postgres: ## Stop the PostgreSQL container. - docker-compose -f $(COMPOSE_FILES)/postgresql.yml down || true + docker compose -f $(COMPOSE_FILES)/postgresql.yml down || true .PHONY: start-registry start-registry: start-keycloak ## Start the JHipster Registry container - docker-compose -f $(COMPOSE_FILES)/jhipster-registry.yml up -d + docker compose -f $(COMPOSE_FILES)/jhipster-registry.yml up -d $(TOOLS_DIR)/wait-for-container.sh \ 'JHipster Registry' \ $(COMPOSE_FILES)/jhipster-registry.yml \ @@ -104,7 +104,7 @@ start-registry: start-keycloak ## Start the JHipster Registry container .PHONY: stop-registry stop-registry: ## Stop the JHipster Registry container - docker-compose -f $(COMPOSE_FILES)/jhipster-registry.yml down || true + docker compose -f $(COMPOSE_FILES)/jhipster-registry.yml down || true .PHONY: start-backend start-backend: start-keycloak ## Start the application backend in dev mode. @@ -149,12 +149,12 @@ sonar: ## Run Sonarqube analysis. .PHONY: start-local-sonar start-local-sonar: ## Start local dev Sonarqube server. # https://www.jhipster.tech/code-quality/ - docker-compose -f $(COMPOSE_FILES)/sonar.yml up -d + docker compose -f $(COMPOSE_FILES)/sonar.yml up -d .PHONY: stop-local-sonar stop-local-sonar: ## Stop local dev Sonarqube server. # https://www.jhipster.tech/code-quality/ - docker-compose -f $(COMPOSE_FILES)/sonar.yml down + docker compose -f $(COMPOSE_FILES)/sonar.yml down .PHONEY: test-backend test-backend: ## Run backend tests. diff --git a/angular.json b/angular.json index a43a18de..216ec023 100644 --- a/angular.json +++ b/angular.json @@ -105,6 +105,7 @@ "path": "./build/angular/", "environment": "all" }, - "packageManager": "npm" + "packageManager": "npm", + "analytics": false } } diff --git a/build.gradle b/build.gradle index 03cca8a9..1257c1c2 100644 --- a/build.gradle +++ b/build.gradle @@ -188,6 +188,8 @@ dependencies { // Openapi generator uses javax namespace for now https://github.com/OpenAPITools/openapi-generator/pull/13593 implementation "javax.annotation:javax.annotation-api:1.3.2" implementation "javax.validation:validation-api:2.0.1.Final" + implementation 'javax.persistence:javax.persistence-api:2.2' + compileOnly 'javax.servlet:javax.servlet-api:4.0.1' implementation "com.github.ben-manes.caffeine:caffeine" annotationProcessor "org.hibernate.orm:hibernate-jpamodelgen:${hibernateVersion}" implementation "org.hibernate.orm:hibernate-core" diff --git a/diff.txt b/diff.txt deleted file mode 100644 index a71eec77..00000000 --- a/diff.txt +++ /dev/null @@ -1,81968 +0,0 @@ -diff --git a/.browserslistrc b/.browserslistrc -deleted file mode 100644 -index 1300bc10..00000000 ---- a/.browserslistrc -+++ /dev/null -@@ -1,23 +0,0 @@ --# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. --# For additional information regarding the format and rule options, please see: --# https://github.com/browserslist/browserslist#queries -- --# For the full list of supported browsers by the Angular framework, please see: --# https://angular.io/guide/browser-support -- --# You can see what browsers were selected by your queries by running: --# npx browserslist -- --last 1 Chrome version --last 1 Firefox version --last 2 Edge major versions --last 2 Safari major versions --last 2 iOS major versions --Firefox ESR --not IE 9-10 # Angular support for IE 9-10 has been deprecated and will be removed as of Angular v11. To opt-in, remove the 'not' prefix on this line. --not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. --### Modification-Start ### --# Bugfix on MacOs due to: https://github.com/nrwl/nx/issues/8768 --not ios_saf 15.2-15.3 --not safari 15.2-15.3 --### Modification-End ### -\ No newline at end of file -diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile -index 98a7ee76..a914fd25 100644 ---- a/.devcontainer/Dockerfile -+++ b/.devcontainer/Dockerfile -@@ -1,7 +1,7 @@ - # See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.209.6/containers/java/.devcontainer/base.Dockerfile - --# [Choice] Java version (use -bullseye variants on local arm64/Apple Silicon): 11, 17, 11-bullseye, 17-bullseye, 11-buster, 17-buster --ARG VARIANT="11" -+# [Choice] Java version (use -bullseye variants on local arm64/Apple Silicon): 17, 17-bullseye, 17-buster -+ARG VARIANT="17" - FROM mcr.microsoft.com/vscode/devcontainers/java:0-${VARIANT} - - # [Option] Install Maven -diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json -index 74230678..d70d62b9 100644 ---- a/.devcontainer/devcontainer.json -+++ b/.devcontainer/devcontainer.json -@@ -5,33 +5,38 @@ - "build": { - "dockerfile": "Dockerfile", - "args": { -- // Update the VARIANT arg to pick a Java version: 11, 17 -+ // Update the VARIANT arg to pick a Java version: 17, 19 - // Append -bullseye or -buster to pin to an OS version. - // Use the -bullseye variants on local arm64/Apple Silicon. -- "VARIANT": "11", -+ "VARIANT": "17-bullseye", - // Options -- "INSTALL_MAVEN": "false", -- "INSTALL_GRADLE": "true", -- "NODE_VERSION": "lts/*" -+ // maven and gradle wrappers are used by default, we don't need them installed globally -+ // "INSTALL_MAVEN": "false", -+ // "INSTALL_GRADLE": "true", -+ "NODE_VERSION": "18.18.1" - } - }, - -- // Set *default* container specific settings.json values on container create. -- "settings": { -- "java.home": "/docker-java-home" -- }, -+ "customizations": { -+ "vscode": { -+ // Set *default* container specific settings.json values on container create. -+ "settings": { -+ "java.jdt.ls.java.home": "/docker-java-home" -+ }, - -- // Add the IDs of extensions you want installed when the container is created. -- "extensions": [ -- "angular.ng-template", -- "christian-kohler.npm-intellisense", -- "firsttris.vscode-jest-runner", -- "ms-vscode.vscode-typescript-tslint-plugin", -- "dbaeumer.vscode-eslint", -- "vscjava.vscode-java-pack", -- "pivotal.vscode-boot-dev-pack", -- "esbenp.prettier-vscode" -- ], -+ // Add the IDs of extensions you want installed when the container is created. -+ "extensions": [ -+ "angular.ng-template", -+ "christian-kohler.npm-intellisense", -+ "firsttris.vscode-jest-runner", -+ "ms-vscode.vscode-typescript-tslint-plugin", -+ "dbaeumer.vscode-eslint", -+ "vscjava.vscode-java-pack", -+ "pivotal.vscode-boot-dev-pack", -+ "esbenp.prettier-vscode" -+ ] -+ } -+ }, - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - "forwardPorts": [4200, 3001, 9000, 8080], -diff --git a/.eslintrc.json b/.eslintrc.json -index 33e75989..96996aea 100644 ---- a/.eslintrc.json -+++ b/.eslintrc.json -@@ -17,7 +17,7 @@ - "parserOptions": { - "ecmaVersion": 2018, - "sourceType": "module", -- "project": "./tsconfig.json" -+ "project": ["./tsconfig.app.json", "./tsconfig.spec.json"] - }, - "rules": { - "@angular-eslint/component-selector": [ -@@ -71,13 +71,13 @@ - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-floating-promises": "off", - "@typescript-eslint/no-non-null-assertion": "off", -- "@typescript-eslint/no-parameter-properties": ["warn", { "allows": ["public", "private", "protected"] }], - "@typescript-eslint/no-shadow": ["error"], - "@typescript-eslint/no-unnecessary-condition": "error", - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/no-unsafe-member-access": "off", -+ "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/prefer-nullish-coalescing": "error", - "@typescript-eslint/prefer-optional-chain": "error", - "@typescript-eslint/unbound-method": "off", -diff --git a/.jhipster/Activity.json b/.jhipster/Activity.json -index b63936d3..b9cfd957 100644 ---- a/.jhipster/Activity.json -+++ b/.jhipster/Activity.json -@@ -33,5 +33,6 @@ - "pagination": "infinite-scroll", - "readOnly": false, - "relationships": [], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/Badge.json b/.jhipster/Badge.json -index cda5d337..6f59047e 100644 ---- a/.jhipster/Badge.json -+++ b/.jhipster/Badge.json -@@ -81,6 +81,7 @@ - "otherEntityName": "badgeSkill", - "otherEntityRelationshipName": "badge", - "relationshipName": "skills", -+ "relationshipSide": "left", - "relationshipType": "one-to-many" - }, - { -@@ -88,6 +89,7 @@ - "otherEntityName": "image", - "otherEntityRelationshipName": "badge", - "relationshipName": "image", -+ "relationshipSide": "right", - "relationshipType": "many-to-one" - }, - { -@@ -96,8 +98,10 @@ - "otherEntityRelationshipName": "badges", - "ownerSide": true, - "relationshipName": "dimensions", -+ "relationshipSide": "left", - "relationshipType": "many-to-many" - } - ], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/BadgeSkill.json b/.jhipster/BadgeSkill.json -index a85a9896..2703a363 100644 ---- a/.jhipster/BadgeSkill.json -+++ b/.jhipster/BadgeSkill.json -@@ -1,6 +1,7 @@ - { - "applications": "*", - "changelogDate": "20210510110905", -+ "documentation": "Lookup table entity for N-to-M relationships", - "dto": "mapstruct", - "embedded": false, - "entityTableName": "badge_skill", -@@ -17,6 +18,7 @@ - "otherEntityName": "badge", - "otherEntityRelationshipName": "skills", - "relationshipName": "badge", -+ "relationshipSide": "right", - "relationshipType": "many-to-one", - "relationshipValidateRules": "required" - }, -@@ -25,9 +27,11 @@ - "otherEntityName": "skill", - "otherEntityRelationshipName": "badges", - "relationshipName": "skill", -+ "relationshipSide": "right", - "relationshipType": "many-to-one", - "relationshipValidateRules": "required" - } - ], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/Comment.json b/.jhipster/Comment.json -index 710dfa1c..f772747a 100644 ---- a/.jhipster/Comment.json -+++ b/.jhipster/Comment.json -@@ -33,6 +33,7 @@ - "otherEntityName": "team", - "otherEntityRelationshipName": "comment", - "relationshipName": "team", -+ "relationshipSide": "right", - "relationshipType": "many-to-one", - "relationshipValidateRules": "required" - }, -@@ -41,9 +42,11 @@ - "otherEntityName": "skill", - "otherEntityRelationshipName": "comment", - "relationshipName": "skill", -+ "relationshipSide": "right", - "relationshipType": "many-to-one", - "relationshipValidateRules": "required" - } - ], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/Dimension.json b/.jhipster/Dimension.json -index 42bab3fd..ba1df641 100644 ---- a/.jhipster/Dimension.json -+++ b/.jhipster/Dimension.json -@@ -52,6 +52,7 @@ - "otherEntityName": "level", - "otherEntityRelationshipName": "dimension", - "relationshipName": "levels", -+ "relationshipSide": "left", - "relationshipType": "one-to-many" - }, - { -@@ -59,6 +60,7 @@ - "otherEntityRelationshipName": "dimensions", - "ownerSide": false, - "relationshipName": "badges", -+ "relationshipSide": "right", - "relationshipType": "many-to-many" - }, - { -@@ -66,8 +68,10 @@ - "otherEntityRelationshipName": "participations", - "ownerSide": false, - "relationshipName": "participants", -+ "relationshipSide": "right", - "relationshipType": "many-to-many" - } - ], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/Image.json b/.jhipster/Image.json -index 732aae84..aee89245 100644 ---- a/.jhipster/Image.json -+++ b/.jhipster/Image.json -@@ -50,5 +50,6 @@ - "pagination": "infinite-scroll", - "readOnly": false, - "relationships": [], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/Level.json b/.jhipster/Level.json -index e1d36514..18f22f21 100644 ---- a/.jhipster/Level.json -+++ b/.jhipster/Level.json -@@ -73,12 +73,14 @@ - "otherEntityRelationshipName": "level", - "ownerSide": true, - "relationshipName": "dependsOn", -+ "relationshipSide": "left", - "relationshipType": "one-to-one" - }, - { - "otherEntityName": "levelSkill", - "otherEntityRelationshipName": "level", - "relationshipName": "skills", -+ "relationshipSide": "left", - "relationshipType": "one-to-many" - }, - { -@@ -86,6 +88,7 @@ - "otherEntityName": "image", - "otherEntityRelationshipName": "level", - "relationshipName": "image", -+ "relationshipSide": "right", - "relationshipType": "many-to-one" - }, - { -@@ -93,9 +96,11 @@ - "otherEntityName": "dimension", - "otherEntityRelationshipName": "levels", - "relationshipName": "dimension", -+ "relationshipSide": "right", - "relationshipType": "many-to-one", - "relationshipValidateRules": "required" - } - ], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/LevelSkill.json b/.jhipster/LevelSkill.json -index 7059ca25..f27867b8 100644 ---- a/.jhipster/LevelSkill.json -+++ b/.jhipster/LevelSkill.json -@@ -1,6 +1,7 @@ - { - "applications": "*", - "changelogDate": "20210510110910", -+ "documentation": "Lookup table entity for N-to-M relationships.", - "dto": "mapstruct", - "embedded": false, - "entityTableName": "level_skill", -@@ -17,6 +18,7 @@ - "otherEntityName": "skill", - "otherEntityRelationshipName": "levels", - "relationshipName": "skill", -+ "relationshipSide": "right", - "relationshipType": "many-to-one", - "relationshipValidateRules": "required" - }, -@@ -25,9 +27,11 @@ - "otherEntityName": "level", - "otherEntityRelationshipName": "skills", - "relationshipName": "level", -+ "relationshipSide": "right", - "relationshipType": "many-to-one", - "relationshipValidateRules": "required" - } - ], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/PersistentAuditEvent.json b/.jhipster/PersistentAuditEvent.json -index c97c86c3..afefb976 100644 ---- a/.jhipster/PersistentAuditEvent.json -+++ b/.jhipster/PersistentAuditEvent.json -@@ -32,9 +32,11 @@ - "otherEntityName": "persistentAuditEventData", - "otherEntityRelationshipName": "event", - "relationshipName": "data", -+ "relationshipSide": "left", - "relationshipType": "one-to-many" - } - ], -+ "searchEngine": "no", - "service": "no", - "skipClient": true - } -diff --git a/.jhipster/PersistentAuditEventData.json b/.jhipster/PersistentAuditEventData.json -index 79438da4..eefe5fe9 100644 ---- a/.jhipster/PersistentAuditEventData.json -+++ b/.jhipster/PersistentAuditEventData.json -@@ -29,10 +29,12 @@ - "otherEntityName": "persistentAuditEvent", - "otherEntityRelationshipName": "data", - "relationshipName": "event", -+ "relationshipSide": "right", - "relationshipType": "many-to-one", - "relationshipValidateRules": "required" - } - ], -+ "searchEngine": "no", - "service": "no", - "skipClient": true - } -diff --git a/.jhipster/Report.json b/.jhipster/Report.json -index 86371b9c..105083af 100644 ---- a/.jhipster/Report.json -+++ b/.jhipster/Report.json -@@ -42,5 +42,6 @@ - "pagination": "no", - "readOnly": false, - "relationships": [], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/Skill.json b/.jhipster/Skill.json -index 9d609c2e..d8b69600 100644 ---- a/.jhipster/Skill.json -+++ b/.jhipster/Skill.json -@@ -107,18 +107,21 @@ - "otherEntityName": "badgeSkill", - "otherEntityRelationshipName": "skill", - "relationshipName": "badges", -+ "relationshipSide": "left", - "relationshipType": "one-to-many" - }, - { - "otherEntityName": "levelSkill", - "otherEntityRelationshipName": "skill", - "relationshipName": "levels", -+ "relationshipSide": "left", - "relationshipType": "one-to-many" - }, - { - "otherEntityName": "teamSkill", - "otherEntityRelationshipName": "skill", - "relationshipName": "teams", -+ "relationshipSide": "left", - "relationshipType": "one-to-many" - }, - { -@@ -126,8 +129,10 @@ - "otherEntityRelationshipName": "skill", - "ownerSide": false, - "relationshipName": "trainings", -+ "relationshipSide": "right", - "relationshipType": "many-to-many" - } - ], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/Team.json b/.jhipster/Team.json -index 52783161..270321d9 100644 ---- a/.jhipster/Team.json -+++ b/.jhipster/Team.json -@@ -62,6 +62,7 @@ - "otherEntityName": "teamSkill", - "otherEntityRelationshipName": "team", - "relationshipName": "skills", -+ "relationshipSide": "left", - "relationshipType": "one-to-many" - }, - { -@@ -69,6 +70,7 @@ - "otherEntityName": "image", - "otherEntityRelationshipName": "team", - "relationshipName": "image", -+ "relationshipSide": "right", - "relationshipType": "many-to-one" - }, - { -@@ -77,6 +79,7 @@ - "otherEntityRelationshipName": "participants", - "ownerSide": true, - "relationshipName": "participations", -+ "relationshipSide": "left", - "relationshipType": "many-to-many" - }, - { -@@ -84,9 +87,11 @@ - "otherEntityName": "teamGroup", - "otherEntityRelationshipName": "teams", - "relationshipName": "group", -+ "relationshipSide": "right", - "relationshipType": "many-to-one", - "relationshipValidateRules": "required" - } - ], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/TeamGroup.json b/.jhipster/TeamGroup.json -index 67b68acf..e754c814 100644 ---- a/.jhipster/TeamGroup.json -+++ b/.jhipster/TeamGroup.json -@@ -1,6 +1,7 @@ - { - "applications": "*", - "changelogDate": "20220407162042", -+ "documentation": "A team group is a hierarchical construct to organize teams within a large organization into departments to separate\\ndifferent teams more easily based on their organizational structure.", - "dto": "mapstruct", - "embedded": false, - "entityTableName": "team_group", -@@ -39,6 +40,7 @@ - "otherEntityName": "team", - "otherEntityRelationshipName": "group", - "relationshipName": "teams", -+ "relationshipSide": "left", - "relationshipType": "one-to-many" - }, - { -@@ -46,8 +48,10 @@ - "otherEntityName": "teamGroup", - "otherEntityRelationshipName": "teamGroup", - "relationshipName": "parent", -+ "relationshipSide": "right", - "relationshipType": "many-to-one" - } - ], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/TeamSkill.json b/.jhipster/TeamSkill.json -index 0a6961ec..1b9ab178 100644 ---- a/.jhipster/TeamSkill.json -+++ b/.jhipster/TeamSkill.json -@@ -62,6 +62,7 @@ - "otherEntityName": "skill", - "otherEntityRelationshipName": "teams", - "relationshipName": "skill", -+ "relationshipSide": "right", - "relationshipType": "many-to-one", - "relationshipValidateRules": "required" - }, -@@ -70,9 +71,11 @@ - "otherEntityName": "team", - "otherEntityRelationshipName": "skills", - "relationshipName": "team", -+ "relationshipSide": "right", - "relationshipType": "many-to-one", - "relationshipValidateRules": "required" - } - ], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.jhipster/Training.json b/.jhipster/Training.json -index a75d3854..f786a6b3 100644 ---- a/.jhipster/Training.json -+++ b/.jhipster/Training.json -@@ -79,8 +79,10 @@ - "otherEntityRelationshipName": "trainings", - "ownerSide": true, - "relationshipName": "skill", -+ "relationshipSide": "left", - "relationshipType": "many-to-many" - } - ], -+ "searchEngine": "no", - "service": "serviceImpl" - } -diff --git a/.prettierrc b/.prettierrc -index 6d25fbaf..003db80e 100644 ---- a/.prettierrc -+++ b/.prettierrc -@@ -11,6 +11,10 @@ arrowParens: avoid - # jsx and tsx rules: - bracketSameLine: false - -+plugins: -+ - prettier-plugin-packagejson -+ - prettier-plugin-java -+ - # java rules: - overrides: - - files: "*.java" -diff --git a/.yo-rc.json b/.yo-rc.json -index 1f724bcf..da728cfb 100644 ---- a/.yo-rc.json -+++ b/.yo-rc.json -@@ -7,7 +7,7 @@ - "blueprints": [], - "buildTool": "gradle", - "cacheProvider": "ehcache", -- "clientFramework": "angularX", -+ "clientFramework": "angular", - "clientPackageManager": "npm", - "clientTheme": "none", - "clientThemeVariant": "", -diff --git a/README.md b/README.md -index f7a76b32..70bdbbfd 100644 ---- a/README.md -+++ b/README.md -@@ -1,87 +1,410 @@ --# TeamDojo -+# teamDojo - --An application for improving (application and project) skills of your teams by gamification. -+This application was generated using JHipster 7.8.1, you can find documentation and help at [https://www.jhipster.tech/documentation-archive/v7.8.1](https://www.jhipster.tech/documentation-archive/v7.8.1). - --It allows teams to self assess their skills and checks if they are reaching a specified ability level. If they reach a new ability level, they will be rewarded with a cool new Team Avatar, Level Rewards (like a virtual belt) and topic specific Badges. _TeamDojo_ also calculates scores, based on specific skill, level and badge ranking/difficulty and ranks the teams by the amount of their achieved scores. -+## Project Structure - --![screencast](screencast.gif 'Screencast') -+Node is required for generation and recommended for development. `package.json` is always generated for a better development experience with prettier, commit hooks, scripts and so on. - --## Build and Run -+In the project root, JHipster generates configuration files for tools like git, prettier, eslint, husky, and others that are well known and you can find references in the web. - --There are two slightly different ways to build and run _TeamDojo_: -+`/src/*` structure follows default Java structure. - --1. Development with hot module reloading of the frontend, and --2. Production to play around with _TeamDojo_. -+- `.yo-rc.json` - Yeoman configuration file -+ JHipster configuration is stored in this file at `generator-jhipster` key. You may find `generator-jhipster-*` for specific blueprints configuration. -+- `.yo-resolve` (optional) - Yeoman conflict resolver -+ Allows to use a specific action when conflicts are found skipping prompts for files that matches a pattern. Each line should match `[pattern] [action]` with pattern been a [Minimatch](https://github.com/isaacs/minimatch#minimatch) pattern and action been one of skip (default if ommited) or force. Lines starting with `#` are considered comments and are ignored. -+- `.jhipster/*.json` - JHipster entity configuration files - --There are also two ways of persistence: -+- `npmw` - wrapper to use locally installed npm. -+ JHipster installs Node and npm locally using the build tool by default. This wrapper makes sure npm is installed locally and uses it avoiding some differences different versions can cause. By using `./npmw` instead of the traditional `npm` you can configure a Node-less environment to develop or test your application. -+- `/src/main/docker` - Docker configurations for the application and services that the application depends on - --1. Embedded database (recommended for development), and --2. PostgreSQL (recommended for production). -+## Development - --Either way you choose you always need an OAuth identity provider to run _TeamDojo_. For local setupt there is a compose file to run a Keycloak service. -+### OAuth 2.0 / OpenID Connect - --### Prerequisites -+Congratulations! You've selected an excellent way to secure your JHipster application. If you're not sure what OAuth and OpenID Connect (OIDC) are, please see [What the Heck is OAuth?](https://developer.okta.com/blog/2017/06/21/what-the-heck-is-oauth) - --First you need the repository: -+To log in to your app, you'll need to have [Keycloak](https://keycloak.org) up and running. The JHipster Team has created a Docker container for you that has the default users and roles. Start Keycloak using the following command. -+ -+``` -+docker compose -f src/main/docker/keycloak.yml up -+``` -+ -+The security settings in `src/main/resources/config/application.yml` are configured for this image. -+ -+```yaml -+spring: -+ ... -+ security: -+ oauth2: -+ client: -+ provider: -+ oidc: -+ issuer-uri: http://localhost:9080/realms/jhipster -+ registration: -+ oidc: -+ client-id: web_app -+ client-secret: web_app -+ scope: openid,profile,email -+``` -+ -+Some of Keycloak configuration is now done in build time and the other part before running the app, here is the [list](https://www.keycloak.org/server/all-config) of all build and configuration options. -+ -+Before moving to production, please make sure to follow this [guide](https://www.keycloak.org/server/configuration) for better security and performance. -+ -+Also, you should never use `start-dev` nor `KC_DB=dev-file` in production. -+ -+When using Kubernetes, importing should be done using init-containers (with a volume when using `db=dev-file`). -+ -+### Okta -+ -+If you'd like to use Okta instead of Keycloak, it's pretty quick using the [Okta CLI](https://cli.okta.com/). After you've installed it, run: - - ```shell --git clone https://github.com/otto-de/TeamDojo.git --cd TeamDojo/ -+okta register - ``` - --You need some tools: -+Then, in your JHipster app's directory, run `okta apps create` and select **JHipster**. This will set up an Okta app for you, create `ROLE_ADMIN` and `ROLE_USER` groups, create a `.okta.env` file with your Okta settings, and configure a `groups` claim in your ID token. - --- Java 17 (We strongly recommend to use [SDKMAN](https://sdkman.io/install).) --- NodeJS 16 (We strongly recommend to use [NVM](https://github.com/nvm-sh/nvm).) --- [GNU Make](https://www.gnu.org/software/make/manual/make.html) --- [Docker](https://docs.docker.com/get-docker/) & [Docker Compose](https://docs.docker.com/compose/install/) --- [direnv](https://direnv.net/) (Optional to source env vars from `.envrc`.) -+Run `source .okta.env` and start your app with Maven or Gradle. You should be able to sign in with the credentials you registered with. - --For installing some NodeJS prerequisites simply run: -+If you're on Windows, you should install [WSL](https://docs.microsoft.com/en-us/windows/wsl/install-win10) so the `source` command will work. - --`shell make prerequisites ` -+If you'd like to configure things manually through the Okta developer console, see the instructions below. - --### Gradle -+First, you'll need to create a free developer account at . After doing so, you'll get your own Okta domain, that has a name like `https://dev-123456.okta.com`. - --Basically everything is done by Gradle build scripts. So simply build and run is done by invoking `./gradlew` (gradle wrapper). You can pass Spring Boot profiles to gradle (e.g. `./gradlew -Pprod`). -+Modify `src/main/resources/config/application.yml` to use your Okta settings. - --As mentioned above the application requires at least the Keycloak service and depending on the Spring Boot profile a PostgreSQL. The Docker Compose files for these services are located in `src/main/docker/`. -+```yaml -+spring: -+ ... -+ security: -+ oauth2: -+ client: -+ provider: -+ oidc: -+ issuer-uri: https://{yourOktaDomain}/oauth2/default -+ registration: -+ oidc: -+ client-id: {clientId} -+ client-secret: {clientSecret} -+security: -+``` - --### GNU Make -+Create an OIDC App in Okta to get a `{clientId}` and `{clientSecret}`. To do this, log in to your Okta Developer account and navigate to **Applications** > **Add Application**. Click **Web** and click the **Next** button. Give the app a name you’ll remember, specify `http://localhost:8080` as a Base URI, and `http://localhost:8080/login/oauth2/code/oidc` as a Login Redirect URI. Click **Done**, then Edit and add `http://localhost:8080` as a Logout redirect URI. Copy and paste the client ID and secret into your `application.yml` file. - --To type all the commands to spin up the required services and build and run is quite tedious. so we added a `Makefile` to provide shorthands. Just type `make` to get a list of all available targets. -+Create a `ROLE_ADMIN` and `ROLE_USER` group and add users into them. Modify e2e tests to use this account when running integration tests. You'll need to change credentials in `src/test/javascript/e2e/account/account.spec.ts` and `src/test/javascript/e2e/admin/administration.spec.ts`. - --#### 1. Development Mode -+Navigate to **API** > **Authorization Servers**, click the **Authorization Servers** tab and edit the default one. Click the **Claims** tab and **Add Claim**. Name it "groups", and include it in the ID Token. Set the value type to "Groups" and set the filter to be a Regex of `.*`. - --For development mode you need two terminal windows (we recommend using [tmux](https://github.com/tmux/tmux/wiki)): -+After making these changes, you should be good to go! If you have any issues, please post them to [Stack Overflow](https://stackoverflow.com/questions/tagged/jhipster). Make sure to tag your question with "jhipster" and "okta". - --1. In the first terminal run `make start-backend`, and -- - This will also start the Keycloak, which will take a while. --2. in the second terminal run `make start-frontend`. -- - This will open a browser windows locating to . -+### Auth0 - --#### 2. Production Mode -+If you'd like to use [Auth0](https://auth0.com/) instead of Keycloak, follow the configuration steps below: - --To run TeamDojo in production mode with PostgreSQL simply run: -+- Create a free developer account at . After successful sign-up, your account will be associated with a unique domain like `dev-xxx.us.auth0.com` -+- Create a new application of type `Regular Web Applications`. Switch to the `Settings` tab, and configure your application settings like: -+ - Allowed Callback URLs: `http://localhost:8080/login/oauth2/code/oidc` -+ - Allowed Logout URLs: `http://localhost:8080/` -+- Navigate to **User Management** > **Roles** and create new roles named `ROLE_ADMIN`, and `ROLE_USER`. -+- Navigate to **User Management** > **Users** and create a new user account. Click on the **Role** tab to assign roles to the newly created user account. -+- Navigate to **Auth Pipeline** > **Rules** and create a new Rule. Choose `Empty rule` template. Provide a meaningful name like `JHipster claims` and replace `Script` content with the following and Save. - --```shell --make start -+```javascript -+function (user, context, callback) { -+ user.preferred_username = user.email; -+ const roles = (context.authorization || {}).roles; -+ -+ function prepareCustomClaimKey(claim) { -+ return `https://www.jhipster.tech/${claim}`; -+ } -+ -+ const rolesClaim = prepareCustomClaimKey('roles'); -+ -+ if (context.idToken) { -+ context.idToken[rolesClaim] = roles; -+ } -+ -+ if (context.accessToken) { -+ context.accessToken[rolesClaim] = roles; -+ } -+ -+ callback(null, user, context); -+} - ``` - --The application will be available at -+- In your `JHipster` application, modify `src/main/resources/config/application.yml` to use your Auth0 application settings: -+ -+```yaml -+spring: -+ ... -+ security: -+ oauth2: -+ client: -+ provider: -+ oidc: -+ # make sure to include the ending slash! -+ issuer-uri: https://{your-auth0-domain}/ -+ registration: -+ oidc: -+ client-id: {clientId} -+ client-secret: {clientSecret} -+ scope: openid,profile,email -+jhipster: -+ ... -+ security: -+ oauth2: -+ audience: -+ - https://{your-auth0-domain}/api/v2/ -+``` -+ -+### Doing API-First development using openapi-generator-cli -+ -+[OpenAPI-Generator]() is configured for this application. You can generate API code from the `src/main/resources/swagger/api.yml` definition file by running: -+ -+```bash -+./gradlew openApiGenerate -+``` -+ -+Then implements the generated delegate classes with `@Service` classes. -+ -+To edit the `api.yml` definition file, you can use a tool such as [Swagger-Editor](). Start a local instance of the swagger-editor using docker by running: `docker compose -f src/main/docker/swagger-editor.yml up -d`. The editor will then be reachable at [http://localhost:7742](http://localhost:7742). -+ -+Refer to [Doing API-First development][] for more details. -+Before you can build this project, you must install and configure the following dependencies on your machine: -+ -+1. [Node.js][]: We use Node to run a development web server and build the project. -+ Depending on your system, you can install Node either from source or as a pre-packaged bundle. - --You can find more information in our [developer documentation](docs/Development.md). -+After installing Node, you should be able to run the following command to install development tools. -+You will only need to run this command when dependencies change in [package.json](package.json). -+ -+``` -+npm install -+``` -+ -+We use npm scripts and [Angular CLI][] with [Webpack][] as our build system. -+ -+Run the following commands in two separate terminals to create a blissful development experience where your browser -+auto-refreshes when files change on your hard drive. -+ -+``` -+./gradlew -x webapp -+npm start -+``` - --### Demo Data -+Npm is also used to manage CSS and JavaScript dependencies used in this application. You can upgrade dependencies by -+specifying a newer version in [package.json](package.json). You can also run `npm update` and `npm install` to manage dependencies. -+Add the `help` flag on any command to see how you can use it. For example, `npm help update`. - --We provide a Liquibase changeset with some demo data (`src/main/resources/config/liquibase/initial_demo_data.xml`). If you start the backend with "dev" profile it will be inserted automatically. -+The `npm run` command will list all of the scripts available to run for this project. -+ -+### PWA Support -+ -+JHipster ships with PWA (Progressive Web App) support, and it's turned off by default. One of the main components of a PWA is a service worker. -+ -+The service worker initialization code is disabled by default. To enable it, uncomment the following code in `src/main/webapp/app/app.module.ts`: -+ -+```typescript -+ServiceWorkerModule.register('ngsw-worker.js', { enabled: false }), -+``` -+ -+### Managing dependencies -+ -+For example, to add [Leaflet][] library as a runtime dependency of your application, you would run following command: -+ -+``` -+npm install --save --save-exact leaflet -+``` -+ -+To benefit from TypeScript type definitions from [DefinitelyTyped][] repository in development, you would run following command: -+ -+``` -+npm install --save-dev --save-exact @types/leaflet -+``` -+ -+Then you would import the JS and CSS files specified in library's installation instructions so that [Webpack][] knows about them: -+Edit [src/main/webapp/app/app.module.ts](src/main/webapp/app/app.module.ts) file: -+ -+``` -+import 'leaflet/dist/leaflet.js'; -+``` -+ -+Edit [src/main/webapp/content/scss/vendor.scss](src/main/webapp/content/scss/vendor.scss) file: -+ -+``` -+@import 'leaflet/dist/leaflet.css'; -+``` -+ -+Note: There are still a few other things remaining to do for Leaflet that we won't detail here. -+ -+For further instructions on how to develop with JHipster, have a look at [Using JHipster in development][]. -+ -+### Using Angular CLI -+ -+You can also use [Angular CLI][] to generate some custom client code. -+ -+For example, the following command: -+ -+``` -+ng generate component my-component -+``` -+ -+will generate few files: -+ -+``` -+create src/main/webapp/app/my-component/my-component.component.html -+create src/main/webapp/app/my-component/my-component.component.ts -+update src/main/webapp/app/app.module.ts -+``` - --If you want to insert the data when running other profiles you must pass the Java option `-Dspring.liquibase.contexts=demo` to Spring Boot. -+## Building for production - --### Default secrets / credentials -+### Packaging as jar - --The default admin credentials are: **admin/teamdojo**, configured in [src/main/resources/config/liquibase/users.csv](src/main/resources/config/liquibase/users.csv). -+To build the final jar and optimize the teamDojo application for production, run: - --The secret for the "Remember me" Cookie is configured in [src/main/resources/config/application-prod.yml](src/main/resources/config/application-prod.yml). -+``` -+./gradlew -Pprod clean bootJar -+``` -+ -+This will concatenate and minify the client CSS and JavaScript files. It will also modify `index.html` so it references these new files. -+To ensure everything worked, run: -+ -+``` -+java -jar build/libs/*.jar -+``` -+ -+Then navigate to [http://localhost:8080](http://localhost:8080) in your browser. -+ -+Refer to [Using JHipster in production][] for more details. -+ -+### Packaging as war -+ -+To package your application as a war in order to deploy it to an application server, run: -+ -+``` -+./gradlew -Pprod -Pwar clean bootWar -+``` -+ -+### JHipster Control Center -+ -+JHipster Control Center can help you manage and control your application(s). You can start a local control center server (accessible on http://localhost:7419) with: -+ -+``` -+docker compose -f src/main/docker/jhipster-control-center.yml up -+``` -+ -+## Testing -+ -+### Spring Boot tests -+ -+To launch your application's tests, run: -+ -+``` -+./gradlew test integrationTest jacocoTestReport -+``` -+ -+### Client tests -+ -+Unit tests are run by [Jest][]. They're located in [src/test/javascript/](src/test/javascript/) and can be run with: -+ -+``` -+npm test -+``` -+ -+## Others -+ -+### Code quality using Sonar -+ -+Sonar is used to analyse code quality. You can start a local Sonar server (accessible on http://localhost:9001) with: -+ -+``` -+docker compose -f src/main/docker/sonar.yml up -d -+``` -+ -+Note: we have turned off forced authentication redirect for UI in [src/main/docker/sonar.yml](src/main/docker/sonar.yml) for out of the box experience while trying out SonarQube, for real use cases turn it back on. -+ -+You can run a Sonar analysis with using the [sonar-scanner](https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner) or by using the gradle plugin. -+ -+Then, run a Sonar analysis: -+ -+``` -+./gradlew -Pprod clean check jacocoTestReport sonarqube -Dsonar.login=admin -Dsonar.password=admin -+``` -+ -+Additionally, Instead of passing `sonar.password` and `sonar.login` as CLI arguments, these parameters can be configured from [sonar-project.properties](sonar-project.properties) as shown below: -+ -+``` -+sonar.login=admin -+sonar.password=admin -+``` -+ -+For more information, refer to the [Code quality page][]. -+ -+### Using Docker to simplify development (optional) -+ -+You can use Docker to improve your JHipster development experience. A number of docker-compose configuration are available in the [src/main/docker](src/main/docker) folder to launch required third party services. -+ -+For example, to start a postgresql database in a docker container, run: -+ -+``` -+docker compose -f src/main/docker/postgresql.yml up -d -+``` -+ -+To stop it and remove the container, run: -+ -+``` -+docker compose -f src/main/docker/postgresql.yml down -+``` -+ -+You can also fully dockerize your application and all the services that it depends on. -+To achieve this, first build a docker image of your app by running: -+ -+``` -+npm run java:docker -+``` -+ -+Or build a arm64 docker image when using an arm64 processor os like MacOS with M1 processor family running: -+ -+``` -+npm run java:docker:arm64 -+``` -+ -+Then run: -+ -+``` -+docker compose -f src/main/docker/app.yml up -d -+``` - --Please change the password and secret in your production environment. -+When running Docker Desktop on MacOS Big Sur or later, consider enabling experimental `Use the new Virtualization framework` for better processing performance ([disk access performance is worse](https://github.com/docker/roadmap/issues/7)). -+ -+For more information refer to [Using Docker and Docker-Compose][], this page also contains information on the docker-compose sub-generator (`jhipster docker-compose`), which is able to generate docker configurations for one or several JHipster applications. -+ -+## Continuous Integration (optional) -+ -+To configure CI for your project, run the ci-cd sub-generator (`jhipster ci-cd`), this will let you generate configuration files for a number of Continuous Integration systems. Consult the [Setting up Continuous Integration][] page for more information. -+ -+[JHipster Homepage and latest documentation]: https://www.jhipster.tech -+[JHipster 7.8.1 archive]: https://www.jhipster.tech/documentation-archive/v7.8.1 -+[Using JHipster in development]: https://www.jhipster.tech/documentation-archive/v7.8.1/development/ -+[Using Docker and Docker-Compose]: https://www.jhipster.tech/documentation-archive/v7.8.1/docker-compose -+[Using JHipster in production]: https://www.jhipster.tech/documentation-archive/v7.8.1/production/ -+[Running tests page]: https://www.jhipster.tech/documentation-archive/v7.8.1/running-tests/ -+[Code quality page]: https://www.jhipster.tech/documentation-archive/v7.8.1/code-quality/ -+[Setting up Continuous Integration]: https://www.jhipster.tech/documentation-archive/v7.8.1/setting-up-ci/ -+[Node.js]: https://nodejs.org/ -+[NPM]: https://www.npmjs.com/ -+[OpenAPI-Generator]: https://openapi-generator.tech -+[Swagger-Editor]: https://editor.swagger.io -+[Doing API-First development]: https://www.jhipster.tech/documentation-archive/v7.8.1/doing-api-first-development/ -+[Webpack]: https://webpack.github.io/ -+[BrowserSync]: https://www.browsersync.io/ -+[Jest]: https://facebook.github.io/jest/ -+[Leaflet]: https://leafletjs.com/ -+[DefinitelyTyped]: https://definitelytyped.org/ -+[Angular CLI]: https://cli.angular.io/ -diff --git a/angular.json b/angular.json -index a2c90a05..a43a18de 100644 ---- a/angular.json -+++ b/angular.json -@@ -26,7 +26,7 @@ - "outputPath": "build/resources/main/static/", - "index": "src/main/webapp/index.html", - "main": "src/main/webapp/main.ts", -- "polyfills": "src/main/webapp/polyfills.ts", -+ "polyfills": ["zone.js"], - "tsConfig": "tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ -@@ -57,8 +57,8 @@ - }, - { - "type": "anyComponentStyle", -- "maximumWarning": "3kb", -- "maximumError": "6kb" -+ "maximumWarning": "2kb", -+ "maximumError": "4kb" - } - ] - }, -@@ -92,13 +92,13 @@ - "test": { - "builder": "@angular-builders/jest:run", - "options": { -- "configPath": "jest.conf.js" -+ "configPath": "jest.conf.js", -+ "tsConfig": "tsconfig.spec.json" - } - } - } - } - }, -- "defaultProject": "team-dojo", - "cli": { - "cache": { - "enabled": true, -diff --git a/gradle.properties b/gradle.properties -index 39a42b12..038b1abf 100644 ---- a/gradle.properties -+++ b/gradle.properties -@@ -2,33 +2,36 @@ rootProject.name=team-dojo - profile=dev - - # Dependency versions --jhipsterDependenciesVersion=7.8.1 -+jhipsterDependenciesVersion=8.0.0-rc.1 - # The spring-boot version should match the one managed by --# https://mvnrepository.com/artifact/tech.jhipster/jhipster-dependencies/7.8.1 --springBootVersion=2.6.6 -+# https://mvnrepository.com/artifact/tech.jhipster/jhipster-dependencies/8.0.0-rc.1 -+springBootVersion=3.1.4 - # The hibernate version should match the one managed by --# https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies/2.6.6 --> --hibernateVersion=5.6.7.Final --mapstructVersion=1.4.2.Final --archunitJunit5Version=0.22.0 --jacksonDatabindNullableVersion=0.2.2 --liquibaseHibernate5Version=4.6.1 --liquibaseTaskPrefix=liquibase -+# https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies/3.1.4 --> -+hibernateVersion=6.2.9.Final -+mapstructVersion=1.5.5.Final -+archunitJunit5Version=1.1.0 -+jacksonDatabindNullableVersion=0.2.6 - - - --jaxbRuntimeVersion=2.3.3 -+jaxbRuntimeVersion=4.0.3 - - # gradle plugin version --jibPluginVersion=3.2.1 --gitPropertiesPluginVersion=2.4.0 --gradleNodePluginVersion=3.2.1 --liquibasePluginVersion=2.1.1 --sonarqubePluginVersion=3.3 --openapiPluginVersion=5.4.0 --noHttpCheckstyleVersion=0.0.10 --checkstyleVersion=10.1 --modernizerPluginVersion=1.6.2 -+jibPluginVersion=3.4.0 -+gitPropertiesPluginVersion=2.4.1 -+gradleNodePluginVersion=7.0.1 -+sonarqubePluginVersion=4.4.1.3373 -+spotlessPluginVersion=6.22.0 -+openapiPluginVersion=7.0.1 -+noHttpCheckstyleVersion=0.0.11 -+checkstyleVersion=10.12.4 -+modernizerPluginVersion=1.9.0 -+ -+liquibaseTaskPrefix=liquibase -+liquibasePluginVersion=2.2.0 -+liquibaseVersion=4.24.0 -+liquibaseHibernate6Version=4.24.0 - # jhipster-needle-gradle-property - JHipster will add additional properties here - - ## below are some of the gradle performance improvement settings that can be used as required, these are not enabled by default -diff --git a/gradle/docker.gradle b/gradle/docker.gradle -index 4ae104d5..0e90fa9f 100644 ---- a/gradle/docker.gradle -+++ b/gradle/docker.gradle -@@ -1,6 +1,12 @@ - jib { - from { - image = "eclipse-temurin:17-jre-focal" -+ platforms { -+ platform { -+ architecture = "${findProperty('jibArchitecture') ?: 'amd64'}" -+ os = "linux" -+ } -+ } - } - to { - image = "teamdojo:latest" -diff --git a/gradle/profile_dev.gradle b/gradle/profile_dev.gradle -index 7306cc90..33ed55ef 100644 ---- a/gradle/profile_dev.gradle -+++ b/gradle/profile_dev.gradle -@@ -1,26 +1,40 @@ -+sourceSets { -+ test { -+ java { -+ exclude 'com/iteratec/teamdojo//config/PostgreSqlTestContainer.java' -+ } -+ } -+} -+ -+configurations { -+ all { -+ resolutionStrategy { -+ // TODO drop forced version. Refer to https://github.com/jhipster/generator-jhipster/issues/22579 -+ force "org.hibernate.orm:hibernate-core:${hibernateVersion}" -+ // TODO drop forced version. Refer to https://github.com/jhipster/generator-jhipster/issues/22579 -+ force "org.hibernate.orm:hibernate-jcache:${hibernateVersion}" -+ } -+ } -+} -+ - dependencies { - developmentOnly "org.springframework.boot:spring-boot-devtools:${springBootVersion}" - implementation "com.h2database:h2" -+ testImplementation "org.testcontainers:postgresql" - } - --def profiles = "dev" --if (project.hasProperty("no-liquibase")) { -- profiles += ",no-liquibase" --} --if (project.hasProperty("tls")) { -- profiles += ",tls" -+ext { -+ springProfiles = "dev" + springProfiles - } - - springBoot { - buildInfo { -- properties { -- time = null -- } -+ excludes = ['time'] - } - } - - bootRun { -- args = [] -+ args = ["--spring.profiles.active=${springProfiles}"] - } - - task webapp(type: NpmTask) { -@@ -54,16 +68,34 @@ task webapp(type: NpmTask) { - - processResources { - inputs.property('version', version) -- inputs.property('springProfiles', profiles) -+ inputs.property('springProfiles', springProfiles) - filesMatching("**/application.yml") { - filter { - it.replace("#project.version#", version) - } - filter { -- it.replace("#spring.profiles.active#", profiles) -+ it.replace("#spring.profiles.active#", springProfiles) - } - } - } - -+task integrationTest(type: Test) { -+ maxHeapSize = "1G" -+ useJUnitPlatform() -+ description = "Execute integration tests." -+ group = "verification" -+ include "**/*IT*", "**/*IntTest*" -+ testLogging { -+ events 'FAILED', 'SKIPPED' -+ } -+ systemProperty('spring.profiles.active', 'testdev') -+ systemProperty('java.security.egd', 'file:/dev/./urandom') -+ // uncomment if the tests reports are not generated -+ // see https://github.com/jhipster/generator-jhipster/pull/2771 and https://github.com/jhipster/generator-jhipster/pull/4484 -+ // ignoreFailures true -+ reports.html.required = false -+} -+integrationTest.dependsOn test -+ - processResources.dependsOn webapp - bootJar.dependsOn processResources -diff --git a/gradle/profile_prod.gradle b/gradle/profile_prod.gradle -index 135054b0..363472e8 100644 ---- a/gradle/profile_prod.gradle -+++ b/gradle/profile_prod.gradle -@@ -1,18 +1,26 @@ --dependencies { -- testImplementation "com.h2database:h2" --} - --def profiles = "prod" --if (project.hasProperty("no-liquibase")) { -- profiles += ",no-liquibase" -+configurations { -+ all { -+ resolutionStrategy { -+ // TODO drop forced version. Refer to https://github.com/jhipster/generator-jhipster/issues/22579 -+ force "org.hibernate.orm:hibernate-core:${hibernateVersion}" -+ // TODO drop forced version. Refer to https://github.com/jhipster/generator-jhipster/issues/22579 -+ force "org.hibernate.orm:hibernate-jcache:${hibernateVersion}" -+ } -+ } - } - --if (project.hasProperty("api-docs")) { -- profiles += ",api-docs" -+dependencies { -+ implementation "org.postgresql:postgresql" -+ testImplementation "org.testcontainers:postgresql" - } - --if (project.hasProperty("e2e")) { -- profiles += ",e2e" -+ext { -+ springProfiles = "prod" + springProfiles -+ -+ if (project.hasProperty("api-docs")) { -+ springProfiles += ",api-docs" -+ } - } - - springBoot { -@@ -20,26 +28,46 @@ springBoot { - } - - bootRun { -- args = [] -+ args = ["--spring.profiles.active=${springProfiles}"] - } - --task webapp(type: NpmTask, dependsOn: "npm_install") { -+task webapp(type: NpmTask) { -+ dependsOn npmInstall - args = ["run", "webapp:prod"] - environment = [APP_VERSION: project.version] - } - - processResources { - inputs.property('version', version) -- inputs.property('springProfiles', profiles) -+ inputs.property('springProfiles', springProfiles) - filesMatching("**/application.yml") { - filter { - it.replace("#project.version#", version) - } - filter { -- it.replace("#spring.profiles.active#", profiles) -+ it.replace("#spring.profiles.active#", springProfiles) - } - } - } - -+task integrationTest(type: Test) { -+ maxHeapSize = "1G" -+ useJUnitPlatform() -+ description = "Execute integration tests." -+ group = "verification" -+ include "**/*IT*", "**/*IntTest*" -+ testLogging { -+ events 'FAILED', 'SKIPPED' -+ } -+ systemProperty('spring.profiles.active', 'testprod') -+ systemProperty('java.security.egd', 'file:/dev/./urandom') -+ // uncomment if the tests reports are not generated -+ // see https://github.com/jhipster/generator-jhipster/pull/2771 and https://github.com/jhipster/generator-jhipster/pull/4484 -+ // ignoreFailures true -+ reports.html.required = false -+} -+integrationTest.dependsOn test -+ -+ - processResources.dependsOn webapp - bootJar.dependsOn processResources -diff --git a/gradle/sonar.gradle b/gradle/sonar.gradle -index 6310cc23..74c35efd 100644 ---- a/gradle/sonar.gradle -+++ b/gradle/sonar.gradle -@@ -1,5 +1,5 @@ - jacoco { -- toolVersion = "0.8.7" -+ toolVersion = "0.8.10" - } - - jacocoTestReport { -@@ -8,7 +8,7 @@ jacocoTestReport { - sourceDirectories.from = files(sourceSets.main.java.srcDirs) - - reports { -- xml.enabled = true -+ xml.required = true - } - } - -diff --git a/gradle/swagger.gradle b/gradle/swagger.gradle -index 0092502a..e3c1e787 100644 ---- a/gradle/swagger.gradle -+++ b/gradle/swagger.gradle -@@ -13,9 +13,9 @@ openApiGenerate { - apiFilesConstrainedTo = [""] - modelFilesConstrainedTo = [""] - supportingFilesConstrainedTo = ["ApiUtil.java"] -- configOptions = [delegatePattern: "true", title: "team-dojo"] -+ configOptions = [delegatePattern: "true", title: "team-dojo", useSpringBoot3: "true"] - validateSpec = true -- importMappings = [Problem:"org.zalando.problem.Problem"] -+ importMappings = [Problem:"org.springframework.http.ProblemDetail"] - } - - sourceSets { -diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar -index 41d9927a..c1962a79 100644 -Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ -diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties -index aa991fce..e411586a 100644 ---- a/gradle/wrapper/gradle-wrapper.properties -+++ b/gradle/wrapper/gradle-wrapper.properties -@@ -1,5 +1,5 @@ - distributionBase=GRADLE_USER_HOME - distributionPath=wrapper/dists --distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip -+distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip - zipStoreBase=GRADLE_USER_HOME - zipStorePath=wrapper/dists -diff --git a/gradle/zipkin.gradle b/gradle/zipkin.gradle -index 82433b39..666cca36 100644 ---- a/gradle/zipkin.gradle -+++ b/gradle/zipkin.gradle -@@ -1,3 +1,4 @@ - dependencies { -- implementation "org.springframework.cloud:spring-cloud-starter-zipkin" -+ implementation "io.micrometer:micrometer-tracing-bridge-brave" -+ implementation "io.zipkin.reporter2:zipkin-reporter-brave" - } -diff --git a/gradlew b/gradlew -index 4f906e0c..aeb74cbb 100755 ---- a/gradlew -+++ b/gradlew -@@ -1,7 +1,7 @@ --#!/usr/bin/env sh -+#!/bin/sh - - # --# Copyright 2015 the original author or authors. -+# Copyright © 2015-2021 the original authors. - # - # Licensed under the Apache License, Version 2.0 (the "License"); - # you may not use this file except in compliance with the License. -@@ -17,67 +17,98 @@ - # - - ############################################################################## --## --## Gradle start up script for UN*X --## -+# -+# Gradle start up script for POSIX generated by Gradle. -+# -+# Important for running: -+# -+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -+# noncompliant, but you have some other compliant shell such as ksh or -+# bash, then to run this script, type that shell name before the whole -+# command line, like: -+# -+# ksh Gradle -+# -+# Busybox and similar reduced shells will NOT work, because this script -+# requires all of these POSIX shell features: -+# * functions; -+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -+# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -+# * compound commands having a testable exit status, especially «case»; -+# * various built-in commands including «command», «set», and «ulimit». -+# -+# Important for patching: -+# -+# (2) This script targets any POSIX shell, so it avoids extensions provided -+# by Bash, Ksh, etc; in particular arrays are avoided. -+# -+# The "traditional" practice of packing multiple parameters into a -+# space-separated string is a well documented source of bugs and security -+# problems, so this is (mostly) avoided, by progressively accumulating -+# options in "$@", and eventually passing that to Java. -+# -+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -+# see the in-line comments for details. -+# -+# There are tweaks for specific operating systems such as AIX, CygWin, -+# Darwin, MinGW, and NonStop. -+# -+# (3) This script is generated from the Groovy template -+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -+# within the Gradle project. -+# -+# You can find Gradle at https://github.com/gradle/gradle/. -+# - ############################################################################## - - # Attempt to set APP_HOME -+ - # Resolve links: $0 may be a link --PRG="$0" --# Need this for relative symlinks. --while [ -h "$PRG" ] ; do -- ls=`ls -ld "$PRG"` -- link=`expr "$ls" : '.*-> \(.*\)$'` -- if expr "$link" : '/.*' > /dev/null; then -- PRG="$link" -- else -- PRG=`dirname "$PRG"`"/$link" -- fi -+app_path=$0 -+ -+# Need this for daisy-chained symlinks. -+while -+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path -+ [ -h "$app_path" ] -+do -+ ls=$( ls -ld "$app_path" ) -+ link=${ls#*' -> '} -+ case $link in #( -+ /*) app_path=$link ;; #( -+ *) app_path=$APP_HOME$link ;; -+ esac - done --SAVED="`pwd`" --cd "`dirname \"$PRG\"`/" >/dev/null --APP_HOME="`pwd -P`" --cd "$SAVED" >/dev/null - --APP_NAME="Gradle" --APP_BASE_NAME=`basename "$0"` -- --# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. --DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -+# This is normally unused -+# shellcheck disable=SC2034 -+APP_BASE_NAME=${0##*/} -+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - - # Use the maximum available, or set MAX_FD != -1 to use that value. --MAX_FD="maximum" -+MAX_FD=maximum - - warn () { - echo "$*" --} -+} >&2 - - die () { - echo - echo "$*" - echo - exit 1 --} -+} >&2 - - # OS specific support (must be 'true' or 'false'). - cygwin=false - msys=false - darwin=false - nonstop=false --case "`uname`" in -- CYGWIN* ) -- cygwin=true -- ;; -- Darwin* ) -- darwin=true -- ;; -- MINGW* ) -- msys=true -- ;; -- NONSTOP* ) -- nonstop=true -- ;; -+case "$( uname )" in #( -+ CYGWIN* ) cygwin=true ;; #( -+ Darwin* ) darwin=true ;; #( -+ MSYS* | MINGW* ) msys=true ;; #( -+ NONSTOP* ) nonstop=true ;; - esac - - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar -@@ -87,9 +118,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables -- JAVACMD="$JAVA_HOME/jre/sh/java" -+ JAVACMD=$JAVA_HOME/jre/sh/java - else -- JAVACMD="$JAVA_HOME/bin/java" -+ JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME -@@ -98,7 +129,7 @@ Please set the JAVA_HOME variable in your environment to match the - location of your Java installation." - fi - else -- JAVACMD="java" -+ JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - - Please set the JAVA_HOME variable in your environment to match the -@@ -106,80 +137,109 @@ location of your Java installation." - fi - - # Increase the maximum file descriptors if we can. --if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then -- MAX_FD_LIMIT=`ulimit -H -n` -- if [ $? -eq 0 ] ; then -- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then -- MAX_FD="$MAX_FD_LIMIT" -- fi -- ulimit -n $MAX_FD -- if [ $? -ne 0 ] ; then -- warn "Could not set maximum file descriptor limit: $MAX_FD" -- fi -- else -- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" -- fi -+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then -+ case $MAX_FD in #( -+ max*) -+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. -+ # shellcheck disable=SC3045 -+ MAX_FD=$( ulimit -H -n ) || -+ warn "Could not query maximum file descriptor limit" -+ esac -+ case $MAX_FD in #( -+ '' | soft) :;; #( -+ *) -+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. -+ # shellcheck disable=SC3045 -+ ulimit -n "$MAX_FD" || -+ warn "Could not set maximum file descriptor limit to $MAX_FD" -+ esac - fi - --# For Darwin, add options to specify how the application appears in the dock --if $darwin; then -- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" --fi -+# Collect all arguments for the java command, stacking in reverse order: -+# * args from the command line -+# * the main class name -+# * -classpath -+# * -D...appname settings -+# * --module-path (only if needed) -+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - - # For Cygwin or MSYS, switch paths to Windows format before running java --if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then -- APP_HOME=`cygpath --path --mixed "$APP_HOME"` -- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` -- -- JAVACMD=`cygpath --unix "$JAVACMD"` -- -- # We build the pattern for arguments to be converted via cygpath -- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` -- SEP="" -- for dir in $ROOTDIRSRAW ; do -- ROOTDIRS="$ROOTDIRS$SEP$dir" -- SEP="|" -- done -- OURCYGPATTERN="(^($ROOTDIRS))" -- # Add a user-defined pattern to the cygpath arguments -- if [ "$GRADLE_CYGPATTERN" != "" ] ; then -- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" -- fi -+if "$cygwin" || "$msys" ; then -+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) -+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) -+ -+ JAVACMD=$( cygpath --unix "$JAVACMD" ) -+ - # Now convert the arguments - kludge to limit ourselves to /bin/sh -- i=0 -- for arg in "$@" ; do -- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` -- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option -- -- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition -- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` -- else -- eval `echo args$i`="\"$arg\"" -+ for arg do -+ if -+ case $arg in #( -+ -*) false ;; # don't mess with options #( -+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath -+ [ -e "$t" ] ;; #( -+ *) false ;; -+ esac -+ then -+ arg=$( cygpath --path --ignore --mixed "$arg" ) - fi -- i=`expr $i + 1` -+ # Roll the args list around exactly as many times as the number of -+ # args, so each arg winds up back in the position where it started, but -+ # possibly modified. -+ # -+ # NB: a `for` loop captures its iteration list before it begins, so -+ # changing the positional parameters here affects neither the number of -+ # iterations, nor the values presented in `arg`. -+ shift # remove old arg -+ set -- "$@" "$arg" # push replacement arg - done -- case $i in -- 0) set -- ;; -- 1) set -- "$args0" ;; -- 2) set -- "$args0" "$args1" ;; -- 3) set -- "$args0" "$args1" "$args2" ;; -- 4) set -- "$args0" "$args1" "$args2" "$args3" ;; -- 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; -- 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; -- 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; -- 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; -- 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; -- esac - fi - --# Escape application args --save () { -- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done -- echo " " --} --APP_ARGS=`save "$@"` - --# Collect all arguments for the java command, following the shell quoting and substitution rules --eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -+ -+# Collect all arguments for the java command; -+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -+# shell script including quotes and variable substitutions, so put them in -+# double quotes to make sure that they get re-expanded; and -+# * put everything else in single quotes, so that it's not re-expanded. -+ -+set -- \ -+ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -+ -classpath "$CLASSPATH" \ -+ org.gradle.wrapper.GradleWrapperMain \ -+ "$@" -+ -+# Stop when "xargs" is not available. -+if ! command -v xargs >/dev/null 2>&1 -+then -+ die "xargs is not available" -+fi -+ -+# Use "xargs" to parse quoted args. -+# -+# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -+# -+# In Bash we could simply go: -+# -+# readarray ARGS < <( xargs -n1 <<<"$var" ) && -+# set -- "${ARGS[@]}" "$@" -+# -+# but POSIX shell has neither arrays nor command substitution, so instead we -+# post-process each arg (as a line of input to sed) to backslash-escape any -+# character that might be a shell metacharacter, then use eval to reverse -+# that process (while maintaining the separation between arguments), and wrap -+# the whole thing up as a single "set" statement. -+# -+# This will of course break if any of these variables contains a newline or -+# an unmatched quote. -+# -+ -+eval "set -- $( -+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | -+ xargs -n1 | -+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | -+ tr '\n' ' ' -+ )" '"$@"' - - exec "$JAVACMD" "$@" -diff --git a/gradlew.bat b/gradlew.bat -index 107acd32..93e3f59f 100644 ---- a/gradlew.bat -+++ b/gradlew.bat -@@ -14,7 +14,7 @@ - @rem limitations under the License. - @rem - --@if "%DEBUG%" == "" @echo off -+@if "%DEBUG%"=="" @echo off - @rem ########################################################################## - @rem - @rem Gradle startup script for Windows -@@ -25,7 +25,8 @@ - if "%OS%"=="Windows_NT" setlocal - - set DIRNAME=%~dp0 --if "%DIRNAME%" == "" set DIRNAME=. -+if "%DIRNAME%"=="" set DIRNAME=. -+@rem This is normally unused - set APP_BASE_NAME=%~n0 - set APP_HOME=%DIRNAME% - -@@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome - - set JAVA_EXE=java.exe - %JAVA_EXE% -version >NUL 2>&1 --if "%ERRORLEVEL%" == "0" goto execute -+if %ERRORLEVEL% equ 0 goto execute - - echo. - echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -@@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - :end - @rem End local scope for the variables with windows NT shell --if "%ERRORLEVEL%"=="0" goto mainEnd -+if %ERRORLEVEL% equ 0 goto mainEnd - - :fail - rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of - rem the _cmd.exe /c_ return code! --if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 --exit /b 1 -+set EXIT_CODE=%ERRORLEVEL% -+if %EXIT_CODE% equ 0 set EXIT_CODE=1 -+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -+exit /b %EXIT_CODE% - - :mainEnd - if "%OS%"=="Windows_NT" endlocal -diff --git a/jest.conf.js b/jest.conf.js -index f5b0c005..a2a4d5a1 100644 ---- a/jest.conf.js -+++ b/jest.conf.js -@@ -17,8 +17,13 @@ module.exports = { - cacheDirectory: '/build/jest-cache', - coverageDirectory: '/build/test-results/', - moduleNameMapper: pathsToModuleNameMapper(paths, { prefix: `/${baseUrl}/` }), -- reporters: ['default', ['jest-junit', { outputDirectory: '/build/test-results/', outputName: 'TESTS-results-jest.xml' }]], -- testResultsProcessor: 'jest-sonar-reporter', -+ reporters: [ -+ 'default', -+ ['jest-junit', { outputDirectory: '/build/test-results/', outputName: 'TESTS-results-jest.xml' }], -+ ['jest-sonar', { outputDirectory: './build/test-results/jest', outputName: 'TESTS-results-sonar.xml' }], -+ ], - testMatch: ['/src/main/webapp/app/**/@(*.)@(spec.ts)'], -- testURL: 'http://localhost/', -+ testEnvironmentOptions: { -+ url: 'https://jhipster.tech', -+ }, - }; -diff --git a/npmw.cmd b/npmw.cmd -index 96c1705f..b6e79809 100644 ---- a/npmw.cmd -+++ b/npmw.cmd -@@ -1,17 +1,19 @@ - @echo off - --@setlocal -+setlocal - - set NPMW_DIR=%~dp0 - --if exist "%NPMW_DIR%\mvnw.cmd" ( -- set NODE_EXE="" -- set NPM_EXE=%NPMW_DIR%\target\node\npm.cmd -- set INSTALL_NPM_COMMAND=%NPMW_DIR%\mvnw.cmd -Pwebapp frontend:install-node-and-npm@install-node-and-npm -+if exist "%NPMW_DIR%mvnw.cmd" ( -+ set NODE_EXE=^"^" -+ set NODE_PATH=%NPMW_DIR%target\node\ -+ set NPM_EXE=^"%NPMW_DIR%target\node\npm.cmd^" -+ set INSTALL_NPM_COMMAND=^"%NPMW_DIR%mvnw.cmd^" -Pwebapp frontend:install-node-and-npm@install-node-and-npm - ) else ( -- set NODE_EXE=%NPMW_DIR%\build\node\bin\node.exe -- set NPM_EXE=%NPMW_DIR%\build\node\lib\node_modules\npm\bin\npm-cli.js -- set INSTALL_NPM_COMMAND=%NPMW_DIR%\gradlew.bat npmSetup -+ set NODE_EXE=^"%NPMW_DIR%build\node\bin\node.exe^" -+ set NODE_PATH=%NPMW_DIR%build\node\bin\ -+ set NPM_EXE=^"%NPMW_DIR%build\node\lib\node_modules\npm\bin\npm-cli.js^" -+ set INSTALL_NPM_COMMAND=^"%NPMW_DIR%gradlew.bat^" npmSetup - ) - - if not exist %NPM_EXE% ( -@@ -19,11 +21,11 @@ if not exist %NPM_EXE% ( - ) - - if exist %NODE_EXE% ( -- Rem Executing local npm with local node -- call %NODE_EXE% %NPM_EXE% %* -+ Rem execute local npm with local node, whilst adding local node location to the PATH for this CMD session -+ endlocal & echo "%PATH%"|find /i "%NODE_PATH%;">nul || set "PATH=%NODE_PATH%;%PATH%" & call %NODE_EXE% %NPM_EXE% %* - ) else if exist %NPM_EXE% ( -- Rem Executing local npm -- call %NPM_EXE% %* -+ Rem execute local npm, whilst adding local npm location to the PATH for this CMD session -+ endlocal & echo "%PATH%"|find /i "%NODE_PATH%;">nul || set "PATH=%NODE_PATH%;%PATH%" & call %NPM_EXE% %* - ) else ( - call npm %* - ) -diff --git a/package-lock.json b/package-lock.json -index a4d77d08..50167222 100644 ---- a/package-lock.json -+++ b/package-lock.json -@@ -1,1225 +1,1649 @@ - { - "name": "team-dojo", -- "version": "2.1.0-alpha1", -+ "version": "0.0.1-SNAPSHOT", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "team-dojo", -- "version": "2.1.0-alpha1", -- "license": "Apache-2.0", -- "dependencies": { -- "@angular/common": "13.3.1", -- "@angular/compiler": "13.3.1", -- "@angular/core": "13.3.1", -- "@angular/forms": "13.3.1", -- "@angular/localize": "13.3.1", -- "@angular/platform-browser": "13.3.1", -- "@angular/platform-browser-dynamic": "13.3.1", -- "@angular/router": "13.3.1", -- "@fortawesome/angular-fontawesome": "0.10.2", -- "@fortawesome/fontawesome-free": "^6.1.1", -- "@fortawesome/fontawesome-svg-core": "6.1.1", -- "@fortawesome/free-solid-svg-icons": "6.1.1", -- "@ibm/plex": "^6.0.0", -- "@ng-bootstrap/ng-bootstrap": "12.0.1", -- "@ngx-translate/core": "14.0.0", -- "@ngx-translate/http-loader": "7.0.0", -- "@popperjs/core": "2.11.5", -- "bootstrap": "5.1.3", -- "dayjs": "1.11.0", -- "dompurify": "^2.3.8", -- "moment": "^2.29.2", -- "ngx-infinite-scroll": "13.0.1", -- "ngx-markdown": "^13.1.0", -- "ngx-webstorage": "9.0.0", -- "rxjs": "7.5.5", -- "simplebar": "^5.3.6", -- "tslib": "2.3.1", -- "zone.js": "0.11.4" -+ "version": "0.0.1-SNAPSHOT", -+ "license": "UNLICENSED", -+ "dependencies": { -+ "@angular/common": "16.2.9", -+ "@angular/compiler": "16.2.9", -+ "@angular/core": "16.2.9", -+ "@angular/forms": "16.2.9", -+ "@angular/localize": "16.2.9", -+ "@angular/platform-browser": "16.2.9", -+ "@angular/platform-browser-dynamic": "16.2.9", -+ "@angular/router": "16.2.9", -+ "@fortawesome/angular-fontawesome": "0.13.0", -+ "@fortawesome/fontawesome-svg-core": "6.4.2", -+ "@fortawesome/free-solid-svg-icons": "6.4.2", -+ "@ng-bootstrap/ng-bootstrap": "15.1.1", -+ "@ngx-translate/core": "15.0.0", -+ "@ngx-translate/http-loader": "8.0.0", -+ "@popperjs/core": "2.11.8", -+ "bootstrap": "5.3.2", -+ "dayjs": "1.11.10", -+ "ngx-infinite-scroll": "16.0.0", -+ "rxjs": "7.8.1", -+ "tslib": "2.6.2", -+ "zone.js": "0.13.3" - }, - "devDependencies": { -- "@angular-builders/custom-webpack": "13.1.0", -- "@angular-builders/jest": "13.0.3", -- "@angular-devkit/build-angular": "13.3.1", -- "@angular-eslint/eslint-plugin": "13.2.0", -- "@angular/cli": "13.3.1", -- "@angular/compiler-cli": "13.3.1", -- "@angular/service-worker": "13.3.1", -- "@types/dompurify": "^2.3.3", -- "@types/jest": "27.4.1", -- "@types/node": "16.11.26", -- "@typescript-eslint/eslint-plugin": "5.18.0", -- "@typescript-eslint/parser": "5.18.0", -- "browser-sync": "^2.24.1", -+ "@angular-builders/custom-webpack": "16.0.1", -+ "@angular-builders/jest": "16.0.1", -+ "@angular-devkit/build-angular": "16.2.6", -+ "@angular-eslint/eslint-plugin": "16.2.0", -+ "@angular/cli": "16.2.6", -+ "@angular/compiler-cli": "16.2.9", -+ "@angular/service-worker": "16.2.9", -+ "@types/jest": "29.5.5", -+ "@types/node": "18.18.5", -+ "@typescript-eslint/eslint-plugin": "6.7.5", -+ "@typescript-eslint/parser": "6.7.5", -+ "browser-sync": "2.29.3", - "browser-sync-webpack-plugin": "2.3.0", -- "concurrently": "7.1.0", -- "copy-webpack-plugin": "10.2.4", -- "eslint": "8.12.0", -- "eslint-config-prettier": "8.5.0", -- "eslint-webpack-plugin": "3.1.1", -- "folder-hash": "4.0.2", -- "generator-jhipster": "^7.8.1", -- "husky": "7.0.4", -- "jest": "27.5.1", -+ "buffer": "6.0.3", -+ "concurrently": "8.2.1", -+ "copy-webpack-plugin": "11.0.0", -+ "eslint": "8.51.0", -+ "eslint-config-prettier": "9.0.0", -+ "eslint-webpack-plugin": "4.0.1", -+ "folder-hash": "4.0.4", -+ "generator-jhipster": "7.8.1", -+ "husky": "8.0.3", -+ "jest": "29.7.0", - "jest-date-mock": "1.0.8", -- "jest-junit": "13.1.0", -- "jest-preset-angular": "11.1.1", -- "jest-sonar-reporter": "2.0.0", -- "lint-staged": "12.3.7", -+ "jest-environment-jsdom": "29.7.0", -+ "jest-junit": "16.0.0", -+ "jest-preset-angular": "13.1.2", -+ "jest-sonar": "0.2.16", -+ "lint-staged": "14.0.1", - "merge-jsons-webpack-plugin": "2.0.1", -- "prettier": "2.6.2", -- "prettier-plugin-java": "1.6.1", -- "prettier-plugin-packagejson": "2.2.17", -- "rimraf": "3.0.2", -- "swagger-ui-dist": "4.10.3", -- "ts-jest": "27.1.4", -- "typescript": "4.6.3", -- "wait-on": "6.0.1", -- "webpack-bundle-analyzer": "4.5.0", -- "webpack-merge": "5.8.0", -+ "prettier": "3.0.3", -+ "prettier-plugin-java": "2.3.1", -+ "prettier-plugin-packagejson": "2.4.6", -+ "rimraf": "5.0.5", -+ "swagger-ui-dist": "5.9.0", -+ "ts-jest": "29.1.1", -+ "typescript": "5.1.6", -+ "wait-on": "7.0.1", -+ "webpack-bundle-analyzer": "4.9.1", -+ "webpack-merge": "5.9.0", - "webpack-notifier": "1.15.0" - }, - "engines": { -- "node": ">=16.14.0" -+ "node": ">=18.18.1" - } - }, -- "node_modules/@ampproject/remapping": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.1.1.tgz", -- "integrity": "sha512-YVAcA4DKLOj296CF5SrQ8cYiMRiUGc2sqFpLxsDGWE34suHqhGP/5yMsDHKsrh8hs8I5TiRVXNwKPWQpX3iGjw==", -+ "node_modules/@aashutoshrathi/word-wrap": { -+ "version": "1.2.6", -+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", -+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/@ampproject/remapping": { -+ "version": "2.2.1", -+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", -+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dependencies": { -- "@jridgewell/resolve-uri": "^3.0.3", -- "sourcemap-codec": "1.4.8" -+ "@jridgewell/gen-mapping": "^0.3.0", -+ "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-builders/custom-webpack": { -- "version": "13.1.0", -- "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-13.1.0.tgz", -- "integrity": "sha512-qhtnAv1i7agk14zeKZZfXjrckYt37OZ+3tsTBLhf3ZFbwREK8L1SNi8xhZ1j1JLGsf2Dp0GEcZrSYeFDweo0WA==", -+ "version": "16.0.1", -+ "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-16.0.1.tgz", -+ "integrity": "sha512-C6INC8UOYDcp8LJwNhE0m66yp+nZX50JdgGI8oRn7fqw3gO58qhDgXrR/8BCrSeC8eOx8WxSuvBJ6u+9dozhyw==", - "dev": true, - "dependencies": { -- "@angular-devkit/architect": ">=0.1300.0 < 0.1400.0", -- "@angular-devkit/build-angular": "^13.0.0", -- "@angular-devkit/core": "^13.0.0", -+ "@angular-devkit/architect": ">=0.1600.0 < 0.1700.0", -+ "@angular-devkit/build-angular": "^16.0.0", -+ "@angular-devkit/core": "^16.0.0", - "lodash": "^4.17.15", - "ts-node": "^10.0.0", -- "tsconfig-paths": "^3.9.0", -+ "tsconfig-paths": "^4.1.0", - "webpack-merge": "^5.7.3" - }, - "engines": { -- "node": ">=12.20.0" -+ "node": "^14.20.0 || ^16.13.0 || >=18.10.0" -+ }, -+ "peerDependencies": { -+ "@angular/compiler-cli": "^16.0.0" - } - }, - "node_modules/@angular-builders/jest": { -- "version": "13.0.3", -- "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-13.0.3.tgz", -- "integrity": "sha512-HJfN8gCfbg14U/eaE5vEvt6IrecFTUWSibHLvf2gBMzgnRQzqPKNAAoHY5kZ0DL+HwsCW/KlSp2m47ukOdVcYA==", -+ "version": "16.0.1", -+ "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-16.0.1.tgz", -+ "integrity": "sha512-FuYkfy8JwdfTHevjgs8z18sXt0egcWbSSkefyM/QsGVkMHs+b4N4xzV20MQtyx0Yc6nJzuknIH5ZvDwLYUDPyQ==", - "dev": true, - "dependencies": { -- "@angular-devkit/architect": ">=0.1300.0 < 0.1400.0", -- "@angular-devkit/core": "^13.0.0", -- "jest-preset-angular": "11.1.0", -- "lodash": "^4.17.15" -+ "@angular-devkit/architect": ">=0.1600.0 < 0.1700.0", -+ "@angular-devkit/core": "^16.0.0", -+ "jest-preset-angular": "13.1.1", -+ "lodash": "^4.17.15", -+ "tsconfig-paths": "^4.1.0" - }, - "engines": { -- "node": ">=12.20.0" -+ "node": "^14.20.0 || ^16.13.0 || >=18.10.0" - }, - "peerDependencies": { -- "jest": ">=27" -+ "@angular-devkit/build-angular": "^16.0.0", -+ "@angular/compiler-cli": "^16.0.0", -+ "@angular/core": "^16.0.0", -+ "@angular/platform-browser-dynamic": "^16.0.0", -+ "jest": ">=29" - } - }, -- "node_modules/@angular-builders/jest/node_modules/esbuild": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", -- "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", -+ "node_modules/@angular-builders/jest/node_modules/jest-preset-angular": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-13.1.1.tgz", -+ "integrity": "sha512-X8i7icKt9U5uhj7YKqdEZm7ZZPvNFRxfBnU+9SALdIkHYJhwtlJ5/MUk9wo4f3lX2smOkIl9LPJUu1APO+11Jg==", - "dev": true, -- "hasInstallScript": true, -- "optional": true, -- "bin": { -- "esbuild": "bin/esbuild" -+ "dependencies": { -+ "bs-logger": "^0.2.6", -+ "esbuild-wasm": ">=0.13.8", -+ "jest-environment-jsdom": "^29.0.0", -+ "jest-util": "^29.0.0", -+ "pretty-format": "^29.0.0", -+ "ts-jest": "^29.0.0" -+ }, -+ "engines": { -+ "node": "^14.15.0 || >=16.10.0" - }, - "optionalDependencies": { -- "esbuild-android-arm64": "0.14.2", -- "esbuild-darwin-64": "0.14.2", -- "esbuild-darwin-arm64": "0.14.2", -- "esbuild-freebsd-64": "0.14.2", -- "esbuild-freebsd-arm64": "0.14.2", -- "esbuild-linux-32": "0.14.2", -- "esbuild-linux-64": "0.14.2", -- "esbuild-linux-arm": "0.14.2", -- "esbuild-linux-arm64": "0.14.2", -- "esbuild-linux-mips64le": "0.14.2", -- "esbuild-linux-ppc64le": "0.14.2", -- "esbuild-netbsd-64": "0.14.2", -- "esbuild-openbsd-64": "0.14.2", -- "esbuild-sunos-64": "0.14.2", -- "esbuild-windows-32": "0.14.2", -- "esbuild-windows-64": "0.14.2", -- "esbuild-windows-arm64": "0.14.2" -- } -- }, -- "node_modules/@angular-builders/jest/node_modules/esbuild-android-arm64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", -- "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", -- "cpu": [ -- "arm64" -- ], -+ "esbuild": ">=0.13.8" -+ }, -+ "peerDependencies": { -+ "@angular-devkit/build-angular": ">=13.0.0 <17.0.0", -+ "@angular/compiler-cli": ">=13.0.0 <17.0.0", -+ "@angular/core": ">=13.0.0 <17.0.0", -+ "@angular/platform-browser-dynamic": ">=13.0.0 <17.0.0", -+ "jest": "^29.0.0", -+ "typescript": ">=4.4" -+ } -+ }, -+ "node_modules/@angular-devkit/architect": { -+ "version": "0.1602.9", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.9.tgz", -+ "integrity": "sha512-U3vfb/e2sFfg0D9FyyRBXRPP7g4FBFtGK8Q3JPmvAVsHHwi5AUFRNR7YBChB/T5TMNY077HcTyEirVh2FeUpdA==", - "dev": true, -- "optional": true, -- "os": [ -- "android" -- ] -+ "dependencies": { -+ "@angular-devkit/core": "16.2.9", -+ "rxjs": "7.8.1" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.0", -+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -+ "yarn": ">= 1.13.0" -+ } - }, -- "node_modules/@angular-builders/jest/node_modules/esbuild-darwin-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", -- "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", -- "cpu": [ -- "x64" -- ], -+ "node_modules/@angular-devkit/build-angular": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.6.tgz", -+ "integrity": "sha512-QdU/q77K1P8CPEEZGxw1QqLcnA9ofboDWS7vcLRBmFmk2zydtLTApbK0P8GNDRbnmROOKkoaLo+xUTDJz9gvPA==", -+ "dev": true, -+ "dependencies": { -+ "@ampproject/remapping": "2.2.1", -+ "@angular-devkit/architect": "0.1602.6", -+ "@angular-devkit/build-webpack": "0.1602.6", -+ "@angular-devkit/core": "16.2.6", -+ "@babel/core": "7.22.9", -+ "@babel/generator": "7.22.9", -+ "@babel/helper-annotate-as-pure": "7.22.5", -+ "@babel/helper-split-export-declaration": "7.22.6", -+ "@babel/plugin-proposal-async-generator-functions": "7.20.7", -+ "@babel/plugin-transform-async-to-generator": "7.22.5", -+ "@babel/plugin-transform-runtime": "7.22.9", -+ "@babel/preset-env": "7.22.9", -+ "@babel/runtime": "7.22.6", -+ "@babel/template": "7.22.5", -+ "@discoveryjs/json-ext": "0.5.7", -+ "@ngtools/webpack": "16.2.6", -+ "@vitejs/plugin-basic-ssl": "1.0.1", -+ "ansi-colors": "4.1.3", -+ "autoprefixer": "10.4.14", -+ "babel-loader": "9.1.3", -+ "babel-plugin-istanbul": "6.1.1", -+ "browserslist": "^4.21.5", -+ "chokidar": "3.5.3", -+ "copy-webpack-plugin": "11.0.0", -+ "critters": "0.0.20", -+ "css-loader": "6.8.1", -+ "esbuild-wasm": "0.18.17", -+ "fast-glob": "3.3.1", -+ "guess-parser": "0.4.22", -+ "https-proxy-agent": "5.0.1", -+ "inquirer": "8.2.4", -+ "jsonc-parser": "3.2.0", -+ "karma-source-map-support": "1.4.0", -+ "less": "4.1.3", -+ "less-loader": "11.1.0", -+ "license-webpack-plugin": "4.0.2", -+ "loader-utils": "3.2.1", -+ "magic-string": "0.30.1", -+ "mini-css-extract-plugin": "2.7.6", -+ "mrmime": "1.0.1", -+ "open": "8.4.2", -+ "ora": "5.4.1", -+ "parse5-html-rewriting-stream": "7.0.0", -+ "picomatch": "2.3.1", -+ "piscina": "4.0.0", -+ "postcss": "8.4.31", -+ "postcss-loader": "7.3.3", -+ "resolve-url-loader": "5.0.0", -+ "rxjs": "7.8.1", -+ "sass": "1.64.1", -+ "sass-loader": "13.3.2", -+ "semver": "7.5.4", -+ "source-map-loader": "4.0.1", -+ "source-map-support": "0.5.21", -+ "terser": "5.19.2", -+ "text-table": "0.2.0", -+ "tree-kill": "1.2.2", -+ "tslib": "2.6.1", -+ "vite": "4.4.7", -+ "webpack": "5.88.2", -+ "webpack-dev-middleware": "6.1.1", -+ "webpack-dev-server": "4.15.1", -+ "webpack-merge": "5.9.0", -+ "webpack-subresource-integrity": "5.1.0" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.0", -+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -+ "yarn": ">= 1.13.0" -+ }, -+ "optionalDependencies": { -+ "esbuild": "0.18.17" -+ }, -+ "peerDependencies": { -+ "@angular/compiler-cli": "^16.0.0", -+ "@angular/localize": "^16.0.0", -+ "@angular/platform-server": "^16.0.0", -+ "@angular/service-worker": "^16.0.0", -+ "jest": "^29.5.0", -+ "jest-environment-jsdom": "^29.5.0", -+ "karma": "^6.3.0", -+ "ng-packagr": "^16.0.0", -+ "protractor": "^7.0.0", -+ "tailwindcss": "^2.0.0 || ^3.0.0", -+ "typescript": ">=4.9.3 <5.2" -+ }, -+ "peerDependenciesMeta": { -+ "@angular/localize": { -+ "optional": true -+ }, -+ "@angular/platform-server": { -+ "optional": true -+ }, -+ "@angular/service-worker": { -+ "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/@angular-devkit/architect": { -+ "version": "0.1602.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.6.tgz", -+ "integrity": "sha512-b1NNV3yNg6Rt86ms20bJIroWUI8ihaEwv5k+EoijEXLoMs4eNs5PhqL+QE8rTj+q9pa1gSrWf2blXor2JGwf1g==", - "dev": true, -- "optional": true, -- "os": [ -- "darwin" -- ] -+ "dependencies": { -+ "@angular-devkit/core": "16.2.6", -+ "rxjs": "7.8.1" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.0", -+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -+ "yarn": ">= 1.13.0" -+ } - }, -- "node_modules/@angular-builders/jest/node_modules/esbuild-darwin-arm64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", -- "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", -- "cpu": [ -- "arm64" -- ], -+ "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.6.tgz", -+ "integrity": "sha512-iez/8NYXQT6fqVQLlKmZUIRkFUEZ88ACKbTwD4lBmk0+hXW+bQBxI7JOnE3C4zkcM2YeuTXIYsC5SebTKYiR4Q==", - "dev": true, -- "optional": true, -- "os": [ -- "darwin" -- ] -+ "dependencies": { -+ "ajv": "8.12.0", -+ "ajv-formats": "2.1.1", -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.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-builders/jest/node_modules/esbuild-freebsd-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", -- "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", -- "cpu": [ -- "x64" -- ], -+ "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { -+ "version": "7.22.9", -+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", -+ "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, -- "optional": true, -- "os": [ -- "freebsd" -- ] -+ "dependencies": { -+ "@ampproject/remapping": "^2.2.0", -+ "@babel/code-frame": "^7.22.5", -+ "@babel/generator": "^7.22.9", -+ "@babel/helper-compilation-targets": "^7.22.9", -+ "@babel/helper-module-transforms": "^7.22.9", -+ "@babel/helpers": "^7.22.6", -+ "@babel/parser": "^7.22.7", -+ "@babel/template": "^7.22.5", -+ "@babel/traverse": "^7.22.8", -+ "@babel/types": "^7.22.5", -+ "convert-source-map": "^1.7.0", -+ "debug": "^4.1.0", -+ "gensync": "^1.0.0-beta.2", -+ "json5": "^2.2.2", -+ "semver": "^6.3.1" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "funding": { -+ "type": "opencollective", -+ "url": "https://opencollective.com/babel" -+ } - }, -- "node_modules/@angular-builders/jest/node_modules/esbuild-freebsd-arm64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", -- "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", -- "cpu": [ -- "arm64" -- ], -+ "node_modules/@angular-devkit/build-angular/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==", - "dev": true, -- "optional": true, -- "os": [ -- "freebsd" -- ] -+ "bin": { -+ "semver": "bin/semver.js" -+ } - }, -- "node_modules/@angular-builders/jest/node_modules/esbuild-linux-32": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", -- "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", -- "cpu": [ -- "ia32" -- ], -+ "node_modules/@angular-devkit/build-angular/node_modules/fast-glob": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", -+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -+ "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/@angular-builders/jest/node_modules/esbuild-linux-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", -- "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", -- "cpu": [ -- "x64" -- ], -+ "node_modules/@angular-devkit/build-angular/node_modules/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -+ "dependencies": { -+ "lru-cache": "^6.0.0" -+ }, -+ "bin": { -+ "semver": "bin/semver.js" -+ }, -+ "engines": { -+ "node": ">=10" -+ } - }, -- "node_modules/@angular-builders/jest/node_modules/esbuild-linux-arm": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", -- "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", -- "cpu": [ -- "arm" -- ], -+ "node_modules/@angular-devkit/build-angular/node_modules/tslib": { -+ "version": "2.6.1", -+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", -+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", -+ "dev": true -+ }, -+ "node_modules/@angular-devkit/build-webpack": { -+ "version": "0.1602.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.6.tgz", -+ "integrity": "sha512-BJPR6xdq7gRJ6bVWnZ81xHyH75j7lyLbegCXbvUNaM8TWVBkwWsSdqr2NQ717dNLLn5umg58SFpU/pWMq6CxMQ==", - "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -+ "dependencies": { -+ "@angular-devkit/architect": "0.1602.6", -+ "rxjs": "7.8.1" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.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-builders/jest/node_modules/esbuild-linux-arm64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", -- "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", -- "cpu": [ -- "arm64" -- ], -+ "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { -+ "version": "0.1602.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.6.tgz", -+ "integrity": "sha512-b1NNV3yNg6Rt86ms20bJIroWUI8ihaEwv5k+EoijEXLoMs4eNs5PhqL+QE8rTj+q9pa1gSrWf2blXor2JGwf1g==", - "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -+ "dependencies": { -+ "@angular-devkit/core": "16.2.6", -+ "rxjs": "7.8.1" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.0", -+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -+ "yarn": ">= 1.13.0" -+ } - }, -- "node_modules/@angular-builders/jest/node_modules/esbuild-linux-mips64le": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", -- "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", -- "cpu": [ -- "mips64el" -- ], -+ "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.6.tgz", -+ "integrity": "sha512-iez/8NYXQT6fqVQLlKmZUIRkFUEZ88ACKbTwD4lBmk0+hXW+bQBxI7JOnE3C4zkcM2YeuTXIYsC5SebTKYiR4Q==", - "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -+ "dependencies": { -+ "ajv": "8.12.0", -+ "ajv-formats": "2.1.1", -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.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-builders/jest/node_modules/esbuild-linux-ppc64le": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", -- "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", -- "cpu": [ -- "ppc64" -- ], -+ "node_modules/@angular-devkit/core": { -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.9.tgz", -+ "integrity": "sha512-dcHWjHBNGm3yCeNz19y8A1At4KgyC6XHNnbFL0y+nnZYiaESXjUoXJYKASedI6A+Bpl0HNq2URhH6bL6Af3+4w==", - "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -+ "dependencies": { -+ "ajv": "8.12.0", -+ "ajv-formats": "2.1.1", -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.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-builders/jest/node_modules/esbuild-netbsd-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", -- "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", -- "cpu": [ -- "x64" -- ], -+ "node_modules/@angular-devkit/schematics": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.6.tgz", -+ "integrity": "sha512-PhpRYHCJ3WvZXmng6Qk8TXeQf83jeBMAf7AIzI8h0fgeBocOl97Xf7bZpLg6GymiU+rVn15igQ4Rz9rKAay8bQ==", - "dev": true, -- "optional": true, -- "os": [ -- "netbsd" -- ] -+ "dependencies": { -+ "@angular-devkit/core": "16.2.6", -+ "jsonc-parser": "3.2.0", -+ "magic-string": "0.30.1", -+ "ora": "5.4.1", -+ "rxjs": "7.8.1" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.0", -+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -+ "yarn": ">= 1.13.0" -+ } - }, -- "node_modules/@angular-builders/jest/node_modules/esbuild-openbsd-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", -- "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", -- "cpu": [ -- "x64" -- ], -+ "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.6.tgz", -+ "integrity": "sha512-iez/8NYXQT6fqVQLlKmZUIRkFUEZ88ACKbTwD4lBmk0+hXW+bQBxI7JOnE3C4zkcM2YeuTXIYsC5SebTKYiR4Q==", - "dev": true, -- "optional": true, -- "os": [ -- "openbsd" -- ] -+ "dependencies": { -+ "ajv": "8.12.0", -+ "ajv-formats": "2.1.1", -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.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-builders/jest/node_modules/esbuild-sunos-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", -- "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", -- "cpu": [ -- "x64" -- ], -+ "node_modules/@angular-eslint/bundled-angular-compiler": { -+ "version": "16.2.0", -+ "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.2.0.tgz", -+ "integrity": "sha512-ct9orDYxkMl2+uvM7UBfgV28Dq57V4dEs+Drh7cD673JIMa6sXbgmd0QEtm8W3cmyK/jcTzmuoufxbH7hOxd6g==", -+ "dev": true -+ }, -+ "node_modules/@angular-eslint/eslint-plugin": { -+ "version": "16.2.0", -+ "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.2.0.tgz", -+ "integrity": "sha512-zdiAIox1T+B71HL+A8m+1jWdU34nvPGLhCRw/uZNwHzknsF4tYzNQ9W7T/SC/g/2s1yT2yNosEVNJSGSFvunJg==", - "dev": true, -- "optional": true, -- "os": [ -- "sunos" -- ] -+ "dependencies": { -+ "@angular-eslint/utils": "16.2.0", -+ "@typescript-eslint/utils": "5.62.0" -+ }, -+ "peerDependencies": { -+ "eslint": "^7.20.0 || ^8.0.0", -+ "typescript": "*" -+ } - }, -- "node_modules/@angular-builders/jest/node_modules/esbuild-wasm": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz", -- "integrity": "sha512-Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA==", -+ "node_modules/@angular-eslint/utils": { -+ "version": "16.2.0", -+ "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.2.0.tgz", -+ "integrity": "sha512-NxMRwnlIgzmbJQfWkfd9y3Sz0hzjFdK5LH44i+3D5NhpPdZ6SzwHAjMYWoYsmmNQX5tlDXoicYF9Mz9Wz8DJ/A==", - "dev": true, -+ "dependencies": { -+ "@angular-eslint/bundled-angular-compiler": "16.2.0", -+ "@typescript-eslint/utils": "5.62.0" -+ }, -+ "peerDependencies": { -+ "eslint": "^7.20.0 || ^8.0.0", -+ "typescript": "*" -+ } -+ }, -+ "node_modules/@angular/cli": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.6.tgz", -+ "integrity": "sha512-9poPvUEmlufOAW1Cjk+aA5e2x3mInLtbYYSL/EYviDN2ugmavsSIvxAE/WLnxq6cPWqhNDbHDaqvcmqkcFM3Cw==", -+ "dev": true, -+ "dependencies": { -+ "@angular-devkit/architect": "0.1602.6", -+ "@angular-devkit/core": "16.2.6", -+ "@angular-devkit/schematics": "16.2.6", -+ "@schematics/angular": "16.2.6", -+ "@yarnpkg/lockfile": "1.1.0", -+ "ansi-colors": "4.1.3", -+ "ini": "4.1.1", -+ "inquirer": "8.2.4", -+ "jsonc-parser": "3.2.0", -+ "npm-package-arg": "10.1.0", -+ "npm-pick-manifest": "8.0.1", -+ "open": "8.4.2", -+ "ora": "5.4.1", -+ "pacote": "15.2.0", -+ "resolve": "1.22.2", -+ "semver": "7.5.4", -+ "symbol-observable": "4.0.0", -+ "yargs": "17.7.2" -+ }, - "bin": { -- "esbuild": "bin/esbuild" -+ "ng": "bin/ng.js" - }, - "engines": { -- "node": ">=8" -+ "node": "^16.14.0 || >=18.10.0", -+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -+ "yarn": ">= 1.13.0" - } - }, -- "node_modules/@angular-builders/jest/node_modules/esbuild-windows-32": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", -- "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", -- "cpu": [ -- "ia32" -- ], -+ "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { -+ "version": "0.1602.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.6.tgz", -+ "integrity": "sha512-b1NNV3yNg6Rt86ms20bJIroWUI8ihaEwv5k+EoijEXLoMs4eNs5PhqL+QE8rTj+q9pa1gSrWf2blXor2JGwf1g==", - "dev": true, -- "optional": true, -- "os": [ -- "win32" -- ] -+ "dependencies": { -+ "@angular-devkit/core": "16.2.6", -+ "rxjs": "7.8.1" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.0", -+ "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -+ "yarn": ">= 1.13.0" -+ } - }, -- "node_modules/@angular-builders/jest/node_modules/esbuild-windows-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", -- "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", -- "cpu": [ -- "x64" -- ], -+ "node_modules/@angular/cli/node_modules/@angular-devkit/core": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.6.tgz", -+ "integrity": "sha512-iez/8NYXQT6fqVQLlKmZUIRkFUEZ88ACKbTwD4lBmk0+hXW+bQBxI7JOnE3C4zkcM2YeuTXIYsC5SebTKYiR4Q==", - "dev": true, -- "optional": true, -- "os": [ -- "win32" -- ] -+ "dependencies": { -+ "ajv": "8.12.0", -+ "ajv-formats": "2.1.1", -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" -+ }, -+ "engines": { -+ "node": "^16.14.0 || >=18.10.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-builders/jest/node_modules/esbuild-windows-arm64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", -- "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", -- "cpu": [ -- "arm64" -- ], -+ "node_modules/@angular/cli/node_modules/@npmcli/fs": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", -+ "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, -- "optional": true, -- "os": [ -- "win32" -- ] -+ "dependencies": { -+ "semver": "^7.3.5" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } - }, -- "node_modules/@angular-builders/jest/node_modules/jest-preset-angular": { -- "version": "11.1.0", -- "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-11.1.0.tgz", -- "integrity": "sha512-R4ePMBiQub95ESJlN7TozIpRIyMU7buvIdjm8KXqxZK/w8MYwLOSszVStsoZycDmWq5ifZI1eRvhOCUFktFotw==", -+ "node_modules/@angular/cli/node_modules/@npmcli/git": { -+ "version": "4.1.0", -+ "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", -+ "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, - "dependencies": { -- "bs-logger": "^0.2.6", -- "esbuild-wasm": "0.14.2", -- "jest-environment-jsdom": "^27.0.0", -- "pretty-format": "^27.0.0", -- "ts-jest": "^27.0.0" -+ "@npmcli/promise-spawn": "^6.0.0", -+ "lru-cache": "^7.4.4", -+ "npm-pick-manifest": "^8.0.0", -+ "proc-log": "^3.0.0", -+ "promise-inflight": "^1.0.1", -+ "promise-retry": "^2.0.1", -+ "semver": "^7.3.5", -+ "which": "^3.0.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/@npmcli/git/node_modules/lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/@npmcli/installed-package-contents": { -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", -+ "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", -+ "dev": true, -+ "dependencies": { -+ "npm-bundled": "^3.0.0", -+ "npm-normalize-package-bin": "^3.0.0" - }, -- "optionalDependencies": { -- "esbuild": "0.14.2" -+ "bin": { -+ "installed-package-contents": "lib/index.js" - }, -- "peerDependencies": { -- "@angular-devkit/build-angular": ">=0.1002.4", -- "@angular/compiler-cli": ">=10.0.0", -- "@angular/core": ">=10.0.0", -- "@angular/platform-browser-dynamic": ">=10.0.0" -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular-devkit/architect": { -- "version": "0.1303.8", -- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.8.tgz", -- "integrity": "sha512-2zaNejnfZbq+fFOVgkmWkh+2UmK/CBDbWTq7VJHopJLtUuf7pFNvRk73s9xayuJ3Lt2/sY17Mykku2LziBF89A==", -+ "node_modules/@angular/cli/node_modules/@npmcli/move-file": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", -+ "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", -+ "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { -- "@angular-devkit/core": "13.3.8", -- "rxjs": "6.6.7" -+ "mkdirp": "^1.0.4", -+ "rimraf": "^3.0.2" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -- "yarn": ">= 1.13.0" -+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, -- "node_modules/@angular-devkit/architect/node_modules/rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ "node_modules/@angular/cli/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/@angular/cli/node_modules/@npmcli/promise-spawn": { -+ "version": "6.0.2", -+ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", -+ "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, - "dependencies": { -- "tslib": "^1.9.0" -+ "which": "^3.0.0" - }, - "engines": { -- "npm": ">=2.0.0" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular-devkit/architect/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/@angular/cli/node_modules/@npmcli/run-script": { -+ "version": "6.0.2", -+ "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", -+ "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", -+ "dev": true, -+ "dependencies": { -+ "@npmcli/node-gyp": "^3.0.0", -+ "@npmcli/promise-spawn": "^6.0.0", -+ "node-gyp": "^9.0.0", -+ "read-package-json-fast": "^3.0.0", -+ "which": "^3.0.0" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } - }, -- "node_modules/@angular-devkit/build-angular": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.1.tgz", -- "integrity": "sha512-xxBW4zZZM+lewW0nEpk9SXw6BMYhxe8WI/FjyEroOV8G2IuOrjZ4112QOpk6jCgmPHSOEldbltEdwoVLAnu09Q==", -- "dev": true, -- "dependencies": { -- "@ampproject/remapping": "1.1.1", -- "@angular-devkit/architect": "0.1303.1", -- "@angular-devkit/build-webpack": "0.1303.1", -- "@angular-devkit/core": "13.3.1", -- "@babel/core": "7.16.12", -- "@babel/generator": "7.16.8", -- "@babel/helper-annotate-as-pure": "7.16.7", -- "@babel/plugin-proposal-async-generator-functions": "7.16.8", -- "@babel/plugin-transform-async-to-generator": "7.16.8", -- "@babel/plugin-transform-runtime": "7.16.10", -- "@babel/preset-env": "7.16.11", -- "@babel/runtime": "7.16.7", -- "@babel/template": "7.16.7", -- "@discoveryjs/json-ext": "0.5.6", -- "@ngtools/webpack": "13.3.1", -- "ansi-colors": "4.1.1", -- "babel-loader": "8.2.3", -- "babel-plugin-istanbul": "6.1.1", -- "browserslist": "^4.9.1", -- "cacache": "15.3.0", -- "circular-dependency-plugin": "5.2.2", -- "copy-webpack-plugin": "10.2.1", -- "core-js": "3.20.3", -- "critters": "0.0.16", -- "css-loader": "6.5.1", -- "esbuild-wasm": "0.14.22", -- "glob": "7.2.0", -- "https-proxy-agent": "5.0.0", -- "inquirer": "8.2.0", -- "jsonc-parser": "3.0.0", -- "karma-source-map-support": "1.4.0", -- "less": "4.1.2", -- "less-loader": "10.2.0", -- "license-webpack-plugin": "4.0.2", -- "loader-utils": "3.2.0", -- "mini-css-extract-plugin": "2.5.3", -- "minimatch": "3.0.4", -- "open": "8.4.0", -- "ora": "5.4.1", -- "parse5-html-rewriting-stream": "6.0.1", -- "piscina": "3.2.0", -- "postcss": "8.4.5", -- "postcss-import": "14.0.2", -- "postcss-loader": "6.2.1", -- "postcss-preset-env": "7.2.3", -- "regenerator-runtime": "0.13.9", -- "resolve-url-loader": "5.0.0", -- "rxjs": "6.6.7", -- "sass": "1.49.9", -- "sass-loader": "12.4.0", -- "semver": "7.3.5", -- "source-map-loader": "3.0.1", -- "source-map-support": "0.5.21", -- "stylus": "0.56.0", -- "stylus-loader": "6.2.0", -- "terser": "5.11.0", -- "text-table": "0.2.0", -- "tree-kill": "1.2.2", -- "tslib": "2.3.1", -- "webpack": "5.70.0", -- "webpack-dev-middleware": "5.3.0", -- "webpack-dev-server": "4.7.3", -- "webpack-merge": "5.8.0", -- "webpack-subresource-integrity": "5.1.0" -+ "node_modules/@angular/cli/node_modules/@tootallnate/once": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", -+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", -+ "dev": true, -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@angular/cli/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/@angular/cli/node_modules/builtins": { -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", -+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", -+ "dev": true, -+ "dependencies": { -+ "semver": "^7.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/cacache": { -+ "version": "17.1.4", -+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", -+ "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", -+ "dev": true, -+ "dependencies": { -+ "@npmcli/fs": "^3.1.0", -+ "fs-minipass": "^3.0.0", -+ "glob": "^10.2.2", -+ "lru-cache": "^7.7.1", -+ "minipass": "^7.0.3", -+ "minipass-collect": "^1.0.2", -+ "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": "^12.20.0 || ^14.15.0 || >=16.10.0", -- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -- "yarn": ">= 1.13.0" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/cacache/node_modules/glob": { -+ "version": "10.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "dependencies": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" - }, -- "optionalDependencies": { -- "esbuild": "0.14.22" -+ "bin": { -+ "glob": "dist/esm/bin.mjs" - }, -- "peerDependencies": { -- "@angular/compiler-cli": "^13.0.0 || ^13.3.0-rc.0", -- "@angular/localize": "^13.0.0 || ^13.3.0-rc.0", -- "@angular/service-worker": "^13.0.0 || ^13.3.0-rc.0", -- "karma": "^6.3.0", -- "ng-packagr": "^13.0.0", -- "protractor": "^7.0.0", -- "tailwindcss": "^2.0.0 || ^3.0.0", -- "typescript": ">=4.4.3 <4.7" -+ "engines": { -+ "node": ">=16 || 14 >=14.17" - }, -- "peerDependenciesMeta": { -- "@angular/localize": { -- "optional": true -- }, -- "@angular/service-worker": { -- "optional": true -- }, -- "karma": { -- "optional": true -- }, -- "ng-packagr": { -- "optional": true -- }, -- "protractor": { -- "optional": true -- }, -- "tailwindcss": { -- "optional": true -- } -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/cacache/node_modules/lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/cacache/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/@angular/cli/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/@angular/cli/node_modules/fs-minipass/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/hosted-git-info": { -+ "version": "6.1.1", -+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", -+ "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", -+ "dev": true, -+ "dependencies": { -+ "lru-cache": "^7.5.1" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/hosted-git-info/node_modules/lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/http-proxy-agent": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", -+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", -+ "dev": true, -+ "dependencies": { -+ "@tootallnate/once": "2", -+ "agent-base": "6", -+ "debug": "4" -+ }, -+ "engines": { -+ "node": ">= 6" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/ignore-walk": { -+ "version": "6.0.3", -+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", -+ "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", -+ "dev": true, -+ "dependencies": { -+ "minimatch": "^9.0.0" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/json-parse-even-better-errors": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", -+ "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", -+ "dev": true, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/make-fetch-happen": { -+ "version": "10.2.1", -+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", -+ "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", -+ "dev": true, -+ "dependencies": { -+ "agentkeepalive": "^4.2.1", -+ "cacache": "^16.1.0", -+ "http-cache-semantics": "^4.1.0", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.0", -+ "is-lambda": "^1.0.1", -+ "lru-cache": "^7.7.1", -+ "minipass": "^3.1.6", -+ "minipass-collect": "^1.0.2", -+ "minipass-fetch": "^2.0.3", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "negotiator": "^0.6.3", -+ "promise-retry": "^2.0.1", -+ "socks-proxy-agent": "^7.0.0", -+ "ssri": "^9.0.0" -+ }, -+ "engines": { -+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/make-fetch-happen/node_modules/@npmcli/fs": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", -+ "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", -+ "dev": true, -+ "dependencies": { -+ "@gar/promisify": "^1.1.3", -+ "semver": "^7.3.5" -+ }, -+ "engines": { -+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/make-fetch-happen/node_modules/cacache": { -+ "version": "16.1.3", -+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", -+ "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", -+ "dev": true, -+ "dependencies": { -+ "@npmcli/fs": "^2.1.0", -+ "@npmcli/move-file": "^2.0.0", -+ "chownr": "^2.0.0", -+ "fs-minipass": "^2.1.0", -+ "glob": "^8.0.1", -+ "infer-owner": "^1.0.4", -+ "lru-cache": "^7.7.1", -+ "minipass": "^3.1.6", -+ "minipass-collect": "^1.0.2", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "mkdirp": "^1.0.4", -+ "p-map": "^4.0.0", -+ "promise-inflight": "^1.0.1", -+ "rimraf": "^3.0.2", -+ "ssri": "^9.0.0", -+ "tar": "^6.1.11", -+ "unique-filename": "^2.0.0" -+ }, -+ "engines": { -+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/make-fetch-happen/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/@angular/cli/node_modules/make-fetch-happen/node_modules/glob": { -+ "version": "8.1.0", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", -+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", -+ "dev": true, -+ "dependencies": { -+ "fs.realpath": "^1.0.0", -+ "inflight": "^1.0.4", -+ "inherits": "2", -+ "minimatch": "^5.0.1", -+ "once": "^1.3.0" -+ }, -+ "engines": { -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/make-fetch-happen/node_modules/lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/make-fetch-happen/node_modules/minimatch": { -+ "version": "5.1.6", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", -+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", -+ "dev": true, -+ "dependencies": { -+ "brace-expansion": "^2.0.1" -+ }, -+ "engines": { -+ "node": ">=10" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/make-fetch-happen/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/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { -- "version": "0.1303.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.1.tgz", -- "integrity": "sha512-ppaLzNZPrqrI96ddgm1RuEALVpWZsmHbIPLDd0GBwhF6aOkwF0LpZHd5XyS4ktGFZPReiFIjWSVtqV5vaBdRsw==", -+ "node_modules/@angular/cli/node_modules/make-fetch-happen/node_modules/ssri": { -+ "version": "9.0.1", -+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", -+ "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { -- "@angular-devkit/core": "13.3.1", -- "rxjs": "6.6.7" -+ "minipass": "^3.1.1" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -- "yarn": ">= 1.13.0" -+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, -- "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", -- "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", -+ "node_modules/@angular/cli/node_modules/make-fetch-happen/node_modules/unique-filename": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", -+ "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", - "dev": true, - "dependencies": { -- "ajv": "8.9.0", -- "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -+ "unique-slug": "^3.0.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.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": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, -- "node_modules/@angular-devkit/build-angular/node_modules/array-union": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", -- "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", -+ "node_modules/@angular/cli/node_modules/make-fetch-happen/node_modules/unique-slug": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", -+ "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", - "dev": true, -- "engines": { -- "node": ">=12" -+ "dependencies": { -+ "imurmurhash": "^0.1.4" - }, -- "funding": { -- "url": "https://github.com/sponsors/sindresorhus" -+ "engines": { -+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, -- "node_modules/@angular-devkit/build-angular/node_modules/copy-webpack-plugin": { -- "version": "10.2.1", -- "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.1.tgz", -- "integrity": "sha512-nr81NhCAIpAWXGCK5thrKmfCQ6GDY0L5RN0U+BnIn/7Us55+UCex5ANNsNKmIVtDRnk0Ecf+/kzp9SUVrrBMLg==", -+ "node_modules/@angular/cli/node_modules/minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { -- "fast-glob": "^3.2.7", -- "glob-parent": "^6.0.1", -- "globby": "^12.0.2", -- "normalize-path": "^3.0.0", -- "schema-utils": "^4.0.0", -- "serialize-javascript": "^6.0.0" -+ "brace-expansion": "^2.0.1" - }, - "engines": { -- "node": ">= 12.20.0" -+ "node": ">=16 || 14 >=14.17" - }, - "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/webpack" -- }, -- "peerDependencies": { -- "webpack": "^5.1.0" -+ "url": "https://github.com/sponsors/isaacs" - } - }, -- "node_modules/@angular-devkit/build-angular/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==", -+ "node_modules/@angular/cli/node_modules/minipass": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", -+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, -- "dependencies": { -- "is-glob": "^4.0.3" -- }, - "engines": { -- "node": ">=10.13.0" -+ "node": ">=8" - } - }, -- "node_modules/@angular-devkit/build-angular/node_modules/globby": { -- "version": "12.2.0", -- "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", -- "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", -+ "node_modules/@angular/cli/node_modules/minipass-fetch": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", -+ "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "dependencies": { -- "array-union": "^3.0.1", -- "dir-glob": "^3.0.1", -- "fast-glob": "^3.2.7", -- "ignore": "^5.1.9", -- "merge2": "^1.4.1", -- "slash": "^4.0.0" -+ "minipass": "^3.1.6", -+ "minipass-sized": "^1.0.3", -+ "minizlib": "^2.1.2" - }, - "engines": { -- "node": "^12.20.0 || ^14.13.1 || >=16.0.0" -+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, -- "funding": { -- "url": "https://github.com/sponsors/sindresorhus" -+ "optionalDependencies": { -+ "encoding": "^0.1.13" - } - }, -- "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ "node_modules/@angular/cli/node_modules/minipass-fetch/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": { -- "tslib": "^1.9.0" -+ "yallist": "^4.0.0" - }, - "engines": { -- "npm": ">=2.0.0" -+ "node": ">=8" - } - }, -- "node_modules/@angular-devkit/build-angular/node_modules/rxjs/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/@angular-devkit/build-angular/node_modules/schema-utils": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", -- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", -+ "node_modules/@angular/cli/node_modules/node-gyp": { -+ "version": "9.4.1", -+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", -+ "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", - "dev": true, - "dependencies": { -- "@types/json-schema": "^7.0.9", -- "ajv": "^8.8.0", -- "ajv-formats": "^2.1.1", -- "ajv-keywords": "^5.0.0" -+ "env-paths": "^2.2.0", -+ "exponential-backoff": "^3.1.1", -+ "glob": "^7.1.4", -+ "graceful-fs": "^4.2.6", -+ "make-fetch-happen": "^10.0.3", -+ "nopt": "^6.0.0", -+ "npmlog": "^6.0.0", -+ "rimraf": "^3.0.2", -+ "semver": "^7.3.5", -+ "tar": "^6.1.2", -+ "which": "^2.0.2" - }, -- "engines": { -- "node": ">= 12.13.0" -+ "bin": { -+ "node-gyp": "bin/node-gyp.js" - }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/webpack" -+ "engines": { -+ "node": "^12.13 || ^14.13 || >=16" - } - }, -- "node_modules/@angular-devkit/build-angular/node_modules/slash": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", -- "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", -+ "node_modules/@angular/cli/node_modules/node-gyp/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, -- "engines": { -- "node": ">=12" -+ "dependencies": { -+ "isexe": "^2.0.0" - }, -- "funding": { -- "url": "https://github.com/sponsors/sindresorhus" -+ "bin": { -+ "node-which": "bin/node-which" -+ }, -+ "engines": { -+ "node": ">= 8" - } - }, -- "node_modules/@angular-devkit/build-webpack": { -- "version": "0.1303.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.1.tgz", -- "integrity": "sha512-KSnR3y2q5hxh7t7ZSi0Emv/Kh9+D105JaEeyEqjqRjLdZSd2m6eAxbSUMNOAsbqnJTMCfzU5AG7jhbujuge0dQ==", -+ "node_modules/@angular/cli/node_modules/nopt": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", -+ "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { -- "@angular-devkit/architect": "0.1303.1", -- "rxjs": "6.6.7" -+ "abbrev": "^1.0.0" - }, -- "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -- "yarn": ">= 1.13.0" -+ "bin": { -+ "nopt": "bin/nopt.js" - }, -- "peerDependencies": { -- "webpack": "^5.30.0", -- "webpack-dev-server": "^4.0.0" -+ "engines": { -+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, -- "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { -- "version": "0.1303.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.1.tgz", -- "integrity": "sha512-ppaLzNZPrqrI96ddgm1RuEALVpWZsmHbIPLDd0GBwhF6aOkwF0LpZHd5XyS4ktGFZPReiFIjWSVtqV5vaBdRsw==", -+ "node_modules/@angular/cli/node_modules/npm-bundled": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", -+ "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "dependencies": { -- "@angular-devkit/core": "13.3.1", -- "rxjs": "6.6.7" -+ "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -- "yarn": ">= 1.13.0" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", -- "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", -+ "node_modules/@angular/cli/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": { -- "ajv": "8.9.0", -- "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -+ "semver": "^7.1.1" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.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": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ "node_modules/@angular/cli/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/@angular/cli/node_modules/npm-package-arg": { -+ "version": "10.1.0", -+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", -+ "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { -- "tslib": "^1.9.0" -+ "hosted-git-info": "^6.0.0", -+ "proc-log": "^3.0.0", -+ "semver": "^7.3.5", -+ "validate-npm-package-name": "^5.0.0" - }, - "engines": { -- "npm": ">=2.0.0" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular-devkit/build-webpack/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/@angular-devkit/core": { -- "version": "13.3.8", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.8.tgz", -- "integrity": "sha512-PCmfMkErpnH429l1cANak4PnCpAscqAubS6Dw83++cS34ht0/bgKRb2zSyBuB2Ka6kw7wAZ3fCyTcVvyfxVFEg==", -+ "node_modules/@angular/cli/node_modules/npm-packlist": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", -+ "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "dependencies": { -- "ajv": "8.9.0", -- "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -+ "ignore-walk": "^6.0.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -- "yarn": ">= 1.13.0" -- }, -- "peerDependencies": { -- "chokidar": "^3.5.2" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/npm-pick-manifest": { -+ "version": "8.0.1", -+ "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", -+ "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", -+ "dev": true, -+ "dependencies": { -+ "npm-install-checks": "^6.0.0", -+ "npm-normalize-package-bin": "^3.0.0", -+ "npm-package-arg": "^10.0.0", -+ "semver": "^7.3.5" - }, -- "peerDependenciesMeta": { -- "chokidar": { -- "optional": true -- } -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular-devkit/core/node_modules/rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ "node_modules/@angular/cli/node_modules/npm-registry-fetch": { -+ "version": "14.0.5", -+ "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", -+ "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "dependencies": { -- "tslib": "^1.9.0" -+ "make-fetch-happen": "^11.0.0", -+ "minipass": "^5.0.0", -+ "minipass-fetch": "^3.0.0", -+ "minipass-json-stream": "^1.0.1", -+ "minizlib": "^2.1.2", -+ "npm-package-arg": "^10.0.0", -+ "proc-log": "^3.0.0" - }, - "engines": { -- "npm": ">=2.0.0" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular-devkit/core/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/@angular/cli/node_modules/npm-registry-fetch/node_modules/lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ } - }, -- "node_modules/@angular-devkit/schematics": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.1.tgz", -- "integrity": "sha512-DxXMjlq/sALcHuONZRMTBX5k30XPfN4b6Ue4k7Xl8JKZqyHhEzfXaZzgD9u2cwb7wybKEeF/BZ5eJd8JG525og==", -+ "node_modules/@angular/cli/node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { -+ "version": "11.1.1", -+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", -+ "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { -- "@angular-devkit/core": "13.3.1", -- "jsonc-parser": "3.0.0", -- "magic-string": "0.25.7", -- "ora": "5.4.1", -- "rxjs": "6.6.7" -+ "agentkeepalive": "^4.2.1", -+ "cacache": "^17.0.0", -+ "http-cache-semantics": "^4.1.1", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.0", -+ "is-lambda": "^1.0.1", -+ "lru-cache": "^7.7.1", -+ "minipass": "^5.0.0", -+ "minipass-fetch": "^3.0.0", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "negotiator": "^0.6.3", -+ "promise-retry": "^2.0.1", -+ "socks-proxy-agent": "^7.0.0", -+ "ssri": "^10.0.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -- "yarn": ">= 1.13.0" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", -- "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", -+ "node_modules/@angular/cli/node_modules/npm-registry-fetch/node_modules/minipass-fetch": { -+ "version": "3.0.4", -+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", -+ "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", - "dev": true, - "dependencies": { -- "ajv": "8.9.0", -- "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -+ "minipass": "^7.0.3", -+ "minipass-sized": "^1.0.3", -+ "minizlib": "^2.1.2" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -- "yarn": ">= 1.13.0" -- }, -- "peerDependencies": { -- "chokidar": "^3.5.2" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, -- "peerDependenciesMeta": { -- "chokidar": { -- "optional": true -- } -+ "optionalDependencies": { -+ "encoding": "^0.1.13" - } - }, -- "node_modules/@angular-devkit/schematics/node_modules/rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ "node_modules/@angular/cli/node_modules/npm-registry-fetch/node_modules/minipass-fetch/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/pacote": { -+ "version": "15.2.0", -+ "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", -+ "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", - "dev": true, - "dependencies": { -- "tslib": "^1.9.0" -+ "@npmcli/git": "^4.0.0", -+ "@npmcli/installed-package-contents": "^2.0.1", -+ "@npmcli/promise-spawn": "^6.0.1", -+ "@npmcli/run-script": "^6.0.0", -+ "cacache": "^17.0.0", -+ "fs-minipass": "^3.0.0", -+ "minipass": "^5.0.0", -+ "npm-package-arg": "^10.0.0", -+ "npm-packlist": "^7.0.0", -+ "npm-pick-manifest": "^8.0.0", -+ "npm-registry-fetch": "^14.0.0", -+ "proc-log": "^3.0.0", -+ "promise-retry": "^2.0.1", -+ "read-package-json": "^6.0.0", -+ "read-package-json-fast": "^3.0.0", -+ "sigstore": "^1.3.0", -+ "ssri": "^10.0.0", -+ "tar": "^6.1.11" -+ }, -+ "bin": { -+ "pacote": "lib/bin.js" - }, - "engines": { -- "npm": ">=2.0.0" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular-devkit/schematics/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/@angular-eslint/bundled-angular-compiler": { -- "version": "13.2.0", -- "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-13.2.0.tgz", -- "integrity": "sha512-ZA9JPERpeSo+G/bmp8GS/WjBbYkPDVzN6IINHz9SVdv//LWE58yymFFjRabHJx46iAEOe8P0CoKduuJWtEvNrQ==", -- "dev": true -+ "node_modules/@angular/cli/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/@angular-eslint/eslint-plugin": { -- "version": "13.2.0", -- "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-13.2.0.tgz", -- "integrity": "sha512-8qscIBc4montFQ52+XfBk7qR675oXV8mvRpjDh3cTfIZCzV6CSbbbH2iLp/9egnn0Pgy2ZUIsWgcsbK4W3+4bw==", -+ "node_modules/@angular/cli/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": { -- "@angular-eslint/utils": "13.2.0", -- "@typescript-eslint/experimental-utils": "5.17.0" -+ "json-parse-even-better-errors": "^3.0.0", -+ "npm-normalize-package-bin": "^3.0.0" - }, -- "peerDependencies": { -- "eslint": "^7.0.0 || ^8.0.0", -- "typescript": "*" -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular-eslint/utils": { -- "version": "13.2.0", -- "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-13.2.0.tgz", -- "integrity": "sha512-ywkk+pVLaDLwzNKUcc/xWtJC4Bkm+qRrMOR8ZX3q84E5RTvIvc8IcPFBE4ey3lnGe+nE44OEGuLedCo9vn1Meg==", -+ "node_modules/@angular/cli/node_modules/rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { -- "@angular-eslint/bundled-angular-compiler": "13.2.0", -- "@typescript-eslint/experimental-utils": "5.17.0" -+ "glob": "^7.1.3" - }, -- "peerDependencies": { -- "eslint": "^7.0.0 || ^8.0.0", -- "typescript": "*" -+ "bin": { -+ "rimraf": "bin.js" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" - } - }, -- "node_modules/@angular/cli": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.1.tgz", -- "integrity": "sha512-0uwU8v3V/2s95X4cZT582J6upReT/ZNw/VAf4p4q51JN+BBvdCEb251xTF+TcOojyToFyJYvg8T28XSrsNsmTQ==", -+ "node_modules/@angular/cli/node_modules/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, -- "hasInstallScript": true, - "dependencies": { -- "@angular-devkit/architect": "0.1303.1", -- "@angular-devkit/core": "13.3.1", -- "@angular-devkit/schematics": "13.3.1", -- "@schematics/angular": "13.3.1", -- "@yarnpkg/lockfile": "1.1.0", -- "ansi-colors": "4.1.1", -- "debug": "4.3.3", -- "ini": "2.0.0", -- "inquirer": "8.2.0", -- "jsonc-parser": "3.0.0", -- "npm-package-arg": "8.1.5", -- "npm-pick-manifest": "6.1.1", -- "open": "8.4.0", -- "ora": "5.4.1", -- "pacote": "12.0.3", -- "resolve": "1.22.0", -- "semver": "7.3.5", -- "symbol-observable": "4.0.0", -- "uuid": "8.3.2" -+ "lru-cache": "^6.0.0" - }, - "bin": { -- "ng": "bin/ng.js" -+ "semver": "bin/semver.js" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -- "yarn": ">= 1.13.0" -+ "node": ">=10" - } - }, -- "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { -- "version": "0.1303.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.1.tgz", -- "integrity": "sha512-ppaLzNZPrqrI96ddgm1RuEALVpWZsmHbIPLDd0GBwhF6aOkwF0LpZHd5XyS4ktGFZPReiFIjWSVtqV5vaBdRsw==", -+ "node_modules/@angular/cli/node_modules/socks-proxy-agent": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", -+ "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { -- "@angular-devkit/core": "13.3.1", -- "rxjs": "6.6.7" -+ "agent-base": "^6.0.2", -+ "debug": "^4.3.3", -+ "socks": "^2.6.2" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -- "yarn": ">= 1.13.0" -+ "node": ">= 10" - } - }, -- "node_modules/@angular/cli/node_modules/@angular-devkit/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", -- "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", -+ "node_modules/@angular/cli/node_modules/ssri": { -+ "version": "10.0.5", -+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", -+ "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", - "dev": true, - "dependencies": { -- "ajv": "8.9.0", -- "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -+ "minipass": "^7.0.3" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", -- "yarn": ">= 1.13.0" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/node_modules/ssri/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/@angular/cli/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" - }, -- "peerDependencies": { -- "chokidar": "^3.5.2" -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@angular/cli/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" - }, -- "peerDependenciesMeta": { -- "chokidar": { -- "optional": true -- } -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular/cli/node_modules/rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ "node_modules/@angular/cli/node_modules/validate-npm-package-name": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", -+ "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "dependencies": { -- "tslib": "^1.9.0" -+ "builtins": "^5.0.0" - }, - "engines": { -- "npm": ">=2.0.0" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/@angular/cli/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/@angular/cli/node_modules/which": { -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", -+ "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", -+ "dev": true, -+ "dependencies": { -+ "isexe": "^2.0.0" -+ }, -+ "bin": { -+ "node-which": "bin/which.js" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } - }, - "node_modules/@angular/common": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.1.tgz", -- "integrity": "sha512-Var5ChoX8kZl9cbIWbW7Reb3Xz3t1c1XHwq1k+oK2fgrPdEfypY9n/6DxyXOtSEGb9aV7ZCaxcv2c5JUKR3OPg==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.9.tgz", -+ "integrity": "sha512-5Lh5KsxCkaoBDeSAghKNF5lCi0083ug4X2X7wnafsSd6Z3xt/rDjH9hDOP5SF5IDLtCVjJgHfs3cCLSTjRuNwg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { -- "@angular/core": "13.3.1", -+ "@angular/core": "16.2.9", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.1.tgz", -- "integrity": "sha512-ppJURRRDPZB6UaZctH6yBsznZXB7wZdCpfy5yo4lFE4k8rygfV80TmnrbJBZXNNq057VK48Bap1tsehFwckjog==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.9.tgz", -+ "integrity": "sha512-lh799pnbdvzTVShJHOY1JC6c1pwBsZC4UIgB3Itklo9dskGybQma/gP+lE6RhqM4FblNfaaBXGlCMUuY8HkmEQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^16.14.0 || >=18.10.0" -+ }, -+ "peerDependencies": { -+ "@angular/core": "16.2.9" -+ }, -+ "peerDependenciesMeta": { -+ "@angular/core": { -+ "optional": true -+ } - } - }, - "node_modules/@angular/compiler-cli": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.1.tgz", -- "integrity": "sha512-dImxLUITNwODlXaLcEACw10bxTiajWEQz3sLwhT/936UH+MNtM/RyLJ0M7xDvILDqq77W3psK5/M6F3M1mUpew==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.9.tgz", -+ "integrity": "sha512-ecH2oOlijJdDqioD9IfgdqJGoRRHI6hAx5rwBxIaYk01ywj13KzvXWPrXbCIupeWtV/XUZUlbwf47nlmL5gxZg==", - "dependencies": { -- "@babel/core": "^7.17.2", -+ "@babel/core": "7.22.5", -+ "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", -- "dependency-graph": "^0.11.0", -- "magic-string": "^0.26.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", -- "sourcemap-codec": "^1.4.8", - "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/main-ngcc.js" -+ "ngcc": "bundles/ngcc/index.js" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { -- "@angular/compiler": "13.3.1", -- "typescript": ">=4.4.2 <4.7" -- } -- }, -- "node_modules/@angular/compiler-cli/node_modules/@ampproject/remapping": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", -- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", -- "dependencies": { -- "@jridgewell/gen-mapping": "^0.1.0", -- "@jridgewell/trace-mapping": "^0.3.9" -- }, -- "engines": { -- "node": ">=6.0.0" -- } -- }, -- "node_modules/@angular/compiler-cli/node_modules/@babel/core": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", -- "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", -- "dependencies": { -- "@ampproject/remapping": "^2.1.0", -- "@babel/code-frame": "^7.16.7", -- "@babel/generator": "^7.18.2", -- "@babel/helper-compilation-targets": "^7.18.2", -- "@babel/helper-module-transforms": "^7.18.0", -- "@babel/helpers": "^7.18.2", -- "@babel/parser": "^7.18.5", -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.18.5", -- "@babel/types": "^7.18.4", -- "convert-source-map": "^1.7.0", -- "debug": "^4.1.0", -- "gensync": "^1.0.0-beta.2", -- "json5": "^2.2.1", -- "semver": "^6.3.0" -- }, -- "engines": { -- "node": ">=6.9.0" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/babel" -- } -- }, -- "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -- "bin": { -- "semver": "bin/semver.js" -- } -- }, -- "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", -- "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", -- "dependencies": { -- "@babel/types": "^7.18.2", -- "@jridgewell/gen-mapping": "^0.3.0", -- "jsesc": "^2.5.1" -- }, -- "engines": { -- "node": ">=6.9.0" -- } -- }, -- "node_modules/@angular/compiler-cli/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", -- "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", -- "dependencies": { -- "@jridgewell/set-array": "^1.0.0", -- "@jridgewell/sourcemap-codec": "^1.4.10", -- "@jridgewell/trace-mapping": "^0.3.9" -- }, -- "engines": { -- "node": ">=6.0.0" -- } -- }, -- "node_modules/@angular/compiler-cli/node_modules/magic-string": { -- "version": "0.26.2", -- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", -- "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", -- "dependencies": { -- "sourcemap-codec": "^1.4.8" -- }, -- "engines": { -- "node": ">=12" -+ "@angular/compiler": "16.2.9", -+ "typescript": ">=4.9.3 <5.2" - } - }, - "node_modules/@angular/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.1.tgz", -- "integrity": "sha512-ZU/B9jEiZ0jadRkRL9Sb2btzqgQ0ylx380PfRQaojVIsij/EO6+jOSHIo5upMIGu/OvkggfweShJGlylCOrOXA==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.9.tgz", -+ "integrity": "sha512-chvPX29ZBcMDuh7rLIgb0Cru6oJ/0FaqRzfOI3wT4W2F9W1HOlCtipovzmPYaUAmXBWfVP4EBO9TOWnpog0S0w==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", -- "zone.js": "~0.11.4" -+ "zone.js": "~0.13.0" - } - }, - "node_modules/@angular/forms": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.1.tgz", -- "integrity": "sha512-S6a/CEq1ht0vw2epuESiO551dsyLQTb/HuwceIBlsX2JqRRccynYlyx92gsDAo4hD2F0q+EeqZEPuq3oQIK43A==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.9.tgz", -+ "integrity": "sha512-rxlg2iNJNBH/uc7b5YqybfYc8BkLzzPv1d/nMsQUlY0O2UV2zwNRpcIiWbWd7+ZaKjcyPynVe9FsXC8wgWIABw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { -- "@angular/common": "13.3.1", -- "@angular/core": "13.3.1", -- "@angular/platform-browser": "13.3.1", -+ "@angular/common": "16.2.9", -+ "@angular/core": "16.2.9", -+ "@angular/platform-browser": "16.2.9", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/localize": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-13.3.1.tgz", -- "integrity": "sha512-1s51ufL28EZuDQJ6+dHvLA9yyR8O9dpqS1PFrtNo9OcD62/JiDI8CHQlAdk2kmU5eTmulDf39sSLbOsDUGPGuQ==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-16.2.9.tgz", -+ "integrity": "sha512-t5002NgBj+wjd81IXwg+yc2ypaBk6OWLAka1GXmWua3x7hwGw1yMtPFmzOE1cCNdXgWlluLxWclFjCUrAbGEww==", - "dependencies": { -- "@babel/core": "7.17.2", -- "glob": "7.2.0", -+ "@babel/core": "7.22.5", -+ "fast-glob": "3.3.0", - "yargs": "^17.2.1" - }, - "bin": { -@@ -1228,102 +1652,27 @@ - "localize-translate": "tools/bundles/src/translate/cli.js" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { -- "@angular/compiler": "13.3.1", -- "@angular/compiler-cli": "13.3.1" -- } -- }, -- "node_modules/@angular/localize/node_modules/@ampproject/remapping": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", -- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", -- "dependencies": { -- "@jridgewell/gen-mapping": "^0.1.0", -- "@jridgewell/trace-mapping": "^0.3.9" -- }, -- "engines": { -- "node": ">=6.0.0" -- } -- }, -- "node_modules/@angular/localize/node_modules/@babel/core": { -- "version": "7.17.2", -- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", -- "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", -- "dependencies": { -- "@ampproject/remapping": "^2.0.0", -- "@babel/code-frame": "^7.16.7", -- "@babel/generator": "^7.17.0", -- "@babel/helper-compilation-targets": "^7.16.7", -- "@babel/helper-module-transforms": "^7.16.7", -- "@babel/helpers": "^7.17.2", -- "@babel/parser": "^7.17.0", -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.17.0", -- "@babel/types": "^7.17.0", -- "convert-source-map": "^1.7.0", -- "debug": "^4.1.0", -- "gensync": "^1.0.0-beta.2", -- "json5": "^2.1.2", -- "semver": "^6.3.0" -- }, -- "engines": { -- "node": ">=6.9.0" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/babel" -- } -- }, -- "node_modules/@angular/localize/node_modules/@babel/generator": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", -- "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", -- "dependencies": { -- "@babel/types": "^7.18.2", -- "@jridgewell/gen-mapping": "^0.3.0", -- "jsesc": "^2.5.1" -- }, -- "engines": { -- "node": ">=6.9.0" -- } -- }, -- "node_modules/@angular/localize/node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", -- "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", -- "dependencies": { -- "@jridgewell/set-array": "^1.0.0", -- "@jridgewell/sourcemap-codec": "^1.4.10", -- "@jridgewell/trace-mapping": "^0.3.9" -- }, -- "engines": { -- "node": ">=6.0.0" -- } -- }, -- "node_modules/@angular/localize/node_modules/semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -- "bin": { -- "semver": "bin/semver.js" -+ "@angular/compiler": "16.2.9", -+ "@angular/compiler-cli": "16.2.9" - } - }, - "node_modules/@angular/platform-browser": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.1.tgz", -- "integrity": "sha512-WtyrkK0pLYj6w7pz3xk8zlhWL1NwGCWT+k7YxEjBOONCIXlZvCqWVzWo4nNQn9Xqxd+z1FVI0dssDwZm2TD+Eg==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.9.tgz", -+ "integrity": "sha512-9Je7+Jmx0AOyRzBBumraVJG3M0R6YbT4c9jTUbLGJCcPxwDI3/u2ZzvW3rBqpmrDaqLxN5f1LcZeTZx287QeqQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { -- "@angular/animations": "13.3.1", -- "@angular/common": "13.3.1", -- "@angular/core": "13.3.1" -+ "@angular/animations": "16.2.9", -+ "@angular/common": "16.2.9", -+ "@angular/core": "16.2.9" - }, - "peerDependenciesMeta": { - "@angular/animations": { -@@ -1332,43 +1681,43 @@ - } - }, - "node_modules/@angular/platform-browser-dynamic": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.1.tgz", -- "integrity": "sha512-TKV63SSyjrv5EsD03PloCbo8ZrJq5owkJ38E2FO/VvJAV3xu3Ey0SnoikNZMd8o3rh7+ocuT5K9Xcr4YuKVgEA==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.9.tgz", -+ "integrity": "sha512-ztpo0939vTZ/5CWVSvo41Yl6YPoTZ0If+yTrs7dk1ce0vFgaZXMlc+y5ZwjJIiMM5CvHbhL48Uk+HJNIojP98A==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { -- "@angular/common": "13.3.1", -- "@angular/compiler": "13.3.1", -- "@angular/core": "13.3.1", -- "@angular/platform-browser": "13.3.1" -+ "@angular/common": "16.2.9", -+ "@angular/compiler": "16.2.9", -+ "@angular/core": "16.2.9", -+ "@angular/platform-browser": "16.2.9" - } - }, - "node_modules/@angular/router": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.1.tgz", -- "integrity": "sha512-YpZLjI4UI9KK6x8yn41XMrBWZgVb5JyJR7KNhQXB7WiX8bVH5SZzFRkjR3qUxTGaxe6I7KFvzySwm4JTYNj+xw==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.9.tgz", -+ "integrity": "sha512-5vrJNMblTDx3WC3dtaqLddWNtR0P9iwpqffeZL1uobBIwP4hbJx+8Dos3TwxGR4hnopFKahoDQ5nC0NOQslyog==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { -- "@angular/common": "13.3.1", -- "@angular/core": "13.3.1", -- "@angular/platform-browser": "13.3.1", -+ "@angular/common": "16.2.9", -+ "@angular/core": "16.2.9", -+ "@angular/platform-browser": "16.2.9", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/service-worker": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-13.3.1.tgz", -- "integrity": "sha512-+RcAdh8fL/g5RFY6H20+A1oVaAO8idxHltCebm7dLldTE3GNoPT4er6PFhvTSyDyjko5ZL99kyFodO6Yic1Jnw==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-16.2.9.tgz", -+ "integrity": "sha512-f7CRhSyOkSW2SeV0uQTigcprA2mi3Xw5xfl/ywEYqpVvgJI0dNyoclgF9pVA37geozhKBK7mhmw/FKK22BNvlg==", - "dev": true, - "dependencies": { - "tslib": "^2.3.0" -@@ -1377,11 +1726,11 @@ - "ngsw-config": "ngsw-config.js" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { -- "@angular/common": "13.3.1", -- "@angular/core": "13.3.1" -+ "@angular/common": "16.2.9", -+ "@angular/core": "16.2.9" - } - }, - "node_modules/@assemblyscript/loader": { -@@ -1391,44 +1740,45 @@ - "dev": true - }, - "node_modules/@babel/code-frame": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", -- "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", -+ "version": "7.22.13", -+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", -+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dependencies": { -- "@babel/highlight": "^7.16.7" -+ "@babel/highlight": "^7.22.13", -+ "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", -- "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", -+ "version": "7.23.2", -+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", -+ "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { -- "version": "7.16.12", -- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", -- "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", -- "dependencies": { -- "@babel/code-frame": "^7.16.7", -- "@babel/generator": "^7.16.8", -- "@babel/helper-compilation-targets": "^7.16.7", -- "@babel/helper-module-transforms": "^7.16.7", -- "@babel/helpers": "^7.16.7", -- "@babel/parser": "^7.16.12", -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.16.10", -- "@babel/types": "^7.16.8", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", -+ "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", -+ "dependencies": { -+ "@ampproject/remapping": "^2.2.0", -+ "@babel/code-frame": "^7.22.5", -+ "@babel/generator": "^7.22.5", -+ "@babel/helper-compilation-targets": "^7.22.5", -+ "@babel/helper-module-transforms": "^7.22.5", -+ "@babel/helpers": "^7.22.5", -+ "@babel/parser": "^7.22.5", -+ "@babel/template": "^7.22.5", -+ "@babel/traverse": "^7.22.5", -+ "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", -- "json5": "^2.1.2", -- "semver": "^6.3.0", -- "source-map": "^0.5.0" -+ "json5": "^2.2.2", -+ "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" -@@ -1446,98 +1796,104 @@ - "semver": "bin/semver.js" - } - }, -- "node_modules/@babel/core/node_modules/source-map": { -- "version": "0.5.7", -- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/@babel/generator": { -- "version": "7.16.8", -- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", -- "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", -+ "version": "7.22.9", -+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", -+ "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", - "dependencies": { -- "@babel/types": "^7.16.8", -- "jsesc": "^2.5.1", -- "source-map": "^0.5.0" -+ "@babel/types": "^7.22.5", -+ "@jridgewell/gen-mapping": "^0.3.2", -+ "@jridgewell/trace-mapping": "^0.3.17", -+ "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, -- "node_modules/@babel/generator/node_modules/source-map": { -- "version": "0.5.7", -- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", -- "engines": { -- "node": ">=0.10.0" -+ "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", -+ "dependencies": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", -- "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", -+ "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.16.7" -+ "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", -- "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", -+ "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, - "dependencies": { -- "@babel/helper-explode-assignable-expression": "^7.16.7", -- "@babel/types": "^7.16.7" -+ "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", -- "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", -+ "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", - "dependencies": { -- "@babel/compat-data": "^7.17.10", -- "@babel/helper-validator-option": "^7.16.7", -- "browserslist": "^4.20.2", -- "semver": "^6.3.0" -+ "@babel/compat-data": "^7.22.9", -+ "@babel/helper-validator-option": "^7.22.15", -+ "browserslist": "^4.21.9", -+ "lru-cache": "^5.1.1", -+ "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" -- }, -- "peerDependencies": { -- "@babel/core": "^7.0.0" -+ } -+ }, -+ "node_modules/@babel/helper-compilation-targets/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/@babel/helper-compilation-targets/node_modules/semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -+ "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-compilation-targets/node_modules/yallist": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", -+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" -+ }, - "node_modules/@babel/helper-create-class-features-plugin": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", -- "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", -+ "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", - "dev": true, - "dependencies": { -- "@babel/helper-annotate-as-pure": "^7.16.7", -- "@babel/helper-environment-visitor": "^7.16.7", -- "@babel/helper-function-name": "^7.17.9", -- "@babel/helper-member-expression-to-functions": "^7.17.7", -- "@babel/helper-optimise-call-expression": "^7.16.7", -- "@babel/helper-replace-supers": "^7.16.7", -- "@babel/helper-split-export-declaration": "^7.16.7" -+ "@babel/helper-annotate-as-pure": "^7.22.5", -+ "@babel/helper-environment-visitor": "^7.22.5", -+ "@babel/helper-function-name": "^7.22.5", -+ "@babel/helper-member-expression-to-functions": "^7.22.15", -+ "@babel/helper-optimise-call-expression": "^7.22.5", -+ "@babel/helper-replace-supers": "^7.22.9", -+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", -+ "@babel/helper-split-export-declaration": "^7.22.6", -+ "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" -@@ -1546,14 +1902,24 @@ - "@babel/core": "^7.0.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.17.12", -- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", -- "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", -+ "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dev": true, - "dependencies": { -- "@babel/helper-annotate-as-pure": "^7.16.7", -- "regexpu-core": "^5.0.1" -+ "@babel/helper-annotate-as-pure": "^7.22.5", -+ "regexpu-core": "^5.3.1", -+ "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" -@@ -1562,254 +1928,290 @@ - "@babel/core": "^7.0.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.3.1", -- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", -- "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", -+ "version": "0.4.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", -+ "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", - "dev": true, - "dependencies": { -- "@babel/helper-compilation-targets": "^7.13.0", -- "@babel/helper-module-imports": "^7.12.13", -- "@babel/helper-plugin-utils": "^7.13.0", -- "@babel/traverse": "^7.13.0", -+ "@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", -- "semver": "^6.1.2" -+ "resolve": "^1.14.2" - }, - "peerDependencies": { -- "@babel/core": "^7.4.0-0" -- } -- }, -- "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -- "dev": true, -- "bin": { -- "semver": "bin/semver.js" -+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", -- "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", -+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, -- "node_modules/@babel/helper-explode-assignable-expression": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", -- "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", -- "dev": true, -+ "node_modules/@babel/helper-function-name": { -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", -+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { -- "@babel/types": "^7.16.7" -+ "@babel/template": "^7.22.15", -+ "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, -- "node_modules/@babel/helper-function-name": { -- "version": "7.17.9", -- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", -- "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", -+ "node_modules/@babel/helper-function-name/node_modules/@babel/template": { -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", -+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { -- "@babel/template": "^7.16.7", -- "@babel/types": "^7.17.0" -+ "@babel/code-frame": "^7.22.13", -+ "@babel/parser": "^7.22.15", -+ "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", -- "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", -+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { -- "@babel/types": "^7.16.7" -+ "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { -- "version": "7.17.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", -- "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", -+ "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dev": true, - "dependencies": { -- "@babel/types": "^7.17.0" -+ "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", -- "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", -+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dependencies": { -- "@babel/types": "^7.16.7" -+ "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", -- "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", -+ "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", - "dependencies": { -- "@babel/helper-environment-visitor": "^7.16.7", -- "@babel/helper-module-imports": "^7.16.7", -- "@babel/helper-simple-access": "^7.17.7", -- "@babel/helper-split-export-declaration": "^7.16.7", -- "@babel/helper-validator-identifier": "^7.16.7", -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.18.0", -- "@babel/types": "^7.18.0" -+ "@babel/helper-environment-visitor": "^7.22.20", -+ "@babel/helper-module-imports": "^7.22.15", -+ "@babel/helper-simple-access": "^7.22.5", -+ "@babel/helper-split-export-declaration": "^7.22.6", -+ "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", -- "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", -+ "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { -- "@babel/types": "^7.16.7" -+ "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", -- "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", -+ "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { -- "version": "7.16.8", -- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", -- "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", -+ "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dev": true, - "dependencies": { -- "@babel/helper-annotate-as-pure": "^7.16.7", -- "@babel/helper-wrap-function": "^7.16.8", -- "@babel/types": "^7.16.8" -+ "@babel/helper-annotate-as-pure": "^7.22.5", -+ "@babel/helper-environment-visitor": "^7.22.20", -+ "@babel/helper-wrap-function": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", -- "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", -+ "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dev": true, - "dependencies": { -- "@babel/helper-environment-visitor": "^7.18.2", -- "@babel/helper-member-expression-to-functions": "^7.17.7", -- "@babel/helper-optimise-call-expression": "^7.16.7", -- "@babel/traverse": "^7.18.2", -- "@babel/types": "^7.18.2" -+ "@babel/helper-environment-visitor": "^7.22.20", -+ "@babel/helper-member-expression-to-functions": "^7.22.15", -+ "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", -- "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", -+ "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dependencies": { -- "@babel/types": "^7.18.2" -+ "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { -- "version": "7.16.0", -- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", -- "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", -+ "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { -- "@babel/types": "^7.16.0" -+ "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", -- "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", -+ "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==", - "dependencies": { -- "@babel/types": "^7.16.7" -+ "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, -+ "node_modules/@babel/helper-string-parser": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", -+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", -+ "engines": { -+ "node": ">=6.9.0" -+ } -+ }, - "node_modules/@babel/helper-validator-identifier": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", -- "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", -+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", -- "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", -+ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { -- "version": "7.16.8", -- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", -- "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", -+ "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-function-name": "^7.22.5", -+ "@babel/template": "^7.22.15", -+ "@babel/types": "^7.22.19" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ } -+ }, -+ "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", -+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "dependencies": { -- "@babel/helper-function-name": "^7.16.7", -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.16.8", -- "@babel/types": "^7.16.8" -+ "@babel/code-frame": "^7.22.13", -+ "@babel/parser": "^7.22.15", -+ "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", -- "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", -+ "version": "7.23.2", -+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", -+ "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", -+ "dependencies": { -+ "@babel/template": "^7.22.15", -+ "@babel/traverse": "^7.23.2", -+ "@babel/types": "^7.23.0" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ } -+ }, -+ "node_modules/@babel/helpers/node_modules/@babel/template": { -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", -+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dependencies": { -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.18.2", -- "@babel/types": "^7.18.2" -+ "@babel/code-frame": "^7.22.13", -+ "@babel/parser": "^7.22.15", -+ "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", -- "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", -+ "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dependencies": { -- "@babel/helper-validator-identifier": "^7.16.7", -- "chalk": "^2.0.0", -+ "@babel/helper-validator-identifier": "^7.22.20", -+ "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { -@@ -1817,9 +2219,9 @@ - } - }, - "node_modules/@babel/parser": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", -- "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", -+ "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "bin": { - "parser": "bin/babel-parser.js" - }, -@@ -1828,12 +2230,12 @@ - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { -- "version": "7.17.12", -- "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.17.12.tgz", -- "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", -+ "version": "7.22.15", -+ "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.22.15.tgz", -+ "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -1843,14 +2245,14 @@ - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", -- "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", -+ "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", -- "@babel/plugin-proposal-optional-chaining": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", -+ "@babel/plugin-transform-optional-chaining": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" -@@ -1860,13 +2262,15 @@ - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { -- "version": "7.16.8", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", -- "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", -+ "version": "7.20.7", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", -+ "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", -+ "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.16.7", -- "@babel/helper-remap-async-to-generator": "^7.16.8", -+ "@babel/helper-environment-visitor": "^7.18.9", -+ "@babel/helper-plugin-utils": "^7.20.2", -+ "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { -@@ -1876,214 +2280,11 @@ - "@babel/core": "^7.0.0-0" - } - }, -- "node_modules/@babel/plugin-proposal-class-properties": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", -- "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", -- "dev": true, -- "dependencies": { -- "@babel/helper-create-class-features-plugin": "^7.17.12", -- "@babel/helper-plugin-utils": "^7.17.12" -- }, -- "engines": { -- "node": ">=6.9.0" -- }, -- "peerDependencies": { -- "@babel/core": "^7.0.0-0" -- } -- }, -- "node_modules/@babel/plugin-proposal-class-static-block": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", -- "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", -- "dev": true, -- "dependencies": { -- "@babel/helper-create-class-features-plugin": "^7.18.0", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/plugin-syntax-class-static-block": "^7.14.5" -- }, -- "engines": { -- "node": ">=6.9.0" -- }, -- "peerDependencies": { -- "@babel/core": "^7.12.0" -- } -- }, -- "node_modules/@babel/plugin-proposal-dynamic-import": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", -- "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", -- "dev": true, -- "dependencies": { -- "@babel/helper-plugin-utils": "^7.16.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-proposal-export-namespace-from": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", -- "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", -- "dev": true, -- "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@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-proposal-json-strings": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", -- "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", -- "dev": true, -- "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/plugin-syntax-json-strings": "^7.8.3" -- }, -- "engines": { -- "node": ">=6.9.0" -- }, -- "peerDependencies": { -- "@babel/core": "^7.0.0-0" -- } -- }, -- "node_modules/@babel/plugin-proposal-logical-assignment-operators": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", -- "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", -- "dev": true, -- "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@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-proposal-nullish-coalescing-operator": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", -- "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", -- "dev": true, -- "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@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-proposal-numeric-separator": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", -- "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", -- "dev": true, -- "dependencies": { -- "@babel/helper-plugin-utils": "^7.16.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-proposal-object-rest-spread": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", -- "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", -- "dev": true, -- "dependencies": { -- "@babel/compat-data": "^7.17.10", -- "@babel/helper-compilation-targets": "^7.17.10", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/plugin-syntax-object-rest-spread": "^7.8.3", -- "@babel/plugin-transform-parameters": "^7.17.12" -- }, -- "engines": { -- "node": ">=6.9.0" -- }, -- "peerDependencies": { -- "@babel/core": "^7.0.0-0" -- } -- }, -- "node_modules/@babel/plugin-proposal-optional-catch-binding": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", -- "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", -- "dev": true, -- "dependencies": { -- "@babel/helper-plugin-utils": "^7.16.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-proposal-optional-chaining": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", -- "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", -- "dev": true, -- "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", -- "@babel/plugin-syntax-optional-chaining": "^7.8.3" -- }, -- "engines": { -- "node": ">=6.9.0" -- }, -- "peerDependencies": { -- "@babel/core": "^7.0.0-0" -- } -- }, -- "node_modules/@babel/plugin-proposal-private-methods": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", -- "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", -- "dev": true, -- "dependencies": { -- "@babel/helper-create-class-features-plugin": "^7.17.12", -- "@babel/helper-plugin-utils": "^7.17.12" -- }, -- "engines": { -- "node": ">=6.9.0" -- }, -- "peerDependencies": { -- "@babel/core": "^7.0.0-0" -- } -- }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", -- "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", -+ "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, -- "dependencies": { -- "@babel/helper-annotate-as-pure": "^7.16.7", -- "@babel/helper-create-class-features-plugin": "^7.17.12", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/plugin-syntax-private-property-in-object": "^7.14.5" -- }, - "engines": { - "node": ">=6.9.0" - }, -@@ -2092,13 +2293,14 @@ - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", -- "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", -+ "version": "7.18.6", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", -+ "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", -+ "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", - "dev": true, - "dependencies": { -- "@babel/helper-create-regexp-features-plugin": "^7.17.12", -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-create-regexp-features-plugin": "^7.18.6", -+ "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" -@@ -2182,6 +2384,36 @@ - "@babel/core": "^7.0.0-0" - } - }, -+ "node_modules/@babel/plugin-syntax-import-assertions": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", -+ "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-syntax-import-attributes": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", -+ "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "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", -@@ -2206,6 +2438,21 @@ - "@babel/core": "^7.0.0-0" - } - }, -+ "node_modules/@babel/plugin-syntax-jsx": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", -+ "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.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", -@@ -2309,12 +2556,12 @@ - } - }, - "node_modules/@babel/plugin-syntax-typescript": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", -- "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", -+ "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2323,13 +2570,47 @@ - "@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.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", -- "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", -+ "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-transform-async-generator-functions": { -+ "version": "7.23.2", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", -+ "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@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" -@@ -2339,14 +2620,14 @@ - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { -- "version": "7.16.8", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", -- "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", -+ "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { -- "@babel/helper-module-imports": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7", -- "@babel/helper-remap-async-to-generator": "^7.16.8" -+ "@babel/helper-module-imports": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2356,12 +2637,12 @@ - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", -- "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", -+ "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2371,12 +2652,28 @@ - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { -- "version": "7.18.4", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", -- "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", -+ "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-transform-class-properties": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", -+ "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-create-class-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2385,19 +2682,37 @@ - "@babel/core": "^7.0.0-0" - } - }, -+ "node_modules/@babel/plugin-transform-class-static-block": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", -+ "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-create-class-features-plugin": "^7.22.11", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@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.18.4", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", -- "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", -- "dev": true, -- "dependencies": { -- "@babel/helper-annotate-as-pure": "^7.16.7", -- "@babel/helper-environment-visitor": "^7.18.2", -- "@babel/helper-function-name": "^7.17.9", -- "@babel/helper-optimise-call-expression": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-replace-supers": "^7.18.2", -- "@babel/helper-split-export-declaration": "^7.16.7", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", -+ "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-annotate-as-pure": "^7.22.5", -+ "@babel/helper-compilation-targets": "^7.22.15", -+ "@babel/helper-environment-visitor": "^7.22.5", -+ "@babel/helper-function-name": "^7.22.5", -+ "@babel/helper-optimise-call-expression": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-replace-supers": "^7.22.9", -+ "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { -@@ -2408,12 +2723,13 @@ - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", -- "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", -+ "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2423,12 +2739,12 @@ - } - }, - "node_modules/@babel/plugin-transform-destructuring": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", -- "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", -+ "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2438,13 +2754,13 @@ - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", -- "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", -+ "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { -- "@babel/helper-create-regexp-features-plugin": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-create-regexp-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2454,12 +2770,28 @@ - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", -- "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", -+ "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-transform-dynamic-import": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", -+ "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" -@@ -2469,13 +2801,29 @@ - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", -- "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", -+ "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-transform-export-namespace-from": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", -+ "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", - "dev": true, - "dependencies": { -- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" -@@ -2485,12 +2833,12 @@ - } - }, - "node_modules/@babel/plugin-transform-for-of": { -- "version": "7.18.1", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", -- "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", -+ "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2500,14 +2848,30 @@ - } - }, - "node_modules/@babel/plugin-transform-function-name": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", -- "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", -+ "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-compilation-targets": "^7.22.5", -+ "@babel/helper-function-name": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-transform-json-strings": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", -+ "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", - "dev": true, - "dependencies": { -- "@babel/helper-compilation-targets": "^7.16.7", -- "@babel/helper-function-name": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" -@@ -2517,12 +2881,28 @@ - } - }, - "node_modules/@babel/plugin-transform-literals": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", -- "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", -+ "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-transform-logical-assignment-operators": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", -+ "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" -@@ -2532,12 +2912,12 @@ - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", -- "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", -+ "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2547,14 +2927,13 @@ - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", -- "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", -+ "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", - "dev": true, - "dependencies": { -- "@babel/helper-module-transforms": "^7.18.0", -- "@babel/helper-plugin-utils": "^7.17.12", -- "babel-plugin-dynamic-import-node": "^2.3.3" -+ "@babel/helper-module-transforms": "^7.23.0", -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2564,15 +2943,14 @@ - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", -- "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", -+ "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", - "dev": true, - "dependencies": { -- "@babel/helper-module-transforms": "^7.18.0", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-simple-access": "^7.18.2", -- "babel-plugin-dynamic-import-node": "^2.3.3" -+ "@babel/helper-module-transforms": "^7.23.0", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2582,16 +2960,15 @@ - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", -- "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", -+ "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", - "dev": true, - "dependencies": { -- "@babel/helper-hoist-variables": "^7.16.7", -- "@babel/helper-module-transforms": "^7.18.0", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-validator-identifier": "^7.16.7", -- "babel-plugin-dynamic-import-node": "^2.3.3" -+ "@babel/helper-hoist-variables": "^7.22.5", -+ "@babel/helper-module-transforms": "^7.23.0", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" -@@ -2601,13 +2978,13 @@ - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", -- "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", -+ "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { -- "@babel/helper-module-transforms": "^7.18.0", -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-module-transforms": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2617,13 +2994,13 @@ - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", -- "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", -+ "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { -- "@babel/helper-create-regexp-features-plugin": "^7.17.12", -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-create-regexp-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2633,12 +3010,63 @@ - } - }, - "node_modules/@babel/plugin-transform-new-target": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", -- "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", -+ "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", -+ "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@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.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", -+ "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@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.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", -+ "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", -+ "dev": true, -+ "dependencies": { -+ "@babel/compat-data": "^7.22.9", -+ "@babel/helper-compilation-targets": "^7.22.15", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", -+ "@babel/plugin-transform-parameters": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" -@@ -2648,13 +3076,46 @@ - } - }, - "node_modules/@babel/plugin-transform-object-super": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", -- "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", -+ "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-replace-supers": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-transform-optional-catch-binding": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", -+ "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@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.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", -+ "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.16.7", -- "@babel/helper-replace-supers": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", -+ "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" -@@ -2664,12 +3125,46 @@ - } - }, - "node_modules/@babel/plugin-transform-parameters": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", -- "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", -+ "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-transform-private-methods": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", -+ "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-create-class-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-transform-private-property-in-object": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", -+ "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-annotate-as-pure": "^7.22.5", -+ "@babel/helper-create-class-features-plugin": "^7.22.11", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2679,12 +3174,12 @@ - } - }, - "node_modules/@babel/plugin-transform-property-literals": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", -- "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", -+ "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2694,13 +3189,13 @@ - } - }, - "node_modules/@babel/plugin-transform-regenerator": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", -- "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", -+ "version": "7.22.10", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", -+ "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "regenerator-transform": "^0.15.0" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" -@@ -2710,12 +3205,12 @@ - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", -- "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", -+ "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2725,17 +3220,17 @@ - } - }, - "node_modules/@babel/plugin-transform-runtime": { -- "version": "7.16.10", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz", -- "integrity": "sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w==", -+ "version": "7.22.9", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz", -+ "integrity": "sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==", - "dev": true, - "dependencies": { -- "@babel/helper-module-imports": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7", -- "babel-plugin-polyfill-corejs2": "^0.3.0", -- "babel-plugin-polyfill-corejs3": "^0.5.0", -- "babel-plugin-polyfill-regenerator": "^0.3.0", -- "semver": "^6.3.0" -+ "@babel/helper-module-imports": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "babel-plugin-polyfill-corejs2": "^0.4.4", -+ "babel-plugin-polyfill-corejs3": "^0.8.2", -+ "babel-plugin-polyfill-regenerator": "^0.5.1", -+ "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" -@@ -2745,21 +3240,21 @@ - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -+ "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.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", -- "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", -+ "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2769,13 +3264,13 @@ - } - }, - "node_modules/@babel/plugin-transform-spread": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", -- "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", -+ "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2785,12 +3280,12 @@ - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", -- "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", -+ "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2800,12 +3295,12 @@ - } - }, - "node_modules/@babel/plugin-transform-template-literals": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", -- "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", -+ "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2815,12 +3310,12 @@ - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", -- "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", -+ "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2830,12 +3325,28 @@ - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", -- "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", -+ "version": "7.22.10", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", -+ "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, - "dependencies": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0-0" -+ } -+ }, -+ "node_modules/@babel/plugin-transform-unicode-property-regex": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", -+ "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-create-regexp-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2845,13 +3356,13 @@ - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", -- "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", -+ "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { -- "@babel/helper-create-regexp-features-plugin": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-create-regexp-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" -@@ -2860,38 +3371,43 @@ - "@babel/core": "^7.0.0-0" - } - }, -+ "node_modules/@babel/plugin-transform-unicode-sets-regex": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", -+ "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", -+ "dev": true, -+ "dependencies": { -+ "@babel/helper-create-regexp-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ }, -+ "peerDependencies": { -+ "@babel/core": "^7.0.0" -+ } -+ }, - "node_modules/@babel/preset-env": { -- "version": "7.16.11", -- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", -- "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", -- "dev": true, -- "dependencies": { -- "@babel/compat-data": "^7.16.8", -- "@babel/helper-compilation-targets": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7", -- "@babel/helper-validator-option": "^7.16.7", -- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", -- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", -- "@babel/plugin-proposal-async-generator-functions": "^7.16.8", -- "@babel/plugin-proposal-class-properties": "^7.16.7", -- "@babel/plugin-proposal-class-static-block": "^7.16.7", -- "@babel/plugin-proposal-dynamic-import": "^7.16.7", -- "@babel/plugin-proposal-export-namespace-from": "^7.16.7", -- "@babel/plugin-proposal-json-strings": "^7.16.7", -- "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", -- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", -- "@babel/plugin-proposal-numeric-separator": "^7.16.7", -- "@babel/plugin-proposal-object-rest-spread": "^7.16.7", -- "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", -- "@babel/plugin-proposal-optional-chaining": "^7.16.7", -- "@babel/plugin-proposal-private-methods": "^7.16.11", -- "@babel/plugin-proposal-private-property-in-object": "^7.16.7", -- "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", -+ "version": "7.22.9", -+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", -+ "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", -+ "dev": true, -+ "dependencies": { -+ "@babel/compat-data": "^7.22.9", -+ "@babel/helper-compilation-targets": "^7.22.9", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-validator-option": "^7.22.5", -+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", -+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", -+ "@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.22.5", -+ "@babel/plugin-syntax-import-attributes": "^7.22.5", -+ "@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", -@@ -2901,45 +3417,62 @@ - "@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-transform-arrow-functions": "^7.16.7", -- "@babel/plugin-transform-async-to-generator": "^7.16.8", -- "@babel/plugin-transform-block-scoped-functions": "^7.16.7", -- "@babel/plugin-transform-block-scoping": "^7.16.7", -- "@babel/plugin-transform-classes": "^7.16.7", -- "@babel/plugin-transform-computed-properties": "^7.16.7", -- "@babel/plugin-transform-destructuring": "^7.16.7", -- "@babel/plugin-transform-dotall-regex": "^7.16.7", -- "@babel/plugin-transform-duplicate-keys": "^7.16.7", -- "@babel/plugin-transform-exponentiation-operator": "^7.16.7", -- "@babel/plugin-transform-for-of": "^7.16.7", -- "@babel/plugin-transform-function-name": "^7.16.7", -- "@babel/plugin-transform-literals": "^7.16.7", -- "@babel/plugin-transform-member-expression-literals": "^7.16.7", -- "@babel/plugin-transform-modules-amd": "^7.16.7", -- "@babel/plugin-transform-modules-commonjs": "^7.16.8", -- "@babel/plugin-transform-modules-systemjs": "^7.16.7", -- "@babel/plugin-transform-modules-umd": "^7.16.7", -- "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", -- "@babel/plugin-transform-new-target": "^7.16.7", -- "@babel/plugin-transform-object-super": "^7.16.7", -- "@babel/plugin-transform-parameters": "^7.16.7", -- "@babel/plugin-transform-property-literals": "^7.16.7", -- "@babel/plugin-transform-regenerator": "^7.16.7", -- "@babel/plugin-transform-reserved-words": "^7.16.7", -- "@babel/plugin-transform-shorthand-properties": "^7.16.7", -- "@babel/plugin-transform-spread": "^7.16.7", -- "@babel/plugin-transform-sticky-regex": "^7.16.7", -- "@babel/plugin-transform-template-literals": "^7.16.7", -- "@babel/plugin-transform-typeof-symbol": "^7.16.7", -- "@babel/plugin-transform-unicode-escapes": "^7.16.7", -- "@babel/plugin-transform-unicode-regex": "^7.16.7", -+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", -+ "@babel/plugin-transform-arrow-functions": "^7.22.5", -+ "@babel/plugin-transform-async-generator-functions": "^7.22.7", -+ "@babel/plugin-transform-async-to-generator": "^7.22.5", -+ "@babel/plugin-transform-block-scoped-functions": "^7.22.5", -+ "@babel/plugin-transform-block-scoping": "^7.22.5", -+ "@babel/plugin-transform-class-properties": "^7.22.5", -+ "@babel/plugin-transform-class-static-block": "^7.22.5", -+ "@babel/plugin-transform-classes": "^7.22.6", -+ "@babel/plugin-transform-computed-properties": "^7.22.5", -+ "@babel/plugin-transform-destructuring": "^7.22.5", -+ "@babel/plugin-transform-dotall-regex": "^7.22.5", -+ "@babel/plugin-transform-duplicate-keys": "^7.22.5", -+ "@babel/plugin-transform-dynamic-import": "^7.22.5", -+ "@babel/plugin-transform-exponentiation-operator": "^7.22.5", -+ "@babel/plugin-transform-export-namespace-from": "^7.22.5", -+ "@babel/plugin-transform-for-of": "^7.22.5", -+ "@babel/plugin-transform-function-name": "^7.22.5", -+ "@babel/plugin-transform-json-strings": "^7.22.5", -+ "@babel/plugin-transform-literals": "^7.22.5", -+ "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", -+ "@babel/plugin-transform-member-expression-literals": "^7.22.5", -+ "@babel/plugin-transform-modules-amd": "^7.22.5", -+ "@babel/plugin-transform-modules-commonjs": "^7.22.5", -+ "@babel/plugin-transform-modules-systemjs": "^7.22.5", -+ "@babel/plugin-transform-modules-umd": "^7.22.5", -+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", -+ "@babel/plugin-transform-new-target": "^7.22.5", -+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", -+ "@babel/plugin-transform-numeric-separator": "^7.22.5", -+ "@babel/plugin-transform-object-rest-spread": "^7.22.5", -+ "@babel/plugin-transform-object-super": "^7.22.5", -+ "@babel/plugin-transform-optional-catch-binding": "^7.22.5", -+ "@babel/plugin-transform-optional-chaining": "^7.22.6", -+ "@babel/plugin-transform-parameters": "^7.22.5", -+ "@babel/plugin-transform-private-methods": "^7.22.5", -+ "@babel/plugin-transform-private-property-in-object": "^7.22.5", -+ "@babel/plugin-transform-property-literals": "^7.22.5", -+ "@babel/plugin-transform-regenerator": "^7.22.5", -+ "@babel/plugin-transform-reserved-words": "^7.22.5", -+ "@babel/plugin-transform-shorthand-properties": "^7.22.5", -+ "@babel/plugin-transform-spread": "^7.22.5", -+ "@babel/plugin-transform-sticky-regex": "^7.22.5", -+ "@babel/plugin-transform-template-literals": "^7.22.5", -+ "@babel/plugin-transform-typeof-symbol": "^7.22.5", -+ "@babel/plugin-transform-unicode-escapes": "^7.22.5", -+ "@babel/plugin-transform-unicode-property-regex": "^7.22.5", -+ "@babel/plugin-transform-unicode-regex": "^7.22.5", -+ "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", -- "@babel/types": "^7.16.8", -- "babel-plugin-polyfill-corejs2": "^0.3.0", -- "babel-plugin-polyfill-corejs3": "^0.5.0", -- "babel-plugin-polyfill-regenerator": "^0.3.0", -- "core-js-compat": "^3.20.2", -- "semver": "^6.3.0" -+ "@babel/types": "^7.22.5", -+ "babel-plugin-polyfill-corejs2": "^0.4.4", -+ "babel-plugin-polyfill-corejs3": "^0.8.2", -+ "babel-plugin-polyfill-regenerator": "^0.5.1", -+ "core-js-compat": "^3.31.0", -+ "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" -@@ -2949,18 +3482,18 @@ - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -+ "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.5", -- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", -- "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", -+ "version": "0.1.6", -+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", -+ "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", -@@ -2970,47 +3503,53 @@ - "esutils": "^2.0.2" - }, - "peerDependencies": { -- "@babel/core": "^7.0.0-0" -+ "@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.16.7", -- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", -- "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", -+ "version": "7.22.6", -+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", -+ "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "dependencies": { -- "regenerator-runtime": "^0.13.4" -+ "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", -- "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", -+ "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dependencies": { -- "@babel/code-frame": "^7.16.7", -- "@babel/parser": "^7.16.7", -- "@babel/types": "^7.16.7" -+ "@babel/code-frame": "^7.22.5", -+ "@babel/parser": "^7.22.5", -+ "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", -- "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", -- "dependencies": { -- "@babel/code-frame": "^7.16.7", -- "@babel/generator": "^7.18.2", -- "@babel/helper-environment-visitor": "^7.18.2", -- "@babel/helper-function-name": "^7.17.9", -- "@babel/helper-hoist-variables": "^7.16.7", -- "@babel/helper-split-export-declaration": "^7.16.7", -- "@babel/parser": "^7.18.5", -- "@babel/types": "^7.18.4", -+ "version": "7.23.2", -+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", -+ "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", -+ "dependencies": { -+ "@babel/code-frame": "^7.22.13", -+ "@babel/generator": "^7.23.0", -+ "@babel/helper-environment-visitor": "^7.22.20", -+ "@babel/helper-function-name": "^7.23.0", -+ "@babel/helper-hoist-variables": "^7.22.5", -+ "@babel/helper-split-export-declaration": "^7.22.6", -+ "@babel/parser": "^7.23.0", -+ "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, -@@ -3019,37 +3558,35 @@ - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", -- "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", -+ "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "dependencies": { -- "@babel/types": "^7.18.2", -- "@jridgewell/gen-mapping": "^0.3.0", -+ "@babel/types": "^7.23.0", -+ "@jridgewell/gen-mapping": "^0.3.2", -+ "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, -- "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", -- "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", -+ "node_modules/@babel/traverse/node_modules/@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", - "dependencies": { -- "@jridgewell/set-array": "^1.0.0", -- "@jridgewell/sourcemap-codec": "^1.4.10", -- "@jridgewell/trace-mapping": "^0.3.9" -- }, -- "engines": { -- "node": ">=6.0.0" -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@babel/types": { -- "version": "7.18.4", -- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", -- "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", -+ "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "dependencies": { -- "@babel/helper-validator-identifier": "^7.16.7", -+ "@babel/helper-string-parser": "^7.22.5", -+ "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { -@@ -3116,38 +3653,6 @@ - "node": ">=12" - } - }, -- "node_modules/@csstools/postcss-progressive-custom-properties": { -- "version": "1.3.0", -- "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", -- "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", -- "dev": true, -- "dependencies": { -- "postcss-value-parser": "^4.2.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.3" -- } -- }, -- "node_modules/@csstools/selector-specificity": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz", -- "integrity": "sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA==", -- "dev": true, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/csstools" -- }, -- "peerDependencies": { -- "postcss": "^8.3", -- "postcss-selector-parser": "^6.0.10" -- } -- }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", -@@ -3160,24 +3665,400 @@ - } - }, - "node_modules/@discoveryjs/json-ext": { -- "version": "0.5.6", -- "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", -- "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", -+ "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/@esbuild/android-arm": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", -+ "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", -+ "cpu": [ -+ "arm" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "android" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/android-arm64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", -+ "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", -+ "cpu": [ -+ "arm64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "android" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/android-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", -+ "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", -+ "cpu": [ -+ "x64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "android" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/darwin-arm64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", -+ "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", -+ "cpu": [ -+ "arm64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "darwin" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/darwin-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", -+ "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", -+ "cpu": [ -+ "x64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "darwin" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/freebsd-arm64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", -+ "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", -+ "cpu": [ -+ "arm64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "freebsd" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/freebsd-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", -+ "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", -+ "cpu": [ -+ "x64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "freebsd" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/linux-arm": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", -+ "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", -+ "cpu": [ -+ "arm" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/linux-arm64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", -+ "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", -+ "cpu": [ -+ "arm64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/linux-ia32": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", -+ "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", -+ "cpu": [ -+ "ia32" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/linux-loong64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", -+ "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", -+ "cpu": [ -+ "loong64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/linux-mips64el": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", -+ "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", -+ "cpu": [ -+ "mips64el" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/linux-ppc64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", -+ "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", -+ "cpu": [ -+ "ppc64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/linux-riscv64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", -+ "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", -+ "cpu": [ -+ "riscv64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/linux-s390x": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", -+ "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", -+ "cpu": [ -+ "s390x" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/linux-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", -+ "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", -+ "cpu": [ -+ "x64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/netbsd-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", -+ "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", -+ "cpu": [ -+ "x64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "netbsd" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/openbsd-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", -+ "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", -+ "cpu": [ -+ "x64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "openbsd" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/sunos-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", -+ "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", -+ "cpu": [ -+ "x64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "sunos" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/win32-arm64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", -+ "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", -+ "cpu": [ -+ "arm64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "win32" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/win32-ia32": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", -+ "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", -+ "cpu": [ -+ "ia32" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "win32" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@esbuild/win32-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", -+ "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", -+ "cpu": [ -+ "x64" -+ ], -+ "dev": true, -+ "optional": true, -+ "os": [ -+ "win32" -+ ], -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@eslint-community/eslint-utils": { -+ "version": "4.4.0", -+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", -+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", -+ "dev": true, -+ "dependencies": { -+ "eslint-visitor-keys": "^3.3.0" -+ }, -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "peerDependencies": { -+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" -+ } -+ }, -+ "node_modules/@eslint-community/regexpp": { -+ "version": "4.10.0", -+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", -+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", -+ "dev": true, -+ "engines": { -+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" -+ } -+ }, - "node_modules/@eslint/eslintrc": { -- "version": "1.3.0", -- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", -- "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", -+ "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", -- "espree": "^9.3.2", -- "globals": "^13.15.0", -+ "espree": "^9.6.0", -+ "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", -@@ -3186,6 +4067,9 @@ - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { -@@ -3211,9 +4095,9 @@ - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { -- "version": "13.15.0", -- "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", -- "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", -+ "version": "13.23.0", -+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", -+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" -@@ -3267,6 +4151,15 @@ - "url": "https://github.com/sponsors/sindresorhus" - } - }, -+ "node_modules/@eslint/js": { -+ "version": "8.51.0", -+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", -+ "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", -+ "dev": true, -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ } -+ }, - "node_modules/@faker-js/faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", -@@ -3274,53 +4167,45 @@ - "dev": true - }, - "node_modules/@fortawesome/angular-fontawesome": { -- "version": "0.10.2", -- "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.10.2.tgz", -- "integrity": "sha512-VxsCAo2lK74KwD236AKAhGpiethfz9yqCViIG2iRAZqgNmuZ6ihwumjbLW32n6hV4fFvCqLcHmpngoEl3TNiOg==", -+ "version": "0.13.0", -+ "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.13.0.tgz", -+ "integrity": "sha512-gzSPRdveOXNO7NIiMgTyB46aiHG0i98KinnAEqHXi8qzraM/kCcHn/0y3f4MhemX6kftwsFli0IU8RyHmtXlSQ==", - "dependencies": { -- "tslib": "^2.3.1" -+ "tslib": "^2.4.1" - }, - "peerDependencies": { -+ "@angular/core": "^16.0.0", - "@fortawesome/fontawesome-svg-core": "~1.2.27 || ~1.3.0-beta2 || ^6.1.0" - } - }, - "node_modules/@fortawesome/fontawesome-common-types": { -- "version": "6.1.1", -- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz", -- "integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA==", -- "hasInstallScript": true, -- "engines": { -- "node": ">=6" -- } -- }, -- "node_modules/@fortawesome/fontawesome-free": { -- "version": "6.1.1", -- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.1.1.tgz", -- "integrity": "sha512-J/3yg2AIXc9wznaVqpHVX3Wa5jwKovVF0AMYSnbmcXTiL3PpRPfF58pzWucCwEiCJBp+hCNRLWClTomD8SseKg==", -+ "version": "6.4.2", -+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", -+ "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==", - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { -- "version": "6.1.1", -- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.1.1.tgz", -- "integrity": "sha512-NCg0w2YIp81f4V6cMGD9iomfsIj7GWrqmsa0ZsPh59G7PKiGN1KymZNxmF00ssuAlo/VZmpK6xazsGOwzKYUMg==", -+ "version": "6.4.2", -+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", -+ "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", - "hasInstallScript": true, - "dependencies": { -- "@fortawesome/fontawesome-common-types": "6.1.1" -+ "@fortawesome/fontawesome-common-types": "6.4.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-solid-svg-icons": { -- "version": "6.1.1", -- "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.1.1.tgz", -- "integrity": "sha512-0/5exxavOhI/D4Ovm2r3vxNojGZioPwmFrKg0ZUH69Q68uFhFPs6+dhAToh6VEQBntxPRYPuT5Cg1tpNa9JUPg==", -+ "version": "6.4.2", -+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz", -+ "integrity": "sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==", - "hasInstallScript": true, - "dependencies": { -- "@fortawesome/fontawesome-common-types": "6.1.1" -+ "@fortawesome/fontawesome-common-types": "6.4.2" - }, - "engines": { - "node": ">=6" -@@ -3348,29 +4233,145 @@ - } - }, - "node_modules/@humanwhocodes/config-array": { -- "version": "0.9.5", -- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", -- "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", -+ "version": "0.11.13", -+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", -+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dev": true, - "dependencies": { -- "@humanwhocodes/object-schema": "^1.2.1", -+ "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", -- "minimatch": "^3.0.4" -+ "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, -+ "node_modules/@humanwhocodes/config-array/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/@humanwhocodes/module-importer": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", -+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", -+ "dev": true, -+ "engines": { -+ "node": ">=12.22" -+ }, -+ "funding": { -+ "type": "github", -+ "url": "https://github.com/sponsors/nzakas" -+ } -+ }, - "node_modules/@humanwhocodes/object-schema": { -- "version": "1.2.1", -- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", -- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", -+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true - }, -- "node_modules/@ibm/plex": { -- "version": "6.0.2", -- "resolved": "https://registry.npmjs.org/@ibm/plex/-/plex-6.0.2.tgz", -- "integrity": "sha512-0lBo4ju7/6B58cxmACCPVEGt9xjQ8+3lggRrW7pJOWxKAFsQ21whifwES5q3eJ5wDfL3QlsvMF4YXnOQPYaNdQ==" -+ "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/@isaacs/string-locale-compare": { - "version": "1.1.0", -@@ -3404,20 +4405,20 @@ - } - }, - "node_modules/@jest/console": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", -- "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", -+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "dependencies": { -- "@jest/types": "^27.5.1", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", -- "jest-message-util": "^27.5.1", -- "jest-util": "^27.5.1", -+ "jest-message-util": "^29.7.0", -+ "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { -@@ -3491,42 +4492,42 @@ - } - }, - "node_modules/@jest/core": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", -- "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", -+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { -- "@jest/console": "^27.5.1", -- "@jest/reporters": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/console": "^29.7.0", -+ "@jest/reporters": "^29.7.0", -+ "@jest/test-result": "^29.7.0", -+ "@jest/transform": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", -- "emittery": "^0.8.1", -+ "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", -- "jest-changed-files": "^27.5.1", -- "jest-config": "^27.5.1", -- "jest-haste-map": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-regex-util": "^27.5.1", -- "jest-resolve": "^27.5.1", -- "jest-resolve-dependencies": "^27.5.1", -- "jest-runner": "^27.5.1", -- "jest-runtime": "^27.5.1", -- "jest-snapshot": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-validate": "^27.5.1", -- "jest-watcher": "^27.5.1", -+ "jest-changed-files": "^29.7.0", -+ "jest-config": "^29.7.0", -+ "jest-haste-map": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-regex-util": "^29.6.3", -+ "jest-resolve": "^29.7.0", -+ "jest-resolve-dependencies": "^29.7.0", -+ "jest-runner": "^29.7.0", -+ "jest-runtime": "^29.7.0", -+ "jest-snapshot": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jest-validate": "^29.7.0", -+ "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", -- "rimraf": "^3.0.0", -+ "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" -@@ -3608,85 +4609,110 @@ - } - }, - "node_modules/@jest/environment": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", -- "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", -+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "dependencies": { -- "@jest/fake-timers": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/fake-timers": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/node": "*", -- "jest-mock": "^27.5.1" -+ "jest-mock": "^29.7.0" -+ }, -+ "engines": { -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@jest/expect": { -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", -+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", -+ "dev": true, -+ "dependencies": { -+ "expect": "^29.7.0", -+ "jest-snapshot": "^29.7.0" -+ }, -+ "engines": { -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@jest/expect-utils": { -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", -+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", -+ "dev": true, -+ "dependencies": { -+ "jest-get-type": "^29.6.3" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", -- "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", -+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "dependencies": { -- "@jest/types": "^27.5.1", -- "@sinonjs/fake-timers": "^8.0.1", -+ "@jest/types": "^29.6.3", -+ "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", -- "jest-message-util": "^27.5.1", -- "jest-mock": "^27.5.1", -- "jest-util": "^27.5.1" -+ "jest-message-util": "^29.7.0", -+ "jest-mock": "^29.7.0", -+ "jest-util": "^29.7.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", -- "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", -+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "dependencies": { -- "@jest/environment": "^27.5.1", -- "@jest/types": "^27.5.1", -- "expect": "^27.5.1" -+ "@jest/environment": "^29.7.0", -+ "@jest/expect": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "jest-mock": "^29.7.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", -- "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", -+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", -- "@jest/console": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/console": "^29.7.0", -+ "@jest/test-result": "^29.7.0", -+ "@jest/transform": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", -- "glob": "^7.1.2", -+ "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", -- "istanbul-lib-instrument": "^5.1.0", -+ "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", -- "jest-haste-map": "^27.5.1", -- "jest-resolve": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-worker": "^27.5.1", -+ "jest-message-util": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jest-worker": "^29.7.0", - "slash": "^3.0.0", -- "source-map": "^0.6.0", - "string-length": "^4.0.1", -- "terminal-link": "^2.0.0", -- "v8-to-istanbul": "^8.1.0" -+ "strip-ansi": "^6.0.0", -+ "v8-to-istanbul": "^9.0.1" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" -@@ -3697,6 +4723,16 @@ - } - } - }, -+ "node_modules/@jest/reporters/node_modules/@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", -+ "dev": true, -+ "dependencies": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" -+ } -+ }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", -@@ -3755,13 +4791,35 @@ - "node": ">=8" - } - }, -- "node_modules/@jest/reporters/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==", -+ "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { -+ "version": "6.0.1", -+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", -+ "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", - "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": "^7.5.4" -+ }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=10" -+ } -+ }, -+ "node_modules/@jest/reporters/node_modules/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "dependencies": { -+ "lru-cache": "^6.0.0" -+ }, -+ "bin": { -+ "semver": "bin/semver.js" -+ }, -+ "engines": { -+ "node": ">=10" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { -@@ -3776,83 +4834,106 @@ - "node": ">=8" - } - }, -+ "node_modules/@jest/schemas": { -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", -+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", -+ "dev": true, -+ "dependencies": { -+ "@sinclair/typebox": "^0.27.8" -+ }, -+ "engines": { -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" -+ } -+ }, - "node_modules/@jest/source-map": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", -- "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", -+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { -+ "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", -- "graceful-fs": "^4.2.9", -- "source-map": "^0.6.0" -+ "graceful-fs": "^4.2.9" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, -- "node_modules/@jest/source-map/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==", -+ "node_modules/@jest/source-map/node_modules/@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", - "dev": true, -- "engines": { -- "node": ">=0.10.0" -+ "dependencies": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jest/test-result": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", -- "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", -+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "dependencies": { -- "@jest/console": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/console": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", -- "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", -+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "dependencies": { -- "@jest/test-result": "^27.5.1", -+ "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", -- "jest-haste-map": "^27.5.1", -- "jest-runtime": "^27.5.1" -+ "jest-haste-map": "^29.7.0", -+ "slash": "^3.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", -- "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", -+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "dependencies": { -- "@babel/core": "^7.1.0", -- "@jest/types": "^27.5.1", -+ "@babel/core": "^7.11.6", -+ "@jest/types": "^29.6.3", -+ "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", -- "convert-source-map": "^1.4.0", -- "fast-json-stable-stringify": "^2.0.0", -+ "convert-source-map": "^2.0.0", -+ "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", -- "jest-haste-map": "^27.5.1", -- "jest-regex-util": "^27.5.1", -- "jest-util": "^27.5.1", -+ "jest-haste-map": "^29.7.0", -+ "jest-regex-util": "^29.6.3", -+ "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", -- "source-map": "^0.6.1", -- "write-file-atomic": "^3.0.0" -+ "write-file-atomic": "^4.0.2" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", -+ "dev": true, -+ "dependencies": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { -@@ -3904,6 +4985,12 @@ - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, -+ "node_modules/@jest/transform/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==", -+ "dev": true -+ }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", -@@ -3913,15 +5000,6 @@ - "node": ">=8" - } - }, -- "node_modules/@jest/transform/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/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -3935,19 +5013,20 @@ - } - }, - "node_modules/@jest/types": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", -- "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", -+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { -+ "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", -- "@types/yargs": "^16.0.0", -+ "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { -@@ -4021,37 +5100,48 @@ - } - }, - "node_modules/@jridgewell/gen-mapping": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", -- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", -+ "version": "0.3.3", -+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", -+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { -- "@jridgewell/set-array": "^1.0.0", -- "@jridgewell/sourcemap-codec": "^1.4.10" -+ "@jridgewell/set-array": "^1.0.1", -+ "@jridgewell/sourcemap-codec": "^1.4.10", -+ "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { -- "version": "3.0.7", -- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", -- "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", -+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", -- "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", -+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, -+ "node_modules/@jridgewell/source-map": { -+ "version": "0.3.5", -+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", -+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", -+ "dev": true, -+ "dependencies": { -+ "@jridgewell/gen-mapping": "^0.3.0", -+ "@jridgewell/trace-mapping": "^0.3.9" -+ } -+ }, - "node_modules/@jridgewell/sourcemap-codec": { -- "version": "1.4.13", -- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", -- "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" -+ "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.9", -@@ -4062,11 +5152,6 @@ - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, -- "node_modules/@juggle/resize-observer": { -- "version": "3.3.1", -- "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.3.1.tgz", -- "integrity": "sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==" -- }, - "node_modules/@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", -@@ -4082,68 +5167,75 @@ - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "dev": true - }, -+ "node_modules/@leichtgewicht/ip-codec": { -+ "version": "2.0.4", -+ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", -+ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", -+ "dev": true -+ }, - "node_modules/@ng-bootstrap/ng-bootstrap": { -- "version": "12.0.1", -- "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.0.1.tgz", -- "integrity": "sha512-q0N1Pi032kfqHdoHEu9RqSdmN0ycSKmlg0b4YaqgOxNcOfuI9bH3oSejCttcYhe0q5SPB0IgVDJ6M0MrcKVi6Q==", -+ "version": "15.1.1", -+ "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-15.1.1.tgz", -+ "integrity": "sha512-nZlIMMggtI3IHkGs0XPrUIUdpeEzQvfGV9M4I9IvCqiS2n4RwWoUvWK1ICo4csZqFNBDlCQx956gO6ZZUSL2mw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { -- "@angular/common": "^13.0.0", -- "@angular/core": "^13.0.0", -- "@angular/forms": "^13.0.0", -- "@angular/localize": "^13.0.0", -- "@popperjs/core": "^2.10.2", -+ "@angular/common": "^16.0.0", -+ "@angular/core": "^16.0.0", -+ "@angular/forms": "^16.0.0", -+ "@angular/localize": "^16.0.0", -+ "@popperjs/core": "^2.11.6", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@ngtools/webpack": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.1.tgz", -- "integrity": "sha512-40iEqAA/l882MPbGuG5EYxzsPWJ37fT4fF22SkPLX2eBgNhJ4K8XMt0gqcFhkHUsSe63frg1qjQ1Pd31msu0bQ==", -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.6.tgz", -+ "integrity": "sha512-d8ZlZL6dOtWmHdjG9PTGBkdiJMcsXD2tp6WeFRVvTEuvCI3XvKsUXBvJDE+mZOhzn5pUEYt+1TR5DHjDZbME3w==", - "dev": true, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -+ "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { -- "@angular/compiler-cli": "^13.0.0", -- "typescript": ">=4.4.3 <4.7", -- "webpack": "^5.30.0" -+ "@angular/compiler-cli": "^16.0.0", -+ "typescript": ">=4.9.3 <5.2", -+ "webpack": "^5.54.0" - } - }, - "node_modules/@ngx-translate/core": { -- "version": "14.0.0", -- "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-14.0.0.tgz", -- "integrity": "sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w==", -- "dependencies": { -- "tslib": "^2.3.0" -+ "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/core": ">=13.0.0", -- "rxjs": "^6.5.3 || ^7.4.0" -+ "@angular/common": ">=16.0.0", -+ "@angular/core": ">=16.0.0", -+ "rxjs": "^6.5.5 || ^7.4.0" - } - }, - "node_modules/@ngx-translate/http-loader": { -- "version": "7.0.0", -- "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-7.0.0.tgz", -- "integrity": "sha512-j+NpXXlcGVdyUNyY/qsJrqqeAdJdizCd+GKh3usXExSqy1aE9866jlAIL+xrfDU4w+LiMoma5pgE4emvFebZmA==", -- "dependencies": { -- "tslib": "^2.3.0" -+ "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": ">=13.0.0", -- "@ngx-translate/core": ">=14.0.0", -- "rxjs": "^6.5.3 || ^7.4.0" -+ "@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==", -- "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" -@@ -4156,7 +5248,6 @@ - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", -- "dev": true, - "engines": { - "node": ">= 8" - } -@@ -4165,7 +5256,6 @@ - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", -- "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" -@@ -4220,6 +5310,21 @@ - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, -+ "node_modules/@npmcli/arborist/node_modules/rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "dependencies": { -+ "glob": "^7.1.3" -+ }, -+ "bin": { -+ "rimraf": "bin.js" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", -@@ -4345,6 +5450,21 @@ - "node": ">=10" - } - }, -+ "node_modules/@npmcli/move-file/node_modules/rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "dependencies": { -+ "glob": "^7.1.3" -+ }, -+ "bin": { -+ "rimraf": "bin.js" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, - "node_modules/@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", -@@ -4537,52 +5657,112 @@ - "@octokit/openapi-types": "^12.4.0" - } - }, -+ "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/@pkgr/utils": { -+ "version": "2.4.2", -+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", -+ "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", -+ "dev": true, -+ "dependencies": { -+ "cross-spawn": "^7.0.3", -+ "fast-glob": "^3.3.0", -+ "is-glob": "^4.0.3", -+ "open": "^9.1.0", -+ "picocolors": "^1.0.0", -+ "tslib": "^2.6.0" -+ }, -+ "engines": { -+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/unts" -+ } -+ }, -+ "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", -+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/@pkgr/utils/node_modules/open": { -+ "version": "9.1.0", -+ "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", -+ "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", -+ "dev": true, -+ "dependencies": { -+ "default-browser": "^4.0.0", -+ "define-lazy-prop": "^3.0.0", -+ "is-inside-container": "^1.0.0", -+ "is-wsl": "^2.2.0" -+ }, -+ "engines": { -+ "node": ">=14.16" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, - "node_modules/@polka/url": { -- "version": "1.0.0-next.21", -- "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", -- "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", -+ "version": "1.0.0-next.23", -+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", -+ "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", - "dev": true - }, - "node_modules/@popperjs/core": { -- "version": "2.11.5", -- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", -- "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", -+ "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/@schematics/angular": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.1.tgz", -- "integrity": "sha512-+lrK/d1eJsAK6d6E9TDeg3Vc71bDy1KsE8M+lEINdX9Wax22mAz4pw20X9RSCw5RHgn+XcNUuMsgRJAwVhDNpg==", -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.6.tgz", -+ "integrity": "sha512-fM09WPqST+nhVGV5Q3fhG7WKo96kgSVMsbz3wGS0DmTn4zge7ZWnrW3VvbxnMapmGoKa9DFPqdqNln4ADcdIMQ==", - "dev": true, - "dependencies": { -- "@angular-devkit/core": "13.3.1", -- "@angular-devkit/schematics": "13.3.1", -- "jsonc-parser": "3.0.0" -+ "@angular-devkit/core": "16.2.6", -+ "@angular-devkit/schematics": "16.2.6", -+ "jsonc-parser": "3.2.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -+ "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", -- "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.6.tgz", -+ "integrity": "sha512-iez/8NYXQT6fqVQLlKmZUIRkFUEZ88ACKbTwD4lBmk0+hXW+bQBxI7JOnE3C4zkcM2YeuTXIYsC5SebTKYiR4Q==", - "dev": true, - "dependencies": { -- "ajv": "8.9.0", -+ "ajv": "8.12.0", - "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0", -+ "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, -@@ -4595,24 +5775,6 @@ - } - } - }, -- "node_modules/@schematics/angular/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/@schematics/angular/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/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", -@@ -4623,9 +5785,9 @@ - } - }, - "node_modules/@sideway/formula": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", -- "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", -+ "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "node_modules/@sideway/pinpoint": { -@@ -4634,24 +5796,347 @@ - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, -+ "node_modules/@sigstore/bundle": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", -+ "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", -+ "dev": true, -+ "dependencies": { -+ "@sigstore/protobuf-specs": "^0.2.0" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@sigstore/protobuf-specs": { -+ "version": "0.2.1", -+ "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", -+ "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", -+ "dev": true, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@sigstore/sign": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", -+ "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", -+ "dev": true, -+ "dependencies": { -+ "@sigstore/bundle": "^1.1.0", -+ "@sigstore/protobuf-specs": "^0.2.0", -+ "make-fetch-happen": "^11.0.1" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@sigstore/sign/node_modules/@npmcli/fs": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", -+ "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", -+ "dev": true, -+ "dependencies": { -+ "semver": "^7.3.5" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@sigstore/sign/node_modules/@tootallnate/once": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", -+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", -+ "dev": true, -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@sigstore/sign/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/@sigstore/sign/node_modules/cacache": { -+ "version": "17.1.4", -+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", -+ "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", -+ "dev": true, -+ "dependencies": { -+ "@npmcli/fs": "^3.1.0", -+ "fs-minipass": "^3.0.0", -+ "glob": "^10.2.2", -+ "lru-cache": "^7.7.1", -+ "minipass": "^7.0.3", -+ "minipass-collect": "^1.0.2", -+ "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": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@sigstore/sign/node_modules/cacache/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/@sigstore/sign/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/@sigstore/sign/node_modules/fs-minipass/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/@sigstore/sign/node_modules/glob": { -+ "version": "10.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "dependencies": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" -+ }, -+ "bin": { -+ "glob": "dist/esm/bin.mjs" -+ }, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/@sigstore/sign/node_modules/http-proxy-agent": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", -+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", -+ "dev": true, -+ "dependencies": { -+ "@tootallnate/once": "2", -+ "agent-base": "6", -+ "debug": "4" -+ }, -+ "engines": { -+ "node": ">= 6" -+ } -+ }, -+ "node_modules/@sigstore/sign/node_modules/lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { -+ "version": "11.1.1", -+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", -+ "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", -+ "dev": true, -+ "dependencies": { -+ "agentkeepalive": "^4.2.1", -+ "cacache": "^17.0.0", -+ "http-cache-semantics": "^4.1.1", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.0", -+ "is-lambda": "^1.0.1", -+ "lru-cache": "^7.7.1", -+ "minipass": "^5.0.0", -+ "minipass-fetch": "^3.0.0", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "negotiator": "^0.6.3", -+ "promise-retry": "^2.0.1", -+ "socks-proxy-agent": "^7.0.0", -+ "ssri": "^10.0.0" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@sigstore/sign/node_modules/minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", -+ "dev": true, -+ "dependencies": { -+ "brace-expansion": "^2.0.1" -+ }, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/@sigstore/sign/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/@sigstore/sign/node_modules/minipass-fetch": { -+ "version": "3.0.4", -+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", -+ "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", -+ "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/@sigstore/sign/node_modules/minipass-fetch/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/@sigstore/sign/node_modules/socks-proxy-agent": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", -+ "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", -+ "dev": true, -+ "dependencies": { -+ "agent-base": "^6.0.2", -+ "debug": "^4.3.3", -+ "socks": "^2.6.2" -+ }, -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@sigstore/sign/node_modules/ssri": { -+ "version": "10.0.5", -+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", -+ "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", -+ "dev": true, -+ "dependencies": { -+ "minipass": "^7.0.3" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@sigstore/sign/node_modules/ssri/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/@sigstore/sign/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/@sigstore/sign/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/@sigstore/tuf": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", -+ "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", -+ "dev": true, -+ "dependencies": { -+ "@sigstore/protobuf-specs": "^0.2.0", -+ "tuf-js": "^1.1.7" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@sinclair/typebox": { -+ "version": "0.27.8", -+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", -+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", -+ "dev": true -+ }, - "node_modules/@sinonjs/commons": { -- "version": "1.8.3", -- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", -- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", -+ "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { -- "version": "8.1.0", -- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", -- "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", -+ "version": "10.3.0", -+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", -+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { -- "@sinonjs/commons": "^1.7.0" -+ "@sinonjs/commons": "^3.0.0" - } - }, -+ "node_modules/@socket.io/component-emitter": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", -+ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", -+ "dev": true -+ }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", -@@ -4685,32 +6170,78 @@ - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, -+ "node_modules/@tufjs/canonical-json": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", -+ "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", -+ "dev": true, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/@tufjs/models": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", -+ "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", -+ "dev": true, -+ "dependencies": { -+ "@tufjs/canonical-json": "1.0.0", -+ "minimatch": "^9.0.0" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.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.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", -+ "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.1.19", -- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", -- "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", -+ "version": "7.20.3", -+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", -+ "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", - "dev": true, - "dependencies": { -- "@babel/parser": "^7.1.0", -- "@babel/types": "^7.0.0", -+ "@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.4", -- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", -- "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", -+ "version": "7.6.6", -+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", -+ "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { -- "version": "7.4.1", -- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", -- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", -+ "version": "7.4.3", -+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", -+ "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", -@@ -4718,18 +6249,18 @@ - } - }, - "node_modules/@types/babel__traverse": { -- "version": "7.17.1", -- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", -- "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", -+ "version": "7.20.3", -+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", -+ "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", - "dev": true, - "dependencies": { -- "@babel/types": "^7.3.0" -+ "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { -- "version": "1.19.2", -- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", -- "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", -+ "version": "1.19.4", -+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", -+ "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", - "dev": true, - "dependencies": { - "@types/connect": "*", -@@ -4737,9 +6268,9 @@ - } - }, - "node_modules/@types/bonjour": { -- "version": "3.5.10", -- "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", -- "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", -+ "version": "3.5.12", -+ "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.12.tgz", -+ "integrity": "sha512-ky0kWSqXVxSqgqJvPIkgFkcn4C8MnRog308Ou8xBBIVo39OmUFy+jqNe0nPwLCDFxUpmT9EvT91YzOJgkDRcFg==", - "dev": true, - "dependencies": { - "@types/node": "*" -@@ -4755,37 +6286,43 @@ - } - }, - "node_modules/@types/connect": { -- "version": "3.4.35", -- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", -- "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", -+ "version": "3.4.37", -+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.37.tgz", -+ "integrity": "sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { -- "version": "1.3.5", -- "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", -- "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", -+ "version": "1.5.2", -+ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz", -+ "integrity": "sha512-gX2j9x+NzSh4zOhnRPSdPPmTepS4DfxES0AvIFv3jGv5QyeAJf6u6dY5/BAoAJU9Qq1uTvwOku8SSC2GnCRl6Q==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, -- "node_modules/@types/dompurify": { -- "version": "2.3.3", -- "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-2.3.3.tgz", -- "integrity": "sha512-nnVQSgRVuZ/843oAfhA25eRSNzUFcBPk/LOiw5gm8mD9/X7CNcbRkQu/OsjCewO8+VIYfPxUnXvPEVGenw14+w==", -+ "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.15", -+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.15.tgz", -+ "integrity": "sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==", - "dev": true, - "dependencies": { -- "@types/trusted-types": "*" -+ "@types/node": "*" - } - }, - "node_modules/@types/eslint": { -- "version": "7.29.0", -- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", -- "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", -+ "version": "8.44.6", -+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.6.tgz", -+ "integrity": "sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==", - "dev": true, - "dependencies": { - "@types/estree": "*", -@@ -4793,9 +6330,9 @@ - } - }, - "node_modules/@types/eslint-scope": { -- "version": "3.7.3", -- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", -- "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", -+ "version": "3.7.6", -+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.6.tgz", -+ "integrity": "sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==", - "dev": true, - "dependencies": { - "@types/eslint": "*", -@@ -4803,9 +6340,9 @@ - } - }, - "node_modules/@types/estree": { -- "version": "0.0.51", -- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", -- "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.4.tgz", -+ "integrity": "sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw==", - "dev": true - }, - "node_modules/@types/expect": { -@@ -4815,26 +6352,27 @@ - "dev": true - }, - "node_modules/@types/express": { -- "version": "4.17.13", -- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", -- "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", -+ "version": "4.17.20", -+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.20.tgz", -+ "integrity": "sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", -- "@types/express-serve-static-core": "^4.17.18", -+ "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { -- "version": "4.17.29", -- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", -- "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", -+ "version": "4.17.39", -+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", -+ "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", -- "@types/range-parser": "*" -+ "@types/range-parser": "*", -+ "@types/send": "*" - } - }, - "node_modules/@types/form-data": { -@@ -4857,55 +6395,72 @@ - } - }, - "node_modules/@types/graceful-fs": { -- "version": "4.1.5", -- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", -- "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", -+ "version": "4.1.8", -+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz", -+ "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, -+ "node_modules/@types/http-errors": { -+ "version": "2.0.3", -+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", -+ "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==", -+ "dev": true -+ }, - "node_modules/@types/http-proxy": { -- "version": "1.17.9", -- "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", -- "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", -+ "version": "1.17.13", -+ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.13.tgz", -+ "integrity": "sha512-GkhdWcMNiR5QSQRYnJ+/oXzu0+7JJEPC8vkWXK351BkhjraZF+1W13CUYARUvX9+NqIU2n6YHA4iwywsc/M6Sw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", -- "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", -+ "version": "2.0.5", -+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", -+ "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", -- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz", -+ "integrity": "sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", -- "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", -+ "version": "3.0.3", -+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz", -+ "integrity": "sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { -- "version": "27.4.1", -- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", -- "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", -+ "version": "29.5.5", -+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", -+ "integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", - "dev": true, - "dependencies": { -- "jest-matcher-utils": "^27.0.0", -- "pretty-format": "^27.0.0" -+ "expect": "^29.0.0", -+ "pretty-format": "^29.0.0" -+ } -+ }, -+ "node_modules/@types/jsdom": { -+ "version": "20.0.1", -+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", -+ "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", -+ "dev": true, -+ "dependencies": { -+ "@types/node": "*", -+ "@types/tough-cookie": "*", -+ "parse5": "^7.0.0" - } - }, - "node_modules/@types/json-schema": { -@@ -4914,21 +6469,10 @@ - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, -- "node_modules/@types/json5": { -- "version": "0.0.29", -- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", -- "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", -- "dev": true -- }, -- "node_modules/@types/marked": { -- "version": "4.0.3", -- "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.3.tgz", -- "integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==" -- }, - "node_modules/@types/mime": { -- "version": "1.3.2", -- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", -- "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", -+ "version": "1.3.4", -+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", -+ "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==", - "dev": true - }, - "node_modules/@types/minimatch": { -@@ -4938,29 +6482,26 @@ - "dev": true - }, - "node_modules/@types/node": { -- "version": "16.11.26", -- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", -- "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==", -+ "version": "18.18.5", -+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.5.tgz", -+ "integrity": "sha512-4slmbtwV59ZxitY4ixUZdy1uRLf9eSIvBWPQxNjhHYWEtn0FryfKpyS2cvADYXTayWdKEIsJengncrVvkI4I6A==", - "dev": true - }, -+ "node_modules/@types/node-forge": { -+ "version": "1.3.8", -+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.8.tgz", -+ "integrity": "sha512-vGXshY9vim9CJjrpcS5raqSjEfKlJcWy2HNdgUasR66fAnVEYarrf1ULV4nfvpC1nZq/moA9qyqBcu83x+Jlrg==", -+ "dev": true, -+ "dependencies": { -+ "@types/node": "*" -+ } -+ }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, -- "node_modules/@types/parse-json": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", -- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", -- "dev": true -- }, -- "node_modules/@types/prettier": { -- "version": "2.6.3", -- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", -- "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", -- "dev": true -- }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", -@@ -4968,9 +6509,9 @@ - "dev": true - }, - "node_modules/@types/range-parser": { -- "version": "1.2.4", -- "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", -- "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", -+ "version": "1.2.6", -+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", -+ "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==", - "dev": true - }, - "node_modules/@types/retry": { -@@ -4979,44 +6520,61 @@ - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, -+ "node_modules/@types/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", -+ "dev": true -+ }, -+ "node_modules/@types/send": { -+ "version": "0.17.3", -+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.3.tgz", -+ "integrity": "sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==", -+ "dev": true, -+ "dependencies": { -+ "@types/mime": "^1", -+ "@types/node": "*" -+ } -+ }, - "node_modules/@types/serve-index": { -- "version": "1.9.1", -- "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", -- "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", -+ "version": "1.9.3", -+ "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.3.tgz", -+ "integrity": "sha512-4KG+yMEuvDPRrYq5fyVm/I2uqAJSAwZK9VSa+Zf+zUq9/oxSSvy3kkIqyL+jjStv6UCVi8/Aho0NHtB1Fwosrg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { -- "version": "1.13.10", -- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", -- "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", -+ "version": "1.15.4", -+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", -+ "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", - "dev": true, - "dependencies": { -- "@types/mime": "^1", -+ "@types/http-errors": "*", -+ "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { -- "version": "0.3.33", -- "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", -- "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", -+ "version": "0.3.35", -+ "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.35.tgz", -+ "integrity": "sha512-tIF57KB+ZvOBpAQwSaACfEu7htponHXaFzP7RfKYgsOS0NoYnn+9+jzp7bbq4fWerizI3dTB4NfAZoyeQKWJLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", -- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", -+ "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==", - "dev": true - }, -- "node_modules/@types/trusted-types": { -- "version": "2.0.2", -- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", -- "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", -+ "node_modules/@types/tough-cookie": { -+ "version": "4.0.4", -+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.4.tgz", -+ "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==", - "dev": true - }, - "node_modules/@types/vinyl": { -@@ -5030,55 +6588,57 @@ - } - }, - "node_modules/@types/ws": { -- "version": "8.5.3", -- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", -- "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", -+ "version": "8.5.8", -+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", -+ "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { -- "version": "16.0.4", -- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", -- "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", -+ "version": "17.0.29", -+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz", -+ "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { -- "version": "21.0.0", -- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", -- "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", -+ "version": "21.0.2", -+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz", -+ "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz", -- "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==", -- "dev": true, -- "dependencies": { -- "@typescript-eslint/scope-manager": "5.18.0", -- "@typescript-eslint/type-utils": "5.18.0", -- "@typescript-eslint/utils": "5.18.0", -- "debug": "^4.3.2", -- "functional-red-black-tree": "^1.0.1", -- "ignore": "^5.1.8", -- "regexpp": "^3.2.0", -- "semver": "^7.3.5", -- "tsutils": "^3.21.0" -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.5.tgz", -+ "integrity": "sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==", -+ "dev": true, -+ "dependencies": { -+ "@eslint-community/regexpp": "^4.5.1", -+ "@typescript-eslint/scope-manager": "6.7.5", -+ "@typescript-eslint/type-utils": "6.7.5", -+ "@typescript-eslint/utils": "6.7.5", -+ "@typescript-eslint/visitor-keys": "6.7.5", -+ "debug": "^4.3.4", -+ "graphemer": "^1.4.0", -+ "ignore": "^5.2.4", -+ "natural-compare": "^1.4.0", -+ "semver": "^7.5.4", -+ "ts-api-utils": "^1.0.1" - }, - "engines": { -- "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { -- "@typescript-eslint/parser": "^5.0.0", -- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" -+ "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", -+ "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { -@@ -5086,158 +6646,239 @@ - } - } - }, -- "node_modules/@typescript-eslint/experimental-utils": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.17.0.tgz", -- "integrity": "sha512-U4sM5z0/ymSYqQT6I7lz8l0ZZ9zrya5VIwrwAP5WOJVabVtVsIpTMxPQe+D3qLyePT+VlETUTO2nA1+PufPx9Q==", -+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/@types/json-schema": { -+ "version": "7.0.14", -+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", -+ "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", -+ "dev": true -+ }, -+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.5.tgz", -+ "integrity": "sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==", - "dev": true, - "dependencies": { -- "@typescript-eslint/utils": "5.17.0" -+ "@eslint-community/eslint-utils": "^4.4.0", -+ "@types/json-schema": "^7.0.12", -+ "@types/semver": "^7.5.0", -+ "@typescript-eslint/scope-manager": "6.7.5", -+ "@typescript-eslint/types": "6.7.5", -+ "@typescript-eslint/typescript-estree": "6.7.5", -+ "semver": "^7.5.4" - }, - "engines": { -- "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { -- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" -+ "eslint": "^7.0.0 || ^8.0.0" - } - }, -- "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz", -- "integrity": "sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w==", -+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { -- "@typescript-eslint/types": "5.17.0", -- "@typescript-eslint/visitor-keys": "5.17.0" -+ "lru-cache": "^6.0.0" -+ }, -+ "bin": { -+ "semver": "bin/semver.js" - }, - "engines": { -- "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ "node": ">=10" -+ } -+ }, -+ "node_modules/@typescript-eslint/parser": { -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", -+ "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", -+ "dev": true, -+ "dependencies": { -+ "@typescript-eslint/scope-manager": "6.7.5", -+ "@typescript-eslint/types": "6.7.5", -+ "@typescript-eslint/typescript-estree": "6.7.5", -+ "@typescript-eslint/visitor-keys": "6.7.5", -+ "debug": "^4.3.4" -+ }, -+ "engines": { -+ "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" -+ }, -+ "peerDependencies": { -+ "eslint": "^7.0.0 || ^8.0.0" -+ }, -+ "peerDependenciesMeta": { -+ "typescript": { -+ "optional": true -+ } - } - }, -- "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.17.0.tgz", -- "integrity": "sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw==", -+ "node_modules/@typescript-eslint/scope-manager": { -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", -+ "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", - "dev": true, -+ "dependencies": { -+ "@typescript-eslint/types": "6.7.5", -+ "@typescript-eslint/visitor-keys": "6.7.5" -+ }, - "engines": { -- "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, -- "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz", -- "integrity": "sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg==", -+ "node_modules/@typescript-eslint/type-utils": { -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.5.tgz", -+ "integrity": "sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==", - "dev": true, - "dependencies": { -- "@typescript-eslint/types": "5.17.0", -- "@typescript-eslint/visitor-keys": "5.17.0", -- "debug": "^4.3.2", -- "globby": "^11.0.4", -- "is-glob": "^4.0.3", -- "semver": "^7.3.5", -- "tsutils": "^3.21.0" -+ "@typescript-eslint/typescript-estree": "6.7.5", -+ "@typescript-eslint/utils": "6.7.5", -+ "debug": "^4.3.4", -+ "ts-api-utils": "^1.0.1" - }, - "engines": { -- "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, -+ "peerDependencies": { -+ "eslint": "^7.0.0 || ^8.0.0" -+ }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, -- "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.17.0.tgz", -- "integrity": "sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA==", -+ "node_modules/@typescript-eslint/type-utils/node_modules/@types/json-schema": { -+ "version": "7.0.14", -+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", -+ "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", -+ "dev": true -+ }, -+ "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.5.tgz", -+ "integrity": "sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==", - "dev": true, - "dependencies": { -- "@types/json-schema": "^7.0.9", -- "@typescript-eslint/scope-manager": "5.17.0", -- "@typescript-eslint/types": "5.17.0", -- "@typescript-eslint/typescript-estree": "5.17.0", -- "eslint-scope": "^5.1.1", -- "eslint-utils": "^3.0.0" -+ "@eslint-community/eslint-utils": "^4.4.0", -+ "@types/json-schema": "^7.0.12", -+ "@types/semver": "^7.5.0", -+ "@typescript-eslint/scope-manager": "6.7.5", -+ "@typescript-eslint/types": "6.7.5", -+ "@typescript-eslint/typescript-estree": "6.7.5", -+ "semver": "^7.5.4" - }, - "engines": { -- "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { -- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" -+ "eslint": "^7.0.0 || ^8.0.0" - } - }, -- "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz", -- "integrity": "sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA==", -+ "node_modules/@typescript-eslint/type-utils/node_modules/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { -- "@typescript-eslint/types": "5.17.0", -- "eslint-visitor-keys": "^3.0.0" -+ "lru-cache": "^6.0.0" -+ }, -+ "bin": { -+ "semver": "bin/semver.js" - }, - "engines": { -- "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ "node": ">=10" -+ } -+ }, -+ "node_modules/@typescript-eslint/types": { -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", -+ "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", -+ "dev": true, -+ "engines": { -+ "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, -- "node_modules/@typescript-eslint/parser": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz", -- "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==", -+ "node_modules/@typescript-eslint/typescript-estree": { -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", -+ "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", - "dev": true, - "dependencies": { -- "@typescript-eslint/scope-manager": "5.18.0", -- "@typescript-eslint/types": "5.18.0", -- "@typescript-eslint/typescript-estree": "5.18.0", -- "debug": "^4.3.2" -+ "@typescript-eslint/types": "6.7.5", -+ "@typescript-eslint/visitor-keys": "6.7.5", -+ "debug": "^4.3.4", -+ "globby": "^11.1.0", -+ "is-glob": "^4.0.3", -+ "semver": "^7.5.4", -+ "ts-api-utils": "^1.0.1" - }, - "engines": { -- "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, -- "peerDependencies": { -- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" -- }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, -- "node_modules/@typescript-eslint/scope-manager": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", -- "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==", -+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { -- "@typescript-eslint/types": "5.18.0", -- "@typescript-eslint/visitor-keys": "5.18.0" -+ "lru-cache": "^6.0.0" -+ }, -+ "bin": { -+ "semver": "bin/semver.js" -+ }, -+ "engines": { -+ "node": ">=10" -+ } -+ }, -+ "node_modules/@typescript-eslint/utils": { -+ "version": "5.62.0", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", -+ "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", -+ "dev": true, -+ "dependencies": { -+ "@eslint-community/eslint-utils": "^4.2.0", -+ "@types/json-schema": "^7.0.9", -+ "@types/semver": "^7.3.12", -+ "@typescript-eslint/scope-manager": "5.62.0", -+ "@typescript-eslint/types": "5.62.0", -+ "@typescript-eslint/typescript-estree": "5.62.0", -+ "eslint-scope": "^5.1.1", -+ "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -@@ -5245,17 +6886,19 @@ - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" -+ }, -+ "peerDependencies": { -+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, -- "node_modules/@typescript-eslint/type-utils": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz", -- "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==", -+ "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { -+ "version": "5.62.0", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", -+ "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { -- "@typescript-eslint/utils": "5.18.0", -- "debug": "^4.3.2", -- "tsutils": "^3.21.0" -+ "@typescript-eslint/types": "5.62.0", -+ "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -@@ -5263,20 +6906,12 @@ - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" -- }, -- "peerDependencies": { -- "eslint": "*" -- }, -- "peerDependenciesMeta": { -- "typescript": { -- "optional": true -- } - } - }, -- "node_modules/@typescript-eslint/types": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz", -- "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==", -+ "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { -+ "version": "5.62.0", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", -+ "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -@@ -5286,18 +6921,18 @@ - "url": "https://opencollective.com/typescript-eslint" - } - }, -- "node_modules/@typescript-eslint/typescript-estree": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz", -- "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==", -+ "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { -+ "version": "5.62.0", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", -+ "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { -- "@typescript-eslint/types": "5.18.0", -- "@typescript-eslint/visitor-keys": "5.18.0", -- "debug": "^4.3.2", -- "globby": "^11.0.4", -+ "@typescript-eslint/types": "5.62.0", -+ "@typescript-eslint/visitor-keys": "5.62.0", -+ "debug": "^4.3.4", -+ "globby": "^11.1.0", - "is-glob": "^4.0.3", -- "semver": "^7.3.5", -+ "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { -@@ -5313,18 +6948,14 @@ - } - } - }, -- "node_modules/@typescript-eslint/utils": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", -- "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", -+ "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { -+ "version": "5.62.0", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", -+ "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { -- "@types/json-schema": "^7.0.9", -- "@typescript-eslint/scope-manager": "5.18.0", -- "@typescript-eslint/types": "5.18.0", -- "@typescript-eslint/typescript-estree": "5.18.0", -- "eslint-scope": "^5.1.1", -- "eslint-utils": "^3.0.0" -+ "@typescript-eslint/types": "5.62.0", -+ "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -@@ -5332,174 +6963,291 @@ - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" -+ } -+ }, -+ "node_modules/@typescript-eslint/utils/node_modules/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "dependencies": { -+ "lru-cache": "^6.0.0" - }, -- "peerDependencies": { -- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" -+ "bin": { -+ "semver": "bin/semver.js" -+ }, -+ "engines": { -+ "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", -- "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==", -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", -+ "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", - "dev": true, - "dependencies": { -- "@typescript-eslint/types": "5.18.0", -- "eslint-visitor-keys": "^3.0.0" -+ "@typescript-eslint/types": "6.7.5", -+ "eslint-visitor-keys": "^3.4.1" - }, - "engines": { -- "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, -+ "node_modules/@vitejs/plugin-basic-ssl": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", -+ "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", -+ "dev": true, -+ "engines": { -+ "node": ">=14.6.0" -+ }, -+ "peerDependencies": { -+ "vite": "^3.0.0 || ^4.0.0" -+ } -+ }, - "node_modules/@webassemblyjs/ast": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", -- "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", -+ "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "dependencies": { -- "@webassemblyjs/helper-numbers": "1.11.1", -- "@webassemblyjs/helper-wasm-bytecode": "1.11.1" -+ "@webassemblyjs/helper-numbers": "1.11.6", -+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", -- "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", -+ "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.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", -- "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", -+ "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.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", -- "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", -+ "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", -- "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", -+ "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.1", -- "@webassemblyjs/helper-api-error": "1.11.1", -+ "@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.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", -- "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", -+ "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.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", -- "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", -+ "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "dependencies": { -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/helper-buffer": "1.11.1", -- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", -- "@webassemblyjs/wasm-gen": "1.11.1" -+ "@webassemblyjs/ast": "1.11.6", -+ "@webassemblyjs/helper-buffer": "1.11.6", -+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", -+ "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", -- "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", -+ "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.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", -- "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", -+ "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.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", -- "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", -+ "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.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", -- "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", -+ "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "dependencies": { -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/helper-buffer": "1.11.1", -- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", -- "@webassemblyjs/helper-wasm-section": "1.11.1", -- "@webassemblyjs/wasm-gen": "1.11.1", -- "@webassemblyjs/wasm-opt": "1.11.1", -- "@webassemblyjs/wasm-parser": "1.11.1", -- "@webassemblyjs/wast-printer": "1.11.1" -+ "@webassemblyjs/ast": "1.11.6", -+ "@webassemblyjs/helper-buffer": "1.11.6", -+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", -+ "@webassemblyjs/helper-wasm-section": "1.11.6", -+ "@webassemblyjs/wasm-gen": "1.11.6", -+ "@webassemblyjs/wasm-opt": "1.11.6", -+ "@webassemblyjs/wasm-parser": "1.11.6", -+ "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", -- "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", -+ "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "dependencies": { -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", -- "@webassemblyjs/ieee754": "1.11.1", -- "@webassemblyjs/leb128": "1.11.1", -- "@webassemblyjs/utf8": "1.11.1" -+ "@webassemblyjs/ast": "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/wasm-opt": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", -- "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", -+ "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "dependencies": { -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/helper-buffer": "1.11.1", -- "@webassemblyjs/wasm-gen": "1.11.1", -- "@webassemblyjs/wasm-parser": "1.11.1" -+ "@webassemblyjs/ast": "1.11.6", -+ "@webassemblyjs/helper-buffer": "1.11.6", -+ "@webassemblyjs/wasm-gen": "1.11.6", -+ "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", -- "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", -+ "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "dependencies": { -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/helper-api-error": "1.11.1", -- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", -- "@webassemblyjs/ieee754": "1.11.1", -- "@webassemblyjs/leb128": "1.11.1", -- "@webassemblyjs/utf8": "1.11.1" -+ "@webassemblyjs/ast": "1.11.6", -+ "@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.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", -- "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", -+ "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "dependencies": { -- "@webassemblyjs/ast": "1.11.1", -+ "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, -+ "node_modules/@wessberg/ts-evaluator": { -+ "version": "0.0.27", -+ "resolved": "https://registry.npmjs.org/@wessberg/ts-evaluator/-/ts-evaluator-0.0.27.tgz", -+ "integrity": "sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA==", -+ "deprecated": "this package has been renamed to ts-evaluator. Please install ts-evaluator instead", -+ "dev": true, -+ "dependencies": { -+ "chalk": "^4.1.0", -+ "jsdom": "^16.4.0", -+ "object-path": "^0.11.5", -+ "tslib": "^2.0.3" -+ }, -+ "engines": { -+ "node": ">=10.1.0" -+ }, -+ "funding": { -+ "type": "github", -+ "url": "https://github.com/wessberg/ts-evaluator?sponsor=1" -+ }, -+ "peerDependencies": { -+ "typescript": ">=3.2.x || >= 4.x" -+ } -+ }, -+ "node_modules/@wessberg/ts-evaluator/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/@wessberg/ts-evaluator/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/@wessberg/ts-evaluator/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/@wessberg/ts-evaluator/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/@wessberg/ts-evaluator/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/@wessberg/ts-evaluator/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/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", -@@ -5544,9 +7292,9 @@ - } - }, - "node_modules/acorn": { -- "version": "8.7.1", -- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", -- "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", -+ "version": "8.11.2", -+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", -+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" -@@ -5578,9 +7326,9 @@ - } - }, - "node_modules/acorn-import-assertions": { -- "version": "1.8.0", -- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", -- "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", -+ "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" -@@ -5631,12 +7379,6 @@ - "node": ">=8.9.0" - } - }, -- "node_modules/after": { -- "version": "0.8.2", -- "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", -- "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==", -- "dev": true -- }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", -@@ -5677,9 +7419,9 @@ - } - }, - "node_modules/ajv": { -- "version": "8.9.0", -- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", -- "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", -+ "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", -@@ -5722,9 +7464,9 @@ - } - }, - "node_modules/ansi-colors": { -- "version": "4.1.1", -- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", -- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", -+ "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" -@@ -5822,36 +7564,6 @@ - "sprintf-js": "~1.0.2" - } - }, -- "node_modules/arr-diff": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", -- "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", -- "dev": true, -- "dependencies": { -- "arr-flatten": "^1.0.1" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/arr-flatten": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", -- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/arr-union": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", -- "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", -@@ -5873,23 +7585,8 @@ - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { -- "node": ">=8" -- } -- }, -- "node_modules/array-unique": { -- "version": "0.2.1", -- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", -- "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/arraybuffer.slice": { -- "version": "0.0.7", -- "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", -- "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", -- "dev": true -+ "node": ">=8" -+ } - }, - "node_modules/arrify": { - "version": "2.0.1", -@@ -5924,24 +7621,6 @@ - "node": ">=0.8" - } - }, -- "node_modules/assign-symbols": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", -- "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/astral-regex": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", -- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", -- "dev": true, -- "engines": { -- "node": ">=8" -- } -- }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", -@@ -5951,12 +7630,6 @@ - "lodash": "^4.17.14" - } - }, -- "node_modules/async-each": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", -- "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", -- "dev": true -- }, - "node_modules/async-each-series": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", -@@ -5966,30 +7639,12 @@ - "node": ">=0.8.0" - } - }, -- "node_modules/async-limiter": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", -- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", -- "dev": true -- }, - "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/atob": { -- "version": "2.1.2", -- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", -- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", -- "dev": true, -- "bin": { -- "atob": "bin/atob.js" -- }, -- "engines": { -- "node": ">= 4.5.0" -- } -- }, - "node_modules/atomically": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", -@@ -6000,9 +7655,9 @@ - } - }, - "node_modules/autoprefixer": { -- "version": "10.4.7", -- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", -- "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", -+ "version": "10.4.14", -+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", -+ "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { -@@ -6015,8 +7670,8 @@ - } - ], - "dependencies": { -- "browserslist": "^4.20.3", -- "caniuse-lite": "^1.0.30001335", -+ "browserslist": "^4.21.5", -+ "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", -@@ -6052,6 +7707,17 @@ - "node": ">= 10.0.0" - } - }, -+ "node_modules/aws-sdk/node_modules/buffer": { -+ "version": "4.9.2", -+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", -+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", -+ "dev": true, -+ "dependencies": { -+ "base64-js": "^1.0.2", -+ "ieee754": "^1.1.4", -+ "isarray": "^1.0.0" -+ } -+ }, - "node_modules/aws-sdk/node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", -@@ -6078,33 +7744,30 @@ - "dev": true - }, - "node_modules/axios": { -- "version": "0.17.1", -- "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", -- "integrity": "sha512-mZzWRyJeJ0rtK7e1/6iYBUzmeXjzei+1h1IvbedyU0sB52++tU5AU6r6TLXpwNVR0ebXIpvTVW+9CpWNyc1n8w==", -- "deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410", -+ "version": "0.21.4", -+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", -+ "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "dependencies": { -- "follow-redirects": "^1.2.5", -- "is-buffer": "^1.1.5" -+ "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-jest": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", -- "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", -+ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "dependencies": { -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", -- "babel-preset-jest": "^27.5.1", -+ "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" -@@ -6181,57 +7844,20 @@ - } - }, - "node_modules/babel-loader": { -- "version": "8.2.3", -- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", -- "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", -+ "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": "^3.3.1", -- "loader-utils": "^1.4.0", -- "make-dir": "^3.1.0", -- "schema-utils": "^2.6.5" -+ "find-cache-dir": "^4.0.0", -+ "schema-utils": "^4.0.0" - }, - "engines": { -- "node": ">= 8.9" -+ "node": ">= 14.15.0" - }, - "peerDependencies": { -- "@babel/core": "^7.0.0", -- "webpack": ">=2" -- } -- }, -- "node_modules/babel-loader/node_modules/json5": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", -- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", -- "dev": true, -- "dependencies": { -- "minimist": "^1.2.0" -- }, -- "bin": { -- "json5": "lib/cli.js" -- } -- }, -- "node_modules/babel-loader/node_modules/loader-utils": { -- "version": "1.4.0", -- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", -- "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", -- "dev": true, -- "dependencies": { -- "big.js": "^5.2.2", -- "emojis-list": "^3.0.0", -- "json5": "^1.0.1" -- }, -- "engines": { -- "node": ">=4.0.0" -- } -- }, -- "node_modules/babel-plugin-dynamic-import-node": { -- "version": "2.3.3", -- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", -- "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", -- "dev": true, -- "dependencies": { -- "object.assign": "^4.1.0" -+ "@babel/core": "^7.12.0", -+ "webpack": ">=5" - } - }, - "node_modules/babel-plugin-istanbul": { -@@ -6251,66 +7877,66 @@ - } - }, - "node_modules/babel-plugin-jest-hoist": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", -- "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", -+ "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", -- "@types/babel__core": "^7.0.0", -+ "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", -- "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", -+ "version": "0.4.6", -+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", -+ "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", - "dev": true, - "dependencies": { -- "@babel/compat-data": "^7.13.11", -- "@babel/helper-define-polyfill-provider": "^0.3.1", -- "semver": "^6.1.1" -+ "@babel/compat-data": "^7.22.6", -+ "@babel/helper-define-polyfill-provider": "^0.4.3", -+ "semver": "^6.3.1" - }, - "peerDependencies": { -- "@babel/core": "^7.0.0-0" -+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -+ "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.5.2", -- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", -- "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", -+ "version": "0.8.6", -+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", -+ "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", - "dev": true, - "dependencies": { -- "@babel/helper-define-polyfill-provider": "^0.3.1", -- "core-js-compat": "^3.21.0" -+ "@babel/helper-define-polyfill-provider": "^0.4.3", -+ "core-js-compat": "^3.33.1" - }, - "peerDependencies": { -- "@babel/core": "^7.0.0-0" -+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", -- "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", -+ "version": "0.5.3", -+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", -+ "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", - "dev": true, - "dependencies": { -- "@babel/helper-define-polyfill-provider": "^0.3.1" -+ "@babel/helper-define-polyfill-provider": "^0.4.3" - }, - "peerDependencies": { -- "@babel/core": "^7.0.0-0" -+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { -@@ -6337,70 +7963,26 @@ - } - }, - "node_modules/babel-preset-jest": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", -- "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", -+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { -- "babel-plugin-jest-hoist": "^27.5.1", -+ "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, -- "node_modules/backo2": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", -- "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==", -- "dev": true -- }, - "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==" -- }, -- "node_modules/base": { -- "version": "0.11.2", -- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", -- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", -- "dev": true, -- "dependencies": { -- "cache-base": "^1.0.1", -- "class-utils": "^0.3.5", -- "component-emitter": "^1.2.1", -- "define-property": "^1.0.0", -- "isobject": "^3.0.1", -- "mixin-deep": "^1.2.0", -- "pascalcase": "^0.1.1" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/base/node_modules/define-property": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", -- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", -- "dev": true, -- "dependencies": { -- "is-descriptor": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/base64-arraybuffer": { -- "version": "0.1.5", -- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", -- "integrity": "sha512-437oANT9tP582zZMwSvZGy2nmSeAb8DW2me3y+Uv1Wp2Rulr8Mqlyrv3E7MLxmsiaPSMMDmiDVzgE+e8zlMx9g==", -- "dev": true, -- "engines": { -- "node": ">= 0.6.0" -- } -+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", -+ "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", -@@ -6423,12 +8005,12 @@ - ] - }, - "node_modules/base64id": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", -- "integrity": "sha512-rz8L+d/xByiB/vLVftPkyY215fqNrmasrcJsYkVcm4TgJNz+YXKrFaFAWibSaHkiKoSgMDCb+lipOIRQNGYesw==", -+ "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": ">= 0.4.0" -+ "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { -@@ -6452,16 +8034,13 @@ - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true - }, -- "node_modules/better-assert": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", -- "integrity": "sha512-bYeph2DFlpK1XmGs6fvlLRUN29QISM3GBuUwSFsMY2XRx4AvC0WNCS57j4c/xGrK2RS24C1w3YoBOsw9fT46tQ==", -+ "node_modules/big-integer": { -+ "version": "1.6.51", -+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", -+ "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, -- "dependencies": { -- "callsite": "1.0.0" -- }, - "engines": { -- "node": "*" -+ "node": ">=0.6" - } - }, - "node_modules/big.js": { -@@ -6490,17 +8069,19 @@ - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, -- "node_modules/bin-links/node_modules/write-file-atomic": { -- "version": "4.0.1", -- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", -- "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", -+ "node_modules/bin-links/node_modules/rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { -- "imurmurhash": "^0.1.4", -- "signal-exit": "^3.0.7" -+ "glob": "^7.1.3" - }, -- "engines": { -- "node": "^12.13.0 || ^14.15.0 || >=16" -+ "bin": { -+ "rimraf": "bin.js" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/binary-extensions": { -@@ -6523,16 +8104,6 @@ - "url": "https://bevry.me/fund" - } - }, -- "node_modules/bindings": { -- "version": "1.5.0", -- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", -- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", -- "dev": true, -- "optional": true, -- "dependencies": { -- "file-uri-to-path": "1.0.0" -- } -- }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", -@@ -6559,1025 +8130,389 @@ - "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/blob": { -- "version": "0.0.5", -- "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", -- "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", -- "dev": true -- }, -- "node_modules/body-parser": { -- "version": "1.20.0", -- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", -- "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", -- "dev": true, -- "dependencies": { -- "bytes": "3.1.2", -- "content-type": "~1.0.4", -- "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.10.3", -- "raw-body": "2.5.1", -- "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/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/body-parser/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/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/body-parser/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/body-parser/node_modules/qs": { -- "version": "6.10.3", -- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", -- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", -- "dev": true, -- "dependencies": { -- "side-channel": "^1.0.4" -- }, -- "engines": { -- "node": ">=0.6" -- }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -- } -- }, -- "node_modules/bonjour": { -- "version": "3.5.0", -- "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", -- "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", -- "dev": true, -- "dependencies": { -- "array-flatten": "^2.1.0", -- "deep-equal": "^1.0.1", -- "dns-equal": "^1.0.0", -- "dns-txt": "^2.0.2", -- "multicast-dns": "^6.0.1", -- "multicast-dns-service-types": "^1.1.0" -- } -- }, -- "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.1.3", -- "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", -- "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/bootstrap" -- }, -- "peerDependencies": { -- "@popperjs/core": "^2.10.2" -- } -- }, -- "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==", -- "dependencies": { -- "balanced-match": "^1.0.0", -- "concat-map": "0.0.1" -- } -- }, -- "node_modules/braces": { -- "version": "3.0.2", -- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", -- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", -- "dependencies": { -- "fill-range": "^7.0.1" -- }, -- "engines": { -- "node": ">=8" -- } -- }, -- "node_modules/browser-process-hrtime": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", -- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", -- "dev": true -- }, -- "node_modules/browser-sync": { -- "version": "2.24.1", -- "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.24.1.tgz", -- "integrity": "sha512-GCYd5WAoshtyz2/Ycy3Nj4F7rGOCwsFZIegcpQ8iGkk24ZQDo9kFIRlHYWBTcDRnLqEM/Lst79fr5POz3qCzOA==", -- "dev": true, -- "dependencies": { -- "browser-sync-ui": "v1.0.1", -- "bs-recipes": "1.3.4", -- "chokidar": "1.7.0", -- "connect": "3.5.0", -- "connect-history-api-fallback": "^1.5.0", -- "dev-ip": "^1.0.1", -- "easy-extender": "2.3.2", -- "eazy-logger": "3.0.2", -- "etag": "^1.8.1", -- "fresh": "^0.5.2", -- "fs-extra": "3.0.1", -- "http-proxy": "1.15.2", -- "immutable": "3.8.2", -- "localtunnel": "1.9.0", -- "micromatch": "2.3.11", -- "opn": "4.0.2", -- "portscanner": "2.1.1", -- "qs": "6.2.3", -- "raw-body": "^2.3.2", -- "resp-modifier": "6.0.2", -- "rx": "4.1.0", -- "serve-index": "1.8.0", -- "serve-static": "1.13.2", -- "server-destroy": "1.0.1", -- "socket.io": "2.0.4", -- "ua-parser-js": "0.7.17", -- "yargs": "6.4.0" -- }, -- "bin": { -- "browser-sync": "dist/bin.js" -- }, -- "engines": { -- "node": ">= 0.8.0" -- } -- }, -- "node_modules/browser-sync-ui": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-1.0.1.tgz", -- "integrity": "sha512-RIxmwVVcUFhRd1zxp7m2FfLnXHf59x4Gtj8HFwTA//3VgYI3AKkaQAuDL8KDJnE59XqCshxZa13JYuIWtZlKQg==", -- "dev": true, -- "dependencies": { -- "async-each-series": "0.1.1", -- "connect-history-api-fallback": "^1.1.0", -- "immutable": "^3.7.6", -- "server-destroy": "1.0.1", -- "socket.io-client": "2.0.4", -- "stream-throttle": "^0.1.3" -- } -- }, -- "node_modules/browser-sync-webpack-plugin": { -- "version": "2.3.0", -- "resolved": "https://registry.npmjs.org/browser-sync-webpack-plugin/-/browser-sync-webpack-plugin-2.3.0.tgz", -- "integrity": "sha512-MDvuRrTCtoL11dTdwMymo9CNJvYxJoW67gOO61cThfzHNX40S5WcBU+0bVQ86ll7r7aNpNgyzxF7RtnXMTDbyA==", -- "dev": true, -- "dependencies": { -- "lodash": "^4" -- }, -- "peerDependencies": { -- "browser-sync": "^2", -- "webpack": "^1 || ^2 || ^3 || ^4 || ^5" -- } -- }, -- "node_modules/browser-sync/node_modules/ansi-regex": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", -- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/anymatch": { -- "version": "1.3.2", -- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", -- "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", -- "dev": true, -- "dependencies": { -- "micromatch": "^2.1.5", -- "normalize-path": "^2.0.0" -- } -- }, -- "node_modules/browser-sync/node_modules/batch": { -- "version": "0.5.3", -- "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", -- "integrity": "sha512-aQgHPLH2DHpFTpBl5/GiVdNzHEqsLCSs1RiPvqkKP1+7RkNJlv71kL8/KXmvvaLqoZ7ylmvqkZhLjjAoRz8Xgw==", -- "dev": true -- }, -- "node_modules/browser-sync/node_modules/binary-extensions": { -- "version": "1.13.1", -- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", -- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/braces": { -- "version": "1.8.5", -- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", -- "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", -- "dev": true, -- "dependencies": { -- "expand-range": "^1.8.1", -- "preserve": "^0.2.0", -- "repeat-element": "^1.1.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/camelcase": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", -- "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/chokidar": { -- "version": "1.7.0", -- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", -- "integrity": "sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==", -- "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", -- "dev": true, -- "dependencies": { -- "anymatch": "^1.3.0", -- "async-each": "^1.0.0", -- "glob-parent": "^2.0.0", -- "inherits": "^2.0.1", -- "is-binary-path": "^1.0.0", -- "is-glob": "^2.0.0", -- "path-is-absolute": "^1.0.0", -- "readdirp": "^2.0.0" -- }, -- "optionalDependencies": { -- "fsevents": "^1.0.0" -- } -- }, -- "node_modules/browser-sync/node_modules/cliui": { -- "version": "3.2.0", -- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", -- "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", -- "dev": true, -- "dependencies": { -- "string-width": "^1.0.1", -- "strip-ansi": "^3.0.1", -- "wrap-ansi": "^2.0.0" -- } -- }, -- "node_modules/browser-sync/node_modules/debug": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", -- "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", -- "dev": true, -- "dependencies": { -- "ms": "0.7.1" -- } -- }, -- "node_modules/browser-sync/node_modules/eventemitter3": { -- "version": "1.2.0", -- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", -- "integrity": "sha512-DOFqA1MF46fmZl2xtzXR3MPCRsXqgoFqdXcrCVYM3JNnfUeHTm/fh/v/iU7gBFpwkuBmoJPAm5GuhdDfSEJMJA==", -- "dev": true -- }, -- "node_modules/browser-sync/node_modules/fill-range": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", -- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", -- "dev": true, -- "dependencies": { -- "extend-shallow": "^2.0.1", -- "is-number": "^3.0.0", -- "repeat-string": "^1.6.1", -- "to-regex-range": "^2.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/fill-range/node_modules/extend-shallow": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -- "dev": true, -- "dependencies": { -- "is-extendable": "^0.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/find-up": { -- "version": "1.1.2", -- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", -- "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", -- "dev": true, -- "dependencies": { -- "path-exists": "^2.0.0", -- "pinkie-promise": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/fsevents": { -- "version": "1.2.13", -- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", -- "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", -- "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", -- "dev": true, -- "hasInstallScript": true, -- "optional": true, -- "os": [ -- "darwin" -- ], -- "dependencies": { -- "bindings": "^1.5.0", -- "nan": "^2.12.1" -- }, -- "engines": { -- "node": ">= 4.0" -- } -- }, -- "node_modules/browser-sync/node_modules/get-caller-file": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", -- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", -- "dev": true -- }, -- "node_modules/browser-sync/node_modules/glob-parent": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", -- "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", -- "dev": true, -- "dependencies": { -- "is-glob": "^2.0.0" -- } -- }, -- "node_modules/browser-sync/node_modules/http-errors": { -- "version": "1.5.1", -- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", -- "integrity": "sha512-ftkc2U5ADKHv8Ny1QJaDn8xnE18G+fP5QYupx9c3Xk6L5Vgo3qK8Bgbpb4a+jRtaF/YQKjIuXA5J0tde4Tojng==", -- "dev": true, -- "dependencies": { -- "inherits": "2.0.3", -- "setprototypeof": "1.0.2", -- "statuses": ">= 1.3.1 < 2" -- }, -- "engines": { -- "node": ">= 0.6" -- } -- }, -- "node_modules/browser-sync/node_modules/http-proxy": { -- "version": "1.15.2", -- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", -- "integrity": "sha512-E6A/0XNoSfQuCUtxoHuj788eRfZPIp3eCXpQHe2uV+Ebbkq6dvcWSbb9lrC9NdMBedAZBNMB5JRRA3kiiyRRxg==", -- "dev": true, -- "dependencies": { -- "eventemitter3": "1.x.x", -- "requires-port": "1.x.x" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/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/browser-sync/node_modules/invert-kv": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", -- "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/is-accessor-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", -- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/is-binary-path": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", -- "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", -- "dev": true, -- "dependencies": { -- "binary-extensions": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/is-data-descriptor": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", -- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/is-extglob": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", -- "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/is-fullwidth-code-point": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", -- "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", -- "dev": true, -- "dependencies": { -- "number-is-nan": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/is-glob": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", -- "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", -- "dev": true, -- "dependencies": { -- "is-extglob": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/is-number": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", -- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "dependencies": { -- "is-buffer": "^1.1.5" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/lcid": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", -- "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", -- "dev": true, -- "dependencies": { -- "invert-kv": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/micromatch": { -- "version": "2.3.11", -- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", -- "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", -- "dev": true, -- "dependencies": { -- "arr-diff": "^2.0.0", -- "array-unique": "^0.2.1", -- "braces": "^1.8.2", -- "expand-brackets": "^0.1.4", -- "extglob": "^0.3.1", -- "filename-regex": "^2.0.0", -- "is-extglob": "^1.0.0", -- "is-glob": "^2.0.1", -- "kind-of": "^3.0.2", -- "normalize-path": "^2.0.1", -- "object.omit": "^2.0.0", -- "parse-glob": "^3.0.4", -- "regex-cache": "^0.4.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/ms": { -- "version": "0.7.1", -- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", -- "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", -- "dev": true -- }, -- "node_modules/browser-sync/node_modules/normalize-path": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", -- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", -- "dev": true, -- "dependencies": { -- "remove-trailing-separator": "^1.0.1" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/browser-sync/node_modules/os-locale": { -- "version": "1.4.0", -- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", -- "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", -- "dev": true, -+ "type": "consulting", -+ "url": "https://feross.org/support" -+ } -+ ], - "dependencies": { -- "lcid": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -+ "base64-js": "^1.3.1", -+ "ieee754": "^1.1.13" - } - }, -- "node_modules/browser-sync/node_modules/path-exists": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", -- "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", -+ "node_modules/body-parser": { -+ "version": "1.20.1", -+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", -+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { -- "pinkie-promise": "^2.0.0" -+ "bytes": "3.1.2", -+ "content-type": "~1.0.4", -+ "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.1", -+ "type-is": "~1.6.18", -+ "unpipe": "1.0.0" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">= 0.8", -+ "npm": "1.2.8000 || >= 1.4.16" - } - }, -- "node_modules/browser-sync/node_modules/path-type": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", -- "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", -+ "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": { -- "graceful-fs": "^4.1.2", -- "pify": "^2.0.0", -- "pinkie-promise": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -+ "ms": "2.0.0" - } - }, -- "node_modules/browser-sync/node_modules/read-pkg": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", -- "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", -+ "node_modules/body-parser/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, -- "dependencies": { -- "load-json-file": "^1.0.0", -- "normalize-package-data": "^2.3.2", -- "path-type": "^1.0.0" -- }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">= 0.8" - } - }, -- "node_modules/browser-sync/node_modules/read-pkg-up": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", -- "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", -+ "node_modules/body-parser/node_modules/destroy": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", -+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, -- "dependencies": { -- "find-up": "^1.0.0", -- "read-pkg": "^1.0.0" -- }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">= 0.8", -+ "npm": "1.2.8000 || >= 1.4.16" - } - }, -- "node_modules/browser-sync/node_modules/readable-stream": { -- "version": "2.3.7", -- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", -- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", -- "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/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/browser-sync/node_modules/readdirp": { -- "version": "2.2.1", -- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", -- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", -+ "node_modules/body-parser/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": { -- "graceful-fs": "^4.1.11", -- "micromatch": "^3.1.10", -- "readable-stream": "^2.0.2" -+ "ee-first": "1.1.1" - }, - "engines": { -- "node": ">=0.10" -+ "node": ">= 0.8" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/arr-diff": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", -- "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", -+ "node_modules/bonjour-service": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", -+ "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, -- "engines": { -- "node": ">=0.10.0" -+ "dependencies": { -+ "array-flatten": "^2.1.2", -+ "dns-equal": "^1.0.0", -+ "fast-deep-equal": "^3.1.3", -+ "multicast-dns": "^7.2.5" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/array-unique": { -- "version": "0.3.2", -- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", -- "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -+ "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/browser-sync/node_modules/readdirp/node_modules/braces": { -- "version": "2.3.2", -- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", -- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", -- "dev": true, -- "dependencies": { -- "arr-flatten": "^1.1.0", -- "array-unique": "^0.3.2", -- "extend-shallow": "^2.0.1", -- "fill-range": "^4.0.0", -- "isobject": "^3.0.1", -- "repeat-element": "^1.1.2", -- "snapdragon": "^0.8.1", -- "snapdragon-node": "^2.0.1", -- "split-string": "^3.0.2", -- "to-regex": "^3.0.1" -- }, -- "engines": { -- "node": ">=0.10.0" -+ "node_modules/bootstrap": { -+ "version": "5.3.2", -+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", -+ "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", -+ "funding": [ -+ { -+ "type": "github", -+ "url": "https://github.com/sponsors/twbs" -+ }, -+ { -+ "type": "opencollective", -+ "url": "https://opencollective.com/bootstrap" -+ } -+ ], -+ "peerDependencies": { -+ "@popperjs/core": "^2.11.8" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/braces/node_modules/extend-shallow": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -+ "node_modules/bplist-parser": { -+ "version": "0.2.0", -+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", -+ "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "dependencies": { -- "is-extendable": "^0.1.0" -+ "big-integer": "^1.6.44" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">= 5.10.0" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/debug": { -- "version": "2.6.9", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", -+ "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": { -- "ms": "2.0.0" -+ "balanced-match": "^1.0.0", -+ "concat-map": "0.0.1" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/expand-brackets": { -- "version": "2.1.4", -- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", -- "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", -- "dev": true, -+ "node_modules/braces": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", -+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { -- "debug": "^2.3.3", -- "define-property": "^0.2.5", -- "extend-shallow": "^2.0.1", -- "posix-character-classes": "^0.1.0", -- "regex-not": "^1.0.0", -- "snapdragon": "^0.8.1", -- "to-regex": "^3.0.1" -+ "fill-range": "^7.0.1" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=8" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/expand-brackets/node_modules/define-property": { -- "version": "0.2.5", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", -- "dev": true, -- "dependencies": { -- "is-descriptor": "^0.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -+ "node_modules/browser-process-hrtime": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", -+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", -+ "dev": true - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/expand-brackets/node_modules/extend-shallow": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -+ "node_modules/browser-sync": { -+ "version": "2.29.3", -+ "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.3.tgz", -+ "integrity": "sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==", - "dev": true, - "dependencies": { -- "is-extendable": "^0.1.0" -+ "browser-sync-client": "^2.29.3", -+ "browser-sync-ui": "^2.29.3", -+ "bs-recipes": "1.3.4", -+ "chalk": "4.1.2", -+ "chokidar": "^3.5.1", -+ "connect": "3.6.6", -+ "connect-history-api-fallback": "^1", -+ "dev-ip": "^1.0.1", -+ "easy-extender": "^2.3.4", -+ "eazy-logger": "^4.0.1", -+ "etag": "^1.8.1", -+ "fresh": "^0.5.2", -+ "fs-extra": "3.0.1", -+ "http-proxy": "^1.18.1", -+ "immutable": "^3", -+ "localtunnel": "^2.0.1", -+ "micromatch": "^4.0.2", -+ "opn": "5.3.0", -+ "portscanner": "2.2.0", -+ "raw-body": "^2.3.2", -+ "resp-modifier": "6.0.2", -+ "rx": "4.1.0", -+ "send": "0.16.2", -+ "serve-index": "1.9.1", -+ "serve-static": "1.13.2", -+ "server-destroy": "1.0.1", -+ "socket.io": "^4.4.1", -+ "ua-parser-js": "^1.0.33", -+ "yargs": "^17.3.1" -+ }, -+ "bin": { -+ "browser-sync": "dist/bin.js" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">= 8.0.0" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/expand-brackets/node_modules/is-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", -- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", -+ "node_modules/browser-sync-client": { -+ "version": "2.29.3", -+ "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz", -+ "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==", - "dev": true, - "dependencies": { -- "is-accessor-descriptor": "^0.1.6", -- "is-data-descriptor": "^0.1.4", -- "kind-of": "^5.0.0" -+ "etag": "1.8.1", -+ "fresh": "0.5.2", -+ "mitt": "^1.1.3" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=8.0.0" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/expand-brackets/node_modules/kind-of": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", -- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", -+ "node_modules/browser-sync-ui": { -+ "version": "2.29.3", -+ "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz", -+ "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==", - "dev": true, -- "engines": { -- "node": ">=0.10.0" -+ "dependencies": { -+ "async-each-series": "0.1.1", -+ "chalk": "4.1.2", -+ "connect-history-api-fallback": "^1", -+ "immutable": "^3", -+ "server-destroy": "1.0.1", -+ "socket.io-client": "^4.4.1", -+ "stream-throttle": "^0.1.3" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/extglob": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", -- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", -+ "node_modules/browser-sync-ui/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": { -- "array-unique": "^0.3.2", -- "define-property": "^1.0.0", -- "expand-brackets": "^2.1.4", -- "extend-shallow": "^2.0.1", -- "fragment-cache": "^0.2.1", -- "regex-not": "^1.0.0", -- "snapdragon": "^0.8.1", -- "to-regex": "^3.0.1" -+ "color-convert": "^2.0.1" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=8" -+ }, -+ "funding": { -+ "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/extglob/node_modules/define-property": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", -- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", -+ "node_modules/browser-sync-ui/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": { -- "is-descriptor": "^1.0.0" -+ "ansi-styles": "^4.1.0", -+ "supports-color": "^7.1.0" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/node_modules/extglob/node_modules/extend-shallow": { -+ "node_modules/browser-sync-ui/node_modules/color-convert": { - "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", -+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { -- "is-extendable": "^0.1.0" -+ "color-name": "~1.1.4" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=7.0.0" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/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/browser-sync-ui/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/browser-sync/node_modules/readdirp/node_modules/micromatch": { -- "version": "3.1.10", -- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", -- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", -+ "node_modules/browser-sync-ui/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, -- "dependencies": { -- "arr-diff": "^4.0.0", -- "array-unique": "^0.3.2", -- "braces": "^2.3.1", -- "define-property": "^2.0.2", -- "extend-shallow": "^3.0.2", -- "extglob": "^2.0.4", -- "fragment-cache": "^0.2.1", -- "kind-of": "^6.0.2", -- "nanomatch": "^1.2.9", -- "object.pick": "^1.3.0", -- "regex-not": "^1.0.0", -- "snapdragon": "^0.8.1", -- "to-regex": "^3.0.2" -- }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=8" - } - }, -- "node_modules/browser-sync/node_modules/readdirp/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/browser-sync/node_modules/serve-index": { -- "version": "1.8.0", -- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.8.0.tgz", -- "integrity": "sha512-XnbKO4axHnVgU7wuoP68XsJFC4sqtCENQ6z+9HwdL/vMpgykFFQD9zEkW+QzcxeNY7m2HzkDM4XbRa0UWeSW0w==", -+ "node_modules/browser-sync-ui/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": { -- "accepts": "~1.3.3", -- "batch": "0.5.3", -- "debug": "~2.2.0", -- "escape-html": "~1.0.3", -- "http-errors": "~1.5.0", -- "mime-types": "~2.1.11", -- "parseurl": "~1.3.1" -+ "has-flag": "^4.0.0" - }, - "engines": { -- "node": ">= 0.8.0" -- } -- }, -- "node_modules/browser-sync/node_modules/setprototypeof": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", -- "integrity": "sha512-mNRSo7UFE4c4tjxlZ3KxO5r+3oQUD1M/KXbp/XTwTwybL4VR9T8Ltmv5DvZX8iRz6C3hQmQftXEV0EmTKRV6mg==", -- "dev": true -- }, -- "node_modules/browser-sync/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": ">=8" - } - }, -- "node_modules/browser-sync/node_modules/string-width": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", -- "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", -+ "node_modules/browser-sync-webpack-plugin": { -+ "version": "2.3.0", -+ "resolved": "https://registry.npmjs.org/browser-sync-webpack-plugin/-/browser-sync-webpack-plugin-2.3.0.tgz", -+ "integrity": "sha512-MDvuRrTCtoL11dTdwMymo9CNJvYxJoW67gOO61cThfzHNX40S5WcBU+0bVQ86ll7r7aNpNgyzxF7RtnXMTDbyA==", - "dev": true, - "dependencies": { -- "code-point-at": "^1.0.0", -- "is-fullwidth-code-point": "^1.0.0", -- "strip-ansi": "^3.0.0" -+ "lodash": "^4" - }, -- "engines": { -- "node": ">=0.10.0" -+ "peerDependencies": { -+ "browser-sync": "^2", -+ "webpack": "^1 || ^2 || ^3 || ^4 || ^5" - } - }, -- "node_modules/browser-sync/node_modules/strip-ansi": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", -- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", -+ "node_modules/browser-sync/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": { -- "ansi-regex": "^2.0.0" -+ "color-convert": "^2.0.1" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=8" -+ }, -+ "funding": { -+ "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, -- "node_modules/browser-sync/node_modules/to-regex-range": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", -- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", -+ "node_modules/browser-sync/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": { -- "is-number": "^3.0.0", -- "repeat-string": "^1.6.1" -+ "ansi-styles": "^4.1.0", -+ "supports-color": "^7.1.0" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, -- "node_modules/browser-sync/node_modules/wrap-ansi": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", -- "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", -+ "node_modules/browser-sync/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": { -- "string-width": "^1.0.1", -- "strip-ansi": "^3.0.1" -+ "color-name": "~1.1.4" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=7.0.0" - } - }, -- "node_modules/browser-sync/node_modules/y18n": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", -- "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", -+ "node_modules/browser-sync/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/browser-sync/node_modules/yargs": { -- "version": "6.4.0", -- "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", -- "integrity": "sha512-A15csWvmIXbonra+RWt2beKGIt1HQTyd/cs2Wpv2y0uYZvUH7EU5vrzgWZN8j3bPzeQqg4JMtGXmYTWKHIOl9A==", -+ "node_modules/browser-sync/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, -- "dependencies": { -- "camelcase": "^3.0.0", -- "cliui": "^3.2.0", -- "decamelize": "^1.1.1", -- "get-caller-file": "^1.0.1", -- "os-locale": "^1.4.0", -- "read-pkg-up": "^1.0.1", -- "require-directory": "^2.1.1", -- "require-main-filename": "^1.0.1", -- "set-blocking": "^2.0.0", -- "string-width": "^1.0.2", -- "which-module": "^1.0.0", -- "window-size": "^0.2.0", -- "y18n": "^3.2.1", -- "yargs-parser": "^4.1.0" -+ "engines": { -+ "node": ">=8" - } - }, -- "node_modules/browser-sync/node_modules/yargs-parser": { -- "version": "4.2.1", -- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", -- "integrity": "sha512-+QQWqC2xeL0N5/TE+TY6OGEqyNRM+g2/r712PDNYgiCdXYCApXf1vzfmDSLBxfGRwV+moTq/V8FnMI24JCm2Yg==", -+ "node_modules/browser-sync/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": { -- "camelcase": "^3.0.0" -+ "has-flag": "^4.0.0" -+ }, -+ "engines": { -+ "node": ">=8" - } - }, - "node_modules/browserslist": { -- "version": "4.20.4", -- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", -- "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", -+ "version": "4.22.1", -+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", -+ "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "funding": [ - { - "type": "opencollective", -@@ -7586,14 +8521,17 @@ - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" -+ }, -+ { -+ "type": "github", -+ "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { -- "caniuse-lite": "^1.0.30001349", -- "electron-to-chromium": "^1.4.147", -- "escalade": "^3.1.1", -- "node-releases": "^2.0.5", -- "picocolors": "^1.0.0" -+ "caniuse-lite": "^1.0.30001541", -+ "electron-to-chromium": "^1.4.535", -+ "node-releases": "^2.0.13", -+ "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" -@@ -7630,14 +8568,27 @@ - } - }, - "node_modules/buffer": { -- "version": "4.9.2", -- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", -- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", -+ "version": "6.0.3", -+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", -+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "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.0.2", -- "ieee754": "^1.1.4", -- "isarray": "^1.0.0" -+ "base64-js": "^1.3.1", -+ "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-from": { -@@ -7646,11 +8597,25 @@ - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, -- "node_modules/buffer-indexof": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", -- "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", -- "dev": true -+ "node_modules/buffer/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/builtins": { - "version": "1.0.3", -@@ -7658,6 +8623,21 @@ - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, -+ "node_modules/bundle-name": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", -+ "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", -+ "dev": true, -+ "dependencies": { -+ "run-applescript": "^5.0.0" -+ }, -+ "engines": { -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", -@@ -7696,24 +8676,19 @@ - "node": ">= 10" - } - }, -- "node_modules/cache-base": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", -- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", -+ "node_modules/cacache/node_modules/rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { -- "collection-visit": "^1.0.0", -- "component-emitter": "^1.2.1", -- "get-value": "^2.0.6", -- "has-value": "^1.0.0", -- "isobject": "^3.0.1", -- "set-value": "^2.0.0", -- "to-object-path": "^0.3.0", -- "union-value": "^1.0.0", -- "unset-value": "^1.0.0" -+ "glob": "^7.1.3" - }, -- "engines": { -- "node": ">=0.10.0" -+ "bin": { -+ "rimraf": "bin.js" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/call-bind": { -@@ -7729,15 +8704,6 @@ - "url": "https://github.com/sponsors/ljharb" - } - }, -- "node_modules/callsite": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", -- "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", -- "dev": true, -- "engines": { -- "node": "*" -- } -- }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", -@@ -7756,15 +8722,10 @@ - "node": ">=6" - } - }, -- "node_modules/can-use-dom": { -- "version": "0.1.0", -- "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", -- "integrity": "sha512-ceOhN1DL7Y4O6M0j9ICgmTYziV89WMd96SvSl0REd8PMgrY0B/WBOPoed5S1KUmJqXgUXh8gzSe6E3ae27upsQ==" -- }, - "node_modules/caniuse-lite": { -- "version": "1.0.30001358", -- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", -- "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==", -+ "version": "1.0.30001559", -+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz", -+ "integrity": "sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==", - "funding": [ - { - "type": "opencollective", -@@ -7773,6 +8734,10 @@ - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" -+ }, -+ { -+ "type": "github", -+ "url": "https://github.com/sponsors/ai" - } - ] - }, -@@ -7869,127 +8834,26 @@ - } - }, - "node_modules/ci-info": { -- "version": "3.3.2", -- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", -- "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", -- "dev": true -- }, -- "node_modules/circular-dependency-plugin": { -- "version": "5.2.2", -- "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", -- "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", -+ "version": "3.9.0", -+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", -+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, -+ "funding": [ -+ { -+ "type": "github", -+ "url": "https://github.com/sponsors/sibiraj-s" -+ } -+ ], - "engines": { -- "node": ">=6.0.0" -- }, -- "peerDependencies": { -- "webpack": ">=4.0.1" -+ "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { -- "version": "1.2.2", -- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", -- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", -+ "version": "1.2.3", -+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", -+ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, -- "node_modules/class-utils": { -- "version": "0.3.6", -- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", -- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", -- "dev": true, -- "dependencies": { -- "arr-union": "^3.1.0", -- "define-property": "^0.2.5", -- "isobject": "^3.0.0", -- "static-extend": "^0.1.1" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/class-utils/node_modules/define-property": { -- "version": "0.2.5", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", -- "dev": true, -- "dependencies": { -- "is-descriptor": "^0.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/class-utils/node_modules/is-accessor-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", -- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "dependencies": { -- "is-buffer": "^1.1.5" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/class-utils/node_modules/is-data-descriptor": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", -- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "dependencies": { -- "is-buffer": "^1.1.5" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/class-utils/node_modules/is-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", -- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", -- "dev": true, -- "dependencies": { -- "is-accessor-descriptor": "^0.1.6", -- "is-data-descriptor": "^0.1.4", -- "kind-of": "^5.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/class-utils/node_modules/kind-of": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", -- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", -@@ -8087,9 +8951,9 @@ - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { -- "version": "7.0.1", -- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", -- "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", -+ "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" -@@ -8111,13 +8975,16 @@ - } - }, - "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==", -+ "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.0", -+ "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" -+ }, -+ "engines": { -+ "node": ">=12" - } - }, - "node_modules/clone": { -@@ -8215,34 +9082,12 @@ - "node": ">= 0.12.0" - } - }, -- "node_modules/code-point-at": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", -- "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/collect-v8-coverage": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", -- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", -+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, -- "node_modules/collection-visit": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", -- "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", -- "dev": true, -- "dependencies": { -- "map-visit": "^1.0.0", -- "object-visit": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", -@@ -8286,9 +9131,9 @@ - } - }, - "node_modules/colorette": { -- "version": "2.0.19", -- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", -- "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", -+ "version": "2.0.20", -+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", -+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/colors": { -@@ -8323,10 +9168,13 @@ - } - }, - "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 -+ "version": "11.0.0", -+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", -+ "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16" -+ } - }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", -@@ -8334,30 +9182,18 @@ - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, -+ "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/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, -- "node_modules/component-bind": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", -- "integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==", -- "dev": true -- }, -- "node_modules/component-emitter": { -- "version": "1.2.1", -- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", -- "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==", -- "dev": true -- }, -- "node_modules/component-inherit": { -- "version": "0.0.3", -- "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", -- "integrity": "sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==", -- "dev": true -- }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", -@@ -8415,7 +9251,8 @@ - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", -- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" -+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", -+ "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", -@@ -8457,25 +9294,30 @@ - } - }, - "node_modules/concurrently": { -- "version": "7.1.0", -- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.1.0.tgz", -- "integrity": "sha512-Bz0tMlYKZRUDqJlNiF/OImojMB9ruKUz6GCfmhFnSapXgPe+3xzY4byqoKG9tUZ7L2PGEUjfLPOLfIX3labnmw==", -+ "version": "8.2.1", -+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.1.tgz", -+ "integrity": "sha512-nVraf3aXOpIcNud5pB9M82p1tynmZkrSGQ1p6X/VY8cJ+2LMVqAgXsJxYYefACSHbTYlm92O1xuhdGTjwoEvbQ==", - "dev": true, - "dependencies": { -- "chalk": "^4.1.0", -- "date-fns": "^2.16.1", -+ "chalk": "^4.1.2", -+ "date-fns": "^2.30.0", - "lodash": "^4.17.21", -- "rxjs": "^6.6.3", -- "spawn-command": "^0.0.2-1", -- "supports-color": "^8.1.0", -+ "rxjs": "^7.8.1", -+ "shell-quote": "^1.8.1", -+ "spawn-command": "0.0.2", -+ "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", -- "yargs": "^16.2.0" -+ "yargs": "^17.7.2" - }, - "bin": { -+ "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { -- "node": "^12.20.0 || ^14.13.0 || >=16.0.0" -+ "node": "^14.13.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/ansi-styles": { -@@ -8548,18 +9390,6 @@ - "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", -@@ -8575,30 +9405,6 @@ - "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/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/conf": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/conf/-/conf-10.1.2.tgz", -@@ -8624,15 +9430,15 @@ - } - }, - "node_modules/connect": { -- "version": "3.5.0", -- "resolved": "https://registry.npmjs.org/connect/-/connect-3.5.0.tgz", -- "integrity": "sha512-UWZ2TvKuiKryxJJVRgINgqkQjKjzIu92glQP+jSFrS0LL5De9oOKnFSbZzsGenZ65EnpgWQtFBQ1Bg6blLpWVA==", -+ "version": "3.6.6", -+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", -+ "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==", - "dev": true, - "dependencies": { -- "debug": "~2.2.0", -- "finalhandler": "0.5.0", -- "parseurl": "~1.3.1", -- "utils-merge": "1.0.0" -+ "debug": "2.6.9", -+ "finalhandler": "1.1.0", -+ "parseurl": "~1.3.2", -+ "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" -@@ -8648,29 +9454,20 @@ - } - }, - "node_modules/connect/node_modules/debug": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", -- "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", -+ "version": "2.6.9", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { -- "ms": "0.7.1" -+ "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { -- "version": "0.7.1", -- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", -- "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, -- "node_modules/connect/node_modules/utils-merge": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", -- "integrity": "sha512-HwU9SLQEtyo+0uoKXd1nkLqigUWLB+QuNQR4OcmB73eWqksM5ovuqcycks2x043W8XVb75rG1HQ0h93TMXkzQQ==", -- "dev": true, -- "engines": { -- "node": ">= 0.4.0" -- } -- }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", -@@ -8710,9 +9507,9 @@ - ] - }, - "node_modules/content-type": { -- "version": "1.0.4", -- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", -- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", -+ "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" -@@ -8727,9 +9524,9 @@ - } - }, - "node_modules/cookie": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", -- "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", -+ "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" -@@ -8753,30 +9550,21 @@ - "url": "https://github.com/sponsors/mesqueeb" - } - }, -- "node_modules/copy-descriptor": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", -- "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/copy-webpack-plugin": { -- "version": "10.2.4", -- "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", -- "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", -+ "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.7", -+ "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", -- "globby": "^12.0.2", -+ "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { -- "node": ">= 12.20.0" -+ "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", -@@ -8786,18 +9574,6 @@ - "webpack": "^5.1.0" - } - }, -- "node_modules/copy-webpack-plugin/node_modules/array-union": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", -- "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", -- "dev": true, -- "engines": { -- "node": ">=12" -- }, -- "funding": { -- "url": "https://github.com/sponsors/sindresorhus" -- } -- }, - "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", -@@ -8811,15 +9587,14 @@ - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { -- "version": "12.2.0", -- "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", -- "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", -+ "version": "13.2.2", -+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", -+ "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { -- "array-union": "^3.0.1", - "dir-glob": "^3.0.1", -- "fast-glob": "^3.2.7", -- "ignore": "^5.1.9", -+ "fast-glob": "^3.3.0", -+ "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, -@@ -8830,25 +9605,6 @@ - "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/copy-webpack-plugin/node_modules/schema-utils": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", -- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", -- "dev": true, -- "dependencies": { -- "@types/json-schema": "^7.0.9", -- "ajv": "^8.8.0", -- "ajv-formats": "^2.1.1", -- "ajv-keywords": "^5.0.0" -- }, -- "engines": { -- "node": ">= 12.13.0" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/webpack" -- } -- }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", -@@ -8861,59 +9617,171 @@ - "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/core-js": { -- "version": "3.20.3", -- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.3.tgz", -- "integrity": "sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag==", -- "hasInstallScript": true, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/core-js" -- } -- }, - "node_modules/core-js-compat": { -- "version": "3.23.2", -- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.2.tgz", -- "integrity": "sha512-lrgZvxFwbQp9v7E8mX0rJ+JX7Bvh4eGULZXA1IAyjlsnWvCdw6TF8Tg6xtaSUSJMrSrMaLdpmk+V54LM1dvfOA==", -+ "version": "3.33.2", -+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz", -+ "integrity": "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==", - "dev": true, - "dependencies": { -- "browserslist": "^4.20.4", -- "semver": "7.0.0" -+ "browserslist": "^4.22.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, -- "node_modules/core-js-compat/node_modules/semver": { -- "version": "7.0.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", -- "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", -- "dev": true, -- "bin": { -- "semver": "bin/semver.js" -- } -- }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "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": "7.0.1", -- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", -- "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", -+ "version": "8.3.6", -+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", -+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "dependencies": { -- "@types/parse-json": "^4.0.0", -- "import-fresh": "^3.2.1", -- "parse-json": "^5.0.0", -- "path-type": "^4.0.0", -- "yaml": "^1.10.0" -+ "import-fresh": "^3.3.0", -+ "js-yaml": "^4.1.0", -+ "parse-json": "^5.2.0", -+ "path-type": "^4.0.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/create-jest": { -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", -+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", -+ "dev": true, -+ "dependencies": { -+ "@jest/types": "^29.6.3", -+ "chalk": "^4.0.0", -+ "exit": "^0.1.2", -+ "graceful-fs": "^4.2.9", -+ "jest-config": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "prompts": "^2.0.1" -+ }, -+ "bin": { -+ "create-jest": "bin/create-jest.js" -+ }, -+ "engines": { -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/create-jest/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/create-jest/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/create-jest/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/create-jest/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/create-jest/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/create-jest/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/create-require": { -@@ -8923,16 +9791,17 @@ - "dev": true - }, - "node_modules/critters": { -- "version": "0.0.16", -- "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", -- "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", -+ "version": "0.0.20", -+ "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.20.tgz", -+ "integrity": "sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", -- "css-select": "^4.2.0", -- "parse5": "^6.0.1", -- "parse5-htmlparser2-tree-adapter": "^6.0.1", -- "postcss": "^8.3.7", -+ "css-select": "^5.1.0", -+ "dom-serializer": "^2.0.0", -+ "domhandler": "^5.0.2", -+ "htmlparser2": "^8.0.2", -+ "postcss": "^8.4.23", - "pretty-bytes": "^5.3.0" - } - }, -@@ -9020,67 +9889,20 @@ - "node": ">= 8" - } - }, -- "node_modules/css": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", -- "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", -- "dev": true, -- "dependencies": { -- "inherits": "^2.0.4", -- "source-map": "^0.6.1", -- "source-map-resolve": "^0.6.0" -- } -- }, -- "node_modules/css-blank-pseudo": { -- "version": "3.0.3", -- "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", -- "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", -- "dev": true, -- "dependencies": { -- "postcss-selector-parser": "^6.0.9" -- }, -- "bin": { -- "css-blank-pseudo": "dist/cli.cjs" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/css-has-pseudo": { -- "version": "3.0.4", -- "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", -- "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", -- "dev": true, -- "dependencies": { -- "postcss-selector-parser": "^6.0.9" -- }, -- "bin": { -- "css-has-pseudo": "dist/cli.cjs" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, - "node_modules/css-loader": { -- "version": "6.5.1", -- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", -- "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", -+ "version": "6.8.1", -+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", -+ "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", -- "postcss": "^8.2.15", -+ "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", -- "postcss-modules-local-by-default": "^4.0.0", -+ "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", -- "postcss-value-parser": "^4.1.0", -- "semver": "^7.3.5" -+ "postcss-value-parser": "^4.2.0", -+ "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" -@@ -9093,31 +9915,31 @@ - "webpack": "^5.0.0" - } - }, -- "node_modules/css-prefers-color-scheme": { -- "version": "6.0.3", -- "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", -- "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", -+ "node_modules/css-loader/node_modules/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, -+ "dependencies": { -+ "lru-cache": "^6.0.0" -+ }, - "bin": { -- "css-prefers-color-scheme": "dist/cli.cjs" -+ "semver": "bin/semver.js" - }, - "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -+ "node": ">=10" - } - }, - "node_modules/css-select": { -- "version": "4.3.0", -- "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", -- "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", -+ "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.0.1", -- "domhandler": "^4.3.1", -- "domutils": "^2.8.0", -+ "css-what": "^6.1.0", -+ "domhandler": "^5.0.2", -+ "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { -@@ -9136,21 +9958,6 @@ - "url": "https://github.com/sponsors/fb55" - } - }, -- "node_modules/css/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/cssdb": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-5.1.0.tgz", -- "integrity": "sha512-/vqjXhv1x9eGkE/zO6o8ZOI7dgdZbLVLUGyVRbPgk6YipXbW87YzUCcO+Jrmi5bwJlAH6oD+MNeZyRgXea1GZw==", -- "dev": true -- }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", -@@ -9223,10 +10030,13 @@ - } - }, - "node_modules/date-fns": { -- "version": "2.28.0", -- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", -- "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", -+ "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" - }, -@@ -9245,9 +10055,9 @@ - } - }, - "node_modules/dayjs": { -- "version": "1.11.0", -- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.0.tgz", -- "integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==" -+ "version": "1.11.10", -+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", -+ "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" - }, - "node_modules/debounce-fn": { - "version": "4.0.0", -@@ -9265,9 +10075,9 @@ - } - }, - "node_modules/debug": { -- "version": "4.3.3", -- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", -- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", -+ "version": "4.3.4", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", -+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, -@@ -9280,84 +10090,201 @@ - } - } - }, -- "node_modules/debuglog": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", -- "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", -+ "node_modules/debuglog": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", -+ "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", -+ "dev": true, -+ "engines": { -+ "node": "*" -+ } -+ }, -+ "node_modules/decimal.js": { -+ "version": "10.4.3", -+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", -+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", -+ "dev": true -+ }, -+ "node_modules/dedent": { -+ "version": "1.5.1", -+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", -+ "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", -+ "dev": true, -+ "peerDependencies": { -+ "babel-plugin-macros": "^3.1.0" -+ }, -+ "peerDependenciesMeta": { -+ "babel-plugin-macros": { -+ "optional": true -+ } -+ } -+ }, -+ "node_modules/deep-extend": { -+ "version": "0.6.0", -+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", -+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", -+ "dev": true, -+ "engines": { -+ "node": ">=4.0.0" -+ } -+ }, -+ "node_modules/deep-is": { -+ "version": "0.1.4", -+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", -+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", -+ "dev": true -+ }, -+ "node_modules/deepmerge": { -+ "version": "4.3.1", -+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", -+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", -+ "dev": true, -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/default-browser": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", -+ "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", -+ "dev": true, -+ "dependencies": { -+ "bundle-name": "^3.0.0", -+ "default-browser-id": "^3.0.0", -+ "execa": "^7.1.1", -+ "titleize": "^3.0.0" -+ }, -+ "engines": { -+ "node": ">=14.16" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/default-browser-id": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", -+ "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", -+ "dev": true, -+ "dependencies": { -+ "bplist-parser": "^0.2.0", -+ "untildify": "^4.0.0" -+ }, -+ "engines": { -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/default-browser/node_modules/execa": { -+ "version": "7.2.0", -+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", -+ "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", -+ "dev": true, -+ "dependencies": { -+ "cross-spawn": "^7.0.3", -+ "get-stream": "^6.0.1", -+ "human-signals": "^4.3.0", -+ "is-stream": "^3.0.0", -+ "merge-stream": "^2.0.0", -+ "npm-run-path": "^5.1.0", -+ "onetime": "^6.0.0", -+ "signal-exit": "^3.0.7", -+ "strip-final-newline": "^3.0.0" -+ }, -+ "engines": { -+ "node": "^14.18.0 || ^16.14.0 || >=18.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/sindresorhus/execa?sponsor=1" -+ } -+ }, -+ "node_modules/default-browser/node_modules/human-signals": { -+ "version": "4.3.1", -+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", -+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { -- "node": "*" -+ "node": ">=14.18.0" - } - }, -- "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==", -+ "node_modules/default-browser/node_modules/is-stream": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", -+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { -- "node": ">=0.10.0" -+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/decimal.js": { -- "version": "10.3.1", -- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", -- "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", -- "dev": true -- }, -- "node_modules/decode-uri-component": { -- "version": "0.2.0", -- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", -- "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", -+ "node_modules/default-browser/node_modules/mimic-fn": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", -+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { -- "node": ">=0.10" -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/dedent": { -- "version": "0.7.0", -- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", -- "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", -- "dev": true -- }, -- "node_modules/deep-equal": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", -- "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", -+ "node_modules/default-browser/node_modules/npm-run-path": { -+ "version": "5.1.0", -+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", -+ "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { -- "is-arguments": "^1.0.4", -- "is-date-object": "^1.0.1", -- "is-regex": "^1.0.4", -- "object-is": "^1.0.1", -- "object-keys": "^1.1.1", -- "regexp.prototype.flags": "^1.2.0" -+ "path-key": "^4.0.0" -+ }, -+ "engines": { -+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { -- "url": "https://github.com/sponsors/ljharb" -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/deep-extend": { -- "version": "0.6.0", -- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", -- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", -+ "node_modules/default-browser/node_modules/onetime": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", -+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, -+ "dependencies": { -+ "mimic-fn": "^4.0.0" -+ }, - "engines": { -- "node": ">=4.0.0" -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/deep-is": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", -- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", -- "dev": true -+ "node_modules/default-browser/node_modules/path-key": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", -+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } - }, -- "node_modules/deepmerge": { -- "version": "4.2.2", -- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", -- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", -+ "node_modules/default-browser/node_modules/strip-final-newline": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", -+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway": { -@@ -9390,57 +10317,6 @@ - "node": ">=8" - } - }, -- "node_modules/define-properties": { -- "version": "1.1.4", -- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", -- "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", -- "dev": true, -- "dependencies": { -- "has-property-descriptors": "^1.0.0", -- "object-keys": "^1.1.1" -- }, -- "engines": { -- "node": ">= 0.4" -- }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -- } -- }, -- "node_modules/define-property": { -- "version": "2.0.2", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", -- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", -- "dev": true, -- "dependencies": { -- "is-descriptor": "^1.0.2", -- "isobject": "^3.0.1" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/del": { -- "version": "6.1.1", -- "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", -- "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", -- "dev": true, -- "dependencies": { -- "globby": "^11.0.1", -- "graceful-fs": "^4.2.4", -- "is-glob": "^4.0.1", -- "is-path-cwd": "^2.2.0", -- "is-path-inside": "^3.0.2", -- "p-map": "^4.0.0", -- "rimraf": "^3.0.2", -- "slash": "^3.0.0" -- }, -- "engines": { -- "node": ">=10" -- }, -- "funding": { -- "url": "https://github.com/sponsors/sindresorhus" -- } -- }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", -@@ -9465,14 +10341,6 @@ - "node": ">= 0.6" - } - }, -- "node_modules/dependency-graph": { -- "version": "0.11.0", -- "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", -- "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", -- "engines": { -- "node": ">= 0.6.0" -- } -- }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", -@@ -9486,12 +10354,12 @@ - "dev": true - }, - "node_modules/detect-indent": { -- "version": "6.1.0", -- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", -- "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", -+ "version": "7.0.1", -+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", -+ "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", - "dev": true, - "engines": { -- "node": ">=8" -+ "node": ">=12.20" - } - }, - "node_modules/detect-newline": { -@@ -9547,12 +10415,12 @@ - } - }, - "node_modules/diff-sequences": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", -- "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", -+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { -@@ -9574,22 +10442,15 @@ - "dev": true - }, - "node_modules/dns-packet": { -- "version": "1.3.4", -- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", -- "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", -- "dev": true, -- "dependencies": { -- "ip": "^1.1.0", -- "safe-buffer": "^5.0.1" -- } -- }, -- "node_modules/dns-txt": { -- "version": "2.0.2", -- "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", -- "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", -+ "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": { -- "buffer-indexof": "^1.0.0" -+ "@leichtgewicht/ip-codec": "^2.0.1" -+ }, -+ "engines": { -+ "node": ">=6" - } - }, - "node_modules/doctrine": { -@@ -9605,14 +10466,14 @@ - } - }, - "node_modules/dom-serializer": { -- "version": "1.4.1", -- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", -- "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", -+ "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.0.1", -- "domhandler": "^4.2.0", -- "entities": "^2.0.0" -+ "domelementtype": "^2.3.0", -+ "domhandler": "^5.0.2", -+ "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" -@@ -9652,12 +10513,12 @@ - } - }, - "node_modules/domhandler": { -- "version": "4.3.1", -- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", -- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", -+ "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.2.0" -+ "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" -@@ -9666,20 +10527,15 @@ - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, -- "node_modules/dompurify": { -- "version": "2.3.8", -- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.8.tgz", -- "integrity": "sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw==" -- }, - "node_modules/domutils": { -- "version": "2.8.0", -- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", -- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", -+ "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": "^1.0.1", -- "domelementtype": "^2.2.0", -- "domhandler": "^4.2.0" -+ "dom-serializer": "^2.0.0", -+ "domelementtype": "^2.3.0", -+ "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" -@@ -9722,33 +10578,97 @@ - "dev": true - }, - "node_modules/easy-extender": { -- "version": "2.3.2", -- "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.2.tgz", -- "integrity": "sha512-JS6aNiMrVY6g6S2xrXzynGqa403OicnnC2K2M3WWUBWkJme/Y3XCONjqBw93AP2XpqeRtf6hoOPRzUZzYwqlEQ==", -+ "version": "2.3.4", -+ "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", -+ "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", -+ "dev": true, -+ "dependencies": { -+ "lodash": "^4.17.10" -+ }, -+ "engines": { -+ "node": ">= 4.0.0" -+ } -+ }, -+ "node_modules/eazy-logger": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", -+ "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", - "dev": true, - "dependencies": { -- "lodash": "^3.10.1" -+ "chalk": "4.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, -- "node_modules/easy-extender/node_modules/lodash": { -- "version": "3.10.1", -- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", -- "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==", -+ "node_modules/eazy-logger/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/eazy-logger/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/eazy-logger/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/eazy-logger/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/eazy-logger": { -- "version": "3.0.2", -- "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", -- "integrity": "sha512-bBW7dFZ3k2TbIEBcd4CsyxhIbWRnjA7PEnBOuouOxvzr2Z5zY2hgiXDh+q/pKy6soeC4tdUCwA1dbpDry3+DqA==", -+ "node_modules/eazy-logger/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/eazy-logger/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": { -- "tfunk": "^3.0.1" -+ "has-flag": "^4.0.0" - }, - "engines": { -- "node": ">= 0.8.0" -+ "node": ">=8" - } - }, - "node_modules/ecc-jsbn": { -@@ -9783,17 +10703,17 @@ - } - }, - "node_modules/electron-to-chromium": { -- "version": "1.4.163", -- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.163.tgz", -- "integrity": "sha512-c9q94pUVqIdc8hyr7jZDB4bNEoNF3QJ7y35lnddMD+mXtiv5GsL1bT/RmfW/KEOmvlNg5Oy1qioiy4tA7e864Q==" -+ "version": "1.4.572", -+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.572.tgz", -+ "integrity": "sha512-RlFobl4D3ieetbnR+2EpxdzFl9h0RAJkPK3pfiwMug2nhBin2ZCsGIAJWdpNniLz43sgXam/CgipOmvTA+rUiA==" - }, - "node_modules/emittery": { -- "version": "0.8.1", -- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", -- "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", -+ "version": "0.13.1", -+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", -+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { -- "node": ">=10" -+ "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" -@@ -9804,11 +10724,6 @@ - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, -- "node_modules/emoji-toolkit": { -- "version": "6.6.0", -- "resolved": "https://registry.npmjs.org/emoji-toolkit/-/emoji-toolkit-6.6.0.tgz", -- "integrity": "sha512-pEu0kow2p1N8zCKnn/L6H0F3rWUBB3P3hVjr/O5yl1fK7N9jU4vO4G7EFapC5Y3XwZLUCY0FZbOPyTkH+4V2eQ==" -- }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", -@@ -9866,110 +10781,94 @@ - } - }, - "node_modules/engine.io": { -- "version": "3.1.5", -- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", -- "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", -+ "version": "6.5.3", -+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.3.tgz", -+ "integrity": "sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==", - "dev": true, - "dependencies": { -+ "@types/cookie": "^0.4.1", -+ "@types/cors": "^2.8.12", -+ "@types/node": ">=10.0.0", - "accepts": "~1.3.4", -- "base64id": "1.0.0", -- "cookie": "0.3.1", -- "debug": "~3.1.0", -- "engine.io-parser": "~2.1.0", -- "ws": "~3.3.1" -+ "base64id": "2.0.0", -+ "cookie": "~0.4.1", -+ "cors": "~2.8.5", -+ "debug": "~4.3.1", -+ "engine.io-parser": "~5.2.1", -+ "ws": "~8.11.0" - }, -- "optionalDependencies": { -- "uws": "~9.14.0" -+ "engines": { -+ "node": ">=10.2.0" - } - }, - "node_modules/engine.io-client": { -- "version": "3.1.6", -- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", -- "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", -- "dev": true, -- "dependencies": { -- "component-emitter": "1.2.1", -- "component-inherit": "0.0.3", -- "debug": "~3.1.0", -- "engine.io-parser": "~2.1.1", -- "has-cors": "1.1.0", -- "indexof": "0.0.1", -- "parseqs": "0.0.5", -- "parseuri": "0.0.5", -- "ws": "~3.3.1", -- "xmlhttprequest-ssl": "~1.5.4", -- "yeast": "0.1.2" -- } -- }, -- "node_modules/engine.io-client/node_modules/debug": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", -- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", -+ "version": "6.5.2", -+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", -+ "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", - "dev": true, - "dependencies": { -- "ms": "2.0.0" -+ "@socket.io/component-emitter": "~3.1.0", -+ "debug": "~4.3.1", -+ "engine.io-parser": "~5.2.1", -+ "ws": "~8.11.0", -+ "xmlhttprequest-ssl": "~2.0.0" - } - }, -- "node_modules/engine.io-client/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/engine.io-client/node_modules/ws": { -- "version": "3.3.3", -- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", -- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", -+ "version": "8.11.0", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", -+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, -- "dependencies": { -- "async-limiter": "~1.0.0", -- "safe-buffer": "~5.1.0", -- "ultron": "~1.1.0" -+ "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/engine.io-parser": { -- "version": "2.1.3", -- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", -- "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", -- "dev": true, -- "dependencies": { -- "after": "0.8.2", -- "arraybuffer.slice": "~0.0.7", -- "base64-arraybuffer": "0.1.5", -- "blob": "0.0.5", -- "has-binary2": "~1.0.2" -- } -- }, -- "node_modules/engine.io/node_modules/debug": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", -- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", -+ "version": "5.2.1", -+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", -+ "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", - "dev": true, -- "dependencies": { -- "ms": "2.0.0" -+ "engines": { -+ "node": ">=10.0.0" - } - }, -- "node_modules/engine.io/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/engine.io/node_modules/ws": { -- "version": "3.3.3", -- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", -- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", -+ "version": "8.11.0", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", -+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, -- "dependencies": { -- "async-limiter": "~1.0.0", -- "safe-buffer": "~5.1.0", -- "ultron": "~1.1.0" -+ "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/enhanced-resolve": { -- "version": "5.9.3", -- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", -- "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", -+ "version": "5.15.0", -+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", -+ "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", -@@ -9980,10 +10879,13 @@ - } - }, - "node_modules/entities": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", -- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", -+ "version": "4.5.0", -+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", -+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, -+ "engines": { -+ "node": ">=0.12" -+ }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } -@@ -10032,18 +10934,17 @@ - } - }, - "node_modules/es-module-lexer": { -- "version": "0.9.3", -- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", -- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", -+ "version": "1.3.1", -+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", -+ "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", - "dev": true - }, - "node_modules/esbuild": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.22.tgz", -- "integrity": "sha512-CjFCFGgYtbFOPrwZNJf7wsuzesx8kqwAffOlbYcFDLFuUtP8xloK1GH+Ai13Qr0RZQf9tE7LMTHJ2iVGJ1SKZA==", -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", -+ "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", - "dev": true, - "hasInstallScript": true, -- "optional": true, - "bin": { - "esbuild": "bin/esbuild" - }, -@@ -10051,287 +10952,34 @@ - "node": ">=12" - }, - "optionalDependencies": { -- "esbuild-android-arm64": "0.14.22", -- "esbuild-darwin-64": "0.14.22", -- "esbuild-darwin-arm64": "0.14.22", -- "esbuild-freebsd-64": "0.14.22", -- "esbuild-freebsd-arm64": "0.14.22", -- "esbuild-linux-32": "0.14.22", -- "esbuild-linux-64": "0.14.22", -- "esbuild-linux-arm": "0.14.22", -- "esbuild-linux-arm64": "0.14.22", -- "esbuild-linux-mips64le": "0.14.22", -- "esbuild-linux-ppc64le": "0.14.22", -- "esbuild-linux-riscv64": "0.14.22", -- "esbuild-linux-s390x": "0.14.22", -- "esbuild-netbsd-64": "0.14.22", -- "esbuild-openbsd-64": "0.14.22", -- "esbuild-sunos-64": "0.14.22", -- "esbuild-windows-32": "0.14.22", -- "esbuild-windows-64": "0.14.22", -- "esbuild-windows-arm64": "0.14.22" -- } -- }, -- "node_modules/esbuild-android-arm64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.22.tgz", -- "integrity": "sha512-k1Uu4uC4UOFgrnTj2zuj75EswFSEBK+H6lT70/DdS4mTAOfs2ECv2I9ZYvr3w0WL0T4YItzJdK7fPNxcPw6YmQ==", -- "cpu": [ -- "arm64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "android" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-darwin-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.22.tgz", -- "integrity": "sha512-d8Ceuo6Vw6HM3fW218FB6jTY6O3r2WNcTAU0SGsBkXZ3k8SDoRLd3Nrc//EqzdgYnzDNMNtrWegK2Qsss4THhw==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "darwin" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-darwin-arm64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.22.tgz", -- "integrity": "sha512-YAt9Tj3SkIUkswuzHxkaNlT9+sg0xvzDvE75LlBo4DI++ogSgSmKNR6B4eUhU5EUUepVXcXdRIdqMq9ppeRqfw==", -- "cpu": [ -- "arm64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "darwin" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-freebsd-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.22.tgz", -- "integrity": "sha512-ek1HUv7fkXMy87Qm2G4IRohN+Qux4IcnrDBPZGXNN33KAL0pEJJzdTv0hB/42+DCYWylSrSKxk3KUXfqXOoH4A==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "freebsd" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-freebsd-arm64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.22.tgz", -- "integrity": "sha512-zPh9SzjRvr9FwsouNYTqgqFlsMIW07O8mNXulGeQx6O5ApgGUBZBgtzSlBQXkHi18WjrosYfsvp5nzOKiWzkjQ==", -- "cpu": [ -- "arm64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "freebsd" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-linux-32": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.22.tgz", -- "integrity": "sha512-SnpveoE4nzjb9t2hqCIzzTWBM0RzcCINDMBB67H6OXIuDa4KqFqaIgmTchNA9pJKOVLVIKd5FYxNiJStli21qg==", -- "cpu": [ -- "ia32" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-linux-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.22.tgz", -- "integrity": "sha512-Zcl9Wg7gKhOWWNqAjygyqzB+fJa19glgl2JG7GtuxHyL1uEnWlpSMytTLMqtfbmRykIHdab797IOZeKwk5g0zg==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-linux-arm": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.22.tgz", -- "integrity": "sha512-soPDdbpt/C0XvOOK45p4EFt8HbH5g+0uHs5nUKjHVExfgR7du734kEkXR/mE5zmjrlymk5AA79I0VIvj90WZ4g==", -- "cpu": [ -- "arm" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-linux-arm64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.22.tgz", -- "integrity": "sha512-8q/FRBJtV5IHnQChO3LHh/Jf7KLrxJ/RCTGdBvlVZhBde+dk3/qS9fFsUy+rs3dEi49aAsyVitTwlKw1SUFm+A==", -- "cpu": [ -- "arm64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-linux-mips64le": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.22.tgz", -- "integrity": "sha512-SiNDfuRXhGh1JQLLA9JPprBgPVFOsGuQ0yDfSPTNxztmVJd8W2mX++c4FfLpAwxuJe183mLuKf7qKCHQs5ZnBQ==", -- "cpu": [ -- "mips64el" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-linux-ppc64le": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.22.tgz", -- "integrity": "sha512-6t/GI9I+3o1EFm2AyN9+TsjdgWCpg2nwniEhjm2qJWtJyJ5VzTXGUU3alCO3evopu8G0hN2Bu1Jhz2YmZD0kng==", -- "cpu": [ -- "ppc64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-linux-riscv64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.22.tgz", -- "integrity": "sha512-AyJHipZKe88sc+tp5layovquw5cvz45QXw5SaDgAq2M911wLHiCvDtf/07oDx8eweCyzYzG5Y39Ih568amMTCQ==", -- "cpu": [ -- "riscv64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-linux-s390x": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.22.tgz", -- "integrity": "sha512-Sz1NjZewTIXSblQDZWEFZYjOK6p8tV6hrshYdXZ0NHTjWE+lwxpOpWeElUGtEmiPcMT71FiuA9ODplqzzSxkzw==", -- "cpu": [ -- "s390x" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-netbsd-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.22.tgz", -- "integrity": "sha512-TBbCtx+k32xydImsHxvFgsOCuFqCTGIxhzRNbgSL1Z2CKhzxwT92kQMhxort9N/fZM2CkRCPPs5wzQSamtzEHA==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "netbsd" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-openbsd-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.22.tgz", -- "integrity": "sha512-vK912As725haT313ANZZZN+0EysEEQXWC/+YE4rQvOQzLuxAQc2tjbzlAFREx3C8+uMuZj/q7E5gyVB7TzpcTA==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "openbsd" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-sunos-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.22.tgz", -- "integrity": "sha512-/mbJdXTW7MTcsPhtfDsDyPEOju9EOABvCjeUU2OJ7fWpX/Em/H3WYDa86tzLUbcVg++BScQDzqV/7RYw5XNY0g==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "sunos" -- ], -- "engines": { -- "node": ">=12" -+ "@esbuild/android-arm": "0.18.17", -+ "@esbuild/android-arm64": "0.18.17", -+ "@esbuild/android-x64": "0.18.17", -+ "@esbuild/darwin-arm64": "0.18.17", -+ "@esbuild/darwin-x64": "0.18.17", -+ "@esbuild/freebsd-arm64": "0.18.17", -+ "@esbuild/freebsd-x64": "0.18.17", -+ "@esbuild/linux-arm": "0.18.17", -+ "@esbuild/linux-arm64": "0.18.17", -+ "@esbuild/linux-ia32": "0.18.17", -+ "@esbuild/linux-loong64": "0.18.17", -+ "@esbuild/linux-mips64el": "0.18.17", -+ "@esbuild/linux-ppc64": "0.18.17", -+ "@esbuild/linux-riscv64": "0.18.17", -+ "@esbuild/linux-s390x": "0.18.17", -+ "@esbuild/linux-x64": "0.18.17", -+ "@esbuild/netbsd-x64": "0.18.17", -+ "@esbuild/openbsd-x64": "0.18.17", -+ "@esbuild/sunos-x64": "0.18.17", -+ "@esbuild/win32-arm64": "0.18.17", -+ "@esbuild/win32-ia32": "0.18.17", -+ "@esbuild/win32-x64": "0.18.17" - } - }, - "node_modules/esbuild-wasm": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.22.tgz", -- "integrity": "sha512-FOSAM29GN1fWusw0oLMv6JYhoheDIh5+atC72TkJKfIUMID6yISlicoQSd9gsNSFsNBvABvtE2jR4JB1j4FkFw==", -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.18.17.tgz", -+ "integrity": "sha512-9OHGcuRzy+I8ziF9FzjfKLWAPbvi0e/metACVg9k6bK+SI4FFxeV6PcZsz8RIVaMD4YNehw+qj6UMR3+qj/EuQ==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" -@@ -10340,54 +10988,6 @@ - "node": ">=12" - } - }, -- "node_modules/esbuild-windows-32": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.22.tgz", -- "integrity": "sha512-1vRIkuvPTjeSVK3diVrnMLSbkuE36jxA+8zGLUOrT4bb7E/JZvDRhvtbWXWaveUc/7LbhaNFhHNvfPuSw2QOQg==", -- "cpu": [ -- "ia32" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "win32" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-windows-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.22.tgz", -- "integrity": "sha512-AxjIDcOmx17vr31C5hp20HIwz1MymtMjKqX4qL6whPj0dT9lwxPexmLj6G1CpR3vFhui6m75EnBEe4QL82SYqw==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "win32" -- ], -- "engines": { -- "node": ">=12" -- } -- }, -- "node_modules/esbuild-windows-arm64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.22.tgz", -- "integrity": "sha512-5wvQ+39tHmRhNpu2Fx04l7QfeK3mQ9tKzDqqGR8n/4WUxsFxnVLfDRBGirIfk4AfWlxk60kqirlODPoT5LqMUg==", -- "cpu": [ -- "arm64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "win32" -- ], -- "engines": { -- "node": ">=12" -- } -- }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", -@@ -10411,15 +11011,14 @@ - } - }, - "node_modules/escodegen": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", -- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", -+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", -- "esutils": "^2.0.2", -- "optionator": "^0.8.1" -+ "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", -@@ -10441,45 +11040,6 @@ - "node": ">=4.0" - } - }, -- "node_modules/escodegen/node_modules/levn": { -- "version": "0.3.0", -- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", -- "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", -- "dev": true, -- "dependencies": { -- "prelude-ls": "~1.1.2", -- "type-check": "~0.3.2" -- }, -- "engines": { -- "node": ">= 0.8.0" -- } -- }, -- "node_modules/escodegen/node_modules/optionator": { -- "version": "0.8.3", -- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", -- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", -- "dev": true, -- "dependencies": { -- "deep-is": "~0.1.3", -- "fast-levenshtein": "~2.0.6", -- "levn": "~0.3.0", -- "prelude-ls": "~1.1.2", -- "type-check": "~0.3.2", -- "word-wrap": "~1.2.3" -- }, -- "engines": { -- "node": ">= 0.8.0" -- } -- }, -- "node_modules/escodegen/node_modules/prelude-ls": { -- "version": "1.1.2", -- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", -- "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", -- "dev": true, -- "engines": { -- "node": ">= 0.8.0" -- } -- }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", -@@ -10490,59 +11050,49 @@ - "node": ">=0.10.0" - } - }, -- "node_modules/escodegen/node_modules/type-check": { -- "version": "0.3.2", -- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", -- "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", -- "dev": true, -- "dependencies": { -- "prelude-ls": "~1.1.2" -- }, -- "engines": { -- "node": ">= 0.8.0" -- } -- }, - "node_modules/eslint": { -- "version": "8.12.0", -- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", -- "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", -- "dev": true, -- "dependencies": { -- "@eslint/eslintrc": "^1.2.1", -- "@humanwhocodes/config-array": "^0.9.2", -- "ajv": "^6.10.0", -+ "version": "8.51.0", -+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", -+ "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", -+ "dev": true, -+ "dependencies": { -+ "@eslint-community/eslint-utils": "^4.2.0", -+ "@eslint-community/regexpp": "^4.6.1", -+ "@eslint/eslintrc": "^2.1.2", -+ "@eslint/js": "8.51.0", -+ "@humanwhocodes/config-array": "^0.11.11", -+ "@humanwhocodes/module-importer": "^1.0.1", -+ "@nodelib/fs.walk": "^1.2.8", -+ "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", -- "eslint-scope": "^7.1.1", -- "eslint-utils": "^3.0.0", -- "eslint-visitor-keys": "^3.3.0", -- "espree": "^9.3.1", -- "esquery": "^1.4.0", -+ "eslint-scope": "^7.2.2", -+ "eslint-visitor-keys": "^3.4.3", -+ "espree": "^9.6.1", -+ "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", -- "functional-red-black-tree": "^1.0.1", -- "glob-parent": "^6.0.1", -- "globals": "^13.6.0", -+ "find-up": "^5.0.0", -+ "glob-parent": "^6.0.2", -+ "globals": "^13.19.0", -+ "graphemer": "^1.4.0", - "ignore": "^5.2.0", -- "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", -+ "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", -- "minimatch": "^3.0.4", -+ "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", -- "optionator": "^0.9.1", -- "regexpp": "^3.2.0", -+ "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", -- "strip-json-comments": "^3.1.0", -- "text-table": "^0.2.0", -- "v8-compile-cache": "^2.0.3" -+ "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" -@@ -10555,9 +11105,9 @@ - } - }, - "node_modules/eslint-config-prettier": { -- "version": "8.5.0", -- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", -- "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", -+ "version": "9.0.0", -+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", -+ "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" -@@ -10579,115 +11129,42 @@ - "node": ">=8.0.0" - } - }, -- "node_modules/eslint-utils": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", -- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", -- "dev": true, -- "dependencies": { -- "eslint-visitor-keys": "^2.0.0" -- }, -- "engines": { -- "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" -- }, -- "funding": { -- "url": "https://github.com/sponsors/mysticatea" -- }, -- "peerDependencies": { -- "eslint": ">=5" -- } -- }, -- "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", -- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", -- "dev": true, -- "engines": { -- "node": ">=10" -- } -- }, - "node_modules/eslint-visitor-keys": { -- "version": "3.3.0", -- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", -- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", -+ "version": "3.4.3", -+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", -+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-webpack-plugin": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", -- "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-4.0.1.tgz", -+ "integrity": "sha512-fUFcXpui/FftGx3NzvWgLZXlLbu+m74sUxGEgxgoxYcUtkIQbS6SdNNZkS99m5ycb23TfoNYrDpp1k/CK5j6Hw==", - "dev": true, - "dependencies": { -- "@types/eslint": "^7.28.2", -- "jest-worker": "^27.3.1", -- "micromatch": "^4.0.4", -+ "@types/eslint": "^8.37.0", -+ "jest-worker": "^29.5.0", -+ "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", -- "schema-utils": "^3.1.1" -+ "schema-utils": "^4.0.0" - }, - "engines": { -- "node": ">= 12.13.0" -+ "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { -- "eslint": "^7.0.0 || ^8.0.0", -+ "eslint": "^8.0.0", - "webpack": "^5.0.0" - } - }, -- "node_modules/eslint-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/eslint-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/eslint-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/eslint-webpack-plugin/node_modules/schema-utils": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", -- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", -- "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/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", -@@ -10772,9 +11249,9 @@ - } - }, - "node_modules/eslint/node_modules/eslint-scope": { -- "version": "7.1.1", -- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", -- "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", -+ "version": "7.2.2", -+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", -+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", -@@ -10782,6 +11259,9 @@ - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { -@@ -10793,6 +11273,22 @@ - "node": ">=4.0" - } - }, -+ "node_modules/eslint/node_modules/find-up": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", -+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", -+ "dev": true, -+ "dependencies": { -+ "locate-path": "^6.0.0", -+ "path-exists": "^4.0.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", -@@ -10806,9 +11302,9 @@ - } - }, - "node_modules/eslint/node_modules/globals": { -- "version": "13.15.0", -- "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", -- "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", -+ "version": "13.23.0", -+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", -+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" -@@ -10847,6 +11343,63 @@ - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, -+ "node_modules/eslint/node_modules/locate-path": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", -+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", -+ "dev": true, -+ "dependencies": { -+ "p-locate": "^5.0.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/eslint/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/eslint/node_modules/p-limit": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", -+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", -+ "dev": true, -+ "dependencies": { -+ "yocto-queue": "^0.1.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/eslint/node_modules/p-locate": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", -+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", -+ "dev": true, -+ "dependencies": { -+ "p-limit": "^3.0.2" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -10872,17 +11425,20 @@ - } - }, - "node_modules/espree": { -- "version": "9.3.2", -- "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", -- "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", -+ "version": "9.6.1", -+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", -+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { -- "acorn": "^8.7.1", -+ "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", -- "eslint-visitor-keys": "^3.3.0" -+ "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { -@@ -10899,9 +11455,9 @@ - } - }, - "node_modules/esquery": { -- "version": "1.4.0", -- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", -- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", -+ "version": "1.5.0", -+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", -+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" -@@ -11020,106 +11576,37 @@ - "node": ">= 0.8.0" - } - }, -- "node_modules/expand-brackets": { -- "version": "0.1.5", -- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", -- "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", -- "dev": true, -- "dependencies": { -- "is-posix-bracket": "^0.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/expand-range": { -- "version": "1.8.2", -- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", -- "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", -- "dev": true, -- "dependencies": { -- "fill-range": "^2.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/expand-range/node_modules/fill-range": { -- "version": "2.2.4", -- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", -- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", -- "dev": true, -- "dependencies": { -- "is-number": "^2.1.0", -- "isobject": "^2.0.0", -- "randomatic": "^3.0.0", -- "repeat-element": "^1.1.2", -- "repeat-string": "^1.5.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/expand-range/node_modules/is-number": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", -- "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/expand-range/node_modules/isobject": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", -- "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", -- "dev": true, -- "dependencies": { -- "isarray": "1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/expand-range/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "dependencies": { -- "is-buffer": "^1.1.5" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/expect": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", -- "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", -+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "dependencies": { -- "@jest/types": "^27.5.1", -- "jest-get-type": "^27.5.1", -- "jest-matcher-utils": "^27.5.1", -- "jest-message-util": "^27.5.1" -+ "@jest/expect-utils": "^29.7.0", -+ "jest-get-type": "^29.6.3", -+ "jest-matcher-utils": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-util": "^29.7.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, -+ "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.18.1", -- "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", -- "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", -+ "version": "4.18.2", -+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", -+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", -- "body-parser": "1.20.0", -+ "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", -@@ -11138,7 +11625,7 @@ - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", -- "qs": "6.10.3", -+ "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", -@@ -11232,21 +11719,6 @@ - "node": ">= 0.8" - } - }, -- "node_modules/express/node_modules/qs": { -- "version": "6.10.3", -- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", -- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", -- "dev": true, -- "dependencies": { -- "side-channel": "^1.0.4" -- }, -- "engines": { -- "node": ">=0.6" -- }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -- } -- }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", -@@ -11327,31 +11799,6 @@ - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, -- "node_modules/extend-shallow": { -- "version": "3.0.2", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", -- "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", -- "dev": true, -- "dependencies": { -- "assign-symbols": "^1.0.0", -- "is-extendable": "^1.0.1" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/extend-shallow/node_modules/is-extendable": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", -- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", -- "dev": true, -- "dependencies": { -- "is-plain-object": "^2.0.4" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", -@@ -11366,27 +11813,6 @@ - "node": ">=4" - } - }, -- "node_modules/extglob": { -- "version": "0.3.2", -- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", -- "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", -- "dev": true, -- "dependencies": { -- "is-extglob": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/extglob/node_modules/is-extglob": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", -- "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", -@@ -11403,10 +11829,9 @@ - "dev": true - }, - "node_modules/fast-glob": { -- "version": "3.2.11", -- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", -- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", -- "dev": true, -+ "version": "3.3.0", -+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", -+ "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", -@@ -11434,7 +11859,6 @@ - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", -- "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } -@@ -11452,9 +11876,9 @@ - } - }, - "node_modules/fb-watchman": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", -- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", -+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" -@@ -11493,13 +11917,6 @@ - "node": "^10.12.0 || >=12.0.0" - } - }, -- "node_modules/file-uri-to-path": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", -- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", -- "dev": true, -- "optional": true -- }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", -@@ -11530,15 +11947,6 @@ - "node": ">=10" - } - }, -- "node_modules/filename-regex": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", -- "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", -@@ -11551,15 +11959,17 @@ - } - }, - "node_modules/finalhandler": { -- "version": "0.5.0", -- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.0.tgz", -- "integrity": "sha512-KCwi04Tss2Qa+3NQkU3/4lBYXfHYunl3YM0rDJPxhdZ1qjlGvf/BilX2g7vm/qkHUMs5MncaD9f/VTdYN95iig==", -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", -+ "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", - "dev": true, - "dependencies": { -- "debug": "~2.2.0", -+ "debug": "2.6.9", -+ "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", -- "statuses": "~1.3.0", -+ "parseurl": "~1.3.2", -+ "statuses": "~1.3.1", - "unpipe": "~1.0.0" - }, - "engines": { -@@ -11567,35 +11977,131 @@ - } - }, - "node_modules/finalhandler/node_modules/debug": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", -- "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", -+ "version": "2.6.9", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { -- "ms": "0.7.1" -+ "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { -- "version": "0.7.1", -- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", -- "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/find-cache-dir": { -- "version": "3.3.2", -- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", -- "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", -+ "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": { -- "commondir": "^1.0.1", -- "make-dir": "^3.0.2", -- "pkg-dir": "^4.1.0" -+ "common-path-prefix": "^3.0.0", -+ "pkg-dir": "^7.0.0" - }, - "engines": { -- "node": ">=8" -+ "node": ">=14.16" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/find-cache-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/find-cache-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/avajs/find-cache-dir?sponsor=1" -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/find-cache-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/find-cache-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/find-cache-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/find-cache-dir/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/find-cache-dir/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/find-up": { -@@ -11670,6 +12176,21 @@ - "node": "^10.12.0 || >=12.0.0" - } - }, -+ "node_modules/flat-cache/node_modules/rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "dependencies": { -+ "glob": "^7.1.3" -+ }, -+ "bin": { -+ "rimraf": "bin.js" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, - "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", -@@ -11683,14 +12204,13 @@ - "dev": true - }, - "node_modules/folder-hash": { -- "version": "4.0.2", -- "resolved": "https://registry.npmjs.org/folder-hash/-/folder-hash-4.0.2.tgz", -- "integrity": "sha512-Iw9GCqdA+zHfDVvk90TSAV66jq0IwiZaPvPgUiW+DHRwnaPOeZomzlgutx9QclinsQGz/XcVIGlDEJbFhCV5wA==", -+ "version": "4.0.4", -+ "resolved": "https://registry.npmjs.org/folder-hash/-/folder-hash-4.0.4.tgz", -+ "integrity": "sha512-zEyYH+UsHEfJJcCRSf9ai5I4CTZwZ8ObONRuEI5hcEmJY5pS0FUWKruX9mMnYJrgC7MlPFDYnGsK1R+WFYjLlQ==", - "dev": true, - "dependencies": { - "debug": "^4.3.3", -- "graceful-fs": "~4.2.9", -- "minimatch": "~5.0.0" -+ "minimatch": "~5.1.2" - }, - "bin": { - "folder-hash": "bin/folder-hash" -@@ -11709,9 +12229,9 @@ - } - }, - "node_modules/folder-hash/node_modules/minimatch": { -- "version": "5.0.1", -- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", -- "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", -+ "version": "5.1.6", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", -+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" -@@ -11740,25 +12260,32 @@ - } - } - }, -- "node_modules/for-in": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", -- "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", -+ "node_modules/foreground-child": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", -+ "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, -+ "dependencies": { -+ "cross-spawn": "^7.0.0", -+ "signal-exit": "^4.0.1" -+ }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=14" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" - } - }, -- "node_modules/for-own": { -- "version": "0.1.5", -- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", -- "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", -+ "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, -- "dependencies": { -- "for-in": "^1.0.1" -- }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=14" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forever-agent": { -@@ -11794,28 +12321,16 @@ - } - }, - "node_modules/fraction.js": { -- "version": "4.2.0", -- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", -- "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", -+ "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://www.patreon.com/infusion" -- } -- }, -- "node_modules/fragment-cache": { -- "version": "0.2.1", -- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", -- "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", -- "dev": true, -- "dependencies": { -- "map-cache": "^0.2.2" -- }, -- "engines": { -- "node": ">=0.10.0" -+ "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { -@@ -11851,15 +12366,16 @@ - } - }, - "node_modules/fs-monkey": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", -- "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", -+ "version": "1.0.5", -+ "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", -+ "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", - "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==" -+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", -+ "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", -@@ -11875,21 +12391,9 @@ - } - }, - "node_modules/function-bind": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", -- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", -- "dev": true -- }, -- "node_modules/functional-red-black-tree": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", -- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", -- "dev": true -- }, -- "node_modules/functions-have-names": { -- "version": "1.2.3", -- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", -- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", -+ "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" -@@ -12050,21 +12554,41 @@ - "node": "^12.20.0 || >=14" - } - }, -- "node_modules/generator-jhipster/node_modules/debug": { -- "version": "4.3.4", -- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", -- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", -+ "node_modules/generator-jhipster/node_modules/detect-indent": { -+ "version": "6.1.0", -+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", -+ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", -+ "dev": true, -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/generator-jhipster/node_modules/git-hooks-list": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-1.0.3.tgz", -+ "integrity": "sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==", -+ "dev": true, -+ "funding": { -+ "url": "https://github.com/fisker/git-hooks-list?sponsor=1" -+ } -+ }, -+ "node_modules/generator-jhipster/node_modules/globby": { -+ "version": "10.0.0", -+ "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.0.tgz", -+ "integrity": "sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==", - "dev": true, - "dependencies": { -- "ms": "2.1.2" -+ "@types/glob": "^7.1.1", -+ "array-union": "^2.1.0", -+ "dir-glob": "^3.0.1", -+ "fast-glob": "^3.0.3", -+ "glob": "^7.1.3", -+ "ignore": "^5.1.1", -+ "merge2": "^1.2.3", -+ "slash": "^3.0.0" - }, - "engines": { -- "node": ">=6.0" -- }, -- "peerDependenciesMeta": { -- "supports-color": { -- "optional": true -- } -+ "node": ">=8" - } - }, - "node_modules/generator-jhipster/node_modules/has-flag": { -@@ -12076,6 +12600,25 @@ - "node": ">=8" - } - }, -+ "node_modules/generator-jhipster/node_modules/java-parser": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/java-parser/-/java-parser-2.0.1.tgz", -+ "integrity": "sha512-IPzs8LN8drvAZKbgW1MLLsrEeW4TwSy714I6ZHlEGNV6/42S2xRU5zDn3lP6uZQakwi7nyC00T6lZvwEnBujzw==", -+ "dev": true, -+ "dependencies": { -+ "chevrotain": "6.5.0", -+ "lodash": "4.17.21" -+ } -+ }, -+ "node_modules/generator-jhipster/node_modules/java-parser/node_modules/chevrotain": { -+ "version": "6.5.0", -+ "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-6.5.0.tgz", -+ "integrity": "sha512-BwqQ/AgmKJ8jcMEjaSnfMybnKMgGTrtDKowfTP3pX4jwVy0kNjRsT/AP6h+wC3+3NC+X8X15VWBnTCQlX+wQFg==", -+ "dev": true, -+ "dependencies": { -+ "regexp-to-ast": "0.4.0" -+ } -+ }, - "node_modules/generator-jhipster/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", -@@ -12100,6 +12643,79 @@ - "node": ">=10" - } - }, -+ "node_modules/generator-jhipster/node_modules/prettier": { -+ "version": "2.6.2", -+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", -+ "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", -+ "dev": true, -+ "bin": { -+ "prettier": "bin-prettier.js" -+ }, -+ "engines": { -+ "node": ">=10.13.0" -+ }, -+ "funding": { -+ "url": "https://github.com/prettier/prettier?sponsor=1" -+ } -+ }, -+ "node_modules/generator-jhipster/node_modules/prettier-plugin-java": { -+ "version": "1.6.1", -+ "resolved": "https://registry.npmjs.org/prettier-plugin-java/-/prettier-plugin-java-1.6.1.tgz", -+ "integrity": "sha512-kSY17V/P88nILlILb5iMp16TVJy6Ls9Jy4zAzI4+GsEuRDZH5VqRuLd8aJS1ImWxVgRjNBmoFOjxYyxkRM0SRA==", -+ "dev": true, -+ "dependencies": { -+ "java-parser": "2.0.1", -+ "lodash": "4.17.21", -+ "prettier": "2.3.1" -+ } -+ }, -+ "node_modules/generator-jhipster/node_modules/prettier-plugin-java/node_modules/prettier": { -+ "version": "2.3.1", -+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", -+ "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", -+ "dev": true, -+ "bin": { -+ "prettier": "bin-prettier.js" -+ }, -+ "engines": { -+ "node": ">=10.13.0" -+ } -+ }, -+ "node_modules/generator-jhipster/node_modules/prettier-plugin-packagejson": { -+ "version": "2.2.17", -+ "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.2.17.tgz", -+ "integrity": "sha512-Z1l3stIdkEzuv5w2ZyLl7mvl1Q/7vr2wjLAaKCQtafPHB7h09dir0tgXK/W5iEc/jP+C4XtvJl/HhiZBvPh4rQ==", -+ "dev": true, -+ "dependencies": { -+ "sort-package-json": "1.55.0" -+ }, -+ "peerDependencies": { -+ "prettier": ">= 1.16.0" -+ } -+ }, -+ "node_modules/generator-jhipster/node_modules/regexp-to-ast": { -+ "version": "0.4.0", -+ "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.4.0.tgz", -+ "integrity": "sha512-4qf/7IsIKfSNHQXSwial1IFmfM1Cc/whNBQqRwe0V2stPe7KmN1U0tWQiIx6JiirgSrisjE0eECdNf7Tav1Ntw==", -+ "dev": true -+ }, -+ "node_modules/generator-jhipster/node_modules/sort-package-json": { -+ "version": "1.55.0", -+ "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-1.55.0.tgz", -+ "integrity": "sha512-xhKvRD8WGbALjXQkVuk4/93Z/2NIO+5IzKamdMjN5kn3L+N+M9YWQssmM6GXlQr9v1F7PGWsOJEo1gvXOhM7Mg==", -+ "dev": true, -+ "dependencies": { -+ "detect-indent": "^6.0.0", -+ "detect-newline": "3.1.0", -+ "git-hooks-list": "1.0.3", -+ "globby": "10.0.0", -+ "is-plain-obj": "2.1.0", -+ "sort-object-keys": "^1.1.3" -+ }, -+ "bin": { -+ "sort-package-json": "cli.js" -+ } -+ }, - "node_modules/generator-jhipster/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -12151,6 +12767,18 @@ - "node": ">=8.0.0" - } - }, -+ "node_modules/get-stdin": { -+ "version": "9.0.0", -+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", -+ "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", -@@ -12163,15 +12791,6 @@ - "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/get-value": { -- "version": "2.0.6", -- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", -- "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", -@@ -12182,9 +12801,9 @@ - } - }, - "node_modules/git-hooks-list": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-1.0.3.tgz", -- "integrity": "sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==", -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.1.0.tgz", -+ "integrity": "sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==", - "dev": true, - "funding": { - "url": "https://github.com/fisker/git-hooks-list?sponsor=1" -@@ -12209,6 +12828,7 @@ - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", -+ "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", -@@ -12224,49 +12844,6 @@ - "url": "https://github.com/sponsors/isaacs" - } - }, -- "node_modules/glob-base": { -- "version": "0.3.0", -- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", -- "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", -- "dev": true, -- "dependencies": { -- "glob-parent": "^2.0.0", -- "is-glob": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/glob-base/node_modules/glob-parent": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", -- "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", -- "dev": true, -- "dependencies": { -- "is-glob": "^2.0.0" -- } -- }, -- "node_modules/glob-base/node_modules/is-extglob": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", -- "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/glob-base/node_modules/is-glob": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", -- "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", -- "dev": true, -- "dependencies": { -- "is-extglob": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", -@@ -12318,6 +12895,12 @@ - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, -+ "node_modules/graphemer": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", -+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", -+ "dev": true -+ }, - "node_modules/grouped-queue": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-2.0.0.tgz", -@@ -12333,6 +12916,18 @@ - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true - }, -+ "node_modules/guess-parser": { -+ "version": "0.4.22", -+ "resolved": "https://registry.npmjs.org/guess-parser/-/guess-parser-0.4.22.tgz", -+ "integrity": "sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==", -+ "dev": true, -+ "dependencies": { -+ "@wessberg/ts-evaluator": "0.0.27" -+ }, -+ "peerDependencies": { -+ "typescript": ">=3.7.5" -+ } -+ }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", -@@ -12411,48 +13006,6 @@ - "node": ">= 0.4.0" - } - }, -- "node_modules/has-ansi": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", -- "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", -- "dev": true, -- "dependencies": { -- "ansi-regex": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/has-ansi/node_modules/ansi-regex": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", -- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/has-binary2": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", -- "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", -- "dev": true, -- "dependencies": { -- "isarray": "2.0.1" -- } -- }, -- "node_modules/has-binary2/node_modules/isarray": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", -- "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==", -- "dev": true -- }, -- "node_modules/has-cors": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", -- "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==", -- "dev": true -- }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", -@@ -12461,18 +13014,6 @@ - "node": ">=4" - } - }, -- "node_modules/has-property-descriptors": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", -- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", -- "dev": true, -- "dependencies": { -- "get-intrinsic": "^1.1.1" -- }, -- "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", -@@ -12485,88 +13026,22 @@ - "url": "https://github.com/sponsors/ljharb" - } - }, -- "node_modules/has-tostringtag": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", -- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", -- "dev": true, -- "dependencies": { -- "has-symbols": "^1.0.2" -- }, -- "engines": { -- "node": ">= 0.4" -- }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -- } -- }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, -- "node_modules/has-value": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", -- "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", -- "dev": true, -- "dependencies": { -- "get-value": "^2.0.6", -- "has-values": "^1.0.0", -- "isobject": "^3.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/has-values": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", -- "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", -- "dev": true, -- "dependencies": { -- "is-number": "^3.0.0", -- "kind-of": "^4.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/has-values/node_modules/is-number": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", -- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "dependencies": { -- "is-buffer": "^1.1.5" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/has-values/node_modules/kind-of": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", -- "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", -+ "node_modules/hasown": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", -+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, - "dependencies": { -- "is-buffer": "^1.1.5" -+ "function-bind": "^1.1.2" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">= 0.4" - } - }, - "node_modules/hdr-histogram-js": { -@@ -12611,9 +13086,9 @@ - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { -- "version": "2.3.7", -- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", -- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", -+ "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", -@@ -12647,10 +13122,20 @@ - } - }, - "node_modules/html-entities": { -- "version": "2.3.3", -- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", -- "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", -- "dev": true -+ "version": "2.4.0", -+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", -+ "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", -+ "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", -@@ -12658,6 +13143,25 @@ - "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-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", -@@ -12674,9 +13178,9 @@ - } - }, - "node_modules/http-cache-semantics": { -- "version": "4.1.0", -- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", -- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", -+ "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": { -@@ -12720,9 +13224,9 @@ - } - }, - "node_modules/http-parser-js": { -- "version": "0.5.6", -- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", -- "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", -+ "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": { -@@ -12820,9 +13324,9 @@ - } - }, - "node_modules/https-proxy-agent": { -- "version": "5.0.0", -- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", -- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", -+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", -@@ -12851,15 +13355,15 @@ - } - }, - "node_modules/husky": { -- "version": "7.0.4", -- "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", -- "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", -+ "version": "8.0.3", -+ "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", -+ "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { -- "node": ">=12" -+ "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" -@@ -12896,9 +13400,9 @@ - "dev": true - }, - "node_modules/ignore": { -- "version": "5.2.0", -- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", -- "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", -+ "version": "5.2.4", -+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", -+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" -@@ -13000,12 +13504,6 @@ - "node": ">=8" - } - }, -- "node_modules/indexof": { -- "version": "0.0.1", -- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", -- "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==", -- "dev": true -- }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", -@@ -13016,6 +13514,7 @@ - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", -+ "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" -@@ -13024,21 +13523,22 @@ - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", -- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" -+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", -+ "dev": true - }, - "node_modules/ini": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", -- "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", -+ "version": "4.1.1", -+ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", -+ "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "engines": { -- "node": ">=10" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/inquirer": { -- "version": "8.2.0", -- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", -- "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", -+ "version": "8.2.4", -+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", -+ "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", -@@ -13051,13 +13551,14 @@ - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", -- "rxjs": "^7.2.0", -+ "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", -- "through": "^2.3.6" -+ "through": "^2.3.6", -+ "wrap-ansi": "^7.0.0" - }, - "engines": { -- "node": ">=8.0.0" -+ "node": ">=12.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { -@@ -13495,42 +13996,14 @@ - "dev": true - }, - "node_modules/ipaddr.js": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", -- "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", -+ "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, -- "node_modules/is-accessor-descriptor": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", -- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", -- "dev": true, -- "dependencies": { -- "kind-of": "^6.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/is-arguments": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", -- "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", -- "dev": true, -- "dependencies": { -- "call-bind": "^1.0.2", -- "has-tostringtag": "^1.0.0" -- }, -- "engines": { -- "node": ">= 0.4" -- }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -- } -- }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", -@@ -13548,65 +14021,18 @@ - "node": ">=8" - } - }, -- "node_modules/is-buffer": { -- "version": "1.1.6", -- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", -- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", -- "dev": true -- }, - "node_modules/is-core-module": { -- "version": "2.9.0", -- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", -- "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", -- "dev": true, -- "dependencies": { -- "has": "^1.0.3" -- }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -- } -- }, -- "node_modules/is-data-descriptor": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", -- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", -- "dev": true, -- "dependencies": { -- "kind-of": "^6.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/is-date-object": { -- "version": "1.0.5", -- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", -- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", -+ "version": "2.13.1", -+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", -+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { -- "has-tostringtag": "^1.0.0" -- }, -- "engines": { -- "node": ">= 0.4" -+ "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, -- "node_modules/is-descriptor": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", -- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", -- "dev": true, -- "dependencies": { -- "is-accessor-descriptor": "^1.0.0", -- "is-data-descriptor": "^1.0.0", -- "kind-of": "^6.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", -@@ -13622,36 +14048,6 @@ - "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/is-dotfile": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", -- "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/is-equal-shallow": { -- "version": "0.1.3", -- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", -- "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", -- "dev": true, -- "dependencies": { -- "is-primitive": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/is-extendable": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", -- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", -@@ -13692,6 +14088,39 @@ - "node": ">=0.10.0" - } - }, -+ "node_modules/is-inside-container": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", -+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", -+ "dev": true, -+ "dependencies": { -+ "is-docker": "^3.0.0" -+ }, -+ "bin": { -+ "is-inside-container": "cli.js" -+ }, -+ "engines": { -+ "node": ">=14.16" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/is-inside-container/node_modules/is-docker": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", -+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", -+ "dev": true, -+ "bin": { -+ "is-docker": "cli.js" -+ }, -+ "engines": { -+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", -@@ -13733,15 +14162,6 @@ - "node": ">=8" - } - }, -- "node_modules/is-path-cwd": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", -- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", -- "dev": true, -- "engines": { -- "node": ">=6" -- } -- }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", -@@ -13772,46 +14192,12 @@ - "node": ">=0.10.0" - } - }, -- "node_modules/is-posix-bracket": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", -- "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, -- "node_modules/is-primitive": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", -- "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/is-regex": { -- "version": "1.1.4", -- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", -- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", -- "dev": true, -- "dependencies": { -- "call-bind": "^1.0.2", -- "has-tostringtag": "^1.0.0" -- }, -- "engines": { -- "node": ">= 0.4" -- }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -- } -- }, - "node_modules/is-scoped": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-2.1.0.tgz", -@@ -13866,15 +14252,6 @@ - "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", -@@ -13961,17 +14338,17 @@ - } - }, - "node_modules/istanbul-lib-report": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", -- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", -+ "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": "^3.0.0", -+ "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { -- "node": ">=8" -+ "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { -@@ -14019,9 +14396,9 @@ - } - }, - "node_modules/istanbul-reports": { -- "version": "3.1.4", -- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", -- "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", -+ "version": "3.1.6", -+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", -+ "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", -@@ -14031,6 +14408,24 @@ - "node": ">=8" - } - }, -+ "node_modules/jackspeak": { -+ "version": "2.3.6", -+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", -+ "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", -+ "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/jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", -@@ -14126,9 +14521,9 @@ - } - }, - "node_modules/java-parser": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/java-parser/-/java-parser-2.0.1.tgz", -- "integrity": "sha512-IPzs8LN8drvAZKbgW1MLLsrEeW4TwSy714I6ZHlEGNV6/42S2xRU5zDn3lP6uZQakwi7nyC00T6lZvwEnBujzw==", -+ "version": "2.0.5", -+ "resolved": "https://registry.npmjs.org/java-parser/-/java-parser-2.0.5.tgz", -+ "integrity": "sha512-AwieTO24Itcu0GgP9pBXs8gkqBtkmReclpBgXF4NkbIjdS7cn7hqpebjTmb5ouYYLFR+m3yh5fR3nW1NRrthdg==", - "dev": true, - "dependencies": { - "chevrotain": "6.5.0", -@@ -14151,20 +14546,21 @@ - "dev": true - }, - "node_modules/jest": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", -- "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", -+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "dependencies": { -- "@jest/core": "^27.5.1", -+ "@jest/core": "^29.7.0", -+ "@jest/types": "^29.6.3", - "import-local": "^3.0.2", -- "jest-cli": "^27.5.1" -+ "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" -@@ -14176,47 +14572,63 @@ - } - }, - "node_modules/jest-changed-files": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", -- "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", -+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "dependencies": { -- "@jest/types": "^27.5.1", - "execa": "^5.0.0", -- "throat": "^6.0.1" -+ "jest-util": "^29.7.0", -+ "p-limit": "^3.1.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/jest-changed-files/node_modules/p-limit": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", -+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", -+ "dev": true, -+ "dependencies": { -+ "yocto-queue": "^0.1.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-circus": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", -- "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", -+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "dependencies": { -- "@jest/environment": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/environment": "^29.7.0", -+ "@jest/expect": "^29.7.0", -+ "@jest/test-result": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", -- "dedent": "^0.7.0", -- "expect": "^27.5.1", -+ "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", -- "jest-each": "^27.5.1", -- "jest-matcher-utils": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-runtime": "^27.5.1", -- "jest-snapshot": "^27.5.1", -- "jest-util": "^27.5.1", -- "pretty-format": "^27.5.1", -+ "jest-each": "^29.7.0", -+ "jest-matcher-utils": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-runtime": "^29.7.0", -+ "jest-snapshot": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "p-limit": "^3.1.0", -+ "pretty-format": "^29.7.0", -+ "pure-rand": "^6.0.0", - "slash": "^3.0.0", -- "stack-utils": "^2.0.3", -- "throat": "^6.0.1" -+ "stack-utils": "^2.0.3" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { -@@ -14277,6 +14689,21 @@ - "node": ">=8" - } - }, -+ "node_modules/jest-circus/node_modules/p-limit": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", -+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", -+ "dev": true, -+ "dependencies": { -+ "yocto-queue": "^0.1.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -14290,29 +14717,28 @@ - } - }, - "node_modules/jest-cli": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", -- "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", -+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "dependencies": { -- "@jest/core": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/core": "^29.7.0", -+ "@jest/test-result": "^29.7.0", -+ "@jest/types": "^29.6.3", - "chalk": "^4.0.0", -+ "create-jest": "^29.7.0", - "exit": "^0.1.2", -- "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", -- "jest-config": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-validate": "^27.5.1", -- "prompts": "^2.0.1", -- "yargs": "^16.2.0" -+ "jest-config": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jest-validate": "^29.7.0", -+ "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" -@@ -14393,62 +14819,46 @@ - "node": ">=8" - } - }, -- "node_modules/jest-cli/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/jest-config": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", -- "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", -+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "dependencies": { -- "@babel/core": "^7.8.0", -- "@jest/test-sequencer": "^27.5.1", -- "@jest/types": "^27.5.1", -- "babel-jest": "^27.5.1", -+ "@babel/core": "^7.11.6", -+ "@jest/test-sequencer": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", -- "glob": "^7.1.1", -+ "glob": "^7.1.3", - "graceful-fs": "^4.2.9", -- "jest-circus": "^27.5.1", -- "jest-environment-jsdom": "^27.5.1", -- "jest-environment-node": "^27.5.1", -- "jest-get-type": "^27.5.1", -- "jest-jasmine2": "^27.5.1", -- "jest-regex-util": "^27.5.1", -- "jest-resolve": "^27.5.1", -- "jest-runner": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-validate": "^27.5.1", -+ "jest-circus": "^29.7.0", -+ "jest-environment-node": "^29.7.0", -+ "jest-get-type": "^29.6.3", -+ "jest-regex-util": "^29.6.3", -+ "jest-resolve": "^29.7.0", -+ "jest-runner": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", -- "pretty-format": "^27.5.1", -+ "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { -+ "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { -+ "@types/node": { -+ "optional": true -+ }, - "ts-node": { - "optional": true - } -@@ -14531,18 +14941,18 @@ - "dev": true - }, - "node_modules/jest-diff": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", -- "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", -+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", -- "diff-sequences": "^27.5.1", -- "jest-get-type": "^27.5.1", -- "pretty-format": "^27.5.1" -+ "diff-sequences": "^29.6.3", -+ "jest-get-type": "^29.6.3", -+ "pretty-format": "^29.7.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { -@@ -14616,31 +15026,31 @@ - } - }, - "node_modules/jest-docblock": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", -- "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", -+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", -- "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", -+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "dependencies": { -- "@jest/types": "^27.5.1", -+ "@jest/types": "^29.6.3", - "chalk": "^4.0.0", -- "jest-get-type": "^27.5.1", -- "jest-util": "^27.5.1", -- "pretty-format": "^27.5.1" -+ "jest-get-type": "^29.6.3", -+ "jest-util": "^29.7.0", -+ "pretty-format": "^29.7.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { -@@ -14714,177 +15124,353 @@ - } - }, - "node_modules/jest-environment-jsdom": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", -- "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", -+ "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", - "dev": true, - "dependencies": { -- "@jest/environment": "^27.5.1", -- "@jest/fake-timers": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/environment": "^29.7.0", -+ "@jest/fake-timers": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "@types/jsdom": "^20.0.0", - "@types/node": "*", -- "jest-mock": "^27.5.1", -- "jest-util": "^27.5.1", -- "jsdom": "^16.6.0" -+ "jest-mock": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jsdom": "^20.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" -+ }, -+ "peerDependencies": { -+ "canvas": "^2.5.0" -+ }, -+ "peerDependenciesMeta": { -+ "canvas": { -+ "optional": true -+ } - } - }, -- "node_modules/jest-environment-node": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", -- "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", -+ "node_modules/jest-environment-jsdom/node_modules/@tootallnate/once": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", -+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", -+ "dev": true, -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/jest-environment-jsdom/node_modules/acorn-globals": { -+ "version": "7.0.1", -+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", -+ "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "dependencies": { -- "@jest/environment": "^27.5.1", -- "@jest/fake-timers": "^27.5.1", -- "@jest/types": "^27.5.1", -- "@types/node": "*", -- "jest-mock": "^27.5.1", -- "jest-util": "^27.5.1" -+ "acorn": "^8.1.0", -+ "acorn-walk": "^8.0.2" -+ } -+ }, -+ "node_modules/jest-environment-jsdom/node_modules/acorn-walk": { -+ "version": "8.3.0", -+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", -+ "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", -+ "dev": true, -+ "engines": { -+ "node": ">=0.4.0" -+ } -+ }, -+ "node_modules/jest-environment-jsdom/node_modules/cssom": { -+ "version": "0.5.0", -+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", -+ "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", -+ "dev": true -+ }, -+ "node_modules/jest-environment-jsdom/node_modules/data-urls": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", -+ "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", -+ "dev": true, -+ "dependencies": { -+ "abab": "^2.0.6", -+ "whatwg-mimetype": "^3.0.0", -+ "whatwg-url": "^11.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": ">=12" - } - }, -- "node_modules/jest-get-type": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", -- "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", -+ "node_modules/jest-environment-jsdom/node_modules/domexception": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", -+ "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, -+ "dependencies": { -+ "webidl-conversions": "^7.0.0" -+ }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": ">=12" - } - }, -- "node_modules/jest-haste-map": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", -- "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", -+ "node_modules/jest-environment-jsdom/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": { -- "@jest/types": "^27.5.1", -- "@types/graceful-fs": "^4.1.2", -- "@types/node": "*", -- "anymatch": "^3.0.3", -- "fb-watchman": "^2.0.0", -- "graceful-fs": "^4.2.9", -- "jest-regex-util": "^27.5.1", -- "jest-serializer": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-worker": "^27.5.1", -- "micromatch": "^4.0.4", -- "walker": "^1.0.7" -+ "asynckit": "^0.4.0", -+ "combined-stream": "^1.0.8", -+ "mime-types": "^2.1.12" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": ">= 6" -+ } -+ }, -+ "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", -+ "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", -+ "dev": true, -+ "dependencies": { -+ "whatwg-encoding": "^2.0.0" - }, -- "optionalDependencies": { -- "fsevents": "^2.3.2" -+ "engines": { -+ "node": ">=12" - } - }, -- "node_modules/jest-jasmine2": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", -- "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", -+ "node_modules/jest-environment-jsdom/node_modules/http-proxy-agent": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", -+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { -- "@jest/environment": "^27.5.1", -- "@jest/source-map": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/types": "^27.5.1", -- "@types/node": "*", -- "chalk": "^4.0.0", -- "co": "^4.6.0", -- "expect": "^27.5.1", -- "is-generator-fn": "^2.0.0", -- "jest-each": "^27.5.1", -- "jest-matcher-utils": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-runtime": "^27.5.1", -- "jest-snapshot": "^27.5.1", -- "jest-util": "^27.5.1", -- "pretty-format": "^27.5.1", -- "throat": "^6.0.1" -+ "@tootallnate/once": "2", -+ "agent-base": "6", -+ "debug": "4" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": ">= 6" - } - }, -- "node_modules/jest-jasmine2/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==", -+ "node_modules/jest-environment-jsdom/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": { -- "color-convert": "^2.0.1" -+ "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { -- "node": ">=8" -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/jest-environment-jsdom/node_modules/jsdom": { -+ "version": "20.0.3", -+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", -+ "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", -+ "dev": true, -+ "dependencies": { -+ "abab": "^2.0.6", -+ "acorn": "^8.8.1", -+ "acorn-globals": "^7.0.0", -+ "cssom": "^0.5.0", -+ "cssstyle": "^2.3.0", -+ "data-urls": "^3.0.2", -+ "decimal.js": "^10.4.2", -+ "domexception": "^4.0.0", -+ "escodegen": "^2.0.0", -+ "form-data": "^4.0.0", -+ "html-encoding-sniffer": "^3.0.0", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.1", -+ "is-potential-custom-element-name": "^1.0.1", -+ "nwsapi": "^2.2.2", -+ "parse5": "^7.1.1", -+ "saxes": "^6.0.0", -+ "symbol-tree": "^3.2.4", -+ "tough-cookie": "^4.1.2", -+ "w3c-xmlserializer": "^4.0.0", -+ "webidl-conversions": "^7.0.0", -+ "whatwg-encoding": "^2.0.0", -+ "whatwg-mimetype": "^3.0.0", -+ "whatwg-url": "^11.0.0", -+ "ws": "^8.11.0", -+ "xml-name-validator": "^4.0.0" - }, -- "funding": { -- "url": "https://github.com/chalk/ansi-styles?sponsor=1" -+ "engines": { -+ "node": ">=14" -+ }, -+ "peerDependencies": { -+ "canvas": "^2.5.0" -+ }, -+ "peerDependenciesMeta": { -+ "canvas": { -+ "optional": true -+ } - } - }, -- "node_modules/jest-jasmine2/node_modules/chalk": { -- "version": "4.1.2", -- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", -- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", -+ "node_modules/jest-environment-jsdom/node_modules/saxes": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", -+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "dependencies": { -- "ansi-styles": "^4.1.0", -- "supports-color": "^7.1.0" -+ "xmlchars": "^2.2.0" - }, - "engines": { -- "node": ">=10" -+ "node": ">=v12.22.7" -+ } -+ }, -+ "node_modules/jest-environment-jsdom/node_modules/tr46": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", -+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", -+ "dev": true, -+ "dependencies": { -+ "punycode": "^2.1.1" - }, -- "funding": { -- "url": "https://github.com/chalk/chalk?sponsor=1" -+ "engines": { -+ "node": ">=12" - } - }, -- "node_modules/jest-jasmine2/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==", -+ "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", -+ "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dev": true, - "dependencies": { -- "color-name": "~1.1.4" -+ "xml-name-validator": "^4.0.0" - }, - "engines": { -- "node": ">=7.0.0" -+ "node": ">=14" - } - }, -- "node_modules/jest-jasmine2/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/jest-environment-jsdom/node_modules/webidl-conversions": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", -+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/jest-environment-jsdom/node_modules/whatwg-encoding": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", -+ "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", -+ "dev": true, -+ "dependencies": { -+ "iconv-lite": "0.6.3" -+ }, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", -+ "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { -+ "version": "11.0.0", -+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", -+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", -+ "dev": true, -+ "dependencies": { -+ "tr46": "^3.0.0", -+ "webidl-conversions": "^7.0.0" -+ }, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/jest-environment-jsdom/node_modules/ws": { -+ "version": "8.14.2", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", -+ "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", -+ "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/jest-jasmine2/node_modules/has-flag": { -+ "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { - "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", -- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", -+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", -+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "engines": { -- "node": ">=8" -+ "node": ">=12" - } - }, -- "node_modules/jest-jasmine2/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==", -+ "node_modules/jest-environment-node": { -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", -+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "dependencies": { -- "has-flag": "^4.0.0" -+ "@jest/environment": "^29.7.0", -+ "@jest/fake-timers": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "@types/node": "*", -+ "jest-mock": "^29.7.0", -+ "jest-util": "^29.7.0" - }, - "engines": { -- "node": ">=8" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/jest-get-type": { -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", -+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", -+ "dev": true, -+ "engines": { -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/jest-haste-map": { -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", -+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", -+ "dev": true, -+ "dependencies": { -+ "@jest/types": "^29.6.3", -+ "@types/graceful-fs": "^4.1.3", -+ "@types/node": "*", -+ "anymatch": "^3.0.3", -+ "fb-watchman": "^2.0.0", -+ "graceful-fs": "^4.2.9", -+ "jest-regex-util": "^29.6.3", -+ "jest-util": "^29.7.0", -+ "jest-worker": "^29.7.0", -+ "micromatch": "^4.0.4", -+ "walker": "^1.0.8" -+ }, -+ "engines": { -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" -+ }, -+ "optionalDependencies": { -+ "fsevents": "^2.3.2" - } - }, - "node_modules/jest-junit": { -- "version": "13.1.0", -- "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-13.1.0.tgz", -- "integrity": "sha512-ECbhzEG3Oe2IH3Mnwcv2vAXM4qTbcObN/gTUzwKPlpaNsf2G/zlj/teEUqRGV17YQiQ4AqzTf3pCO7W59DKVIw==", -+ "version": "16.0.0", -+ "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", -+ "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", -@@ -14897,31 +15483,31 @@ - } - }, - "node_modules/jest-leak-detector": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", -- "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", -+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "dependencies": { -- "jest-get-type": "^27.5.1", -- "pretty-format": "^27.5.1" -+ "jest-get-type": "^29.6.3", -+ "pretty-format": "^29.7.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", -- "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", -+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", -- "jest-diff": "^27.5.1", -- "jest-get-type": "^27.5.1", -- "pretty-format": "^27.5.1" -+ "jest-diff": "^29.7.0", -+ "jest-get-type": "^29.6.3", -+ "pretty-format": "^29.7.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { -@@ -14995,23 +15581,23 @@ - } - }, - "node_modules/jest-message-util": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", -- "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", -+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", -- "@jest/types": "^27.5.1", -+ "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", -- "pretty-format": "^27.5.1", -+ "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { -@@ -15085,22 +15671,23 @@ - } - }, - "node_modules/jest-mock": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", -- "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", -+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "dependencies": { -- "@jest/types": "^27.5.1", -- "@types/node": "*" -+ "@jest/types": "^29.6.3", -+ "@types/node": "*", -+ "jest-util": "^29.7.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { -- "version": "1.2.2", -- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", -- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", -+ "version": "1.2.3", -+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", -+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" -@@ -15115,349 +15702,73 @@ - } - }, - "node_modules/jest-preset-angular": { -- "version": "11.1.1", -- "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-11.1.1.tgz", -- "integrity": "sha512-ZlYiKJhAQSU9wIjncX59xutcj49R4MiDsTPSwZiwdTAHQvHm32MS6SGimQIVBqh1DukfwYX0NXKS0D/onLAsLQ==", -+ "version": "13.1.2", -+ "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-13.1.2.tgz", -+ "integrity": "sha512-kuzuIch/YYTMaMnuGDaiZEu++Bjc5WskOAmMwqWO0Grpcd0SulqTOV70Gz6Q/ZOQuMye+LS4KPyIVfqnJr2e3g==", - "dev": true, - "dependencies": { - "bs-logger": "^0.2.6", -- "esbuild-wasm": "0.14.11", -- "jest-environment-jsdom": "^27.0.0", -- "pretty-format": "^27.0.0", -- "ts-jest": "^27.0.0" -+ "esbuild-wasm": ">=0.13.8", -+ "jest-environment-jsdom": "^29.0.0", -+ "jest-util": "^29.0.0", -+ "pretty-format": "^29.0.0", -+ "ts-jest": "^29.0.0" - }, - "engines": { -- "node": "^12.20.0 || ^14.15.0 || >=16.10.0" -+ "node": "^14.15.0 || >=16.10.0" - }, - "optionalDependencies": { -- "esbuild": "0.14.11" -+ "esbuild": ">=0.13.8" - }, - "peerDependencies": { -- "@angular-devkit/build-angular": ">=0.1002.4", -- "@angular/compiler-cli": ">=10.0.0", -- "@angular/core": ">=10.0.0", -- "@angular/platform-browser-dynamic": ">=10.0.0" -- } -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.11.tgz", -- "integrity": "sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg==", -- "dev": true, -- "hasInstallScript": true, -- "optional": true, -- "bin": { -- "esbuild": "bin/esbuild" -- }, -- "optionalDependencies": { -- "esbuild-android-arm64": "0.14.11", -- "esbuild-darwin-64": "0.14.11", -- "esbuild-darwin-arm64": "0.14.11", -- "esbuild-freebsd-64": "0.14.11", -- "esbuild-freebsd-arm64": "0.14.11", -- "esbuild-linux-32": "0.14.11", -- "esbuild-linux-64": "0.14.11", -- "esbuild-linux-arm": "0.14.11", -- "esbuild-linux-arm64": "0.14.11", -- "esbuild-linux-mips64le": "0.14.11", -- "esbuild-linux-ppc64le": "0.14.11", -- "esbuild-linux-s390x": "0.14.11", -- "esbuild-netbsd-64": "0.14.11", -- "esbuild-openbsd-64": "0.14.11", -- "esbuild-sunos-64": "0.14.11", -- "esbuild-windows-32": "0.14.11", -- "esbuild-windows-64": "0.14.11", -- "esbuild-windows-arm64": "0.14.11" -- } -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-android-arm64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz", -- "integrity": "sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw==", -- "cpu": [ -- "arm64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "android" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-darwin-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz", -- "integrity": "sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "darwin" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-darwin-arm64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz", -- "integrity": "sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg==", -- "cpu": [ -- "arm64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "darwin" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-freebsd-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz", -- "integrity": "sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "freebsd" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-freebsd-arm64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz", -- "integrity": "sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w==", -- "cpu": [ -- "arm64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "freebsd" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-linux-32": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz", -- "integrity": "sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg==", -- "cpu": [ -- "ia32" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-linux-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz", -- "integrity": "sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-linux-arm": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz", -- "integrity": "sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ==", -- "cpu": [ -- "arm" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-linux-arm64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz", -- "integrity": "sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg==", -- "cpu": [ -- "arm64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-linux-mips64le": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz", -- "integrity": "sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw==", -- "cpu": [ -- "mips64el" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-linux-ppc64le": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz", -- "integrity": "sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ==", -- "cpu": [ -- "ppc64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-linux-s390x": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz", -- "integrity": "sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw==", -- "cpu": [ -- "s390x" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "linux" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-netbsd-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz", -- "integrity": "sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "netbsd" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-openbsd-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz", -- "integrity": "sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "openbsd" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-sunos-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz", -- "integrity": "sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "sunos" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-wasm": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.11.tgz", -- "integrity": "sha512-9e1R6hv0hiU+BkJI2edqUuWfXUbOP2Mox+Ijl/uY1vLLlSsunkrcADqD/4Rz+VCEDzw6ecscJM+uJqR2fRmEUg==", -- "dev": true, -- "bin": { -- "esbuild": "bin/esbuild" -- }, -- "engines": { -- "node": ">=8" -+ "@angular-devkit/build-angular": ">=13.0.0 <17.0.0", -+ "@angular/compiler-cli": ">=13.0.0 <17.0.0", -+ "@angular/core": ">=13.0.0 <17.0.0", -+ "@angular/platform-browser-dynamic": ">=13.0.0 <17.0.0", -+ "jest": "^29.0.0", -+ "typescript": ">=4.4" - } - }, -- "node_modules/jest-preset-angular/node_modules/esbuild-windows-32": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz", -- "integrity": "sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ==", -- "cpu": [ -- "ia32" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "win32" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-windows-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz", -- "integrity": "sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg==", -- "cpu": [ -- "x64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "win32" -- ] -- }, -- "node_modules/jest-preset-angular/node_modules/esbuild-windows-arm64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz", -- "integrity": "sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ==", -- "cpu": [ -- "arm64" -- ], -- "dev": true, -- "optional": true, -- "os": [ -- "win32" -- ] -- }, - "node_modules/jest-regex-util": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", -- "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", -+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", -- "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", -+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "dependencies": { -- "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", -- "jest-haste-map": "^27.5.1", -+ "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", -- "jest-util": "^27.5.1", -- "jest-validate": "^27.5.1", -+ "jest-util": "^29.7.0", -+ "jest-validate": "^29.7.0", - "resolve": "^1.20.0", -- "resolve.exports": "^1.1.0", -+ "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", -- "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", -+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "dependencies": { -- "@jest/types": "^27.5.1", -- "jest-regex-util": "^27.5.1", -- "jest-snapshot": "^27.5.1" -+ "jest-regex-util": "^29.6.3", -+ "jest-snapshot": "^29.7.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { -@@ -15531,35 +15842,35 @@ - } - }, - "node_modules/jest-runner": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", -- "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", -+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "dependencies": { -- "@jest/console": "^27.5.1", -- "@jest/environment": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/console": "^29.7.0", -+ "@jest/environment": "^29.7.0", -+ "@jest/test-result": "^29.7.0", -+ "@jest/transform": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", -- "emittery": "^0.8.1", -+ "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", -- "jest-docblock": "^27.5.1", -- "jest-environment-jsdom": "^27.5.1", -- "jest-environment-node": "^27.5.1", -- "jest-haste-map": "^27.5.1", -- "jest-leak-detector": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-resolve": "^27.5.1", -- "jest-runtime": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-worker": "^27.5.1", -- "source-map-support": "^0.5.6", -- "throat": "^6.0.1" -+ "jest-docblock": "^29.7.0", -+ "jest-environment-node": "^29.7.0", -+ "jest-haste-map": "^29.7.0", -+ "jest-leak-detector": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-resolve": "^29.7.0", -+ "jest-runtime": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jest-watcher": "^29.7.0", -+ "jest-worker": "^29.7.0", -+ "p-limit": "^3.1.0", -+ "source-map-support": "0.5.13" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { -@@ -15620,6 +15931,40 @@ - "node": ">=8" - } - }, -+ "node_modules/jest-runner/node_modules/p-limit": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", -+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", -+ "dev": true, -+ "dependencies": { -+ "yocto-queue": "^0.1.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/jest-runner/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/jest-runner/node_modules/source-map-support": { -+ "version": "0.5.13", -+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", -+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", -+ "dev": true, -+ "dependencies": { -+ "buffer-from": "^1.0.0", -+ "source-map": "^0.6.0" -+ } -+ }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -15633,36 +15978,36 @@ - } - }, - "node_modules/jest-runtime": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", -- "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", -- "dev": true, -- "dependencies": { -- "@jest/environment": "^27.5.1", -- "@jest/fake-timers": "^27.5.1", -- "@jest/globals": "^27.5.1", -- "@jest/source-map": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", -+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", -+ "dev": true, -+ "dependencies": { -+ "@jest/environment": "^29.7.0", -+ "@jest/fake-timers": "^29.7.0", -+ "@jest/globals": "^29.7.0", -+ "@jest/source-map": "^29.6.3", -+ "@jest/test-result": "^29.7.0", -+ "@jest/transform": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", -- "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", -- "jest-haste-map": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-mock": "^27.5.1", -- "jest-regex-util": "^27.5.1", -- "jest-resolve": "^27.5.1", -- "jest-snapshot": "^27.5.1", -- "jest-util": "^27.5.1", -+ "jest-haste-map": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-mock": "^29.7.0", -+ "jest-regex-util": "^29.6.3", -+ "jest-resolve": "^29.7.0", -+ "jest-snapshot": "^29.7.0", -+ "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { -@@ -15735,50 +16080,35 @@ - "node": ">=8" - } - }, -- "node_modules/jest-serializer": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", -- "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", -- "dev": true, -- "dependencies": { -- "@types/node": "*", -- "graceful-fs": "^4.2.9" -- }, -- "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -- } -- }, - "node_modules/jest-snapshot": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", -- "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", -+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { -- "@babel/core": "^7.7.2", -+ "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", -+ "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", -- "@babel/traverse": "^7.7.2", -- "@babel/types": "^7.0.0", -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -- "@types/babel__traverse": "^7.0.4", -- "@types/prettier": "^2.1.5", -+ "@babel/types": "^7.3.3", -+ "@jest/expect-utils": "^29.7.0", -+ "@jest/transform": "^29.7.0", -+ "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", -- "expect": "^27.5.1", -+ "expect": "^29.7.0", - "graceful-fs": "^4.2.9", -- "jest-diff": "^27.5.1", -- "jest-get-type": "^27.5.1", -- "jest-haste-map": "^27.5.1", -- "jest-matcher-utils": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-util": "^27.5.1", -+ "jest-diff": "^29.7.0", -+ "jest-get-type": "^29.6.3", -+ "jest-matcher-utils": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", -- "pretty-format": "^27.5.1", -- "semver": "^7.3.2" -+ "pretty-format": "^29.7.0", -+ "semver": "^7.5.3" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { -@@ -15839,6 +16169,21 @@ - "node": ">=8" - } - }, -+ "node_modules/jest-snapshot/node_modules/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "dependencies": { -+ "lru-cache": "^6.0.0" -+ }, -+ "bin": { -+ "semver": "bin/semver.js" -+ }, -+ "engines": { -+ "node": ">=10" -+ } -+ }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -15851,25 +16196,35 @@ - "node": ">=8" - } - }, -- "node_modules/jest-sonar-reporter": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/jest-sonar-reporter/-/jest-sonar-reporter-2.0.0.tgz", -- "integrity": "sha512-ZervDCgEX5gdUbdtWsjdipLN3bKJwpxbvhkYNXTAYvAckCihobSLr9OT/IuyNIRT1EZMDDwR6DroWtrq+IL64w==", -+ "node_modules/jest-sonar": { -+ "version": "0.2.16", -+ "resolved": "https://registry.npmjs.org/jest-sonar/-/jest-sonar-0.2.16.tgz", -+ "integrity": "sha512-ES6Z9BbIVDELtbz+/b6pv41B2qOfp38cQpoCLqei21FtlkG/GzhyQ0M3egEIM+erpJOkpRKM8Tc8/YQtHdiTXA==", - "dev": true, - "dependencies": { -- "xml": "^1.0.1" -- }, -+ "entities": "4.3.0", -+ "strip-ansi": "6.0.1" -+ } -+ }, -+ "node_modules/jest-sonar/node_modules/entities": { -+ "version": "4.3.0", -+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", -+ "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==", -+ "dev": true, - "engines": { -- "node": ">=8.0.0" -+ "node": ">=0.12" -+ }, -+ "funding": { -+ "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/jest-util": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", -- "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", -+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "dependencies": { -- "@jest/types": "^27.5.1", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", -@@ -15877,7 +16232,7 @@ - "picomatch": "^2.2.3" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { -@@ -15951,20 +16306,20 @@ - } - }, - "node_modules/jest-validate": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", -- "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", -+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "dependencies": { -- "@jest/types": "^27.5.1", -+ "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", -- "jest-get-type": "^27.5.1", -+ "jest-get-type": "^29.6.3", - "leven": "^3.1.0", -- "pretty-format": "^27.5.1" -+ "pretty-format": "^29.7.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { -@@ -16050,21 +16405,22 @@ - } - }, - "node_modules/jest-watcher": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", -- "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", -+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "dependencies": { -- "@jest/test-result": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/test-result": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", -- "jest-util": "^27.5.1", -+ "emittery": "^0.13.1", -+ "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { -@@ -16138,17 +16494,18 @@ - } - }, - "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==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", -+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", -+ "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { -- "node": ">= 10.13.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { -@@ -16175,6 +16532,15 @@ - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, -+ "node_modules/jiti": { -+ "version": "1.21.0", -+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", -+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", -+ "dev": true, -+ "bin": { -+ "jiti": "bin/jiti.js" -+ } -+ }, - "node_modules/jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", -@@ -16185,15 +16551,15 @@ - } - }, - "node_modules/joi": { -- "version": "17.6.0", -- "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", -- "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", -+ "version": "17.11.0", -+ "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", -+ "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", -- "@sideway/formula": "^3.0.0", -+ "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, -@@ -16267,6 +16633,12 @@ - } - } - }, -+ "node_modules/jsdom/node_modules/parse5": { -+ "version": "6.0.1", -+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", -+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", -+ "dev": true -+ }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", -@@ -16278,12 +16650,6 @@ - "node": ">=4" - } - }, -- "node_modules/json-parse-better-errors": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", -- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", -- "dev": true -- }, - "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", -@@ -16330,9 +16696,9 @@ - "dev": true - }, - "node_modules/json5": { -- "version": "2.2.1", -- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", -- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", -+ "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" - }, -@@ -16341,9 +16707,9 @@ - } - }, - "node_modules/jsonc-parser": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", -- "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", -+ "version": "3.2.0", -+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", -+ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { -@@ -16400,29 +16766,6 @@ - "source-map-support": "^0.5.5" - } - }, -- "node_modules/katex": { -- "version": "0.15.6", -- "resolved": "https://registry.npmjs.org/katex/-/katex-0.15.6.tgz", -- "integrity": "sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==", -- "funding": [ -- "https://opencollective.com/katex", -- "https://github.com/sponsors/katex" -- ], -- "dependencies": { -- "commander": "^8.0.0" -- }, -- "bin": { -- "katex": "cli.js" -- } -- }, -- "node_modules/katex/node_modules/commander": { -- "version": "8.3.0", -- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", -- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", -- "engines": { -- "node": ">= 12" -- } -- }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", -@@ -16442,9 +16785,9 @@ - } - }, - "node_modules/klona": { -- "version": "2.0.5", -- "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", -- "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", -+ "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" -@@ -16456,6 +16799,16 @@ - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true - }, -+ "node_modules/launch-editor": { -+ "version": "2.6.1", -+ "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", -+ "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", -+ "dev": true, -+ "dependencies": { -+ "picocolors": "^1.0.0", -+ "shell-quote": "^1.8.1" -+ } -+ }, - "node_modules/lcid": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", -@@ -16469,9 +16822,9 @@ - } - }, - "node_modules/less": { -- "version": "4.1.2", -- "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", -- "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", -+ "version": "4.1.3", -+ "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", -+ "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "dev": true, - "dependencies": { - "copy-anything": "^2.0.1", -@@ -16490,20 +16843,20 @@ - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", -- "needle": "^2.5.2", -+ "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { -- "version": "10.2.0", -- "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz", -- "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==", -+ "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": ">= 12.13.0" -+ "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", -@@ -16539,9 +16892,9 @@ - } - }, - "node_modules/less/node_modules/semver": { -- "version": "5.7.1", -- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", -- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", -+ "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": { -@@ -16598,9 +16951,9 @@ - } - }, - "node_modules/lilconfig": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", -- "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", -+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" -@@ -16619,194 +16972,262 @@ - "dev": true - }, - "node_modules/lint-staged": { -- "version": "12.3.7", -- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.7.tgz", -- "integrity": "sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ==", -+ "version": "14.0.1", -+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", -+ "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", - "dev": true, - "dependencies": { -- "cli-truncate": "^3.1.0", -- "colorette": "^2.0.16", -- "commander": "^8.3.0", -- "debug": "^4.3.3", -- "execa": "^5.1.1", -- "lilconfig": "2.0.4", -- "listr2": "^4.0.1", -- "micromatch": "^4.0.4", -- "normalize-path": "^3.0.0", -- "object-inspect": "^1.12.0", -- "pidtree": "^0.5.0", -- "string-argv": "^0.3.1", -- "supports-color": "^9.2.1", -- "yaml": "^1.10.2" -+ "chalk": "5.3.0", -+ "commander": "11.0.0", -+ "debug": "4.3.4", -+ "execa": "7.2.0", -+ "lilconfig": "2.1.0", -+ "listr2": "6.6.1", -+ "micromatch": "4.0.5", -+ "pidtree": "0.6.0", -+ "string-argv": "0.3.2", -+ "yaml": "2.3.1" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { -- "node": "^12.20.0 || ^14.13.1 || >=16.0.0" -+ "node": "^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, -- "node_modules/lint-staged/node_modules/commander": { -- "version": "8.3.0", -- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", -- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", -+ "node_modules/lint-staged/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" -+ "node": "^12.17.0 || ^14.13 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, -- "node_modules/lint-staged/node_modules/supports-color": { -- "version": "9.2.2", -- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", -- "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", -+ "node_modules/lint-staged/node_modules/execa": { -+ "version": "7.2.0", -+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", -+ "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, -+ "dependencies": { -+ "cross-spawn": "^7.0.3", -+ "get-stream": "^6.0.1", -+ "human-signals": "^4.3.0", -+ "is-stream": "^3.0.0", -+ "merge-stream": "^2.0.0", -+ "npm-run-path": "^5.1.0", -+ "onetime": "^6.0.0", -+ "signal-exit": "^3.0.7", -+ "strip-final-newline": "^3.0.0" -+ }, - "engines": { -- "node": ">=12" -+ "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { -- "url": "https://github.com/chalk/supports-color?sponsor=1" -+ "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, -- "node_modules/listr2": { -- "version": "4.0.5", -- "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", -- "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", -+ "node_modules/lint-staged/node_modules/human-signals": { -+ "version": "4.3.1", -+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", -+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, -- "dependencies": { -- "cli-truncate": "^2.1.0", -- "colorette": "^2.0.16", -- "log-update": "^4.0.0", -- "p-map": "^4.0.0", -- "rfdc": "^1.3.0", -- "rxjs": "^7.5.5", -- "through": "^2.3.8", -- "wrap-ansi": "^7.0.0" -+ "engines": { -+ "node": ">=14.18.0" -+ } -+ }, -+ "node_modules/lint-staged/node_modules/is-stream": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", -+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", -+ "dev": true, -+ "engines": { -+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/lint-staged/node_modules/mimic-fn": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", -+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", -+ "dev": true, - "engines": { - "node": ">=12" - }, -- "peerDependencies": { -- "enquirer": ">= 2.3.0 < 3" -- }, -- "peerDependenciesMeta": { -- "enquirer": { -- "optional": true -- } -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/listr2/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==", -+ "node_modules/lint-staged/node_modules/npm-run-path": { -+ "version": "5.1.0", -+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", -+ "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { -- "color-convert": "^2.0.1" -+ "path-key": "^4.0.0" - }, - "engines": { -- "node": ">=8" -+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { -- "url": "https://github.com/chalk/ansi-styles?sponsor=1" -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/listr2/node_modules/cli-truncate": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", -- "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", -+ "node_modules/lint-staged/node_modules/onetime": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", -+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { -- "slice-ansi": "^3.0.0", -- "string-width": "^4.2.0" -+ "mimic-fn": "^4.0.0" - }, - "engines": { -- "node": ">=8" -+ "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/listr2/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==", -+ "node_modules/lint-staged/node_modules/path-key": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", -+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, -- "dependencies": { -- "color-name": "~1.1.4" -- }, - "engines": { -- "node": ">=7.0.0" -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/listr2/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/listr2/node_modules/is-fullwidth-code-point": { -+ "node_modules/lint-staged/node_modules/strip-final-newline": { - "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==", -+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", -+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { -- "node": ">=8" -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/listr2/node_modules/slice-ansi": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", -- "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", -+ "node_modules/listr2": { -+ "version": "6.6.1", -+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", -+ "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", - "dev": true, - "dependencies": { -- "ansi-styles": "^4.0.0", -- "astral-regex": "^2.0.0", -- "is-fullwidth-code-point": "^3.0.0" -+ "cli-truncate": "^3.1.0", -+ "colorette": "^2.0.20", -+ "eventemitter3": "^5.0.1", -+ "log-update": "^5.0.1", -+ "rfdc": "^1.3.0", -+ "wrap-ansi": "^8.1.0" - }, - "engines": { -- "node": ">=8" -+ "node": ">=16.0.0" -+ }, -+ "peerDependencies": { -+ "enquirer": ">= 2.3.0 < 3" -+ }, -+ "peerDependenciesMeta": { -+ "enquirer": { -+ "optional": true -+ } - } - }, -- "node_modules/load-json-file": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", -- "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", -+ "node_modules/listr2/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/listr2/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/listr2/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/listr2/node_modules/eventemitter3": { -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", -+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", -+ "dev": true -+ }, -+ "node_modules/listr2/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": { -- "graceful-fs": "^4.1.2", -- "parse-json": "^2.2.0", -- "pify": "^2.0.0", -- "pinkie-promise": "^2.0.0", -- "strip-bom": "^2.0.0" -+ "eastasianwidth": "^0.2.0", -+ "emoji-regex": "^9.2.2", -+ "strip-ansi": "^7.0.1" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/load-json-file/node_modules/parse-json": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", -- "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", -+ "node_modules/listr2/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": { -- "error-ex": "^1.2.0" -+ "ansi-regex": "^6.0.1" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, -- "node_modules/load-json-file/node_modules/strip-bom": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", -- "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", -+ "node_modules/listr2/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": { -- "is-utf8": "^0.2.0" -+ "ansi-styles": "^6.1.0", -+ "string-width": "^5.0.1", -+ "strip-ansi": "^7.0.1" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/load-yaml-file": { -@@ -16852,263 +17273,85 @@ - } - }, - "node_modules/loader-utils": { -- "version": "3.2.0", -- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", -- "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", -+ "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/localtunnel": { -- "version": "1.9.0", -- "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.0.tgz", -- "integrity": "sha512-wCIiIHJ8kKIcWkTQE3m1VRABvsH2ZuOkiOpZUofUCf6Q42v3VIZ+Q0YfX1Z4sYDRj0muiKL1bLvz1FeoxsPO0w==", -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", -+ "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", - "dev": true, - "dependencies": { -- "axios": "0.17.1", -- "debug": "2.6.8", -+ "axios": "0.21.4", -+ "debug": "4.3.2", - "openurl": "1.1.1", -- "yargs": "6.6.0" -+ "yargs": "17.1.1" - }, - "bin": { -- "lt": "bin/client" -- } -- }, -- "node_modules/localtunnel/node_modules/ansi-regex": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", -- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/node_modules/camelcase": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", -- "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", -- "dev": true, -+ "lt": "bin/lt.js" -+ }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=8.3.0" - } - }, - "node_modules/localtunnel/node_modules/cliui": { -- "version": "3.2.0", -- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", -- "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", -+ "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": "^1.0.1", -- "strip-ansi": "^3.0.1", -- "wrap-ansi": "^2.0.0" -+ "string-width": "^4.2.0", -+ "strip-ansi": "^6.0.0", -+ "wrap-ansi": "^7.0.0" - } - }, - "node_modules/localtunnel/node_modules/debug": { -- "version": "2.6.8", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", -- "integrity": "sha512-E22fsyWPt/lr4/UgQLt/pXqerGMDsanhbnmqIS3VAXuDi1v3IpiwXe2oncEIondHSBuPDWRoK/pMjlvi8FuOXQ==", -- "dev": true, -- "dependencies": { -- "ms": "2.0.0" -- } -- }, -- "node_modules/localtunnel/node_modules/find-up": { -- "version": "1.1.2", -- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", -- "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", -- "dev": true, -- "dependencies": { -- "path-exists": "^2.0.0", -- "pinkie-promise": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/node_modules/get-caller-file": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", -- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", -- "dev": true -- }, -- "node_modules/localtunnel/node_modules/invert-kv": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", -- "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/node_modules/is-fullwidth-code-point": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", -- "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", -- "dev": true, -- "dependencies": { -- "number-is-nan": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/node_modules/lcid": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", -- "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", -- "dev": true, -- "dependencies": { -- "invert-kv": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/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/localtunnel/node_modules/os-locale": { -- "version": "1.4.0", -- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", -- "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", -- "dev": true, -- "dependencies": { -- "lcid": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/node_modules/path-exists": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", -- "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", -- "dev": true, -- "dependencies": { -- "pinkie-promise": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/node_modules/path-type": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", -- "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", -- "dev": true, -- "dependencies": { -- "graceful-fs": "^4.1.2", -- "pify": "^2.0.0", -- "pinkie-promise": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/node_modules/read-pkg": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", -- "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", -- "dev": true, -- "dependencies": { -- "load-json-file": "^1.0.0", -- "normalize-package-data": "^2.3.2", -- "path-type": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/node_modules/read-pkg-up": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", -- "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", -- "dev": true, -- "dependencies": { -- "find-up": "^1.0.0", -- "read-pkg": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/node_modules/string-width": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", -- "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", -- "dev": true, -- "dependencies": { -- "code-point-at": "^1.0.0", -- "is-fullwidth-code-point": "^1.0.0", -- "strip-ansi": "^3.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/node_modules/strip-ansi": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", -- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", -+ "version": "4.3.2", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", -+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { -- "ansi-regex": "^2.0.0" -+ "ms": "2.1.2" - }, - "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/localtunnel/node_modules/wrap-ansi": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", -- "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", -- "dev": true, -- "dependencies": { -- "string-width": "^1.0.1", -- "strip-ansi": "^3.0.1" -+ "node": ">=6.0" - }, -- "engines": { -- "node": ">=0.10.0" -+ "peerDependenciesMeta": { -+ "supports-color": { -+ "optional": true -+ } - } - }, -- "node_modules/localtunnel/node_modules/y18n": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", -- "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", -- "dev": true -- }, - "node_modules/localtunnel/node_modules/yargs": { -- "version": "6.6.0", -- "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", -- "integrity": "sha512-6/QWTdisjnu5UHUzQGst+UOEuEVwIzFVGBjq3jMTFNs5WJQsH/X6nMURSaScIdF5txylr1Ao9bvbWiKi2yXbwA==", -+ "version": "17.1.1", -+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", -+ "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", - "dev": true, - "dependencies": { -- "camelcase": "^3.0.0", -- "cliui": "^3.2.0", -- "decamelize": "^1.1.1", -- "get-caller-file": "^1.0.1", -- "os-locale": "^1.4.0", -- "read-pkg-up": "^1.0.1", -+ "cliui": "^7.0.2", -+ "escalade": "^3.1.1", -+ "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", -- "require-main-filename": "^1.0.1", -- "set-blocking": "^2.0.0", -- "string-width": "^1.0.2", -- "which-module": "^1.0.0", -- "y18n": "^3.2.1", -- "yargs-parser": "^4.2.0" -+ "string-width": "^4.2.0", -+ "y18n": "^5.0.5", -+ "yargs-parser": "^20.2.2" -+ }, -+ "engines": { -+ "node": ">=12" - } - }, - "node_modules/localtunnel/node_modules/yargs-parser": { -- "version": "4.2.1", -- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", -- "integrity": "sha512-+QQWqC2xeL0N5/TE+TY6OGEqyNRM+g2/r712PDNYgiCdXYCApXf1vzfmDSLBxfGRwV+moTq/V8FnMI24JCm2Yg==", -+ "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, -- "dependencies": { -- "camelcase": "^3.0.0" -+ "engines": { -+ "node": ">=10" - } - }, - "node_modules/locate-path": { -@@ -17132,7 +17375,26 @@ - "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==" -+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", -+ "dev": true -+ }, -+ "node_modules/lodash.escape": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", -+ "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", -+ "dev": true -+ }, -+ "node_modules/lodash.flatten": { -+ "version": "4.4.0", -+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", -+ "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", -+ "dev": true -+ }, -+ "node_modules/lodash.invokemap": { -+ "version": "4.6.0", -+ "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", -+ "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", -+ "dev": true - }, - "node_modules/lodash.isfinite": { - "version": "3.3.2", -@@ -17143,7 +17405,8 @@ - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", -- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" -+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", -+ "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", -@@ -17151,10 +17414,17 @@ - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, -- "node_modules/lodash.throttle": { -- "version": "4.1.1", -- "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", -- "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" -+ "node_modules/lodash.pullall": { -+ "version": "4.2.0", -+ "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", -+ "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", -+ "dev": true -+ }, -+ "node_modules/lodash.uniqby": { -+ "version": "4.7.0", -+ "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", -+ "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", -+ "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", -@@ -17243,94 +17513,159 @@ - } - }, - "node_modules/log-update": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", -- "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", -+ "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", - "dev": true, - "dependencies": { -- "ansi-escapes": "^4.3.0", -- "cli-cursor": "^3.1.0", -- "slice-ansi": "^4.0.0", -- "wrap-ansi": "^6.2.0" -+ "ansi-escapes": "^5.0.0", -+ "cli-cursor": "^4.0.0", -+ "slice-ansi": "^5.0.0", -+ "strip-ansi": "^7.0.1", -+ "wrap-ansi": "^8.0.1" - }, - "engines": { -- "node": ">=10" -+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/log-update/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==", -+ "node_modules/log-update/node_modules/ansi-escapes": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", -+ "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", - "dev": true, - "dependencies": { -- "color-convert": "^2.0.1" -+ "type-fest": "^1.0.2" - }, - "engines": { -- "node": ">=8" -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/log-update/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/log-update/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/log-update/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==", -+ "node_modules/log-update/node_modules/cli-cursor": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", -+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "dependencies": { -- "color-name": "~1.1.4" -+ "restore-cursor": "^4.0.0" - }, - "engines": { -- "node": ">=7.0.0" -+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/log-update/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/log-update/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/log-update/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==", -+ "node_modules/log-update/node_modules/restore-cursor": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", -+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, -+ "dependencies": { -+ "onetime": "^5.1.0", -+ "signal-exit": "^3.0.2" -+ }, - "engines": { -- "node": ">=8" -+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/log-update/node_modules/slice-ansi": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", -- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", -+ "node_modules/log-update/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": { -- "ansi-styles": "^4.0.0", -- "astral-regex": "^2.0.0", -- "is-fullwidth-code-point": "^3.0.0" -+ "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/log-update/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/log-update/node_modules/type-fest": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", -+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", -+ "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { -- "url": "https://github.com/chalk/slice-ansi?sponsor=1" -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/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==", -+ "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": "^4.0.0", -- "string-width": "^4.1.0", -- "strip-ansi": "^6.0.0" -+ "ansi-styles": "^6.1.0", -+ "string-width": "^5.0.1", -+ "strip-ansi": "^7.0.1" - }, - "engines": { -- "node": ">=8" -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/logform": { -@@ -17370,36 +17705,45 @@ - } - }, - "node_modules/magic-string": { -- "version": "0.25.7", -- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", -- "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", -+ "version": "0.30.1", -+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", -+ "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", - "dev": true, - "dependencies": { -- "sourcemap-codec": "^1.4.4" -+ "@jridgewell/sourcemap-codec": "^1.4.15" -+ }, -+ "engines": { -+ "node": ">=12" - } - }, - "node_modules/make-dir": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", -- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", -+ "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": "^6.0.0" -+ "semver": "^7.5.3" - }, - "engines": { -- "node": ">=8" -+ "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, -+ "dependencies": { -+ "lru-cache": "^6.0.0" -+ }, - "bin": { - "semver": "bin/semver.js" -+ }, -+ "engines": { -+ "node": ">=10" - } - }, - "node_modules/make-error": { -@@ -17456,44 +17800,6 @@ - "node": ">=6" - } - }, -- "node_modules/map-cache": { -- "version": "0.2.2", -- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", -- "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/map-visit": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", -- "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", -- "dev": true, -- "dependencies": { -- "object-visit": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/marked": { -- "version": "4.0.17", -- "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.17.tgz", -- "integrity": "sha512-Wfk0ATOK5iPxM4ptrORkFemqroz0ZDxp5MWfYA7H/F+wO17NRWV5Ypxi6p3g2Xmw2bKeiYOl6oVnLHKxBA0VhA==", -- "bin": { -- "marked": "bin/marked.js" -- }, -- "engines": { -- "node": ">= 12" -- } -- }, -- "node_modules/math-random": { -- "version": "1.0.4", -- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", -- "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", -- "dev": true -- }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", -@@ -17577,12 +17883,12 @@ - } - }, - "node_modules/memfs": { -- "version": "3.4.6", -- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.6.tgz", -- "integrity": "sha512-rH9mjopto6Wkr7RFuH9l9dk3qb2XGOcYKr7xMhaYqfzuJqOqhRrcFvfD7JMuPj6SLmPreh5+6eAuv36NFAU+Mw==", -+ "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.3" -+ "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" -@@ -17630,7 +17936,6 @@ - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", -- "dev": true, - "engines": { - "node": ">= 8" - } -@@ -17648,7 +17953,6 @@ - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", -- "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" -@@ -17700,9 +18004,9 @@ - } - }, - "node_modules/mini-css-extract-plugin": { -- "version": "2.5.3", -- "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz", -- "integrity": "sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==", -+ "version": "2.7.6", -+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", -+ "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" -@@ -17718,25 +18022,6 @@ - "webpack": "^5.0.0" - } - }, -- "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", -- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", -- "dev": true, -- "dependencies": { -- "@types/json-schema": "^7.0.9", -- "ajv": "^8.8.0", -- "ajv-formats": "^2.1.1", -- "ajv-keywords": "^5.0.0" -- }, -- "engines": { -- "node": ">= 12.13.0" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/webpack" -- } -- }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", -@@ -17747,6 +18032,7 @@ - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", -+ "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, -@@ -17755,10 +18041,13 @@ - } - }, - "node_modules/minimist": { -- "version": "1.2.6", -- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", -- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", -- "dev": true -+ "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": "3.3.3", -@@ -17860,30 +18149,11 @@ - "node": ">= 8" - } - }, -- "node_modules/mixin-deep": { -- "version": "1.3.2", -- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", -- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", -- "dev": true, -- "dependencies": { -- "for-in": "^1.0.2", -- "is-extendable": "^1.0.1" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/mixin-deep/node_modules/is-extendable": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", -- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", -- "dev": true, -- "dependencies": { -- "is-plain-object": "^2.0.4" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -+ "node_modules/mitt": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", -+ "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", -+ "dev": true - }, - "node_modules/mkdirp": { - "version": "1.0.4", -@@ -17911,14 +18181,6 @@ - "node": ">=10" - } - }, -- "node_modules/moment": { -- "version": "2.29.3", -- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", -- "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", -- "engines": { -- "node": "*" -- } -- }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", -@@ -17934,24 +18196,18 @@ - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { -- "version": "6.2.3", -- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", -- "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", -+ "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": "^1.3.1", -+ "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, -- "node_modules/multicast-dns-service-types": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", -- "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==", -- "dev": true -- }, - "node_modules/multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", -@@ -17977,18 +18233,17 @@ - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, -- "node_modules/nan": { -- "version": "2.16.0", -- "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", -- "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", -- "dev": true, -- "optional": true -- }, - "node_modules/nanoid": { -- "version": "3.3.4", -- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", -- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", -+ "version": "3.3.6", -+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", -+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, -+ "funding": [ -+ { -+ "type": "github", -+ "url": "https://github.com/sponsors/ai" -+ } -+ ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, -@@ -17996,46 +18251,6 @@ - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, -- "node_modules/nanomatch": { -- "version": "1.2.13", -- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", -- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", -- "dev": true, -- "dependencies": { -- "arr-diff": "^4.0.0", -- "array-unique": "^0.3.2", -- "define-property": "^2.0.2", -- "extend-shallow": "^3.0.2", -- "fragment-cache": "^0.2.1", -- "is-windows": "^1.0.2", -- "kind-of": "^6.0.2", -- "object.pick": "^1.3.0", -- "regex-not": "^1.0.0", -- "snapdragon": "^0.8.1", -- "to-regex": "^3.0.1" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/nanomatch/node_modules/arr-diff": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", -- "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/nanomatch/node_modules/array-unique": { -- "version": "0.3.2", -- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", -- "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", -@@ -18043,14 +18258,14 @@ - "dev": true - }, - "node_modules/needle": { -- "version": "2.9.1", -- "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", -- "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", -+ "version": "3.2.0", -+ "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", -+ "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^3.2.6", -- "iconv-lite": "^0.4.4", -+ "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { -@@ -18070,10 +18285,23 @@ - "ms": "^2.1.1" - } - }, -+ "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/needle/node_modules/sax": { -- "version": "1.2.4", -- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", -- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", -+ "version": "1.3.0", -+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", -+ "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", - "dev": true, - "optional": true - }, -@@ -18093,47 +18321,15 @@ - "dev": true - }, - "node_modules/ngx-infinite-scroll": { -- "version": "13.0.1", -- "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-13.0.1.tgz", -- "integrity": "sha512-B0E5gxnM/ljM76ap/cb9SYI7RUDBK3bNRPY3W+j+ynkrDtJWzyVgVp0Diit4HqnTUskOYmRctwfP/CVznH4v9A==", -- "dependencies": { -- "tslib": "^2.3.0" -- }, -- "peerDependencies": { -- "@angular/common": "^13.1.0", -- "@angular/core": "^13.1.0" -- } -- }, -- "node_modules/ngx-markdown": { -- "version": "13.1.0", -- "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-13.1.0.tgz", -- "integrity": "sha512-Bm4WhMI9xSnWTzzQWs/e1+d/l0s3+eFU0Ug/lcePmiWEZAPqiceEe6akjh4+Tjp61SmZ/wmKr8Kvc8mr9moP9A==", -+ "version": "16.0.0", -+ "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-16.0.0.tgz", -+ "integrity": "sha512-bzyNYd+wVlUUxcopRVr2DAa81eEc8vITtKVvb+c7R1uy8hWPTlxOEXf3L1qA4FMwTEzCQ9b37TXzlJji3qBy+A==", - "dependencies": { -- "@types/marked": "^4.0.2", -- "emoji-toolkit": "^6.6.0", -- "katex": "^0.15.1", -- "marked": "^4.0.10", -- "prismjs": "^1.25.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { -- "@angular/common": "^13.0.0", -- "@angular/core": "^13.0.0", -- "@angular/platform-browser": "^13.0.0", -- "rxjs": "^6.5.3 || ^7.4.0", -- "zone.js": "^0.11.4" -- } -- }, -- "node_modules/ngx-webstorage": { -- "version": "9.0.0", -- "resolved": "https://registry.npmjs.org/ngx-webstorage/-/ngx-webstorage-9.0.0.tgz", -- "integrity": "sha512-OighIRoNiGlJLM+mcb850ZkmEdY4JYnGNqKy91hlMgmD9zvUCwC+6pcv1NMncxBP9vnQAqRb65cdY5MBppGM/Q==", -- "dependencies": { -- "tslib": "^2.0.0" -- }, -- "peerDependencies": { -- "@angular/common": "^13.0.0", -- "@angular/core": "^13.0.0" -+ "@angular/common": ">=16.0.0 <17.0.0", -+ "@angular/core": ">=16.0.0 <17.0.0" - } - }, - "node_modules/nice-napi": { -@@ -18234,9 +18430,9 @@ - } - }, - "node_modules/node-gyp-build": { -- "version": "4.4.0", -- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", -- "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", -+ "version": "4.6.1", -+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", -+ "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", - "dev": true, - "optional": true, - "bin": { -@@ -18245,6 +18441,21 @@ - "node-gyp-build-test": "build-test.js" - } - }, -+ "node_modules/node-gyp/node_modules/rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "dependencies": { -+ "glob": "^7.1.3" -+ }, -+ "bin": { -+ "rimraf": "bin.js" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", -@@ -18266,9 +18477,9 @@ - } - }, - "node_modules/node-releases": { -- "version": "2.0.5", -- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", -- "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" -+ "version": "2.0.13", -+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", -+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" - }, - "node_modules/nopt": { - "version": "5.0.0", -@@ -18588,6 +18799,63 @@ - "node": ">=10" - } - }, -+ "node_modules/npm-registry-fetch/node_modules/rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "dependencies": { -+ "glob": "^7.1.3" -+ }, -+ "bin": { -+ "rimraf": "bin.js" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/npm-registry-fetch/node_modules/rimraf/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/npm-registry-fetch/node_modules/rimraf/node_modules/glob": { -+ "version": "7.2.3", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", -+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", -+ "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/npm-registry-fetch/node_modules/rimraf/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/npm-registry-fetch/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", -@@ -18653,19 +18921,10 @@ - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, -- "node_modules/number-is-nan": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", -- "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/nwsapi": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", -- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", -+ "version": "2.2.7", -+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", -+ "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "node_modules/oauth-sign": { -@@ -18686,97 +18945,6 @@ - "node": ">=0.10.0" - } - }, -- "node_modules/object-component": { -- "version": "0.0.3", -- "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", -- "integrity": "sha512-S0sN3agnVh2SZNEIGc0N1X4Z5K0JeFbGBrnuZpsxuUh5XLF0BnvWkMjRXo/zGKLd/eghvNIKcx1pQkmUjXIyrA==", -- "dev": true -- }, -- "node_modules/object-copy": { -- "version": "0.1.0", -- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", -- "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", -- "dev": true, -- "dependencies": { -- "copy-descriptor": "^0.1.0", -- "define-property": "^0.2.5", -- "kind-of": "^3.0.3" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/object-copy/node_modules/define-property": { -- "version": "0.2.5", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", -- "dev": true, -- "dependencies": { -- "is-descriptor": "^0.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/object-copy/node_modules/is-accessor-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", -- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/object-copy/node_modules/is-data-descriptor": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", -- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/object-copy/node_modules/is-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", -- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", -- "dev": true, -- "dependencies": { -- "is-accessor-descriptor": "^0.1.6", -- "is-data-descriptor": "^0.1.4", -- "kind-of": "^5.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", -- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/object-copy/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "dependencies": { -- "is-buffer": "^1.1.5" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", -@@ -18786,93 +18954,13 @@ - "url": "https://github.com/sponsors/ljharb" - } - }, -- "node_modules/object-is": { -- "version": "1.1.5", -- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", -- "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", -- "dev": true, -- "dependencies": { -- "call-bind": "^1.0.2", -- "define-properties": "^1.1.3" -- }, -- "engines": { -- "node": ">= 0.4" -- }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -- } -- }, -- "node_modules/object-keys": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", -- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", -- "dev": true, -- "engines": { -- "node": ">= 0.4" -- } -- }, - "node_modules/object-path": { -- "version": "0.9.2", -- "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", -- "integrity": "sha512-hPv/mbCYtXOhhqstmodis0boF1ooA8yz3PDJwTnkZvOlaJkd5aCAgA9tq6BUjJW5w8jXHI2qi9+w5N0tz+AAaA==", -- "dev": true, -- "engines": { -- "node": ">=0.8.0" -- } -- }, -- "node_modules/object-visit": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", -- "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", -- "dev": true, -- "dependencies": { -- "isobject": "^3.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/object.assign": { -- "version": "4.1.2", -- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", -- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", -- "dev": true, -- "dependencies": { -- "call-bind": "^1.0.0", -- "define-properties": "^1.1.3", -- "has-symbols": "^1.0.1", -- "object-keys": "^1.1.1" -- }, -- "engines": { -- "node": ">= 0.4" -- }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -- } -- }, -- "node_modules/object.omit": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", -- "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", -- "dev": true, -- "dependencies": { -- "for-own": "^0.1.4", -- "is-extendable": "^0.1.1" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/object.pick": { -- "version": "1.3.0", -- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", -- "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", -+ "version": "0.11.8", -+ "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", -+ "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", - "dev": true, -- "dependencies": { -- "isobject": "^3.0.1" -- }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">= 10.12.0" - } - }, - "node_modules/obuf": { -@@ -18906,6 +18994,7 @@ - "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" - } -@@ -18944,9 +19033,9 @@ - } - }, - "node_modules/open": { -- "version": "8.4.0", -- "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", -- "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", -+ "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", -@@ -18976,30 +19065,38 @@ - "dev": true - }, - "node_modules/opn": { -- "version": "4.0.2", -- "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", -- "integrity": "sha512-iPBWbPP4OEOzR1xfhpGLDh+ypKBOygunZhM9jBtA7FS5sKjEiMZw0EFb82hnDOmTZX90ZWLoZKUza4cVt8MexA==", -+ "version": "5.3.0", -+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", -+ "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "dev": true, - "dependencies": { -- "object-assign": "^4.0.1", -- "pinkie-promise": "^2.0.0" -+ "is-wsl": "^1.1.0" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=4" -+ } -+ }, -+ "node_modules/opn/node_modules/is-wsl": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", -+ "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", -+ "dev": true, -+ "engines": { -+ "node": ">=4" - } - }, - "node_modules/optionator": { -- "version": "0.9.1", -- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", -- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", -+ "version": "0.9.3", -+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", -+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { -+ "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", -- "type-check": "^0.4.0", -- "word-wrap": "^1.2.3" -+ "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" -@@ -19361,6 +19458,21 @@ - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, -+ "node_modules/pacote/node_modules/rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "dependencies": { -+ "glob": "^7.1.3" -+ }, -+ "bin": { -+ "rimraf": "bin.js" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", -@@ -19408,42 +19520,6 @@ - "node": ">=6" - } - }, -- "node_modules/parse-glob": { -- "version": "3.0.4", -- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", -- "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", -- "dev": true, -- "dependencies": { -- "glob-base": "^0.3.0", -- "is-dotfile": "^1.0.0", -- "is-extglob": "^1.0.0", -- "is-glob": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/parse-glob/node_modules/is-extglob": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", -- "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/parse-glob/node_modules/is-glob": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", -- "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", -- "dev": true, -- "dependencies": { -- "is-extglob": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", -@@ -19472,55 +19548,41 @@ - } - }, - "node_modules/parse5": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", -- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", -- "dev": true -- }, -- "node_modules/parse5-html-rewriting-stream": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", -- "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", -+ "version": "7.1.2", -+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", -+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { -- "parse5": "^6.0.1", -- "parse5-sax-parser": "^6.0.1" -+ "entities": "^4.4.0" -+ }, -+ "funding": { -+ "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, -- "node_modules/parse5-htmlparser2-tree-adapter": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", -- "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", -+ "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": { -- "parse5": "^6.0.1" -+ "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": "6.0.1", -- "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", -- "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", -- "dev": true, -- "dependencies": { -- "parse5": "^6.0.1" -- } -- }, -- "node_modules/parseqs": { -- "version": "0.0.5", -- "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", -- "integrity": "sha512-B3Nrjw2aL7aI4TDujOzfA4NsEc4u1lVcIRE0xesutH8kjeWF70uk+W5cBlIQx04zUH9NTBvuN36Y9xLRPK6Jjw==", -- "dev": true, -- "dependencies": { -- "better-assert": "~1.0.0" -- } -- }, -- "node_modules/parseuri": { -- "version": "0.0.5", -- "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", -- "integrity": "sha512-ijhdxJu6l5Ru12jF0JvzXVPvsC+VibqeaExlNoMhWN6VQ79PGjkmc7oA4W1lp00sFkNyj0fx6ivPLdV51/UMog==", -+ "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": { -- "better-assert": "~1.0.0" -+ "parse5": "^7.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { -@@ -19532,15 +19594,6 @@ - "node": ">= 0.8" - } - }, -- "node_modules/pascalcase": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", -- "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", -@@ -19554,6 +19607,7 @@ - "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" - } -@@ -19573,6 +19627,40 @@ - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, -+ "node_modules/path-scurry": { -+ "version": "1.10.1", -+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", -+ "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", -+ "dev": true, -+ "dependencies": { -+ "lru-cache": "^9.1.1 || ^10.0.0", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" -+ }, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/path-scurry/node_modules/lru-cache": { -+ "version": "10.0.1", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", -+ "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", -+ "dev": true, -+ "engines": { -+ "node": "14 || >=16.14" -+ } -+ }, -+ "node_modules/path-scurry/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", -@@ -19611,9 +19699,9 @@ - } - }, - "node_modules/pidtree": { -- "version": "0.5.0", -- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", -- "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", -+ "version": "0.6.0", -+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", -+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" -@@ -19631,40 +19719,19 @@ - "node": ">=0.10.0" - } - }, -- "node_modules/pinkie": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", -- "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/pinkie-promise": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", -- "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", -- "dev": true, -- "dependencies": { -- "pinkie": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/pirates": { -- "version": "4.0.5", -- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", -- "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", -+ "version": "4.0.6", -+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", -+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/piscina": { -- "version": "3.2.0", -- "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", -- "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.0.0.tgz", -+ "integrity": "sha512-641nAmJS4k4iqpNUqfggqUBUMmlw0ZoM5VZKdQkV2e970Inn3Tk9kroCc1wpsYLD07vCwpys5iY0d3xI/9WkTg==", - "dev": true, - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", -@@ -19754,48 +19821,13 @@ - "node": ">=4" - } - }, -- "node_modules/portfinder": { -- "version": "1.0.28", -- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", -- "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", -- "dev": true, -- "dependencies": { -- "async": "^2.6.2", -- "debug": "^3.1.1", -- "mkdirp": "^0.5.5" -- }, -- "engines": { -- "node": ">= 0.12.0" -- } -- }, -- "node_modules/portfinder/node_modules/debug": { -- "version": "3.2.7", -- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", -- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", -- "dev": true, -- "dependencies": { -- "ms": "^2.1.1" -- } -- }, -- "node_modules/portfinder/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/portscanner": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", -- "integrity": "sha512-CUxI7PHXrWJTIPmQs1YJFyD4uesS3om2jVcgS3T1eYPyd60s1l0m7tf35Fn5KRAtV51SAD7BmImaOGf6vwhiFQ==", -+ "version": "2.2.0", -+ "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", -+ "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", - "dev": true, - "dependencies": { -- "async": "1.5.2", -+ "async": "^2.6.0", - "is-number-like": "^1.0.3" - }, - "engines": { -@@ -19803,342 +19835,46 @@ - "npm": ">=1.0.0" - } - }, -- "node_modules/portscanner/node_modules/async": { -- "version": "1.5.2", -- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", -- "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", -- "dev": true -- }, -- "node_modules/posix-character-classes": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", -- "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/postcss": { -- "version": "8.4.5", -- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", -- "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", -+ "version": "8.4.31", -+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", -+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "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.1.30", -+ "nanoid": "^3.3.6", - "picocolors": "^1.0.0", -- "source-map-js": "^1.0.1" -+ "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/postcss/" -- } -- }, -- "node_modules/postcss-attribute-case-insensitive": { -- "version": "5.0.1", -- "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.1.tgz", -- "integrity": "sha512-wrt2VndqSLJpyBRNz9OmJcgnhI9MaongeWgapdBuUMu2a/KNJ8SENesG4SdiTnQwGO9b1VKbTWYAfCPeokLqZQ==", -- "dev": true, -- "dependencies": { -- "postcss-selector-parser": "^6.0.10" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/csstools" -- }, -- "peerDependencies": { -- "postcss": "^8.3" -- } -- }, -- "node_modules/postcss-color-functional-notation": { -- "version": "4.2.3", -- "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.3.tgz", -- "integrity": "sha512-5fbr6FzFzjwHXKsVnkmEYrJYG8VNNzvD1tAXaPPWR97S6rhKI5uh2yOfV5TAzhDkZoq4h+chxEplFDc8GeyFtw==", -- "dev": true, -- "dependencies": { -- "postcss-value-parser": "^4.2.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/csstools" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-color-hex-alpha": { -- "version": "8.0.4", -- "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", -- "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", -- "dev": true, -- "dependencies": { -- "postcss-value-parser": "^4.2.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/csstools" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-color-rebeccapurple": { -- "version": "7.1.0", -- "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.0.tgz", -- "integrity": "sha512-1jtE5AKnZcKq4pjOrltFHcbEM2/IvtbD1OdhZ/wqds18//bh0UmQkffcCkzDJU+/vGodfIsVQeKn+45CJvX9Bw==", -- "dev": true, -- "dependencies": { -- "postcss-value-parser": "^4.2.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/csstools" -- }, -- "peerDependencies": { -- "postcss": "^8.3" -- } -- }, -- "node_modules/postcss-custom-media": { -- "version": "8.0.2", -- "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", -- "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", -- "dev": true, -- "dependencies": { -- "postcss-value-parser": "^4.2.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/csstools" -- }, -- "peerDependencies": { -- "postcss": "^8.3" -- } -- }, -- "node_modules/postcss-custom-properties": { -- "version": "12.1.8", -- "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz", -- "integrity": "sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==", -- "dev": true, -- "dependencies": { -- "postcss-value-parser": "^4.2.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/csstools" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-custom-selectors": { -- "version": "6.0.3", -- "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", -- "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", -- "dev": true, -- "dependencies": { -- "postcss-selector-parser": "^6.0.4" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/csstools" -- }, -- "peerDependencies": { -- "postcss": "^8.3" -- } -- }, -- "node_modules/postcss-dir-pseudo-class": { -- "version": "6.0.4", -- "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", -- "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", -- "dev": true, -- "dependencies": { -- "postcss-selector-parser": "^6.0.9" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-double-position-gradients": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz", -- "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==", -- "dev": true, -- "dependencies": { -- "@csstools/postcss-progressive-custom-properties": "^1.1.0", -- "postcss-value-parser": "^4.2.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-env-function": { -- "version": "4.0.6", -- "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", -- "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", -- "dev": true, -- "dependencies": { -- "postcss-value-parser": "^4.2.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-focus-visible": { -- "version": "6.0.4", -- "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", -- "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", -- "dev": true, -- "dependencies": { -- "postcss-selector-parser": "^6.0.9" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-focus-within": { -- "version": "5.0.4", -- "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", -- "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", -- "dev": true, -- "dependencies": { -- "postcss-selector-parser": "^6.0.9" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-font-variant": { -- "version": "5.0.0", -- "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", -- "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", -- "dev": true, -- "peerDependencies": { -- "postcss": "^8.1.0" -- } -- }, -- "node_modules/postcss-gap-properties": { -- "version": "3.0.3", -- "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", -- "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", -- "dev": true, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-image-set-function": { -- "version": "4.0.6", -- "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", -- "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", -- "dev": true, -- "dependencies": { -- "postcss-value-parser": "^4.2.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-import": { -- "version": "14.0.2", -- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", -- "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", -- "dev": true, -- "dependencies": { -- "postcss-value-parser": "^4.0.0", -- "read-cache": "^1.0.0", -- "resolve": "^1.1.7" -- }, -- "engines": { -- "node": ">=10.0.0" -- }, -- "peerDependencies": { -- "postcss": "^8.0.0" -- } -- }, -- "node_modules/postcss-initial": { -- "version": "4.0.1", -- "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", -- "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", -- "dev": true, -- "peerDependencies": { -- "postcss": "^8.0.0" -- } -- }, -- "node_modules/postcss-lab-function": { -- "version": "4.2.0", -- "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", -- "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", -- "dev": true, -- "dependencies": { -- "@csstools/postcss-progressive-custom-properties": "^1.1.0", -- "postcss-value-parser": "^4.2.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/csstools" -- }, -- "peerDependencies": { -- "postcss": "^8.4" - } - }, - "node_modules/postcss-loader": { -- "version": "6.2.1", -- "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", -- "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", -+ "version": "7.3.3", -+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", -+ "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", - "dev": true, - "dependencies": { -- "cosmiconfig": "^7.0.0", -- "klona": "^2.0.5", -- "semver": "^7.3.5" -+ "cosmiconfig": "^8.2.0", -+ "jiti": "^1.18.2", -+ "semver": "^7.3.8" - }, - "engines": { -- "node": ">= 12.13.0" -+ "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", -@@ -20149,28 +19885,19 @@ - "webpack": "^5.0.0" - } - }, -- "node_modules/postcss-logical": { -- "version": "5.0.4", -- "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", -- "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", -+ "node_modules/postcss-loader/node_modules/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, -- "engines": { -- "node": "^12 || ^14 || >=16" -+ "dependencies": { -+ "lru-cache": "^6.0.0" - }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-media-minmax": { -- "version": "5.0.0", -- "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", -- "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", -- "dev": true, -- "engines": { -- "node": ">=10.0.0" -+ "bin": { -+ "semver": "bin/semver.js" - }, -- "peerDependencies": { -- "postcss": "^8.1.0" -+ "engines": { -+ "node": ">=10" - } - }, - "node_modules/postcss-modules-extract-imports": { -@@ -20186,9 +19913,9 @@ - } - }, - "node_modules/postcss-modules-local-by-default": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", -- "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", -+ "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", -@@ -20232,153 +19959,10 @@ - "postcss": "^8.1.0" - } - }, -- "node_modules/postcss-nesting": { -- "version": "10.1.8", -- "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.8.tgz", -- "integrity": "sha512-txdb3/idHYsBbNDFo1PFY0ExCgH5nfWi8G5lO49e6iuU42TydbODTzJgF5UuL5bhgeSlnAtDgfFTDG0Cl1zaSQ==", -- "dev": true, -- "dependencies": { -- "@csstools/selector-specificity": "^2.0.0", -- "postcss-selector-parser": "^6.0.10" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/csstools" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-overflow-shorthand": { -- "version": "3.0.3", -- "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", -- "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", -- "dev": true, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-page-break": { -- "version": "3.0.4", -- "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", -- "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", -- "dev": true, -- "peerDependencies": { -- "postcss": "^8" -- } -- }, -- "node_modules/postcss-place": { -- "version": "7.0.4", -- "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", -- "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", -- "dev": true, -- "dependencies": { -- "postcss-value-parser": "^4.2.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-preset-env": { -- "version": "7.2.3", -- "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz", -- "integrity": "sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA==", -- "dev": true, -- "dependencies": { -- "autoprefixer": "^10.4.2", -- "browserslist": "^4.19.1", -- "caniuse-lite": "^1.0.30001299", -- "css-blank-pseudo": "^3.0.2", -- "css-has-pseudo": "^3.0.3", -- "css-prefers-color-scheme": "^6.0.2", -- "cssdb": "^5.0.0", -- "postcss-attribute-case-insensitive": "^5.0.0", -- "postcss-color-functional-notation": "^4.2.1", -- "postcss-color-hex-alpha": "^8.0.2", -- "postcss-color-rebeccapurple": "^7.0.2", -- "postcss-custom-media": "^8.0.0", -- "postcss-custom-properties": "^12.1.2", -- "postcss-custom-selectors": "^6.0.0", -- "postcss-dir-pseudo-class": "^6.0.3", -- "postcss-double-position-gradients": "^3.0.4", -- "postcss-env-function": "^4.0.4", -- "postcss-focus-visible": "^6.0.3", -- "postcss-focus-within": "^5.0.3", -- "postcss-font-variant": "^5.0.0", -- "postcss-gap-properties": "^3.0.2", -- "postcss-image-set-function": "^4.0.4", -- "postcss-initial": "^4.0.1", -- "postcss-lab-function": "^4.0.3", -- "postcss-logical": "^5.0.3", -- "postcss-media-minmax": "^5.0.0", -- "postcss-nesting": "^10.1.2", -- "postcss-overflow-shorthand": "^3.0.2", -- "postcss-page-break": "^3.0.4", -- "postcss-place": "^7.0.3", -- "postcss-pseudo-class-any-link": "^7.0.2", -- "postcss-replace-overflow-wrap": "^4.0.0", -- "postcss-selector-not": "^5.0.0" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-pseudo-class-any-link": { -- "version": "7.1.4", -- "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.4.tgz", -- "integrity": "sha512-JxRcLXm96u14N3RzFavPIE9cRPuOqLDuzKeBsqi4oRk4vt8n0A7I0plFs/VXTg7U2n7g/XkQi0OwqTO3VWBfEg==", -- "dev": true, -- "dependencies": { -- "postcss-selector-parser": "^6.0.10" -- }, -- "engines": { -- "node": "^12 || ^14 || >=16" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/csstools" -- }, -- "peerDependencies": { -- "postcss": "^8.4" -- } -- }, -- "node_modules/postcss-replace-overflow-wrap": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", -- "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", -- "dev": true, -- "peerDependencies": { -- "postcss": "^8.0.3" -- } -- }, -- "node_modules/postcss-selector-not": { -- "version": "5.0.0", -- "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", -- "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", -- "dev": true, -- "dependencies": { -- "balanced-match": "^1.0.0" -- }, -- "peerDependencies": { -- "postcss": "^8.1.0" -- } -- }, - "node_modules/postcss-selector-parser": { -- "version": "6.0.10", -- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", -- "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", -+ "version": "6.0.13", -+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", -+ "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", -@@ -20479,63 +20063,48 @@ - "node": ">= 0.8.0" - } - }, -- "node_modules/preserve": { -- "version": "0.2.0", -- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", -- "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/prettier": { -- "version": "2.6.2", -- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", -- "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", -+ "version": "3.0.3", -+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", -+ "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true, - "bin": { -- "prettier": "bin-prettier.js" -+ "prettier": "bin/prettier.cjs" - }, - "engines": { -- "node": ">=10.13.0" -+ "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-java": { -- "version": "1.6.1", -- "resolved": "https://registry.npmjs.org/prettier-plugin-java/-/prettier-plugin-java-1.6.1.tgz", -- "integrity": "sha512-kSY17V/P88nILlILb5iMp16TVJy6Ls9Jy4zAzI4+GsEuRDZH5VqRuLd8aJS1ImWxVgRjNBmoFOjxYyxkRM0SRA==", -+ "version": "2.3.1", -+ "resolved": "https://registry.npmjs.org/prettier-plugin-java/-/prettier-plugin-java-2.3.1.tgz", -+ "integrity": "sha512-OYn8skqKnE5YUVL8f2ocayA6XCJK8PqsEz3pfATbDqzgdaSYDLhE/s8KrXrX9gj8KXIG6Wx0CMoXTNH8+ED22w==", - "dev": true, - "dependencies": { -- "java-parser": "2.0.1", -+ "java-parser": "2.0.5", - "lodash": "4.17.21", -- "prettier": "2.3.1" -- } -- }, -- "node_modules/prettier-plugin-java/node_modules/prettier": { -- "version": "2.3.1", -- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", -- "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", -- "dev": true, -- "bin": { -- "prettier": "bin-prettier.js" -- }, -- "engines": { -- "node": ">=10.13.0" -+ "prettier": "3.0.3" - } - }, - "node_modules/prettier-plugin-packagejson": { -- "version": "2.2.17", -- "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.2.17.tgz", -- "integrity": "sha512-Z1l3stIdkEzuv5w2ZyLl7mvl1Q/7vr2wjLAaKCQtafPHB7h09dir0tgXK/W5iEc/jP+C4XtvJl/HhiZBvPh4rQ==", -+ "version": "2.4.6", -+ "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.4.6.tgz", -+ "integrity": "sha512-5JGfzkJRL0DLNyhwmiAV9mV0hZLHDwddFCs2lc9CNxOChpoWUQVe8K4qTMktmevmDlMpok2uT10nvHUyU59sNw==", - "dev": true, - "dependencies": { -- "sort-package-json": "1.55.0" -+ "sort-package-json": "2.6.0", -+ "synckit": "0.8.5" - }, - "peerDependencies": { - "prettier": ">= 1.16.0" -+ }, -+ "peerDependenciesMeta": { -+ "prettier": { -+ "optional": true -+ } - } - }, - "node_modules/pretty-bytes": { -@@ -20551,17 +20120,17 @@ - } - }, - "node_modules/pretty-format": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", -- "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", -+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { -- "ansi-regex": "^5.0.1", -+ "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", -- "react-is": "^17.0.1" -+ "react-is": "^18.0.0" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { -@@ -20576,14 +20145,6 @@ - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, -- "node_modules/prismjs": { -- "version": "1.28.0", -- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", -- "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==", -- "engines": { -- "node": ">=6" -- } -- }, - "node_modules/proc-log": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", -@@ -20718,13 +20279,35 @@ - "node": ">=6" - } - }, -+ "node_modules/pure-rand": { -+ "version": "6.0.4", -+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", -+ "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", -+ "dev": true, -+ "funding": [ -+ { -+ "type": "individual", -+ "url": "https://github.com/sponsors/dubzzz" -+ }, -+ { -+ "type": "opencollective", -+ "url": "https://opencollective.com/fast-check" -+ } -+ ] -+ }, - "node_modules/qs": { -- "version": "6.2.3", -- "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", -- "integrity": "sha512-AY4g8t3LMboim0t6XWFdz6J5OuJ1ZNYu54SXihS/OMpgyCqYmcAJnWqkNSOjSjWmq3xxy+GF9uWQI2lI/7tKIA==", -+ "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/querystring": { -@@ -20737,11 +20320,16 @@ - "node": ">=0.4.x" - } - }, -+ "node_modules/querystringify": { -+ "version": "2.2.0", -+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", -+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", -+ "dev": true -+ }, - "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==", -- "dev": true, - "funding": [ - { - "type": "github", -@@ -20770,29 +20358,6 @@ - "node": ">=4" - } - }, -- "node_modules/randomatic": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", -- "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", -- "dev": true, -- "dependencies": { -- "is-number": "^4.0.0", -- "kind-of": "^6.0.0", -- "math-random": "^1.0.1" -- }, -- "engines": { -- "node": ">= 0.10.0" -- } -- }, -- "node_modules/randomatic/node_modules/is-number": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", -- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", -@@ -20827,20 +20392,11 @@ - } - }, - "node_modules/react-is": { -- "version": "17.0.2", -- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", -- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", -+ "version": "18.2.0", -+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", -+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, -- "node_modules/read-cache": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", -- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", -- "dev": true, -- "dependencies": { -- "pify": "^2.3.0" -- } -- }, - "node_modules/read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", -@@ -20850,6 +20406,21 @@ - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, -+ "node_modules/read-package-json": { -+ "version": "6.0.4", -+ "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", -+ "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", -+ "dev": true, -+ "dependencies": { -+ "glob": "^10.2.2", -+ "json-parse-even-better-errors": "^3.0.0", -+ "normalize-package-data": "^5.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-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", -@@ -20863,6 +20434,115 @@ - "node": ">=10" - } - }, -+ "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.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "dependencies": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" -+ }, -+ "bin": { -+ "glob": "dist/esm/bin.mjs" -+ }, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/read-package-json/node_modules/hosted-git-info": { -+ "version": "6.1.1", -+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", -+ "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", -+ "dev": true, -+ "dependencies": { -+ "lru-cache": "^7.5.1" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", -+ "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", -+ "dev": true, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/read-package-json/node_modules/lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/read-package-json/node_modules/minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", -+ "dev": true, -+ "dependencies": { -+ "brace-expansion": "^2.0.1" -+ }, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/read-package-json/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/read-package-json/node_modules/normalize-package-data": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", -+ "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", -+ "dev": true, -+ "dependencies": { -+ "hosted-git-info": "^6.0.0", -+ "is-core-module": "^2.8.1", -+ "semver": "^7.3.5", -+ "validate-npm-package-license": "^3.0.4" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/read-package-json/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/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", -@@ -20974,9 +20654,9 @@ - "dev": true - }, - "node_modules/regenerate-unicode-properties": { -- "version": "10.0.1", -- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", -- "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", -+ "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" -@@ -20986,45 +20666,20 @@ - } - }, - "node_modules/regenerator-runtime": { -- "version": "0.13.9", -- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", -- "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", -+ "version": "0.13.11", -+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", -+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { -- "version": "0.15.0", -- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", -- "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", -+ "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-cache": { -- "version": "0.4.4", -- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", -- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", -- "dev": true, -- "dependencies": { -- "is-equal-shallow": "^0.1.3" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/regex-not": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", -- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", -- "dev": true, -- "dependencies": { -- "extend-shallow": "^3.0.2", -- "safe-regex": "^1.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", -@@ -21037,62 +20692,27 @@ - "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", - "dev": true - }, -- "node_modules/regexp.prototype.flags": { -- "version": "1.4.3", -- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", -- "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", -- "dev": true, -- "dependencies": { -- "call-bind": "^1.0.2", -- "define-properties": "^1.1.3", -- "functions-have-names": "^1.2.2" -- }, -- "engines": { -- "node": ">= 0.4" -- }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -- } -- }, -- "node_modules/regexpp": { -- "version": "3.2.0", -- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", -- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", -- "dev": true, -- "engines": { -- "node": ">=8" -- }, -- "funding": { -- "url": "https://github.com/sponsors/mysticatea" -- } -- }, - "node_modules/regexpu-core": { -- "version": "5.0.1", -- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", -- "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", -+ "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.0.1", -- "regjsgen": "^0.6.0", -- "regjsparser": "^0.8.2", -+ "regenerate-unicode-properties": "^10.1.0", -+ "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", -- "unicode-match-property-value-ecmascript": "^2.0.0" -+ "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, -- "node_modules/regjsgen": { -- "version": "0.6.0", -- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", -- "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", -- "dev": true -- }, - "node_modules/regjsparser": { -- "version": "0.8.4", -- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", -- "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", -+ "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" -@@ -21116,24 +20736,6 @@ - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, -- "node_modules/repeat-element": { -- "version": "1.1.4", -- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", -- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/repeat-string": { -- "version": "1.6.1", -- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", -- "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", -- "dev": true, -- "engines": { -- "node": ">=0.10" -- } -- }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", -@@ -21238,12 +20840,6 @@ - "node": ">=0.10.0" - } - }, -- "node_modules/require-main-filename": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", -- "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", -- "dev": true -- }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", -@@ -21251,12 +20847,12 @@ - "dev": true - }, - "node_modules/resolve": { -- "version": "1.22.0", -- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", -- "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", -+ "version": "1.22.2", -+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", -+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { -- "is-core-module": "^2.8.1", -+ "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, -@@ -21288,13 +20884,6 @@ - "node": ">=8" - } - }, -- "node_modules/resolve-url": { -- "version": "0.2.1", -- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", -- "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", -- "deprecated": "https://github.com/lydell/resolve-url#deprecated", -- "dev": true -- }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", -@@ -21335,9 +20924,9 @@ - } - }, - "node_modules/resolve.exports": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", -- "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", -+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" -@@ -21406,7 +20995,6 @@ - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", -- "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" -@@ -21419,20 +21007,109 @@ - "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==", -+ "version": "5.0.5", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", -+ "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", - "dev": true, - "dependencies": { -- "glob": "^7.1.3" -+ "glob": "^10.3.7" - }, - "bin": { -- "rimraf": "bin.js" -+ "rimraf": "dist/esm/bin.mjs" -+ }, -+ "engines": { -+ "node": ">=14" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/rimraf/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/rimraf/node_modules/glob": { -+ "version": "10.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "dependencies": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" -+ }, -+ "bin": { -+ "glob": "dist/esm/bin.mjs" -+ }, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/rimraf/node_modules/minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", -+ "dev": true, -+ "dependencies": { -+ "brace-expansion": "^2.0.1" -+ }, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, -+ "node_modules/rimraf/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/rollup": { -+ "version": "3.29.4", -+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", -+ "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", -+ "dev": true, -+ "bin": { -+ "rollup": "dist/bin/rollup" -+ }, -+ "engines": { -+ "node": ">=14.18.0", -+ "npm": ">=8.0.0" -+ }, -+ "optionalDependencies": { -+ "fsevents": "~2.3.2" -+ } -+ }, -+ "node_modules/run-applescript": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", -+ "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", -+ "dev": true, -+ "dependencies": { -+ "execa": "^5.0.0" -+ }, -+ "engines": { -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", -@@ -21446,7 +21123,6 @@ - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", -- "dev": true, - "funding": [ - { - "type": "github", -@@ -21472,9 +21148,9 @@ - "dev": true - }, - "node_modules/rxjs": { -- "version": "7.5.5", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", -- "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", -+ "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" - } -@@ -21484,24 +21160,6 @@ - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, -- "node_modules/safe-regex": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", -- "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", -- "dev": true, -- "dependencies": { -- "ret": "~0.1.10" -- } -- }, -- "node_modules/safe-regex/node_modules/ret": { -- "version": "0.1.15", -- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", -- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", -- "dev": true, -- "engines": { -- "node": ">=0.12" -- } -- }, - "node_modules/safe-stable-stringify": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", -@@ -21518,9 +21176,9 @@ - "dev": true - }, - "node_modules/sass": { -- "version": "1.49.9", -- "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", -- "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", -+ "version": "1.64.1", -+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", -+ "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", -@@ -21531,20 +21189,19 @@ - "sass": "sass.js" - }, - "engines": { -- "node": ">=12.0.0" -+ "node": ">=14.0.0" - } - }, - "node_modules/sass-loader": { -- "version": "12.4.0", -- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", -- "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", -+ "version": "13.3.2", -+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", -+ "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", - "dev": true, - "dependencies": { -- "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { -- "node": ">= 12.13.0" -+ "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", -@@ -21552,8 +21209,9 @@ - }, - "peerDependencies": { - "fibers": ">= 3.1.0", -- "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", -+ "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": { -@@ -21565,13 +21223,16 @@ - }, - "sass": { - "optional": true -+ }, -+ "sass-embedded": { -+ "optional": true - } - } - }, - "node_modules/sass/node_modules/immutable": { -- "version": "4.1.0", -- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", -- "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", -+ "version": "4.3.4", -+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", -+ "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", - "dev": true - }, - "node_modules/sax": { -@@ -21593,54 +21254,24 @@ - } - }, - "node_modules/schema-utils": { -- "version": "2.7.1", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", -- "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", -+ "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.5", -- "ajv": "^6.12.4", -- "ajv-keywords": "^3.5.2" -+ "@types/json-schema": "^7.0.9", -+ "ajv": "^8.9.0", -+ "ajv-formats": "^2.1.1", -+ "ajv-keywords": "^5.1.0" - }, - "engines": { -- "node": ">= 8.9.0" -+ "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, -- "node_modules/schema-utils/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/schema-utils/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/schema-utils/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/scoped-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-2.1.0.tgz", -@@ -21657,11 +21288,12 @@ - "dev": true - }, - "node_modules/selfsigned": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", -- "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", -+ "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": { -@@ -21767,9 +21399,9 @@ - } - }, - "node_modules/serialize-javascript": { -- "version": "6.0.0", -- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", -- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", -+ "version": "6.0.1", -+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", -+ "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" -@@ -21871,115 +21503,379 @@ - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, -- "node_modules/set-value": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", -- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", -+ "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/shelljs": { -+ "version": "0.8.5", -+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", -+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", -+ "dev": true, -+ "dependencies": { -+ "glob": "^7.0.0", -+ "interpret": "^1.0.0", -+ "rechoir": "^0.6.2" -+ }, -+ "bin": { -+ "shjs": "bin/shjs" -+ }, -+ "engines": { -+ "node": ">=4" -+ } -+ }, -+ "node_modules/shellwords": { -+ "version": "0.1.1", -+ "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", -+ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", -+ "dev": true -+ }, -+ "node_modules/side-channel": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", -+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", -+ "dev": true, -+ "dependencies": { -+ "call-bind": "^1.0.0", -+ "get-intrinsic": "^1.0.2", -+ "object-inspect": "^1.9.0" -+ }, -+ "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": "1.9.0", -+ "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", -+ "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", -+ "dev": true, -+ "dependencies": { -+ "@sigstore/bundle": "^1.1.0", -+ "@sigstore/protobuf-specs": "^0.2.0", -+ "@sigstore/sign": "^1.0.0", -+ "@sigstore/tuf": "^1.0.3", -+ "make-fetch-happen": "^11.0.1" -+ }, -+ "bin": { -+ "sigstore": "bin/sigstore.js" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/sigstore/node_modules/@npmcli/fs": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", -+ "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", -+ "dev": true, -+ "dependencies": { -+ "semver": "^7.3.5" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/sigstore/node_modules/@tootallnate/once": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", -+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", -+ "dev": true, -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/sigstore/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/sigstore/node_modules/cacache": { -+ "version": "17.1.4", -+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", -+ "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", -+ "dev": true, -+ "dependencies": { -+ "@npmcli/fs": "^3.1.0", -+ "fs-minipass": "^3.0.0", -+ "glob": "^10.2.2", -+ "lru-cache": "^7.7.1", -+ "minipass": "^7.0.3", -+ "minipass-collect": "^1.0.2", -+ "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": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/sigstore/node_modules/cacache/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/sigstore/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/sigstore/node_modules/fs-minipass/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/sigstore/node_modules/glob": { -+ "version": "10.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "dependencies": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" -+ }, -+ "bin": { -+ "glob": "dist/esm/bin.mjs" -+ }, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/sigstore/node_modules/http-proxy-agent": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", -+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", -+ "dev": true, -+ "dependencies": { -+ "@tootallnate/once": "2", -+ "agent-base": "6", -+ "debug": "4" -+ }, -+ "engines": { -+ "node": ">= 6" -+ } -+ }, -+ "node_modules/sigstore/node_modules/lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/sigstore/node_modules/make-fetch-happen": { -+ "version": "11.1.1", -+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", -+ "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", -+ "dev": true, -+ "dependencies": { -+ "agentkeepalive": "^4.2.1", -+ "cacache": "^17.0.0", -+ "http-cache-semantics": "^4.1.1", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.0", -+ "is-lambda": "^1.0.1", -+ "lru-cache": "^7.7.1", -+ "minipass": "^5.0.0", -+ "minipass-fetch": "^3.0.0", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "negotiator": "^0.6.3", -+ "promise-retry": "^2.0.1", -+ "socks-proxy-agent": "^7.0.0", -+ "ssri": "^10.0.0" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/sigstore/node_modules/minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { -- "extend-shallow": "^2.0.1", -- "is-extendable": "^0.1.1", -- "is-plain-object": "^2.0.3", -- "split-string": "^3.0.1" -+ "brace-expansion": "^2.0.1" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=16 || 14 >=14.17" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" - } - }, -- "node_modules/set-value/node_modules/extend-shallow": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -+ "node_modules/sigstore/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/sigstore/node_modules/minipass-fetch": { -+ "version": "3.0.4", -+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", -+ "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", - "dev": true, - "dependencies": { -- "is-extendable": "^0.1.0" -+ "minipass": "^7.0.3", -+ "minipass-sized": "^1.0.3", -+ "minizlib": "^2.1.2" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ }, -+ "optionalDependencies": { -+ "encoding": "^0.1.13" - } - }, -- "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/sigstore/node_modules/minipass-fetch/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } - }, -- "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==", -+ "node_modules/sigstore/node_modules/socks-proxy-agent": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", -+ "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { -- "kind-of": "^6.0.2" -+ "agent-base": "^6.0.2", -+ "debug": "^4.3.3", -+ "socks": "^2.6.2" - }, - "engines": { -- "node": ">=8" -+ "node": ">= 10" - } - }, -- "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==", -+ "node_modules/sigstore/node_modules/ssri": { -+ "version": "10.0.5", -+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", -+ "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", - "dev": true, - "dependencies": { -- "shebang-regex": "^3.0.0" -+ "minipass": "^7.0.3" - }, - "engines": { -- "node": ">=8" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "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==", -+ "node_modules/sigstore/node_modules/ssri/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { -- "node": ">=8" -+ "node": ">=16 || 14 >=14.17" - } - }, -- "node_modules/shelljs": { -- "version": "0.8.5", -- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", -- "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", -+ "node_modules/sigstore/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": { -- "glob": "^7.0.0", -- "interpret": "^1.0.0", -- "rechoir": "^0.6.2" -- }, -- "bin": { -- "shjs": "bin/shjs" -+ "unique-slug": "^4.0.0" - }, - "engines": { -- "node": ">=4" -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "node_modules/shellwords": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", -- "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", -- "dev": true -- }, -- "node_modules/side-channel": { -- "version": "1.0.4", -- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", -- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", -+ "node_modules/sigstore/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": { -- "call-bind": "^1.0.0", -- "get-intrinsic": "^1.0.2", -- "object-inspect": "^1.9.0" -+ "imurmurhash": "^0.1.4" - }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, -- "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/simple-git": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.5.0.tgz", -@@ -22010,28 +21906,15 @@ - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, -- "node_modules/simplebar": { -- "version": "5.3.8", -- "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.3.8.tgz", -- "integrity": "sha512-LOHjyOcihx++zFN+vuktoZBGpCarFCtHIVDWXOf2VELbGDknq3Hw/sddafRp1aCg123VNkHWOFHUDHYEXAtufQ==", -- "dependencies": { -- "@juggle/resize-observer": "^3.3.1", -- "can-use-dom": "^0.1.0", -- "core-js": "^3.0.1", -- "lodash.debounce": "^4.0.8", -- "lodash.memoize": "^4.1.2", -- "lodash.throttle": "^4.1.1" -- } -- }, - "node_modules/sirv": { -- "version": "1.0.19", -- "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", -- "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", -+ "version": "2.0.3", -+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", -+ "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", - "dev": true, - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", -- "totalist": "^1.0.0" -+ "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" -@@ -22069,9 +21952,9 @@ - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { -- "version": "6.1.0", -- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", -- "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", -+ "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" -@@ -22090,311 +21973,82 @@ - "npm": ">= 3.0.0" - } - }, -- "node_modules/snapdragon": { -- "version": "0.8.2", -- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", -- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", -- "dev": true, -- "dependencies": { -- "base": "^0.11.1", -- "debug": "^2.2.0", -- "define-property": "^0.2.5", -- "extend-shallow": "^2.0.1", -- "map-cache": "^0.2.2", -- "source-map": "^0.5.6", -- "source-map-resolve": "^0.5.0", -- "use": "^3.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/snapdragon-node": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", -- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", -- "dev": true, -- "dependencies": { -- "define-property": "^1.0.0", -- "isobject": "^3.0.0", -- "snapdragon-util": "^3.0.1" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/snapdragon-node/node_modules/define-property": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", -- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", -- "dev": true, -- "dependencies": { -- "is-descriptor": "^1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/snapdragon-util": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", -- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.2.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/snapdragon-util/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "dependencies": { -- "is-buffer": "^1.1.5" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/snapdragon/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/snapdragon/node_modules/define-property": { -- "version": "0.2.5", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", -+ "node_modules/socket.io": { -+ "version": "4.7.2", -+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", -+ "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", - "dev": true, - "dependencies": { -- "is-descriptor": "^0.1.0" -+ "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": ">=0.10.0" -+ "node": ">=10.2.0" - } - }, -- "node_modules/snapdragon/node_modules/extend-shallow": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -+ "node_modules/socket.io-adapter": { -+ "version": "2.5.2", -+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", -+ "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", - "dev": true, - "dependencies": { -- "is-extendable": "^0.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -+ "ws": "~8.11.0" - } - }, -- "node_modules/snapdragon/node_modules/is-accessor-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", -- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", -+ "node_modules/socket.io-adapter/node_modules/ws": { -+ "version": "8.11.0", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", -+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, - "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "dependencies": { -- "is-buffer": "^1.1.5" -+ "node": ">=10.0.0" - }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/snapdragon/node_modules/is-data-descriptor": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", -- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -+ "peerDependencies": { -+ "bufferutil": "^4.0.1", -+ "utf-8-validate": "^5.0.2" - }, -- "engines": { -- "node": ">=0.10.0" -+ "peerDependenciesMeta": { -+ "bufferutil": { -+ "optional": true -+ }, -+ "utf-8-validate": { -+ "optional": true -+ } - } - }, -- "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -+ "node_modules/socket.io-client": { -+ "version": "4.7.2", -+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", -+ "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", - "dev": true, - "dependencies": { -- "is-buffer": "^1.1.5" -+ "@socket.io/component-emitter": "~3.1.0", -+ "debug": "~4.3.2", -+ "engine.io-client": "~6.5.2", -+ "socket.io-parser": "~4.2.4" - }, - "engines": { -- "node": ">=0.10.0" -+ "node": ">=10.0.0" - } - }, -- "node_modules/snapdragon/node_modules/is-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", -- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", -+ "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": { -- "is-accessor-descriptor": "^0.1.6", -- "is-data-descriptor": "^0.1.4", -- "kind-of": "^5.0.0" -+ "@socket.io/component-emitter": "~3.1.0", -+ "debug": "~4.3.1" - }, - "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/snapdragon/node_modules/kind-of": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", -- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/snapdragon/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/snapdragon/node_modules/source-map": { -- "version": "0.5.7", -- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/snapdragon/node_modules/source-map-resolve": { -- "version": "0.5.3", -- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", -- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", -- "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", -- "dev": true, -- "dependencies": { -- "atob": "^2.1.2", -- "decode-uri-component": "^0.2.0", -- "resolve-url": "^0.2.1", -- "source-map-url": "^0.4.0", -- "urix": "^0.1.0" -- } -- }, -- "node_modules/socket.io": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", -- "integrity": "sha512-8B/grLCFDGU1jtp6BxAjSFZAXTqnSxqelNJi8n/izlYjZaP0armkGF+BgS2ZJbm9bI5Yq7v9kNCuTbmIHVzuyA==", -- "dev": true, -- "dependencies": { -- "debug": "~2.6.6", -- "engine.io": "~3.1.0", -- "socket.io-adapter": "~1.1.0", -- "socket.io-client": "2.0.4", -- "socket.io-parser": "~3.1.1" -- } -- }, -- "node_modules/socket.io-adapter": { -- "version": "1.1.2", -- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", -- "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", -- "dev": true -- }, -- "node_modules/socket.io-client": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", -- "integrity": "sha512-dy30gOeQu8nitka60xDG1xutwmIiW+0pPBbBBZLgBCO2Sr4BODyxzcPDqiY2ZaV4kpAZguikwvRpo136mU5r0Q==", -- "dev": true, -- "dependencies": { -- "backo2": "1.0.2", -- "base64-arraybuffer": "0.1.5", -- "component-bind": "1.0.0", -- "component-emitter": "1.2.1", -- "debug": "~2.6.4", -- "engine.io-client": "~3.1.0", -- "has-cors": "1.1.0", -- "indexof": "0.0.1", -- "object-component": "0.0.3", -- "parseqs": "0.0.5", -- "parseuri": "0.0.5", -- "socket.io-parser": "~3.1.1", -- "to-array": "0.1.4" -- } -- }, -- "node_modules/socket.io-client/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/socket.io-client/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/socket.io-parser": { -- "version": "3.1.3", -- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", -- "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", -- "dev": true, -- "dependencies": { -- "component-emitter": "1.2.1", -- "debug": "~3.1.0", -- "has-binary2": "~1.0.2", -- "isarray": "2.0.1" -- } -- }, -- "node_modules/socket.io-parser/node_modules/debug": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", -- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", -- "dev": true, -- "dependencies": { -- "ms": "2.0.0" -- } -- }, -- "node_modules/socket.io-parser/node_modules/isarray": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", -- "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==", -- "dev": true -- }, -- "node_modules/socket.io-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/socket.io/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": ">=10.0.0" - } - }, -- "node_modules/socket.io/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/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", -@@ -22456,45 +22110,82 @@ - "dev": true - }, - "node_modules/sort-package-json": { -- "version": "1.55.0", -- "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-1.55.0.tgz", -- "integrity": "sha512-xhKvRD8WGbALjXQkVuk4/93Z/2NIO+5IzKamdMjN5kn3L+N+M9YWQssmM6GXlQr9v1F7PGWsOJEo1gvXOhM7Mg==", -+ "version": "2.6.0", -+ "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.6.0.tgz", -+ "integrity": "sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==", - "dev": true, - "dependencies": { -- "detect-indent": "^6.0.0", -- "detect-newline": "3.1.0", -- "git-hooks-list": "1.0.3", -- "globby": "10.0.0", -- "is-plain-obj": "2.1.0", -+ "detect-indent": "^7.0.1", -+ "detect-newline": "^4.0.0", -+ "get-stdin": "^9.0.0", -+ "git-hooks-list": "^3.0.0", -+ "globby": "^13.1.2", -+ "is-plain-obj": "^4.1.0", - "sort-object-keys": "^1.1.3" - }, - "bin": { - "sort-package-json": "cli.js" - } - }, -+ "node_modules/sort-package-json/node_modules/detect-newline": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", -+ "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", -+ "dev": true, -+ "engines": { -+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, - "node_modules/sort-package-json/node_modules/globby": { -- "version": "10.0.0", -- "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.0.tgz", -- "integrity": "sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==", -+ "version": "13.2.2", -+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", -+ "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { -- "@types/glob": "^7.1.1", -- "array-union": "^2.1.0", - "dir-glob": "^3.0.1", -- "fast-glob": "^3.0.3", -- "glob": "^7.1.3", -- "ignore": "^5.1.1", -- "merge2": "^1.2.3", -- "slash": "^3.0.0" -+ "fast-glob": "^3.3.0", -+ "ignore": "^5.2.4", -+ "merge2": "^1.4.1", -+ "slash": "^4.0.0" - }, - "engines": { -- "node": ">=8" -+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/sort-package-json/node_modules/is-plain-obj": { -+ "version": "4.1.0", -+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", -+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/sort-package-json/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/source-map": { -- "version": "0.7.3", -- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", -- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", -+ "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" -@@ -22510,24 +22201,24 @@ - } - }, - "node_modules/source-map-loader": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", -- "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", -+ "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", - "dev": true, - "dependencies": { -- "abab": "^2.0.5", -+ "abab": "^2.0.6", - "iconv-lite": "^0.6.3", -- "source-map-js": "^1.0.1" -+ "source-map-js": "^1.0.2" - }, - "engines": { -- "node": ">= 12.13.0" -+ "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { -- "webpack": "^5.0.0" -+ "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { -@@ -22542,17 +22233,6 @@ - "node": ">=0.10.0" - } - }, -- "node_modules/source-map-resolve": { -- "version": "0.6.0", -- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", -- "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", -- "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", -- "dev": true, -- "dependencies": { -- "atob": "^2.1.2", -- "decode-uri-component": "^0.2.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", -@@ -22572,22 +22252,10 @@ - "node": ">=0.10.0" - } - }, -- "node_modules/source-map-url": { -- "version": "0.4.1", -- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", -- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", -- "deprecated": "See https://github.com/lydell/source-map-url#deprecated", -- "dev": true -- }, -- "node_modules/sourcemap-codec": { -- "version": "1.4.8", -- "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", -- "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" -- }, - "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==", -+ "version": "0.0.2", -+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", -+ "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", - "dev": true - }, - "node_modules/spdx-correct": { -@@ -22652,18 +22320,6 @@ - "wbuf": "^1.7.3" - } - }, -- "node_modules/split-string": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", -- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", -- "dev": true, -- "dependencies": { -- "extend-shallow": "^3.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", -@@ -22717,9 +22373,9 @@ - } - }, - "node_modules/stack-utils": { -- "version": "2.0.5", -- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", -- "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", -+ "version": "2.0.6", -+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", -+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" -@@ -22737,102 +22393,6 @@ - "node": ">=8" - } - }, -- "node_modules/static-extend": { -- "version": "0.1.2", -- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", -- "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", -- "dev": true, -- "dependencies": { -- "define-property": "^0.2.5", -- "object-copy": "^0.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/static-extend/node_modules/define-property": { -- "version": "0.2.5", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", -- "dev": true, -- "dependencies": { -- "is-descriptor": "^0.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/static-extend/node_modules/is-accessor-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", -- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "dependencies": { -- "is-buffer": "^1.1.5" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/static-extend/node_modules/is-data-descriptor": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", -- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "dependencies": { -- "is-buffer": "^1.1.5" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/static-extend/node_modules/is-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", -- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", -- "dev": true, -- "dependencies": { -- "is-accessor-descriptor": "^0.1.6", -- "is-data-descriptor": "^0.1.4", -- "kind-of": "^5.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/static-extend/node_modules/kind-of": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", -- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", -@@ -22858,6 +22418,12 @@ - "node": ">= 0.10.0" - } - }, -+ "node_modules/stream-throttle/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/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", -@@ -22888,9 +22454,9 @@ - ] - }, - "node_modules/string-argv": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", -- "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", -+ "version": "0.3.2", -+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", -+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true, - "engines": { - "node": ">=0.6.19" -@@ -22922,6 +22488,30 @@ - "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/string-width-cjs/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==", -+ "dev": true, -+ "engines": { -+ "node": ">=8" -+ } -+ }, - "node_modules/string-width/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", -@@ -22941,6 +22531,19 @@ - "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-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", -@@ -22991,114 +22594,32 @@ - "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/strip-json-comments": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", -- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", -- "dev": true, -- "engines": { -- "node": ">=8" -- }, -- "funding": { -- "url": "https://github.com/sponsors/sindresorhus" -- } -- }, -- "node_modules/stylus": { -- "version": "0.56.0", -- "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.56.0.tgz", -- "integrity": "sha512-Ev3fOb4bUElwWu4F9P9WjnnaSpc8XB9OFHSFZSKMFL1CE1oM+oFXWEgAqPmmZIyhBihuqIQlFsVTypiiS9RxeA==", -- "dev": true, -- "dependencies": { -- "css": "^3.0.0", -- "debug": "^4.3.2", -- "glob": "^7.1.6", -- "safer-buffer": "^2.1.2", -- "sax": "~1.2.4", -- "source-map": "^0.7.3" -- }, -- "bin": { -- "stylus": "bin/stylus" -- }, -- "engines": { -- "node": "*" -- } -- }, -- "node_modules/stylus-loader": { -- "version": "6.2.0", -- "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz", -- "integrity": "sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==", -- "dev": true, -- "dependencies": { -- "fast-glob": "^3.2.7", -- "klona": "^2.0.4", -- "normalize-path": "^3.0.0" -- }, -- "engines": { -- "node": ">= 12.13.0" -- }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/webpack" -- }, -- "peerDependencies": { -- "stylus": ">=0.52.4", -- "webpack": "^5.0.0" -- } -- }, -- "node_modules/stylus/node_modules/sax": { -- "version": "1.2.4", -- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", -- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", -- "dev": true -- }, -- "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-hyperlinks": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", -- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", -- "dev": true, -- "dependencies": { -- "has-flag": "^4.0.0", -- "supports-color": "^7.0.0" -- }, -+ "dev": true, - "engines": { -- "node": ">=8" -+ "node": ">=6" - } - }, -- "node_modules/supports-hyperlinks/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==", -+ "node_modules/strip-json-comments": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", -+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/supports-hyperlinks/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, -+ "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": "^4.0.0" -+ "has-flag": "^3.0.0" - }, - "engines": { -- "node": ">=8" -+ "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { -@@ -23114,9 +22635,9 @@ - } - }, - "node_modules/swagger-ui-dist": { -- "version": "4.10.3", -- "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.10.3.tgz", -- "integrity": "sha512-eR4vsd7sYo0Sx7ZKRP5Z04yij7JkNmIlUQfrDQgC+xO5ABYx+waabzN+nDsQTLAJ4Z04bjkRd8xqkJtbxr3G7w==", -+ "version": "5.9.0", -+ "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.9.0.tgz", -+ "integrity": "sha512-NUHSYoe5XRTk/Are8jPJ6phzBh3l9l33nEyXosM17QInoV95/jng8+PuSGtbD407QoPf93MH3Bkh773OgesJpA==", - "dev": true - }, - "node_modules/symbol-observable": { -@@ -23134,6 +22655,22 @@ - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, -+ "node_modules/synckit": { -+ "version": "0.8.5", -+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", -+ "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", -+ "dev": true, -+ "dependencies": { -+ "@pkgr/utils": "^2.3.1", -+ "tslib": "^2.5.0" -+ }, -+ "engines": { -+ "node": "^14.18.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/unts" -+ } -+ }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", -@@ -23160,31 +22697,15 @@ - "node": ">= 10" - } - }, -- "node_modules/terminal-link": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", -- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", -- "dev": true, -- "dependencies": { -- "ansi-escapes": "^4.2.1", -- "supports-hyperlinks": "^2.0.0" -- }, -- "engines": { -- "node": ">=8" -- }, -- "funding": { -- "url": "https://github.com/sponsors/sindresorhus" -- } -- }, - "node_modules/terser": { -- "version": "5.11.0", -- "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz", -- "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==", -+ "version": "5.19.2", -+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", -+ "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "dependencies": { -- "acorn": "^8.5.0", -+ "@jridgewell/source-map": "^0.3.3", -+ "acorn": "^8.8.2", - "commander": "^2.20.0", -- "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { -@@ -23195,16 +22716,16 @@ - } - }, - "node_modules/terser-webpack-plugin": { -- "version": "5.3.3", -- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", -- "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", -+ "version": "5.3.9", -+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", -+ "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "dependencies": { -- "@jridgewell/trace-mapping": "^0.3.7", -+ "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", -- "serialize-javascript": "^6.0.0", -- "terser": "^5.7.2" -+ "serialize-javascript": "^6.0.1", -+ "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" -@@ -23228,6 +22749,16 @@ - } - } - }, -+ "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", -+ "dev": true, -+ "dependencies": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" -+ } -+ }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", -@@ -23253,6 +22784,29 @@ - "ajv": "^6.9.1" - } - }, -+ "node_modules/terser-webpack-plugin/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/terser-webpack-plugin/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/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", -@@ -23260,9 +22814,9 @@ - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", -- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", -+ "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", -@@ -23277,6 +22831,27 @@ - "url": "https://opencollective.com/webpack" - } - }, -+ "node_modules/terser-webpack-plugin/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/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", -@@ -23315,71 +22890,6 @@ - "url": "https://bevry.me/fund" - } - }, -- "node_modules/tfunk": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", -- "integrity": "sha512-EX54VPFZvUApnSKJdMLLyJkmhsEiEK4yvXoIFPPvkDIltvQR0c1xTCIGFKdsCAjhJJWIowiypbyZ1UYWMWO88Q==", -- "dev": true, -- "dependencies": { -- "chalk": "^1.1.1", -- "object-path": "^0.9.0" -- } -- }, -- "node_modules/tfunk/node_modules/ansi-regex": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", -- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/tfunk/node_modules/ansi-styles": { -- "version": "2.2.1", -- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", -- "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/tfunk/node_modules/chalk": { -- "version": "1.1.3", -- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", -- "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", -- "dev": true, -- "dependencies": { -- "ansi-styles": "^2.2.1", -- "escape-string-regexp": "^1.0.2", -- "has-ansi": "^2.0.0", -- "strip-ansi": "^3.0.0", -- "supports-color": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/tfunk/node_modules/strip-ansi": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", -- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", -- "dev": true, -- "dependencies": { -- "ansi-regex": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/tfunk/node_modules/supports-color": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", -- "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", -- "dev": true, -- "engines": { -- "node": ">=0.8.0" -- } -- }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", -@@ -23422,27 +22932,6 @@ - "node": ">= 0.12" - } - }, -- "node_modules/then-request/node_modules/qs": { -- "version": "6.10.5", -- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.5.tgz", -- "integrity": "sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ==", -- "dev": true, -- "dependencies": { -- "side-channel": "^1.0.4" -- }, -- "engines": { -- "node": ">=0.6" -- }, -- "funding": { -- "url": "https://github.com/sponsors/ljharb" -- } -- }, -- "node_modules/throat": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", -- "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", -- "dev": true -- }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", -@@ -23455,6 +22944,18 @@ - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, -+ "node_modules/titleize": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", -+ "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", -@@ -23473,12 +22974,6 @@ - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, -- "node_modules/to-array": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", -- "integrity": "sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==", -- "dev": true -- }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", -@@ -23487,45 +22982,6 @@ - "node": ">=4" - } - }, -- "node_modules/to-object-path": { -- "version": "0.3.0", -- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", -- "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", -- "dev": true, -- "dependencies": { -- "kind-of": "^3.0.2" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/to-object-path/node_modules/kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "dependencies": { -- "is-buffer": "^1.1.5" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/to-regex": { -- "version": "3.0.2", -- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", -- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", -- "dev": true, -- "dependencies": { -- "define-property": "^2.0.2", -- "extend-shallow": "^3.0.2", -- "regex-not": "^1.0.2", -- "safe-regex": "^1.1.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", -@@ -23547,28 +23003,38 @@ - } - }, - "node_modules/totalist": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", -- "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", -+ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", -- "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", -+ "version": "4.1.3", -+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", -+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", -- "universalify": "^0.1.2" -+ "universalify": "^0.2.0", -+ "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, -+ "node_modules/tough-cookie/node_modules/universalify": { -+ "version": "0.2.0", -+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", -+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", -+ "dev": true, -+ "engines": { -+ "node": ">= 4.0.0" -+ } -+ }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", -@@ -23602,39 +23068,51 @@ - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", - "dev": true - }, -+ "node_modules/ts-api-utils": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", -+ "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", -+ "dev": true, -+ "engines": { -+ "node": ">=16.13.0" -+ }, -+ "peerDependencies": { -+ "typescript": ">=4.2.0" -+ } -+ }, - "node_modules/ts-jest": { -- "version": "27.1.4", -- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", -- "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", -+ "version": "29.1.1", -+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", -+ "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", -- "jest-util": "^27.0.0", -- "json5": "2.x", -+ "jest-util": "^29.0.0", -+ "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", -- "semver": "7.x", -- "yargs-parser": "20.x" -+ "semver": "^7.5.3", -+ "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { -- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" -+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", -- "@types/jest": "^27.0.0", -- "babel-jest": ">=27.0.0 <28", -- "jest": "^27.0.0", -- "typescript": ">=3.8 <5.0" -+ "@jest/types": "^29.0.0", -+ "babel-jest": "^29.0.0", -+ "jest": "^29.0.0", -+ "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, -- "@types/jest": { -+ "@jest/types": { - "optional": true - }, - "babel-jest": { -@@ -23645,6 +23123,21 @@ - } - } - }, -+ "node_modules/ts-jest/node_modules/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "dependencies": { -+ "lru-cache": "^6.0.0" -+ }, -+ "bin": { -+ "semver": "bin/semver.js" -+ }, -+ "engines": { -+ "node": ">=10" -+ } -+ }, - "node_modules/ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", -@@ -23698,27 +23191,17 @@ - } - }, - "node_modules/tsconfig-paths": { -- "version": "3.14.1", -- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", -- "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", -+ "version": "4.2.0", -+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", -+ "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "dependencies": { -- "@types/json5": "^0.0.29", -- "json5": "^1.0.1", -+ "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" -- } -- }, -- "node_modules/tsconfig-paths/node_modules/json5": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", -- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", -- "dev": true, -- "dependencies": { -- "minimist": "^1.2.0" - }, -- "bin": { -- "json5": "lib/cli.js" -+ "engines": { -+ "node": ">=6" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { -@@ -23731,9 +23214,9 @@ - } - }, - "node_modules/tslib": { -- "version": "2.3.1", -- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", -- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" -+ "version": "2.6.2", -+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", -+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/tsutils": { - "version": "3.21.0", -@@ -23756,6 +23239,283 @@ - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, -+ "node_modules/tuf-js": { -+ "version": "1.1.7", -+ "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", -+ "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", -+ "dev": true, -+ "dependencies": { -+ "@tufjs/models": "1.0.4", -+ "debug": "^4.3.4", -+ "make-fetch-happen": "^11.1.1" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/tuf-js/node_modules/@npmcli/fs": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", -+ "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", -+ "dev": true, -+ "dependencies": { -+ "semver": "^7.3.5" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/tuf-js/node_modules/@tootallnate/once": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", -+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", -+ "dev": true, -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/tuf-js/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/tuf-js/node_modules/cacache": { -+ "version": "17.1.4", -+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", -+ "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", -+ "dev": true, -+ "dependencies": { -+ "@npmcli/fs": "^3.1.0", -+ "fs-minipass": "^3.0.0", -+ "glob": "^10.2.2", -+ "lru-cache": "^7.7.1", -+ "minipass": "^7.0.3", -+ "minipass-collect": "^1.0.2", -+ "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": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/tuf-js/node_modules/cacache/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/tuf-js/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/tuf-js/node_modules/fs-minipass/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/tuf-js/node_modules/glob": { -+ "version": "10.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "dependencies": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" -+ }, -+ "bin": { -+ "glob": "dist/esm/bin.mjs" -+ }, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/tuf-js/node_modules/http-proxy-agent": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", -+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", -+ "dev": true, -+ "dependencies": { -+ "@tootallnate/once": "2", -+ "agent-base": "6", -+ "debug": "4" -+ }, -+ "engines": { -+ "node": ">= 6" -+ } -+ }, -+ "node_modules/tuf-js/node_modules/lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/tuf-js/node_modules/make-fetch-happen": { -+ "version": "11.1.1", -+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", -+ "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", -+ "dev": true, -+ "dependencies": { -+ "agentkeepalive": "^4.2.1", -+ "cacache": "^17.0.0", -+ "http-cache-semantics": "^4.1.1", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.0", -+ "is-lambda": "^1.0.1", -+ "lru-cache": "^7.7.1", -+ "minipass": "^5.0.0", -+ "minipass-fetch": "^3.0.0", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "negotiator": "^0.6.3", -+ "promise-retry": "^2.0.1", -+ "socks-proxy-agent": "^7.0.0", -+ "ssri": "^10.0.0" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/tuf-js/node_modules/minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", -+ "dev": true, -+ "dependencies": { -+ "brace-expansion": "^2.0.1" -+ }, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/tuf-js/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/tuf-js/node_modules/minipass-fetch": { -+ "version": "3.0.4", -+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", -+ "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", -+ "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/tuf-js/node_modules/minipass-fetch/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/tuf-js/node_modules/socks-proxy-agent": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", -+ "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", -+ "dev": true, -+ "dependencies": { -+ "agent-base": "^6.0.2", -+ "debug": "^4.3.3", -+ "socks": "^2.6.2" -+ }, -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/tuf-js/node_modules/ssri": { -+ "version": "10.0.5", -+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", -+ "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", -+ "dev": true, -+ "dependencies": { -+ "minipass": "^7.0.3" -+ }, -+ "engines": { -+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" -+ } -+ }, -+ "node_modules/tuf-js/node_modules/ssri/node_modules/minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true, -+ "engines": { -+ "node": ">=16 || 14 >=14.17" -+ } -+ }, -+ "node_modules/tuf-js/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/tuf-js/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/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", -@@ -23832,42 +23592,41 @@ - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, -- "node_modules/typedarray-to-buffer": { -- "version": "3.1.5", -- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", -- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", -- "dev": true, -- "dependencies": { -- "is-typedarray": "^1.0.0" -- } -- }, - "node_modules/typescript": { -- "version": "4.6.3", -- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", -- "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", -+ "version": "5.1.6", -+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", -+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { -- "node": ">=4.2.0" -+ "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { -- "version": "0.7.17", -- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", -- "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", -+ "version": "1.0.37", -+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", -+ "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", - "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/ultron": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", -- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", -- "dev": true -- }, - "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", -@@ -23891,38 +23650,23 @@ - } - }, - "node_modules/unicode-match-property-value-ecmascript": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", -- "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", -+ "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.0.0", -- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", -- "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", -+ "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/union-value": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", -- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", -- "dev": true, -- "dependencies": { -- "arr-union": "^3.1.0", -- "get-value": "^2.0.6", -- "is-extendable": "^0.1.1", -- "set-value": "^2.0.1" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", -@@ -23965,54 +23709,6 @@ - "node": ">= 0.8" - } - }, -- "node_modules/unset-value": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", -- "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", -- "dev": true, -- "dependencies": { -- "has-value": "^0.3.1", -- "isobject": "^3.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/unset-value/node_modules/has-value": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", -- "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", -- "dev": true, -- "dependencies": { -- "get-value": "^2.0.3", -- "has-values": "^0.1.4", -- "isobject": "^2.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", -- "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", -- "dev": true, -- "dependencies": { -- "isarray": "1.0.0" -- }, -- "engines": { -- "node": ">=0.10.0" -- } -- }, -- "node_modules/unset-value/node_modules/has-values": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", -- "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", -@@ -24022,6 +23718,35 @@ - "node": ">=8" - } - }, -+ "node_modules/update-browserslist-db": { -+ "version": "1.0.13", -+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", -+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", -+ "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.1", -+ "picocolors": "^1.0.0" -+ }, -+ "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", -@@ -24031,13 +23756,6 @@ - "punycode": "^2.1.0" - } - }, -- "node_modules/urix": { -- "version": "0.1.0", -- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", -- "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", -- "deprecated": "Please see https://github.com/lydell/urix#deprecated", -- "dev": true -- }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", -@@ -24048,21 +23766,22 @@ - "querystring": "0.2.0" - } - }, -+ "node_modules/url-parse": { -+ "version": "1.5.10", -+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", -+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", -+ "dev": true, -+ "dependencies": { -+ "querystringify": "^2.1.1", -+ "requires-port": "^1.0.0" -+ } -+ }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - }, -- "node_modules/use": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", -- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", -- "dev": true, -- "engines": { -- "node": ">=0.10.0" -- } -- }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", -@@ -24087,24 +23806,6 @@ - "uuid": "dist/bin/uuid" - } - }, -- "node_modules/uws": { -- "version": "9.14.0", -- "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", -- "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", -- "deprecated": "New code is available at github.com/uNetworking/uWebSockets.js", -- "dev": true, -- "hasInstallScript": true, -- "optional": true, -- "engines": { -- "node": ">=4" -- } -- }, -- "node_modules/v8-compile-cache": { -- "version": "2.3.0", -- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", -- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", -- "dev": true -- }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", -@@ -24112,19 +23813,35 @@ - "dev": true - }, - "node_modules/v8-to-istanbul": { -- "version": "8.1.1", -- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", -- "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", -+ "version": "9.1.3", -+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", -+ "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", - "dev": true, - "dependencies": { -+ "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", -- "convert-source-map": "^1.6.0", -- "source-map": "^0.7.3" -+ "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, -+ "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", -+ "dev": true, -+ "dependencies": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" -+ } -+ }, -+ "node_modules/v8-to-istanbul/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==", -+ "dev": true -+ }, - "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", -@@ -24209,10 +23926,66 @@ - "node": ">=0.8" - } - }, -+ "node_modules/vite": { -+ "version": "4.4.7", -+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz", -+ "integrity": "sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==", -+ "dev": true, -+ "dependencies": { -+ "esbuild": "^0.18.10", -+ "postcss": "^8.4.26", -+ "rollup": "^3.25.2" -+ }, -+ "bin": { -+ "vite": "bin/vite.js" -+ }, -+ "engines": { -+ "node": "^14.18.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/vitejs/vite?sponsor=1" -+ }, -+ "optionalDependencies": { -+ "fsevents": "~2.3.2" -+ }, -+ "peerDependencies": { -+ "@types/node": ">= 14", -+ "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/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", -+ "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" -@@ -24231,31 +24004,46 @@ - } - }, - "node_modules/wait-on": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", -- "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", -+ "version": "7.0.1", -+ "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz", -+ "integrity": "sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==", - "dev": true, - "dependencies": { -- "axios": "^0.25.0", -- "joi": "^17.6.0", -+ "axios": "^0.27.2", -+ "joi": "^17.7.0", - "lodash": "^4.17.21", -- "minimist": "^1.2.5", -- "rxjs": "^7.5.4" -+ "minimist": "^1.2.7", -+ "rxjs": "^7.8.0" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { -- "node": ">=10.0.0" -+ "node": ">=12.0.0" - } - }, - "node_modules/wait-on/node_modules/axios": { -- "version": "0.25.0", -- "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", -- "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", -+ "version": "0.27.2", -+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", -+ "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, - "dependencies": { -- "follow-redirects": "^1.14.7" -+ "follow-redirects": "^1.14.9", -+ "form-data": "^4.0.0" -+ } -+ }, -+ "node_modules/wait-on/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/walk-up-path": { -@@ -24314,34 +24102,34 @@ - } - }, - "node_modules/webpack": { -- "version": "5.71.0", -- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.71.0.tgz", -- "integrity": "sha512-g4dFT7CFG8LY0iU5G8nBL6VlkT21Z7dcYDpJAEJV5Q1WLb9UwnFbrem1k7K52ILqEmomN7pnzWFxxE6SlDY56A==", -+ "version": "5.88.2", -+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", -+ "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", -- "@types/estree": "^0.0.51", -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/wasm-edit": "1.11.1", -- "@webassemblyjs/wasm-parser": "1.11.1", -- "acorn": "^8.4.1", -- "acorn-import-assertions": "^1.7.6", -+ "@types/estree": "^1.0.0", -+ "@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.14.5", - "chrome-trace-event": "^1.0.2", -- "enhanced-resolve": "^5.9.2", -- "es-module-lexer": "^0.9.0", -+ "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-better-errors": "^1.0.2", -+ "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.1.0", -+ "schema-utils": "^3.2.0", - "tapable": "^2.1.1", -- "terser-webpack-plugin": "^5.1.3", -- "watchpack": "^2.3.1", -+ "terser-webpack-plugin": "^5.3.7", -+ "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { -@@ -24361,19 +24149,27 @@ - } - }, - "node_modules/webpack-bundle-analyzer": { -- "version": "4.5.0", -- "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", -- "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", -+ "version": "4.9.1", -+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", -+ "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", - "dev": true, - "dependencies": { -+ "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", -- "chalk": "^4.1.0", - "commander": "^7.2.0", -+ "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", -- "lodash": "^4.17.20", -+ "is-plain-object": "^5.0.0", -+ "lodash.debounce": "^4.0.8", -+ "lodash.escape": "^4.0.1", -+ "lodash.flatten": "^4.4.0", -+ "lodash.invokemap": "^4.6.0", -+ "lodash.pullall": "^4.2.0", -+ "lodash.uniqby": "^4.7.0", - "opener": "^1.5.2", -- "sirv": "^1.0.7", -+ "picocolors": "^1.0.0", -+ "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { -@@ -24392,55 +24188,6 @@ - "node": ">=0.4.0" - } - }, -- "node_modules/webpack-bundle-analyzer/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/webpack-bundle-analyzer/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/webpack-bundle-analyzer/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/webpack-bundle-analyzer/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/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", -@@ -24450,104 +24197,91 @@ - "node": ">= 10" - } - }, -- "node_modules/webpack-bundle-analyzer/node_modules/has-flag": { -+ "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { - "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", -- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", -+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", -+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { -- "node": ">=8" -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" - } - }, -- "node_modules/webpack-bundle-analyzer/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==", -+ "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", -+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, -- "dependencies": { -- "has-flag": "^4.0.0" -- }, - "engines": { -- "node": ">=8" -+ "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-middleware": { -- "version": "5.3.0", -- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", -- "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", -+ "version": "6.1.1", -+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", -+ "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", -- "memfs": "^3.2.2", -+ "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { -- "node": ">= 12.13.0" -+ "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { -- "webpack": "^4.0.0 || ^5.0.0" -- } -- }, -- "node_modules/webpack-dev-middleware/node_modules/schema-utils": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", -- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", -- "dev": true, -- "dependencies": { -- "@types/json-schema": "^7.0.9", -- "ajv": "^8.8.0", -- "ajv-formats": "^2.1.1", -- "ajv-keywords": "^5.0.0" -- }, -- "engines": { -- "node": ">= 12.13.0" -+ "webpack": "^5.0.0" - }, -- "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/webpack" -+ "peerDependenciesMeta": { -+ "webpack": { -+ "optional": true -+ } - } - }, - "node_modules/webpack-dev-server": { -- "version": "4.7.3", -- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", -- "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", -+ "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.2.2", -+ "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", -- "bonjour": "^3.5.0", -- "chokidar": "^3.5.2", -+ "bonjour-service": "^1.0.11", -+ "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", -- "connect-history-api-fallback": "^1.6.0", -+ "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", -- "del": "^6.0.0", -- "express": "^4.17.1", -+ "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", -- "http-proxy-middleware": "^2.0.0", -+ "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", -- "portfinder": "^1.0.28", -+ "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", -- "selfsigned": "^2.0.0", -+ "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", -- "sockjs": "^0.3.21", -+ "sockjs": "^0.3.24", - "spdy": "^4.0.2", -- "strip-ansi": "^7.0.0", -- "webpack-dev-middleware": "^5.3.0", -- "ws": "^8.1.0" -+ "webpack-dev-middleware": "^5.3.1", -+ "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" -@@ -24555,72 +24289,80 @@ - "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/ansi-regex": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", -- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", -+ "node_modules/webpack-dev-server/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": ">=12" -- }, -- "funding": { -- "url": "https://github.com/chalk/ansi-regex?sponsor=1" -+ "node": ">=0.8" - } - }, -- "node_modules/webpack-dev-server/node_modules/schema-utils": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", -- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", -+ "node_modules/webpack-dev-server/node_modules/rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { -- "@types/json-schema": "^7.0.9", -- "ajv": "^8.8.0", -- "ajv-formats": "^2.1.1", -- "ajv-keywords": "^5.0.0" -+ "glob": "^7.1.3" - }, -- "engines": { -- "node": ">= 12.13.0" -+ "bin": { -+ "rimraf": "bin.js" - }, - "funding": { -- "type": "opencollective", -- "url": "https://opencollective.com/webpack" -+ "url": "https://github.com/sponsors/isaacs" - } - }, -- "node_modules/webpack-dev-server/node_modules/strip-ansi": { -- "version": "7.0.1", -- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", -- "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", -+ "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { -+ "version": "5.3.3", -+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", -+ "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { -- "ansi-regex": "^6.0.1" -+ "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" -+ "node": ">= 12.13.0" - }, - "funding": { -- "url": "https://github.com/chalk/strip-ansi?sponsor=1" -+ "type": "opencollective", -+ "url": "https://opencollective.com/webpack" -+ }, -+ "peerDependencies": { -+ "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { -- "version": "8.8.0", -- "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", -- "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", -+ "version": "8.14.2", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", -+ "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", -- "utf-8-validate": "^5.0.2" -+ "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { -@@ -24632,9 +24374,9 @@ - } - }, - "node_modules/webpack-merge": { -- "version": "5.8.0", -- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", -- "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", -+ "version": "5.9.0", -+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", -+ "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", -@@ -24733,9 +24475,9 @@ - "dev": true - }, - "node_modules/webpack/node_modules/schema-utils": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", -- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", -+ "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", -@@ -24817,12 +24559,6 @@ - "node": ">= 8" - } - }, -- "node_modules/which-module": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", -- "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", -- "dev": true -- }, - "node_modules/which-pm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", -@@ -24851,18 +24587,6 @@ - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, -- "node_modules/window-size": { -- "version": "0.2.0", -- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", -- "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", -- "dev": true, -- "bin": { -- "window-size": "cli.js" -- }, -- "engines": { -- "node": ">= 0.10.0" -- } -- }, - "node_modules/windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", -@@ -24966,19 +24690,28 @@ - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, -- "node_modules/word-wrap": { -- "version": "1.2.3", -- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", -- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", -- "dev": true, -+ "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": ">=0.10.0" -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, -- "node_modules/wrap-ansi": { -+ "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", -@@ -24991,6 +24724,39 @@ - "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", -@@ -25024,18 +24790,20 @@ - "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==" -+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", -+ "dev": true - }, - "node_modules/write-file-atomic": { -- "version": "3.0.3", -- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", -- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", -+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", -- "is-typedarray": "^1.0.0", -- "signal-exit": "^3.0.2", -- "typedarray-to-buffer": "^3.1.5" -+ "signal-exit": "^3.0.7" -+ }, -+ "engines": { -+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ws": { -@@ -25097,9 +24865,9 @@ - "dev": true - }, - "node_modules/xmlhttprequest-ssl": { -- "version": "1.5.5", -- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", -- "integrity": "sha512-/bFPLUgJrfGUL10AIv4Y7/CUt6so9CLtB/oFxQSHseSDNNCdC6vwwKEqwLN6wNPBg9YWXAiMu8jkf6RPRS/75Q==", -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", -+ "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", - "dev": true, - "engines": { - "node": ">=0.4.0" -@@ -25119,54 +24887,39 @@ - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { -- "version": "1.10.2", -- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", -- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", -+ "version": "2.3.1", -+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", -+ "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { -- "node": ">= 6" -+ "node": ">= 14" - } - }, - "node_modules/yargs": { -- "version": "17.5.1", -- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", -- "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", -+ "version": "17.7.2", -+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", -+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { -- "cliui": "^7.0.2", -+ "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.0.0" -+ "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "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/yargs/node_modules/yargs-parser": { -- "version": "21.0.1", -- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", -- "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", -+ "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/yeast": { -- "version": "0.1.2", -- "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", -- "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==", -- "dev": true -- }, - "node_modules/yeoman-environment": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-3.9.1.tgz", -@@ -25597,860 +25350,1156 @@ - } - }, - "node_modules/zone.js": { -- "version": "0.11.4", -- "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", -- "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", -+ "version": "0.13.3", -+ "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.3.tgz", -+ "integrity": "sha512-MKPbmZie6fASC/ps4dkmIhaT5eonHkEt6eAy80K42tAm0G2W+AahLJjbfi6X9NPdciOE9GRFTTM8u2IiF6O3ww==", - "dependencies": { -- "tslib": "^2.0.0" -+ "tslib": "^2.3.0" - } - } - }, - "dependencies": { -+ "@aashutoshrathi/word-wrap": { -+ "version": "1.2.6", -+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", -+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", -+ "dev": true -+ }, - "@ampproject/remapping": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-1.1.1.tgz", -- "integrity": "sha512-YVAcA4DKLOj296CF5SrQ8cYiMRiUGc2sqFpLxsDGWE34suHqhGP/5yMsDHKsrh8hs8I5TiRVXNwKPWQpX3iGjw==", -- "dev": true, -+ "version": "2.2.1", -+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", -+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "requires": { -- "@jridgewell/resolve-uri": "^3.0.3", -- "sourcemap-codec": "1.4.8" -+ "@jridgewell/gen-mapping": "^0.3.0", -+ "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@angular-builders/custom-webpack": { -- "version": "13.1.0", -- "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-13.1.0.tgz", -- "integrity": "sha512-qhtnAv1i7agk14zeKZZfXjrckYt37OZ+3tsTBLhf3ZFbwREK8L1SNi8xhZ1j1JLGsf2Dp0GEcZrSYeFDweo0WA==", -+ "version": "16.0.1", -+ "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-16.0.1.tgz", -+ "integrity": "sha512-C6INC8UOYDcp8LJwNhE0m66yp+nZX50JdgGI8oRn7fqw3gO58qhDgXrR/8BCrSeC8eOx8WxSuvBJ6u+9dozhyw==", - "dev": true, - "requires": { -- "@angular-devkit/architect": ">=0.1300.0 < 0.1400.0", -- "@angular-devkit/build-angular": "^13.0.0", -- "@angular-devkit/core": "^13.0.0", -+ "@angular-devkit/architect": ">=0.1600.0 < 0.1700.0", -+ "@angular-devkit/build-angular": "^16.0.0", -+ "@angular-devkit/core": "^16.0.0", - "lodash": "^4.17.15", - "ts-node": "^10.0.0", -- "tsconfig-paths": "^3.9.0", -+ "tsconfig-paths": "^4.1.0", - "webpack-merge": "^5.7.3" - } - }, - "@angular-builders/jest": { -- "version": "13.0.3", -- "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-13.0.3.tgz", -- "integrity": "sha512-HJfN8gCfbg14U/eaE5vEvt6IrecFTUWSibHLvf2gBMzgnRQzqPKNAAoHY5kZ0DL+HwsCW/KlSp2m47ukOdVcYA==", -+ "version": "16.0.1", -+ "resolved": "https://registry.npmjs.org/@angular-builders/jest/-/jest-16.0.1.tgz", -+ "integrity": "sha512-FuYkfy8JwdfTHevjgs8z18sXt0egcWbSSkefyM/QsGVkMHs+b4N4xzV20MQtyx0Yc6nJzuknIH5ZvDwLYUDPyQ==", - "dev": true, - "requires": { -- "@angular-devkit/architect": ">=0.1300.0 < 0.1400.0", -- "@angular-devkit/core": "^13.0.0", -- "jest-preset-angular": "11.1.0", -- "lodash": "^4.17.15" -+ "@angular-devkit/architect": ">=0.1600.0 < 0.1700.0", -+ "@angular-devkit/core": "^16.0.0", -+ "jest-preset-angular": "13.1.1", -+ "lodash": "^4.17.15", -+ "tsconfig-paths": "^4.1.0" - }, - "dependencies": { -- "esbuild": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", -- "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", -+ "jest-preset-angular": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-13.1.1.tgz", -+ "integrity": "sha512-X8i7icKt9U5uhj7YKqdEZm7ZZPvNFRxfBnU+9SALdIkHYJhwtlJ5/MUk9wo4f3lX2smOkIl9LPJUu1APO+11Jg==", - "dev": true, -- "optional": true, - "requires": { -- "esbuild-android-arm64": "0.14.2", -- "esbuild-darwin-64": "0.14.2", -- "esbuild-darwin-arm64": "0.14.2", -- "esbuild-freebsd-64": "0.14.2", -- "esbuild-freebsd-arm64": "0.14.2", -- "esbuild-linux-32": "0.14.2", -- "esbuild-linux-64": "0.14.2", -- "esbuild-linux-arm": "0.14.2", -- "esbuild-linux-arm64": "0.14.2", -- "esbuild-linux-mips64le": "0.14.2", -- "esbuild-linux-ppc64le": "0.14.2", -- "esbuild-netbsd-64": "0.14.2", -- "esbuild-openbsd-64": "0.14.2", -- "esbuild-sunos-64": "0.14.2", -- "esbuild-windows-32": "0.14.2", -- "esbuild-windows-64": "0.14.2", -- "esbuild-windows-arm64": "0.14.2" -- } -- }, -- "esbuild-android-arm64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", -- "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", -+ "bs-logger": "^0.2.6", -+ "esbuild": ">=0.13.8", -+ "esbuild-wasm": ">=0.13.8", -+ "jest-environment-jsdom": "^29.0.0", -+ "jest-util": "^29.0.0", -+ "pretty-format": "^29.0.0", -+ "ts-jest": "^29.0.0" -+ } -+ } -+ } -+ }, -+ "@angular-devkit/architect": { -+ "version": "0.1602.9", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.9.tgz", -+ "integrity": "sha512-U3vfb/e2sFfg0D9FyyRBXRPP7g4FBFtGK8Q3JPmvAVsHHwi5AUFRNR7YBChB/T5TMNY077HcTyEirVh2FeUpdA==", -+ "dev": true, -+ "requires": { -+ "@angular-devkit/core": "16.2.9", -+ "rxjs": "7.8.1" -+ } -+ }, -+ "@angular-devkit/build-angular": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.6.tgz", -+ "integrity": "sha512-QdU/q77K1P8CPEEZGxw1QqLcnA9ofboDWS7vcLRBmFmk2zydtLTApbK0P8GNDRbnmROOKkoaLo+xUTDJz9gvPA==", -+ "dev": true, -+ "requires": { -+ "@ampproject/remapping": "2.2.1", -+ "@angular-devkit/architect": "0.1602.6", -+ "@angular-devkit/build-webpack": "0.1602.6", -+ "@angular-devkit/core": "16.2.6", -+ "@babel/core": "7.22.9", -+ "@babel/generator": "7.22.9", -+ "@babel/helper-annotate-as-pure": "7.22.5", -+ "@babel/helper-split-export-declaration": "7.22.6", -+ "@babel/plugin-proposal-async-generator-functions": "7.20.7", -+ "@babel/plugin-transform-async-to-generator": "7.22.5", -+ "@babel/plugin-transform-runtime": "7.22.9", -+ "@babel/preset-env": "7.22.9", -+ "@babel/runtime": "7.22.6", -+ "@babel/template": "7.22.5", -+ "@discoveryjs/json-ext": "0.5.7", -+ "@ngtools/webpack": "16.2.6", -+ "@vitejs/plugin-basic-ssl": "1.0.1", -+ "ansi-colors": "4.1.3", -+ "autoprefixer": "10.4.14", -+ "babel-loader": "9.1.3", -+ "babel-plugin-istanbul": "6.1.1", -+ "browserslist": "^4.21.5", -+ "chokidar": "3.5.3", -+ "copy-webpack-plugin": "11.0.0", -+ "critters": "0.0.20", -+ "css-loader": "6.8.1", -+ "esbuild": "0.18.17", -+ "esbuild-wasm": "0.18.17", -+ "fast-glob": "3.3.1", -+ "guess-parser": "0.4.22", -+ "https-proxy-agent": "5.0.1", -+ "inquirer": "8.2.4", -+ "jsonc-parser": "3.2.0", -+ "karma-source-map-support": "1.4.0", -+ "less": "4.1.3", -+ "less-loader": "11.1.0", -+ "license-webpack-plugin": "4.0.2", -+ "loader-utils": "3.2.1", -+ "magic-string": "0.30.1", -+ "mini-css-extract-plugin": "2.7.6", -+ "mrmime": "1.0.1", -+ "open": "8.4.2", -+ "ora": "5.4.1", -+ "parse5-html-rewriting-stream": "7.0.0", -+ "picomatch": "2.3.1", -+ "piscina": "4.0.0", -+ "postcss": "8.4.31", -+ "postcss-loader": "7.3.3", -+ "resolve-url-loader": "5.0.0", -+ "rxjs": "7.8.1", -+ "sass": "1.64.1", -+ "sass-loader": "13.3.2", -+ "semver": "7.5.4", -+ "source-map-loader": "4.0.1", -+ "source-map-support": "0.5.21", -+ "terser": "5.19.2", -+ "text-table": "0.2.0", -+ "tree-kill": "1.2.2", -+ "tslib": "2.6.1", -+ "vite": "4.4.7", -+ "webpack": "5.88.2", -+ "webpack-dev-middleware": "6.1.1", -+ "webpack-dev-server": "4.15.1", -+ "webpack-merge": "5.9.0", -+ "webpack-subresource-integrity": "5.1.0" -+ }, -+ "dependencies": { -+ "@angular-devkit/architect": { -+ "version": "0.1602.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.6.tgz", -+ "integrity": "sha512-b1NNV3yNg6Rt86ms20bJIroWUI8ihaEwv5k+EoijEXLoMs4eNs5PhqL+QE8rTj+q9pa1gSrWf2blXor2JGwf1g==", - "dev": true, -- "optional": true -+ "requires": { -+ "@angular-devkit/core": "16.2.6", -+ "rxjs": "7.8.1" -+ } - }, -- "esbuild-darwin-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", -- "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", -+ "@angular-devkit/core": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.6.tgz", -+ "integrity": "sha512-iez/8NYXQT6fqVQLlKmZUIRkFUEZ88ACKbTwD4lBmk0+hXW+bQBxI7JOnE3C4zkcM2YeuTXIYsC5SebTKYiR4Q==", - "dev": true, -- "optional": true -+ "requires": { -+ "ajv": "8.12.0", -+ "ajv-formats": "2.1.1", -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" -+ } -+ }, -+ "@babel/core": { -+ "version": "7.22.9", -+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", -+ "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", -+ "dev": true, -+ "requires": { -+ "@ampproject/remapping": "^2.2.0", -+ "@babel/code-frame": "^7.22.5", -+ "@babel/generator": "^7.22.9", -+ "@babel/helper-compilation-targets": "^7.22.9", -+ "@babel/helper-module-transforms": "^7.22.9", -+ "@babel/helpers": "^7.22.6", -+ "@babel/parser": "^7.22.7", -+ "@babel/template": "^7.22.5", -+ "@babel/traverse": "^7.22.8", -+ "@babel/types": "^7.22.5", -+ "convert-source-map": "^1.7.0", -+ "debug": "^4.1.0", -+ "gensync": "^1.0.0-beta.2", -+ "json5": "^2.2.2", -+ "semver": "^6.3.1" -+ }, -+ "dependencies": { -+ "semver": { -+ "version": "6.3.1", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", -+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", -+ "dev": true -+ } -+ } - }, -- "esbuild-darwin-arm64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", -- "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", -+ "fast-glob": { -+ "version": "3.3.1", -+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", -+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, -- "optional": true -+ "requires": { -+ "@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" -+ } - }, -- "esbuild-freebsd-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", -- "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", -+ "semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, -- "optional": true -+ "requires": { -+ "lru-cache": "^6.0.0" -+ } - }, -- "esbuild-freebsd-arm64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", -- "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", -+ "tslib": { -+ "version": "2.6.1", -+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", -+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", -+ "dev": true -+ } -+ } -+ }, -+ "@angular-devkit/build-webpack": { -+ "version": "0.1602.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.6.tgz", -+ "integrity": "sha512-BJPR6xdq7gRJ6bVWnZ81xHyH75j7lyLbegCXbvUNaM8TWVBkwWsSdqr2NQ717dNLLn5umg58SFpU/pWMq6CxMQ==", -+ "dev": true, -+ "requires": { -+ "@angular-devkit/architect": "0.1602.6", -+ "rxjs": "7.8.1" -+ }, -+ "dependencies": { -+ "@angular-devkit/architect": { -+ "version": "0.1602.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.6.tgz", -+ "integrity": "sha512-b1NNV3yNg6Rt86ms20bJIroWUI8ihaEwv5k+EoijEXLoMs4eNs5PhqL+QE8rTj+q9pa1gSrWf2blXor2JGwf1g==", - "dev": true, -- "optional": true -+ "requires": { -+ "@angular-devkit/core": "16.2.6", -+ "rxjs": "7.8.1" -+ } - }, -- "esbuild-linux-32": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", -- "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", -+ "@angular-devkit/core": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.6.tgz", -+ "integrity": "sha512-iez/8NYXQT6fqVQLlKmZUIRkFUEZ88ACKbTwD4lBmk0+hXW+bQBxI7JOnE3C4zkcM2YeuTXIYsC5SebTKYiR4Q==", - "dev": true, -- "optional": true -+ "requires": { -+ "ajv": "8.12.0", -+ "ajv-formats": "2.1.1", -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" -+ } -+ } -+ } -+ }, -+ "@angular-devkit/core": { -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.9.tgz", -+ "integrity": "sha512-dcHWjHBNGm3yCeNz19y8A1At4KgyC6XHNnbFL0y+nnZYiaESXjUoXJYKASedI6A+Bpl0HNq2URhH6bL6Af3+4w==", -+ "dev": true, -+ "requires": { -+ "ajv": "8.12.0", -+ "ajv-formats": "2.1.1", -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" -+ } -+ }, -+ "@angular-devkit/schematics": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.6.tgz", -+ "integrity": "sha512-PhpRYHCJ3WvZXmng6Qk8TXeQf83jeBMAf7AIzI8h0fgeBocOl97Xf7bZpLg6GymiU+rVn15igQ4Rz9rKAay8bQ==", -+ "dev": true, -+ "requires": { -+ "@angular-devkit/core": "16.2.6", -+ "jsonc-parser": "3.2.0", -+ "magic-string": "0.30.1", -+ "ora": "5.4.1", -+ "rxjs": "7.8.1" -+ }, -+ "dependencies": { -+ "@angular-devkit/core": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.6.tgz", -+ "integrity": "sha512-iez/8NYXQT6fqVQLlKmZUIRkFUEZ88ACKbTwD4lBmk0+hXW+bQBxI7JOnE3C4zkcM2YeuTXIYsC5SebTKYiR4Q==", -+ "dev": true, -+ "requires": { -+ "ajv": "8.12.0", -+ "ajv-formats": "2.1.1", -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" -+ } -+ } -+ } -+ }, -+ "@angular-eslint/bundled-angular-compiler": { -+ "version": "16.2.0", -+ "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.2.0.tgz", -+ "integrity": "sha512-ct9orDYxkMl2+uvM7UBfgV28Dq57V4dEs+Drh7cD673JIMa6sXbgmd0QEtm8W3cmyK/jcTzmuoufxbH7hOxd6g==", -+ "dev": true -+ }, -+ "@angular-eslint/eslint-plugin": { -+ "version": "16.2.0", -+ "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.2.0.tgz", -+ "integrity": "sha512-zdiAIox1T+B71HL+A8m+1jWdU34nvPGLhCRw/uZNwHzknsF4tYzNQ9W7T/SC/g/2s1yT2yNosEVNJSGSFvunJg==", -+ "dev": true, -+ "requires": { -+ "@angular-eslint/utils": "16.2.0", -+ "@typescript-eslint/utils": "5.62.0" -+ } -+ }, -+ "@angular-eslint/utils": { -+ "version": "16.2.0", -+ "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.2.0.tgz", -+ "integrity": "sha512-NxMRwnlIgzmbJQfWkfd9y3Sz0hzjFdK5LH44i+3D5NhpPdZ6SzwHAjMYWoYsmmNQX5tlDXoicYF9Mz9Wz8DJ/A==", -+ "dev": true, -+ "requires": { -+ "@angular-eslint/bundled-angular-compiler": "16.2.0", -+ "@typescript-eslint/utils": "5.62.0" -+ } -+ }, -+ "@angular/cli": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.6.tgz", -+ "integrity": "sha512-9poPvUEmlufOAW1Cjk+aA5e2x3mInLtbYYSL/EYviDN2ugmavsSIvxAE/WLnxq6cPWqhNDbHDaqvcmqkcFM3Cw==", -+ "dev": true, -+ "requires": { -+ "@angular-devkit/architect": "0.1602.6", -+ "@angular-devkit/core": "16.2.6", -+ "@angular-devkit/schematics": "16.2.6", -+ "@schematics/angular": "16.2.6", -+ "@yarnpkg/lockfile": "1.1.0", -+ "ansi-colors": "4.1.3", -+ "ini": "4.1.1", -+ "inquirer": "8.2.4", -+ "jsonc-parser": "3.2.0", -+ "npm-package-arg": "10.1.0", -+ "npm-pick-manifest": "8.0.1", -+ "open": "8.4.2", -+ "ora": "5.4.1", -+ "pacote": "15.2.0", -+ "resolve": "1.22.2", -+ "semver": "7.5.4", -+ "symbol-observable": "4.0.0", -+ "yargs": "17.7.2" -+ }, -+ "dependencies": { -+ "@angular-devkit/architect": { -+ "version": "0.1602.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.6.tgz", -+ "integrity": "sha512-b1NNV3yNg6Rt86ms20bJIroWUI8ihaEwv5k+EoijEXLoMs4eNs5PhqL+QE8rTj+q9pa1gSrWf2blXor2JGwf1g==", -+ "dev": true, -+ "requires": { -+ "@angular-devkit/core": "16.2.6", -+ "rxjs": "7.8.1" -+ } - }, -- "esbuild-linux-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", -- "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", -+ "@angular-devkit/core": { -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.6.tgz", -+ "integrity": "sha512-iez/8NYXQT6fqVQLlKmZUIRkFUEZ88ACKbTwD4lBmk0+hXW+bQBxI7JOnE3C4zkcM2YeuTXIYsC5SebTKYiR4Q==", - "dev": true, -- "optional": true -+ "requires": { -+ "ajv": "8.12.0", -+ "ajv-formats": "2.1.1", -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" -+ } - }, -- "esbuild-linux-arm": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", -- "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", -+ "@npmcli/fs": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", -+ "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, -- "optional": true -+ "requires": { -+ "semver": "^7.3.5" -+ } - }, -- "esbuild-linux-arm64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", -- "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", -+ "@npmcli/git": { -+ "version": "4.1.0", -+ "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", -+ "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", - "dev": true, -- "optional": true -+ "requires": { -+ "@npmcli/promise-spawn": "^6.0.0", -+ "lru-cache": "^7.4.4", -+ "npm-pick-manifest": "^8.0.0", -+ "proc-log": "^3.0.0", -+ "promise-inflight": "^1.0.1", -+ "promise-retry": "^2.0.1", -+ "semver": "^7.3.5", -+ "which": "^3.0.0" -+ }, -+ "dependencies": { -+ "lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true -+ } -+ } - }, -- "esbuild-linux-mips64le": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", -- "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", -+ "@npmcli/installed-package-contents": { -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", -+ "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", - "dev": true, -- "optional": true -+ "requires": { -+ "npm-bundled": "^3.0.0", -+ "npm-normalize-package-bin": "^3.0.0" -+ } - }, -- "esbuild-linux-ppc64le": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", -- "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", -+ "@npmcli/move-file": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", -+ "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "dev": true, -- "optional": true -+ "requires": { -+ "mkdirp": "^1.0.4", -+ "rimraf": "^3.0.2" -+ } - }, -- "esbuild-netbsd-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", -- "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", -+ "@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 -+ }, -+ "@npmcli/promise-spawn": { -+ "version": "6.0.2", -+ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", -+ "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", - "dev": true, -- "optional": true -+ "requires": { -+ "which": "^3.0.0" -+ } - }, -- "esbuild-openbsd-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", -- "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", -+ "@npmcli/run-script": { -+ "version": "6.0.2", -+ "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", -+ "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", - "dev": true, -- "optional": true -+ "requires": { -+ "@npmcli/node-gyp": "^3.0.0", -+ "@npmcli/promise-spawn": "^6.0.0", -+ "node-gyp": "^9.0.0", -+ "read-package-json-fast": "^3.0.0", -+ "which": "^3.0.0" -+ } -+ }, -+ "@tootallnate/once": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", -+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", -+ "dev": true -+ }, -+ "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, -+ "requires": { -+ "balanced-match": "^1.0.0" -+ } -+ }, -+ "builtins": { -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", -+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", -+ "dev": true, -+ "requires": { -+ "semver": "^7.0.0" -+ } -+ }, -+ "cacache": { -+ "version": "17.1.4", -+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", -+ "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", -+ "dev": true, -+ "requires": { -+ "@npmcli/fs": "^3.1.0", -+ "fs-minipass": "^3.0.0", -+ "glob": "^10.2.2", -+ "lru-cache": "^7.7.1", -+ "minipass": "^7.0.3", -+ "minipass-collect": "^1.0.2", -+ "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" -+ }, -+ "dependencies": { -+ "glob": { -+ "version": "10.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "requires": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" -+ } -+ }, -+ "lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true -+ }, -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "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, -+ "requires": { -+ "minipass": "^7.0.3" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "hosted-git-info": { -+ "version": "6.1.1", -+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", -+ "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^7.5.1" -+ }, -+ "dependencies": { -+ "lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true -+ } -+ } -+ }, -+ "http-proxy-agent": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", -+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", -+ "dev": true, -+ "requires": { -+ "@tootallnate/once": "2", -+ "agent-base": "6", -+ "debug": "4" -+ } -+ }, -+ "ignore-walk": { -+ "version": "6.0.3", -+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", -+ "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", -+ "dev": true, -+ "requires": { -+ "minimatch": "^9.0.0" -+ } -+ }, -+ "json-parse-even-better-errors": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", -+ "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", -+ "dev": true -+ }, -+ "make-fetch-happen": { -+ "version": "10.2.1", -+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", -+ "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", -+ "dev": true, -+ "requires": { -+ "agentkeepalive": "^4.2.1", -+ "cacache": "^16.1.0", -+ "http-cache-semantics": "^4.1.0", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.0", -+ "is-lambda": "^1.0.1", -+ "lru-cache": "^7.7.1", -+ "minipass": "^3.1.6", -+ "minipass-collect": "^1.0.2", -+ "minipass-fetch": "^2.0.3", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "negotiator": "^0.6.3", -+ "promise-retry": "^2.0.1", -+ "socks-proxy-agent": "^7.0.0", -+ "ssri": "^9.0.0" -+ }, -+ "dependencies": { -+ "@npmcli/fs": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", -+ "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", -+ "dev": true, -+ "requires": { -+ "@gar/promisify": "^1.1.3", -+ "semver": "^7.3.5" -+ } -+ }, -+ "cacache": { -+ "version": "16.1.3", -+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", -+ "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", -+ "dev": true, -+ "requires": { -+ "@npmcli/fs": "^2.1.0", -+ "@npmcli/move-file": "^2.0.0", -+ "chownr": "^2.0.0", -+ "fs-minipass": "^2.1.0", -+ "glob": "^8.0.1", -+ "infer-owner": "^1.0.4", -+ "lru-cache": "^7.7.1", -+ "minipass": "^3.1.6", -+ "minipass-collect": "^1.0.2", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "mkdirp": "^1.0.4", -+ "p-map": "^4.0.0", -+ "promise-inflight": "^1.0.1", -+ "rimraf": "^3.0.2", -+ "ssri": "^9.0.0", -+ "tar": "^6.1.11", -+ "unique-filename": "^2.0.0" -+ } -+ }, -+ "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, -+ "requires": { -+ "minipass": "^3.0.0" -+ } -+ }, -+ "glob": { -+ "version": "8.1.0", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", -+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", -+ "dev": true, -+ "requires": { -+ "fs.realpath": "^1.0.0", -+ "inflight": "^1.0.4", -+ "inherits": "2", -+ "minimatch": "^5.0.1", -+ "once": "^1.3.0" -+ } -+ }, -+ "lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true -+ }, -+ "minimatch": { -+ "version": "5.1.6", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", -+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", -+ "dev": true, -+ "requires": { -+ "brace-expansion": "^2.0.1" -+ } -+ }, -+ "minipass": { -+ "version": "3.3.6", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", -+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", -+ "dev": true, -+ "requires": { -+ "yallist": "^4.0.0" -+ } -+ }, -+ "ssri": { -+ "version": "9.0.1", -+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", -+ "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", -+ "dev": true, -+ "requires": { -+ "minipass": "^3.1.1" -+ } -+ }, -+ "unique-filename": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", -+ "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", -+ "dev": true, -+ "requires": { -+ "unique-slug": "^3.0.0" -+ } -+ }, -+ "unique-slug": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", -+ "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", -+ "dev": true, -+ "requires": { -+ "imurmurhash": "^0.1.4" -+ } -+ } -+ } - }, -- "esbuild-sunos-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", -- "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", -+ "minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, -- "optional": true -+ "requires": { -+ "brace-expansion": "^2.0.1" -+ } - }, -- "esbuild-wasm": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz", -- "integrity": "sha512-Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA==", -+ "minipass": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", -+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true - }, -- "esbuild-windows-32": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", -- "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", -- "dev": true, -- "optional": true -- }, -- "esbuild-windows-64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", -- "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", -- "dev": true, -- "optional": true -- }, -- "esbuild-windows-arm64": { -- "version": "0.14.2", -- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", -- "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", -+ "minipass-fetch": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", -+ "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, -- "optional": true -+ "requires": { -+ "encoding": "^0.1.13", -+ "minipass": "^3.1.6", -+ "minipass-sized": "^1.0.3", -+ "minizlib": "^2.1.2" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "3.3.6", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", -+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", -+ "dev": true, -+ "requires": { -+ "yallist": "^4.0.0" -+ } -+ } -+ } - }, -- "jest-preset-angular": { -- "version": "11.1.0", -- "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-11.1.0.tgz", -- "integrity": "sha512-R4ePMBiQub95ESJlN7TozIpRIyMU7buvIdjm8KXqxZK/w8MYwLOSszVStsoZycDmWq5ifZI1eRvhOCUFktFotw==", -+ "node-gyp": { -+ "version": "9.4.1", -+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", -+ "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", - "dev": true, - "requires": { -- "bs-logger": "^0.2.6", -- "esbuild": "0.14.2", -- "esbuild-wasm": "0.14.2", -- "jest-environment-jsdom": "^27.0.0", -- "pretty-format": "^27.0.0", -- "ts-jest": "^27.0.0" -+ "env-paths": "^2.2.0", -+ "exponential-backoff": "^3.1.1", -+ "glob": "^7.1.4", -+ "graceful-fs": "^4.2.6", -+ "make-fetch-happen": "^10.0.3", -+ "nopt": "^6.0.0", -+ "npmlog": "^6.0.0", -+ "rimraf": "^3.0.2", -+ "semver": "^7.3.5", -+ "tar": "^6.1.2", -+ "which": "^2.0.2" -+ }, -+ "dependencies": { -+ "which": { -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", -+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", -+ "dev": true, -+ "requires": { -+ "isexe": "^2.0.0" -+ } -+ } - } -- } -- } -- }, -- "@angular-devkit/architect": { -- "version": "0.1303.8", -- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.8.tgz", -- "integrity": "sha512-2zaNejnfZbq+fFOVgkmWkh+2UmK/CBDbWTq7VJHopJLtUuf7pFNvRk73s9xayuJ3Lt2/sY17Mykku2LziBF89A==", -- "dev": true, -- "requires": { -- "@angular-devkit/core": "13.3.8", -- "rxjs": "6.6.7" -- }, -- "dependencies": { -- "rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ }, -+ "nopt": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", -+ "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "requires": { -- "tslib": "^1.9.0" -+ "abbrev": "^1.0.0" - } - }, -- "tslib": { -- "version": "1.14.1", -- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", -- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", -- "dev": true -- } -- } -- }, -- "@angular-devkit/build-angular": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.1.tgz", -- "integrity": "sha512-xxBW4zZZM+lewW0nEpk9SXw6BMYhxe8WI/FjyEroOV8G2IuOrjZ4112QOpk6jCgmPHSOEldbltEdwoVLAnu09Q==", -- "dev": true, -- "requires": { -- "@ampproject/remapping": "1.1.1", -- "@angular-devkit/architect": "0.1303.1", -- "@angular-devkit/build-webpack": "0.1303.1", -- "@angular-devkit/core": "13.3.1", -- "@babel/core": "7.16.12", -- "@babel/generator": "7.16.8", -- "@babel/helper-annotate-as-pure": "7.16.7", -- "@babel/plugin-proposal-async-generator-functions": "7.16.8", -- "@babel/plugin-transform-async-to-generator": "7.16.8", -- "@babel/plugin-transform-runtime": "7.16.10", -- "@babel/preset-env": "7.16.11", -- "@babel/runtime": "7.16.7", -- "@babel/template": "7.16.7", -- "@discoveryjs/json-ext": "0.5.6", -- "@ngtools/webpack": "13.3.1", -- "ansi-colors": "4.1.1", -- "babel-loader": "8.2.3", -- "babel-plugin-istanbul": "6.1.1", -- "browserslist": "^4.9.1", -- "cacache": "15.3.0", -- "circular-dependency-plugin": "5.2.2", -- "copy-webpack-plugin": "10.2.1", -- "core-js": "3.20.3", -- "critters": "0.0.16", -- "css-loader": "6.5.1", -- "esbuild": "0.14.22", -- "esbuild-wasm": "0.14.22", -- "glob": "7.2.0", -- "https-proxy-agent": "5.0.0", -- "inquirer": "8.2.0", -- "jsonc-parser": "3.0.0", -- "karma-source-map-support": "1.4.0", -- "less": "4.1.2", -- "less-loader": "10.2.0", -- "license-webpack-plugin": "4.0.2", -- "loader-utils": "3.2.0", -- "mini-css-extract-plugin": "2.5.3", -- "minimatch": "3.0.4", -- "open": "8.4.0", -- "ora": "5.4.1", -- "parse5-html-rewriting-stream": "6.0.1", -- "piscina": "3.2.0", -- "postcss": "8.4.5", -- "postcss-import": "14.0.2", -- "postcss-loader": "6.2.1", -- "postcss-preset-env": "7.2.3", -- "regenerator-runtime": "0.13.9", -- "resolve-url-loader": "5.0.0", -- "rxjs": "6.6.7", -- "sass": "1.49.9", -- "sass-loader": "12.4.0", -- "semver": "7.3.5", -- "source-map-loader": "3.0.1", -- "source-map-support": "0.5.21", -- "stylus": "0.56.0", -- "stylus-loader": "6.2.0", -- "terser": "5.11.0", -- "text-table": "0.2.0", -- "tree-kill": "1.2.2", -- "tslib": "2.3.1", -- "webpack": "5.71.0", -- "webpack-dev-middleware": "5.3.0", -- "webpack-dev-server": "4.7.3", -- "webpack-merge": "5.8.0", -- "webpack-subresource-integrity": "5.1.0" -- }, -- "dependencies": { -- "@angular-devkit/architect": { -- "version": "0.1303.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.1.tgz", -- "integrity": "sha512-ppaLzNZPrqrI96ddgm1RuEALVpWZsmHbIPLDd0GBwhF6aOkwF0LpZHd5XyS4ktGFZPReiFIjWSVtqV5vaBdRsw==", -+ "npm-bundled": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", -+ "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", - "dev": true, - "requires": { -- "@angular-devkit/core": "13.3.1", -- "rxjs": "6.6.7" -+ "npm-normalize-package-bin": "^3.0.0" - } - }, -- "@angular-devkit/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", -- "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", -+ "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, - "requires": { -- "ajv": "8.9.0", -- "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -+ "semver": "^7.1.1" - } - }, -- "array-union": { -+ "npm-normalize-package-bin": { - "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", -- "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", -+ "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 - }, -- "copy-webpack-plugin": { -- "version": "10.2.1", -- "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.1.tgz", -- "integrity": "sha512-nr81NhCAIpAWXGCK5thrKmfCQ6GDY0L5RN0U+BnIn/7Us55+UCex5ANNsNKmIVtDRnk0Ecf+/kzp9SUVrrBMLg==", -+ "npm-package-arg": { -+ "version": "10.1.0", -+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", -+ "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "requires": { -- "fast-glob": "^3.2.7", -- "glob-parent": "^6.0.1", -- "globby": "^12.0.2", -- "normalize-path": "^3.0.0", -- "schema-utils": "^4.0.0", -- "serialize-javascript": "^6.0.0" -+ "hosted-git-info": "^6.0.0", -+ "proc-log": "^3.0.0", -+ "semver": "^7.3.5", -+ "validate-npm-package-name": "^5.0.0" - } - }, -- "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==", -+ "npm-packlist": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", -+ "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", - "dev": true, - "requires": { -- "is-glob": "^4.0.3" -+ "ignore-walk": "^6.0.0" - } - }, -- "globby": { -- "version": "12.2.0", -- "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", -- "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", -+ "npm-pick-manifest": { -+ "version": "8.0.1", -+ "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", -+ "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", - "dev": true, - "requires": { -- "array-union": "^3.0.1", -- "dir-glob": "^3.0.1", -- "fast-glob": "^3.2.7", -- "ignore": "^5.1.9", -- "merge2": "^1.4.1", -- "slash": "^4.0.0" -+ "npm-install-checks": "^6.0.0", -+ "npm-normalize-package-bin": "^3.0.0", -+ "npm-package-arg": "^10.0.0", -+ "semver": "^7.3.5" - } - }, -- "rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ "npm-registry-fetch": { -+ "version": "14.0.5", -+ "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", -+ "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "requires": { -- "tslib": "^1.9.0" -+ "make-fetch-happen": "^11.0.0", -+ "minipass": "^5.0.0", -+ "minipass-fetch": "^3.0.0", -+ "minipass-json-stream": "^1.0.1", -+ "minizlib": "^2.1.2", -+ "npm-package-arg": "^10.0.0", -+ "proc-log": "^3.0.0" - }, - "dependencies": { -- "tslib": { -- "version": "1.14.1", -- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", -- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", -+ "lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true -+ }, -+ "make-fetch-happen": { -+ "version": "11.1.1", -+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", -+ "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", -+ "dev": true, -+ "requires": { -+ "agentkeepalive": "^4.2.1", -+ "cacache": "^17.0.0", -+ "http-cache-semantics": "^4.1.1", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.0", -+ "is-lambda": "^1.0.1", -+ "lru-cache": "^7.7.1", -+ "minipass": "^5.0.0", -+ "minipass-fetch": "^3.0.0", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "negotiator": "^0.6.3", -+ "promise-retry": "^2.0.1", -+ "socks-proxy-agent": "^7.0.0", -+ "ssri": "^10.0.0" -+ } -+ }, -+ "minipass-fetch": { -+ "version": "3.0.4", -+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", -+ "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", -+ "dev": true, -+ "requires": { -+ "encoding": "^0.1.13", -+ "minipass": "^7.0.3", -+ "minipass-sized": "^1.0.3", -+ "minizlib": "^2.1.2" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } - } - } - }, -- "schema-utils": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", -- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", -- "dev": true, -- "requires": { -- "@types/json-schema": "^7.0.9", -- "ajv": "^8.8.0", -- "ajv-formats": "^2.1.1", -- "ajv-keywords": "^5.0.0" -+ "pacote": { -+ "version": "15.2.0", -+ "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", -+ "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", -+ "dev": true, -+ "requires": { -+ "@npmcli/git": "^4.0.0", -+ "@npmcli/installed-package-contents": "^2.0.1", -+ "@npmcli/promise-spawn": "^6.0.1", -+ "@npmcli/run-script": "^6.0.0", -+ "cacache": "^17.0.0", -+ "fs-minipass": "^3.0.0", -+ "minipass": "^5.0.0", -+ "npm-package-arg": "^10.0.0", -+ "npm-packlist": "^7.0.0", -+ "npm-pick-manifest": "^8.0.0", -+ "npm-registry-fetch": "^14.0.0", -+ "proc-log": "^3.0.0", -+ "promise-retry": "^2.0.1", -+ "read-package-json": "^6.0.0", -+ "read-package-json-fast": "^3.0.0", -+ "sigstore": "^1.3.0", -+ "ssri": "^10.0.0", -+ "tar": "^6.1.11" - } - }, -- "slash": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", -- "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", -+ "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 -- } -- } -- }, -- "@angular-devkit/build-webpack": { -- "version": "0.1303.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.1.tgz", -- "integrity": "sha512-KSnR3y2q5hxh7t7ZSi0Emv/Kh9+D105JaEeyEqjqRjLdZSd2m6eAxbSUMNOAsbqnJTMCfzU5AG7jhbujuge0dQ==", -- "dev": true, -- "requires": { -- "@angular-devkit/architect": "0.1303.1", -- "rxjs": "6.6.7" -- }, -- "dependencies": { -- "@angular-devkit/architect": { -- "version": "0.1303.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.1.tgz", -- "integrity": "sha512-ppaLzNZPrqrI96ddgm1RuEALVpWZsmHbIPLDd0GBwhF6aOkwF0LpZHd5XyS4ktGFZPReiFIjWSVtqV5vaBdRsw==", -+ }, -+ "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, - "requires": { -- "@angular-devkit/core": "13.3.1", -- "rxjs": "6.6.7" -+ "json-parse-even-better-errors": "^3.0.0", -+ "npm-normalize-package-bin": "^3.0.0" - } - }, -- "@angular-devkit/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", -- "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", -+ "rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { -- "ajv": "8.9.0", -- "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -+ "glob": "^7.1.3" - } - }, -- "rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ "semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { -- "tslib": "^1.9.0" -+ "lru-cache": "^6.0.0" - } - }, -- "tslib": { -- "version": "1.14.1", -- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", -- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", -- "dev": true -- } -- } -- }, -- "@angular-devkit/core": { -- "version": "13.3.8", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.8.tgz", -- "integrity": "sha512-PCmfMkErpnH429l1cANak4PnCpAscqAubS6Dw83++cS34ht0/bgKRb2zSyBuB2Ka6kw7wAZ3fCyTcVvyfxVFEg==", -- "dev": true, -- "requires": { -- "ajv": "8.9.0", -- "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -- }, -- "dependencies": { -- "rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ "socks-proxy-agent": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", -+ "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { -- "tslib": "^1.9.0" -+ "agent-base": "^6.0.2", -+ "debug": "^4.3.3", -+ "socks": "^2.6.2" - } - }, -- "tslib": { -- "version": "1.14.1", -- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", -- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", -- "dev": true -- } -- } -- }, -- "@angular-devkit/schematics": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.1.tgz", -- "integrity": "sha512-DxXMjlq/sALcHuONZRMTBX5k30XPfN4b6Ue4k7Xl8JKZqyHhEzfXaZzgD9u2cwb7wybKEeF/BZ5eJd8JG525og==", -- "dev": true, -- "requires": { -- "@angular-devkit/core": "13.3.1", -- "jsonc-parser": "3.0.0", -- "magic-string": "0.25.7", -- "ora": "5.4.1", -- "rxjs": "6.6.7" -- }, -- "dependencies": { -- "@angular-devkit/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", -- "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", -+ "ssri": { -+ "version": "10.0.5", -+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", -+ "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", - "dev": true, - "requires": { -- "ajv": "8.9.0", -- "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -+ "minipass": "^7.0.3" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } - } - }, -- "rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ "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, - "requires": { -- "tslib": "^1.9.0" -+ "unique-slug": "^4.0.0" - } - }, -- "tslib": { -- "version": "1.14.1", -- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", -- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", -- "dev": true -- } -- } -- }, -- "@angular-eslint/bundled-angular-compiler": { -- "version": "13.2.0", -- "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-13.2.0.tgz", -- "integrity": "sha512-ZA9JPERpeSo+G/bmp8GS/WjBbYkPDVzN6IINHz9SVdv//LWE58yymFFjRabHJx46iAEOe8P0CoKduuJWtEvNrQ==", -- "dev": true -- }, -- "@angular-eslint/eslint-plugin": { -- "version": "13.2.0", -- "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-13.2.0.tgz", -- "integrity": "sha512-8qscIBc4montFQ52+XfBk7qR675oXV8mvRpjDh3cTfIZCzV6CSbbbH2iLp/9egnn0Pgy2ZUIsWgcsbK4W3+4bw==", -- "dev": true, -- "requires": { -- "@angular-eslint/utils": "13.2.0", -- "@typescript-eslint/experimental-utils": "5.17.0" -- } -- }, -- "@angular-eslint/utils": { -- "version": "13.2.0", -- "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-13.2.0.tgz", -- "integrity": "sha512-ywkk+pVLaDLwzNKUcc/xWtJC4Bkm+qRrMOR8ZX3q84E5RTvIvc8IcPFBE4ey3lnGe+nE44OEGuLedCo9vn1Meg==", -- "dev": true, -- "requires": { -- "@angular-eslint/bundled-angular-compiler": "13.2.0", -- "@typescript-eslint/experimental-utils": "5.17.0" -- } -- }, -- "@angular/cli": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.1.tgz", -- "integrity": "sha512-0uwU8v3V/2s95X4cZT582J6upReT/ZNw/VAf4p4q51JN+BBvdCEb251xTF+TcOojyToFyJYvg8T28XSrsNsmTQ==", -- "dev": true, -- "requires": { -- "@angular-devkit/architect": "0.1303.1", -- "@angular-devkit/core": "13.3.1", -- "@angular-devkit/schematics": "13.3.1", -- "@schematics/angular": "13.3.1", -- "@yarnpkg/lockfile": "1.1.0", -- "ansi-colors": "4.1.1", -- "debug": "4.3.3", -- "ini": "2.0.0", -- "inquirer": "8.2.0", -- "jsonc-parser": "3.0.0", -- "npm-package-arg": "8.1.5", -- "npm-pick-manifest": "6.1.1", -- "open": "8.4.0", -- "ora": "5.4.1", -- "pacote": "12.0.3", -- "resolve": "1.22.0", -- "semver": "7.3.5", -- "symbol-observable": "4.0.0", -- "uuid": "8.3.2" -- }, -- "dependencies": { -- "@angular-devkit/architect": { -- "version": "0.1303.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.1.tgz", -- "integrity": "sha512-ppaLzNZPrqrI96ddgm1RuEALVpWZsmHbIPLDd0GBwhF6aOkwF0LpZHd5XyS4ktGFZPReiFIjWSVtqV5vaBdRsw==", -+ "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, - "requires": { -- "@angular-devkit/core": "13.3.1", -- "rxjs": "6.6.7" -+ "imurmurhash": "^0.1.4" - } - }, -- "@angular-devkit/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", -- "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", -+ "validate-npm-package-name": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", -+ "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dev": true, - "requires": { -- "ajv": "8.9.0", -- "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -+ "builtins": "^5.0.0" - } - }, -- "rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -+ "which": { -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", -+ "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "requires": { -- "tslib": "^1.9.0" -+ "isexe": "^2.0.0" - } -- }, -- "tslib": { -- "version": "1.14.1", -- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", -- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", -- "dev": true - } - } - }, - "@angular/common": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.1.tgz", -- "integrity": "sha512-Var5ChoX8kZl9cbIWbW7Reb3Xz3t1c1XHwq1k+oK2fgrPdEfypY9n/6DxyXOtSEGb9aV7ZCaxcv2c5JUKR3OPg==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.9.tgz", -+ "integrity": "sha512-5Lh5KsxCkaoBDeSAghKNF5lCi0083ug4X2X7wnafsSd6Z3xt/rDjH9hDOP5SF5IDLtCVjJgHfs3cCLSTjRuNwg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.1.tgz", -- "integrity": "sha512-ppJURRRDPZB6UaZctH6yBsznZXB7wZdCpfy5yo4lFE4k8rygfV80TmnrbJBZXNNq057VK48Bap1tsehFwckjog==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.9.tgz", -+ "integrity": "sha512-lh799pnbdvzTVShJHOY1JC6c1pwBsZC4UIgB3Itklo9dskGybQma/gP+lE6RhqM4FblNfaaBXGlCMUuY8HkmEQ==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler-cli": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.1.tgz", -- "integrity": "sha512-dImxLUITNwODlXaLcEACw10bxTiajWEQz3sLwhT/936UH+MNtM/RyLJ0M7xDvILDqq77W3psK5/M6F3M1mUpew==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.9.tgz", -+ "integrity": "sha512-ecH2oOlijJdDqioD9IfgdqJGoRRHI6hAx5rwBxIaYk01ywj13KzvXWPrXbCIupeWtV/XUZUlbwf47nlmL5gxZg==", - "requires": { -- "@babel/core": "^7.17.2", -+ "@babel/core": "7.22.5", -+ "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", -- "dependency-graph": "^0.11.0", -- "magic-string": "^0.26.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", -- "sourcemap-codec": "^1.4.8", - "tslib": "^2.3.0", - "yargs": "^17.2.1" -- }, -- "dependencies": { -- "@ampproject/remapping": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", -- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", -- "requires": { -- "@jridgewell/gen-mapping": "^0.1.0", -- "@jridgewell/trace-mapping": "^0.3.9" -- } -- }, -- "@babel/core": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", -- "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", -- "requires": { -- "@ampproject/remapping": "^2.1.0", -- "@babel/code-frame": "^7.16.7", -- "@babel/generator": "^7.18.2", -- "@babel/helper-compilation-targets": "^7.18.2", -- "@babel/helper-module-transforms": "^7.18.0", -- "@babel/helpers": "^7.18.2", -- "@babel/parser": "^7.18.5", -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.18.5", -- "@babel/types": "^7.18.4", -- "convert-source-map": "^1.7.0", -- "debug": "^4.1.0", -- "gensync": "^1.0.0-beta.2", -- "json5": "^2.2.1", -- "semver": "^6.3.0" -- }, -- "dependencies": { -- "semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" -- } -- } -- }, -- "@babel/generator": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", -- "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", -- "requires": { -- "@babel/types": "^7.18.2", -- "@jridgewell/gen-mapping": "^0.3.0", -- "jsesc": "^2.5.1" -- }, -- "dependencies": { -- "@jridgewell/gen-mapping": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", -- "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", -- "requires": { -- "@jridgewell/set-array": "^1.0.0", -- "@jridgewell/sourcemap-codec": "^1.4.10", -- "@jridgewell/trace-mapping": "^0.3.9" -- } -- } -- } -- }, -- "magic-string": { -- "version": "0.26.2", -- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", -- "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", -- "requires": { -- "sourcemap-codec": "^1.4.8" -- } -- } - } - }, - "@angular/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.1.tgz", -- "integrity": "sha512-ZU/B9jEiZ0jadRkRL9Sb2btzqgQ0ylx380PfRQaojVIsij/EO6+jOSHIo5upMIGu/OvkggfweShJGlylCOrOXA==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.9.tgz", -+ "integrity": "sha512-chvPX29ZBcMDuh7rLIgb0Cru6oJ/0FaqRzfOI3wT4W2F9W1HOlCtipovzmPYaUAmXBWfVP4EBO9TOWnpog0S0w==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/forms": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.1.tgz", -- "integrity": "sha512-S6a/CEq1ht0vw2epuESiO551dsyLQTb/HuwceIBlsX2JqRRccynYlyx92gsDAo4hD2F0q+EeqZEPuq3oQIK43A==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.9.tgz", -+ "integrity": "sha512-rxlg2iNJNBH/uc7b5YqybfYc8BkLzzPv1d/nMsQUlY0O2UV2zwNRpcIiWbWd7+ZaKjcyPynVe9FsXC8wgWIABw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/localize": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-13.3.1.tgz", -- "integrity": "sha512-1s51ufL28EZuDQJ6+dHvLA9yyR8O9dpqS1PFrtNo9OcD62/JiDI8CHQlAdk2kmU5eTmulDf39sSLbOsDUGPGuQ==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-16.2.9.tgz", -+ "integrity": "sha512-t5002NgBj+wjd81IXwg+yc2ypaBk6OWLAka1GXmWua3x7hwGw1yMtPFmzOE1cCNdXgWlluLxWclFjCUrAbGEww==", - "requires": { -- "@babel/core": "7.17.2", -- "glob": "7.2.0", -+ "@babel/core": "7.22.5", -+ "fast-glob": "3.3.0", - "yargs": "^17.2.1" -- }, -- "dependencies": { -- "@ampproject/remapping": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", -- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", -- "requires": { -- "@jridgewell/gen-mapping": "^0.1.0", -- "@jridgewell/trace-mapping": "^0.3.9" -- } -- }, -- "@babel/core": { -- "version": "7.17.2", -- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", -- "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", -- "requires": { -- "@ampproject/remapping": "^2.0.0", -- "@babel/code-frame": "^7.16.7", -- "@babel/generator": "^7.17.0", -- "@babel/helper-compilation-targets": "^7.16.7", -- "@babel/helper-module-transforms": "^7.16.7", -- "@babel/helpers": "^7.17.2", -- "@babel/parser": "^7.17.0", -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.17.0", -- "@babel/types": "^7.17.0", -- "convert-source-map": "^1.7.0", -- "debug": "^4.1.0", -- "gensync": "^1.0.0-beta.2", -- "json5": "^2.1.2", -- "semver": "^6.3.0" -- } -- }, -- "@babel/generator": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", -- "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", -- "requires": { -- "@babel/types": "^7.18.2", -- "@jridgewell/gen-mapping": "^0.3.0", -- "jsesc": "^2.5.1" -- }, -- "dependencies": { -- "@jridgewell/gen-mapping": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", -- "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", -- "requires": { -- "@jridgewell/set-array": "^1.0.0", -- "@jridgewell/sourcemap-codec": "^1.4.10", -- "@jridgewell/trace-mapping": "^0.3.9" -- } -- } -- } -- }, -- "semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" -- } - } - }, - "@angular/platform-browser": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.1.tgz", -- "integrity": "sha512-WtyrkK0pLYj6w7pz3xk8zlhWL1NwGCWT+k7YxEjBOONCIXlZvCqWVzWo4nNQn9Xqxd+z1FVI0dssDwZm2TD+Eg==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.9.tgz", -+ "integrity": "sha512-9Je7+Jmx0AOyRzBBumraVJG3M0R6YbT4c9jTUbLGJCcPxwDI3/u2ZzvW3rBqpmrDaqLxN5f1LcZeTZx287QeqQ==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser-dynamic": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.1.tgz", -- "integrity": "sha512-TKV63SSyjrv5EsD03PloCbo8ZrJq5owkJ38E2FO/VvJAV3xu3Ey0SnoikNZMd8o3rh7+ocuT5K9Xcr4YuKVgEA==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.9.tgz", -+ "integrity": "sha512-ztpo0939vTZ/5CWVSvo41Yl6YPoTZ0If+yTrs7dk1ce0vFgaZXMlc+y5ZwjJIiMM5CvHbhL48Uk+HJNIojP98A==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/router": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.1.tgz", -- "integrity": "sha512-YpZLjI4UI9KK6x8yn41XMrBWZgVb5JyJR7KNhQXB7WiX8bVH5SZzFRkjR3qUxTGaxe6I7KFvzySwm4JTYNj+xw==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.9.tgz", -+ "integrity": "sha512-5vrJNMblTDx3WC3dtaqLddWNtR0P9iwpqffeZL1uobBIwP4hbJx+8Dos3TwxGR4hnopFKahoDQ5nC0NOQslyog==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/service-worker": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-13.3.1.tgz", -- "integrity": "sha512-+RcAdh8fL/g5RFY6H20+A1oVaAO8idxHltCebm7dLldTE3GNoPT4er6PFhvTSyDyjko5ZL99kyFodO6Yic1Jnw==", -+ "version": "16.2.9", -+ "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-16.2.9.tgz", -+ "integrity": "sha512-f7CRhSyOkSW2SeV0uQTigcprA2mi3Xw5xfl/ywEYqpVvgJI0dNyoclgF9pVA37geozhKBK7mhmw/FKK22BNvlg==", - "dev": true, - "requires": { - "tslib": "^2.3.0" -@@ -26463,505 +26512,425 @@ - "dev": true - }, - "@babel/code-frame": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", -- "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", -+ "version": "7.22.13", -+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", -+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "requires": { -- "@babel/highlight": "^7.16.7" -+ "@babel/highlight": "^7.22.13", -+ "chalk": "^2.4.2" - } - }, - "@babel/compat-data": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", -- "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==" -+ "version": "7.23.2", -+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", -+ "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==" - }, - "@babel/core": { -- "version": "7.16.12", -- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", -- "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", -- "requires": { -- "@babel/code-frame": "^7.16.7", -- "@babel/generator": "^7.16.8", -- "@babel/helper-compilation-targets": "^7.16.7", -- "@babel/helper-module-transforms": "^7.16.7", -- "@babel/helpers": "^7.16.7", -- "@babel/parser": "^7.16.12", -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.16.10", -- "@babel/types": "^7.16.8", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", -+ "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", -+ "requires": { -+ "@ampproject/remapping": "^2.2.0", -+ "@babel/code-frame": "^7.22.5", -+ "@babel/generator": "^7.22.5", -+ "@babel/helper-compilation-targets": "^7.22.5", -+ "@babel/helper-module-transforms": "^7.22.5", -+ "@babel/helpers": "^7.22.5", -+ "@babel/parser": "^7.22.5", -+ "@babel/template": "^7.22.5", -+ "@babel/traverse": "^7.22.5", -+ "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", -- "json5": "^2.1.2", -- "semver": "^6.3.0", -- "source-map": "^0.5.0" -+ "json5": "^2.2.2", -+ "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" -- }, -- "source-map": { -- "version": "0.5.7", -- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } - } - }, - "@babel/generator": { -- "version": "7.16.8", -- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", -- "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", -+ "version": "7.22.9", -+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", -+ "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", - "requires": { -- "@babel/types": "^7.16.8", -- "jsesc": "^2.5.1", -- "source-map": "^0.5.0" -+ "@babel/types": "^7.22.5", -+ "@jridgewell/gen-mapping": "^0.3.2", -+ "@jridgewell/trace-mapping": "^0.3.17", -+ "jsesc": "^2.5.1" - }, - "dependencies": { -- "source-map": { -- "version": "0.5.7", -- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" -+ "@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", -+ "requires": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" -+ } - } - } - }, - "@babel/helper-annotate-as-pure": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", -- "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", -+ "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, - "requires": { -- "@babel/types": "^7.16.7" -+ "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", -- "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", -+ "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, - "requires": { -- "@babel/helper-explode-assignable-expression": "^7.16.7", -- "@babel/types": "^7.16.7" -+ "@babel/types": "^7.22.15" - } - }, - "@babel/helper-compilation-targets": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", -- "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", -+ "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", - "requires": { -- "@babel/compat-data": "^7.17.10", -- "@babel/helper-validator-option": "^7.16.7", -- "browserslist": "^4.20.2", -- "semver": "^6.3.0" -+ "@babel/compat-data": "^7.22.9", -+ "@babel/helper-validator-option": "^7.22.15", -+ "browserslist": "^4.21.9", -+ "lru-cache": "^5.1.1", -+ "semver": "^6.3.1" - }, - "dependencies": { -+ "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==", -+ "requires": { -+ "yallist": "^3.0.2" -+ } -+ }, - "semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" -+ "version": "6.3.1", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", -+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" -+ }, -+ "yallist": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", -+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "@babel/helper-create-class-features-plugin": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", -- "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", -+ "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", - "dev": true, - "requires": { -- "@babel/helper-annotate-as-pure": "^7.16.7", -- "@babel/helper-environment-visitor": "^7.16.7", -- "@babel/helper-function-name": "^7.17.9", -- "@babel/helper-member-expression-to-functions": "^7.17.7", -- "@babel/helper-optimise-call-expression": "^7.16.7", -- "@babel/helper-replace-supers": "^7.16.7", -- "@babel/helper-split-export-declaration": "^7.16.7" -+ "@babel/helper-annotate-as-pure": "^7.22.5", -+ "@babel/helper-environment-visitor": "^7.22.5", -+ "@babel/helper-function-name": "^7.22.5", -+ "@babel/helper-member-expression-to-functions": "^7.22.15", -+ "@babel/helper-optimise-call-expression": "^7.22.5", -+ "@babel/helper-replace-supers": "^7.22.9", -+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", -+ "@babel/helper-split-export-declaration": "^7.22.6", -+ "semver": "^6.3.1" -+ }, -+ "dependencies": { -+ "semver": { -+ "version": "6.3.1", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", -+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", -+ "dev": true -+ } - } - }, - "@babel/helper-create-regexp-features-plugin": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", -- "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", -- "dev": true, -- "requires": { -- "@babel/helper-annotate-as-pure": "^7.16.7", -- "regexpu-core": "^5.0.1" -- } -- }, -- "@babel/helper-define-polyfill-provider": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", -- "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", -+ "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dev": true, - "requires": { -- "@babel/helper-compilation-targets": "^7.13.0", -- "@babel/helper-module-imports": "^7.12.13", -- "@babel/helper-plugin-utils": "^7.13.0", -- "@babel/traverse": "^7.13.0", -- "debug": "^4.1.1", -- "lodash.debounce": "^4.0.8", -- "resolve": "^1.14.2", -- "semver": "^6.1.2" -+ "@babel/helper-annotate-as-pure": "^7.22.5", -+ "regexpu-core": "^5.3.1", -+ "semver": "^6.3.1" - }, - "dependencies": { - "semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -+ "version": "6.3.1", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", -+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, -- "@babel/helper-environment-visitor": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", -- "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==" -- }, -- "@babel/helper-explode-assignable-expression": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", -- "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", -+ "@babel/helper-define-polyfill-provider": { -+ "version": "0.4.3", -+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", -+ "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", - "dev": true, - "requires": { -- "@babel/types": "^7.16.7" -+ "@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" - } - }, -+ "@babel/helper-environment-visitor": { -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", -+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" -+ }, - "@babel/helper-function-name": { -- "version": "7.17.9", -- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", -- "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", -+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "requires": { -- "@babel/template": "^7.16.7", -- "@babel/types": "^7.17.0" -+ "@babel/template": "^7.22.15", -+ "@babel/types": "^7.23.0" -+ }, -+ "dependencies": { -+ "@babel/template": { -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", -+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", -+ "requires": { -+ "@babel/code-frame": "^7.22.13", -+ "@babel/parser": "^7.22.15", -+ "@babel/types": "^7.22.15" -+ } -+ } - } - }, - "@babel/helper-hoist-variables": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", -- "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", -+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "requires": { -- "@babel/types": "^7.16.7" -+ "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { -- "version": "7.17.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", -- "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", -+ "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dev": true, - "requires": { -- "@babel/types": "^7.17.0" -+ "@babel/types": "^7.23.0" - } - }, - "@babel/helper-module-imports": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", -- "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", -+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "requires": { -- "@babel/types": "^7.16.7" -+ "@babel/types": "^7.22.15" - } - }, - "@babel/helper-module-transforms": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", -- "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", -+ "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", - "requires": { -- "@babel/helper-environment-visitor": "^7.16.7", -- "@babel/helper-module-imports": "^7.16.7", -- "@babel/helper-simple-access": "^7.17.7", -- "@babel/helper-split-export-declaration": "^7.16.7", -- "@babel/helper-validator-identifier": "^7.16.7", -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.18.0", -- "@babel/types": "^7.18.0" -+ "@babel/helper-environment-visitor": "^7.22.20", -+ "@babel/helper-module-imports": "^7.22.15", -+ "@babel/helper-simple-access": "^7.22.5", -+ "@babel/helper-split-export-declaration": "^7.22.6", -+ "@babel/helper-validator-identifier": "^7.22.20" - } - }, - "@babel/helper-optimise-call-expression": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", -- "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", -+ "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { -- "@babel/types": "^7.16.7" -+ "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", -- "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", -+ "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { -- "version": "7.16.8", -- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", -- "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", -+ "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dev": true, - "requires": { -- "@babel/helper-annotate-as-pure": "^7.16.7", -- "@babel/helper-wrap-function": "^7.16.8", -- "@babel/types": "^7.16.8" -+ "@babel/helper-annotate-as-pure": "^7.22.5", -+ "@babel/helper-environment-visitor": "^7.22.20", -+ "@babel/helper-wrap-function": "^7.22.20" - } - }, - "@babel/helper-replace-supers": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", -- "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", -+ "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dev": true, - "requires": { -- "@babel/helper-environment-visitor": "^7.18.2", -- "@babel/helper-member-expression-to-functions": "^7.17.7", -- "@babel/helper-optimise-call-expression": "^7.16.7", -- "@babel/traverse": "^7.18.2", -- "@babel/types": "^7.18.2" -+ "@babel/helper-environment-visitor": "^7.22.20", -+ "@babel/helper-member-expression-to-functions": "^7.22.15", -+ "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", -- "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", -+ "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "requires": { -- "@babel/types": "^7.18.2" -+ "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { -- "version": "7.16.0", -- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", -- "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", -+ "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { -- "@babel/types": "^7.16.0" -+ "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", -- "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", -+ "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==", - "requires": { -- "@babel/types": "^7.16.7" -+ "@babel/types": "^7.22.5" - } - }, -+ "@babel/helper-string-parser": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", -+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" -+ }, - "@babel/helper-validator-identifier": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", -- "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", -+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" - }, - "@babel/helper-validator-option": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", -- "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", -+ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==" - }, - "@babel/helper-wrap-function": { -- "version": "7.16.8", -- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", -- "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", -+ "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dev": true, - "requires": { -- "@babel/helper-function-name": "^7.16.7", -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.16.8", -- "@babel/types": "^7.16.8" -+ "@babel/helper-function-name": "^7.22.5", -+ "@babel/template": "^7.22.15", -+ "@babel/types": "^7.22.19" -+ }, -+ "dependencies": { -+ "@babel/template": { -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", -+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", -+ "dev": true, -+ "requires": { -+ "@babel/code-frame": "^7.22.13", -+ "@babel/parser": "^7.22.15", -+ "@babel/types": "^7.22.15" -+ } -+ } - } - }, - "@babel/helpers": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", -- "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", -+ "version": "7.23.2", -+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", -+ "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", - "requires": { -- "@babel/template": "^7.16.7", -- "@babel/traverse": "^7.18.2", -- "@babel/types": "^7.18.2" -+ "@babel/template": "^7.22.15", -+ "@babel/traverse": "^7.23.2", -+ "@babel/types": "^7.23.0" -+ }, -+ "dependencies": { -+ "@babel/template": { -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", -+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", -+ "requires": { -+ "@babel/code-frame": "^7.22.13", -+ "@babel/parser": "^7.22.15", -+ "@babel/types": "^7.22.15" -+ } -+ } - } - }, - "@babel/highlight": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", -- "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", -+ "version": "7.22.20", -+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", -+ "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "requires": { -- "@babel/helper-validator-identifier": "^7.16.7", -- "chalk": "^2.0.0", -+ "@babel/helper-validator-identifier": "^7.22.20", -+ "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", -- "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==" -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", -+ "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { -- "version": "7.17.12", -- "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.17.12.tgz", -- "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", -+ "version": "7.22.15", -+ "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.22.15.tgz", -+ "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", -- "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", -+ "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", -- "@babel/plugin-proposal-optional-chaining": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", -+ "@babel/plugin-transform-optional-chaining": "^7.22.15" - } - }, - "@babel/plugin-proposal-async-generator-functions": { -- "version": "7.16.8", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", -- "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", -+ "version": "7.20.7", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", -+ "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.16.7", -- "@babel/helper-remap-async-to-generator": "^7.16.8", -+ "@babel/helper-environment-visitor": "^7.18.9", -+ "@babel/helper-plugin-utils": "^7.20.2", -+ "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, -- "@babel/plugin-proposal-class-properties": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", -- "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", -- "dev": true, -- "requires": { -- "@babel/helper-create-class-features-plugin": "^7.17.12", -- "@babel/helper-plugin-utils": "^7.17.12" -- } -- }, -- "@babel/plugin-proposal-class-static-block": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", -- "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", -- "dev": true, -- "requires": { -- "@babel/helper-create-class-features-plugin": "^7.18.0", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/plugin-syntax-class-static-block": "^7.14.5" -- } -- }, -- "@babel/plugin-proposal-dynamic-import": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", -- "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", -- "dev": true, -- "requires": { -- "@babel/helper-plugin-utils": "^7.16.7", -- "@babel/plugin-syntax-dynamic-import": "^7.8.3" -- } -- }, -- "@babel/plugin-proposal-export-namespace-from": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", -- "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", -- "dev": true, -- "requires": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/plugin-syntax-export-namespace-from": "^7.8.3" -- } -- }, -- "@babel/plugin-proposal-json-strings": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", -- "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", -- "dev": true, -- "requires": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/plugin-syntax-json-strings": "^7.8.3" -- } -- }, -- "@babel/plugin-proposal-logical-assignment-operators": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", -- "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", -- "dev": true, -- "requires": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" -- } -- }, -- "@babel/plugin-proposal-nullish-coalescing-operator": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", -- "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", -- "dev": true, -- "requires": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" -- } -- }, -- "@babel/plugin-proposal-numeric-separator": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", -- "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", -- "dev": true, -- "requires": { -- "@babel/helper-plugin-utils": "^7.16.7", -- "@babel/plugin-syntax-numeric-separator": "^7.10.4" -- } -- }, -- "@babel/plugin-proposal-object-rest-spread": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", -- "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", -- "dev": true, -- "requires": { -- "@babel/compat-data": "^7.17.10", -- "@babel/helper-compilation-targets": "^7.17.10", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/plugin-syntax-object-rest-spread": "^7.8.3", -- "@babel/plugin-transform-parameters": "^7.17.12" -- } -- }, -- "@babel/plugin-proposal-optional-catch-binding": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", -- "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", -- "dev": true, -- "requires": { -- "@babel/helper-plugin-utils": "^7.16.7", -- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" -- } -- }, -- "@babel/plugin-proposal-optional-chaining": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", -- "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", -- "dev": true, -- "requires": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", -- "@babel/plugin-syntax-optional-chaining": "^7.8.3" -- } -- }, -- "@babel/plugin-proposal-private-methods": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", -- "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", -- "dev": true, -- "requires": { -- "@babel/helper-create-class-features-plugin": "^7.17.12", -- "@babel/helper-plugin-utils": "^7.17.12" -- } -- }, - "@babel/plugin-proposal-private-property-in-object": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", -- "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", -+ "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, -- "requires": { -- "@babel/helper-annotate-as-pure": "^7.16.7", -- "@babel/helper-create-class-features-plugin": "^7.17.12", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/plugin-syntax-private-property-in-object": "^7.14.5" -- } -+ "requires": {} - }, - "@babel/plugin-proposal-unicode-property-regex": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", -- "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", -+ "version": "7.18.6", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", -+ "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { -- "@babel/helper-create-regexp-features-plugin": "^7.17.12", -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-create-regexp-features-plugin": "^7.18.6", -+ "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { -@@ -27018,6 +26987,24 @@ - "@babel/helper-plugin-utils": "^7.8.3" - } - }, -+ "@babel/plugin-syntax-import-assertions": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", -+ "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-syntax-import-attributes": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", -+ "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, - "@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", -@@ -27036,6 +27023,15 @@ - "@babel/helper-plugin-utils": "^7.8.0" - } - }, -+ "@babel/plugin-syntax-jsx": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", -+ "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, - "@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", -@@ -27109,384 +27105,551 @@ - } - }, - "@babel/plugin-syntax-typescript": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", -- "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", -+ "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@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, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-create-regexp-features-plugin": "^7.18.6", -+ "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", -- "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", -+ "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-async-generator-functions": { -+ "version": "7.23.2", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", -+ "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@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" - } - }, - "@babel/plugin-transform-async-to-generator": { -- "version": "7.16.8", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", -- "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", -+ "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "requires": { -- "@babel/helper-module-imports": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7", -- "@babel/helper-remap-async-to-generator": "^7.16.8" -+ "@babel/helper-module-imports": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", -- "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", -+ "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { -- "version": "7.18.4", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", -- "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", -+ "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-class-properties": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", -+ "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-create-class-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-class-static-block": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", -+ "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-create-class-features-plugin": "^7.22.11", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { -- "version": "7.18.4", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", -- "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", -- "dev": true, -- "requires": { -- "@babel/helper-annotate-as-pure": "^7.16.7", -- "@babel/helper-environment-visitor": "^7.18.2", -- "@babel/helper-function-name": "^7.17.9", -- "@babel/helper-optimise-call-expression": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-replace-supers": "^7.18.2", -- "@babel/helper-split-export-declaration": "^7.16.7", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", -+ "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-annotate-as-pure": "^7.22.5", -+ "@babel/helper-compilation-targets": "^7.22.15", -+ "@babel/helper-environment-visitor": "^7.22.5", -+ "@babel/helper-function-name": "^7.22.5", -+ "@babel/helper-optimise-call-expression": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-replace-supers": "^7.22.9", -+ "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", -- "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", -+ "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", -- "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", -+ "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", -- "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", -+ "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "requires": { -- "@babel/helper-create-regexp-features-plugin": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-create-regexp-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", -- "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", -+ "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-dynamic-import": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", -+ "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", -- "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", -+ "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-export-namespace-from": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", -+ "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", - "dev": true, - "requires": { -- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { -- "version": "7.18.1", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", -- "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", -+ "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", -- "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", -+ "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-compilation-targets": "^7.22.5", -+ "@babel/helper-function-name": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-json-strings": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", -+ "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", - "dev": true, - "requires": { -- "@babel/helper-compilation-targets": "^7.16.7", -- "@babel/helper-function-name": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", -- "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", -+ "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-logical-assignment-operators": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", -+ "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", -- "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", -+ "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", -- "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", -+ "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", - "dev": true, - "requires": { -- "@babel/helper-module-transforms": "^7.18.0", -- "@babel/helper-plugin-utils": "^7.17.12", -- "babel-plugin-dynamic-import-node": "^2.3.3" -+ "@babel/helper-module-transforms": "^7.23.0", -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", -- "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", -+ "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", - "dev": true, - "requires": { -- "@babel/helper-module-transforms": "^7.18.0", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-simple-access": "^7.18.2", -- "babel-plugin-dynamic-import-node": "^2.3.3" -+ "@babel/helper-module-transforms": "^7.23.0", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", -- "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", -+ "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", - "dev": true, - "requires": { -- "@babel/helper-hoist-variables": "^7.16.7", -- "@babel/helper-module-transforms": "^7.18.0", -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-validator-identifier": "^7.16.7", -- "babel-plugin-dynamic-import-node": "^2.3.3" -+ "@babel/helper-hoist-variables": "^7.22.5", -+ "@babel/helper-module-transforms": "^7.23.0", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-validator-identifier": "^7.22.20" - } - }, - "@babel/plugin-transform-modules-umd": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", -- "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", -+ "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "requires": { -- "@babel/helper-module-transforms": "^7.18.0", -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-module-transforms": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", -- "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", -+ "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "requires": { -- "@babel/helper-create-regexp-features-plugin": "^7.17.12", -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-create-regexp-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", -- "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", -+ "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-nullish-coalescing-operator": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", -+ "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-numeric-separator": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", -+ "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-numeric-separator": "^7.10.4" -+ } -+ }, -+ "@babel/plugin-transform-object-rest-spread": { -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", -+ "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", -+ "dev": true, -+ "requires": { -+ "@babel/compat-data": "^7.22.9", -+ "@babel/helper-compilation-targets": "^7.22.15", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", -+ "@babel/plugin-transform-parameters": "^7.22.15" - } - }, - "@babel/plugin-transform-object-super": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", -- "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", -+ "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-replace-supers": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-optional-catch-binding": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", -+ "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.16.7", -- "@babel/helper-replace-supers": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" -+ } -+ }, -+ "@babel/plugin-transform-optional-chaining": { -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", -+ "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", -+ "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", -- "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", -+ "version": "7.22.15", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", -+ "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-private-methods": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", -+ "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-create-class-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-private-property-in-object": { -+ "version": "7.22.11", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", -+ "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-annotate-as-pure": "^7.22.5", -+ "@babel/helper-create-class-features-plugin": "^7.22.11", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", -- "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", -+ "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { -- "version": "7.18.0", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", -- "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", -+ "version": "7.22.10", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", -+ "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "regenerator-transform": "^0.15.0" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "regenerator-transform": "^0.15.2" - } - }, - "@babel/plugin-transform-reserved-words": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", -- "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", -+ "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-runtime": { -- "version": "7.16.10", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz", -- "integrity": "sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w==", -+ "version": "7.22.9", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz", -+ "integrity": "sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==", - "dev": true, - "requires": { -- "@babel/helper-module-imports": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7", -- "babel-plugin-polyfill-corejs2": "^0.3.0", -- "babel-plugin-polyfill-corejs3": "^0.5.0", -- "babel-plugin-polyfill-regenerator": "^0.3.0", -- "semver": "^6.3.0" -+ "@babel/helper-module-imports": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "babel-plugin-polyfill-corejs2": "^0.4.4", -+ "babel-plugin-polyfill-corejs3": "^0.8.2", -+ "babel-plugin-polyfill-regenerator": "^0.5.1", -+ "semver": "^6.3.1" - }, - "dependencies": { - "semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -+ "version": "6.3.1", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", -+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", -- "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", -+ "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", -- "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", -+ "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12", -- "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", -- "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", -+ "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", -- "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", -+ "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { -- "version": "7.17.12", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", -- "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", -+ "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.17.12" -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", -- "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", -+ "version": "7.22.10", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", -+ "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, - "requires": { -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-unicode-property-regex": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", -+ "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-create-regexp-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", -- "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", -+ "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", -+ "dev": true, -+ "requires": { -+ "@babel/helper-create-regexp-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" -+ } -+ }, -+ "@babel/plugin-transform-unicode-sets-regex": { -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", -+ "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "requires": { -- "@babel/helper-create-regexp-features-plugin": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7" -+ "@babel/helper-create-regexp-features-plugin": "^7.22.5", -+ "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { -- "version": "7.16.11", -- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", -- "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", -- "dev": true, -- "requires": { -- "@babel/compat-data": "^7.16.8", -- "@babel/helper-compilation-targets": "^7.16.7", -- "@babel/helper-plugin-utils": "^7.16.7", -- "@babel/helper-validator-option": "^7.16.7", -- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", -- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", -- "@babel/plugin-proposal-async-generator-functions": "^7.16.8", -- "@babel/plugin-proposal-class-properties": "^7.16.7", -- "@babel/plugin-proposal-class-static-block": "^7.16.7", -- "@babel/plugin-proposal-dynamic-import": "^7.16.7", -- "@babel/plugin-proposal-export-namespace-from": "^7.16.7", -- "@babel/plugin-proposal-json-strings": "^7.16.7", -- "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", -- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", -- "@babel/plugin-proposal-numeric-separator": "^7.16.7", -- "@babel/plugin-proposal-object-rest-spread": "^7.16.7", -- "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", -- "@babel/plugin-proposal-optional-chaining": "^7.16.7", -- "@babel/plugin-proposal-private-methods": "^7.16.11", -- "@babel/plugin-proposal-private-property-in-object": "^7.16.7", -- "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", -+ "version": "7.22.9", -+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", -+ "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", -+ "dev": true, -+ "requires": { -+ "@babel/compat-data": "^7.22.9", -+ "@babel/helper-compilation-targets": "^7.22.9", -+ "@babel/helper-plugin-utils": "^7.22.5", -+ "@babel/helper-validator-option": "^7.22.5", -+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", -+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", -+ "@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.22.5", -+ "@babel/plugin-syntax-import-attributes": "^7.22.5", -+ "@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", -@@ -27496,59 +27659,76 @@ - "@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-transform-arrow-functions": "^7.16.7", -- "@babel/plugin-transform-async-to-generator": "^7.16.8", -- "@babel/plugin-transform-block-scoped-functions": "^7.16.7", -- "@babel/plugin-transform-block-scoping": "^7.16.7", -- "@babel/plugin-transform-classes": "^7.16.7", -- "@babel/plugin-transform-computed-properties": "^7.16.7", -- "@babel/plugin-transform-destructuring": "^7.16.7", -- "@babel/plugin-transform-dotall-regex": "^7.16.7", -- "@babel/plugin-transform-duplicate-keys": "^7.16.7", -- "@babel/plugin-transform-exponentiation-operator": "^7.16.7", -- "@babel/plugin-transform-for-of": "^7.16.7", -- "@babel/plugin-transform-function-name": "^7.16.7", -- "@babel/plugin-transform-literals": "^7.16.7", -- "@babel/plugin-transform-member-expression-literals": "^7.16.7", -- "@babel/plugin-transform-modules-amd": "^7.16.7", -- "@babel/plugin-transform-modules-commonjs": "^7.16.8", -- "@babel/plugin-transform-modules-systemjs": "^7.16.7", -- "@babel/plugin-transform-modules-umd": "^7.16.7", -- "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", -- "@babel/plugin-transform-new-target": "^7.16.7", -- "@babel/plugin-transform-object-super": "^7.16.7", -- "@babel/plugin-transform-parameters": "^7.16.7", -- "@babel/plugin-transform-property-literals": "^7.16.7", -- "@babel/plugin-transform-regenerator": "^7.16.7", -- "@babel/plugin-transform-reserved-words": "^7.16.7", -- "@babel/plugin-transform-shorthand-properties": "^7.16.7", -- "@babel/plugin-transform-spread": "^7.16.7", -- "@babel/plugin-transform-sticky-regex": "^7.16.7", -- "@babel/plugin-transform-template-literals": "^7.16.7", -- "@babel/plugin-transform-typeof-symbol": "^7.16.7", -- "@babel/plugin-transform-unicode-escapes": "^7.16.7", -- "@babel/plugin-transform-unicode-regex": "^7.16.7", -+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", -+ "@babel/plugin-transform-arrow-functions": "^7.22.5", -+ "@babel/plugin-transform-async-generator-functions": "^7.22.7", -+ "@babel/plugin-transform-async-to-generator": "^7.22.5", -+ "@babel/plugin-transform-block-scoped-functions": "^7.22.5", -+ "@babel/plugin-transform-block-scoping": "^7.22.5", -+ "@babel/plugin-transform-class-properties": "^7.22.5", -+ "@babel/plugin-transform-class-static-block": "^7.22.5", -+ "@babel/plugin-transform-classes": "^7.22.6", -+ "@babel/plugin-transform-computed-properties": "^7.22.5", -+ "@babel/plugin-transform-destructuring": "^7.22.5", -+ "@babel/plugin-transform-dotall-regex": "^7.22.5", -+ "@babel/plugin-transform-duplicate-keys": "^7.22.5", -+ "@babel/plugin-transform-dynamic-import": "^7.22.5", -+ "@babel/plugin-transform-exponentiation-operator": "^7.22.5", -+ "@babel/plugin-transform-export-namespace-from": "^7.22.5", -+ "@babel/plugin-transform-for-of": "^7.22.5", -+ "@babel/plugin-transform-function-name": "^7.22.5", -+ "@babel/plugin-transform-json-strings": "^7.22.5", -+ "@babel/plugin-transform-literals": "^7.22.5", -+ "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", -+ "@babel/plugin-transform-member-expression-literals": "^7.22.5", -+ "@babel/plugin-transform-modules-amd": "^7.22.5", -+ "@babel/plugin-transform-modules-commonjs": "^7.22.5", -+ "@babel/plugin-transform-modules-systemjs": "^7.22.5", -+ "@babel/plugin-transform-modules-umd": "^7.22.5", -+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", -+ "@babel/plugin-transform-new-target": "^7.22.5", -+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", -+ "@babel/plugin-transform-numeric-separator": "^7.22.5", -+ "@babel/plugin-transform-object-rest-spread": "^7.22.5", -+ "@babel/plugin-transform-object-super": "^7.22.5", -+ "@babel/plugin-transform-optional-catch-binding": "^7.22.5", -+ "@babel/plugin-transform-optional-chaining": "^7.22.6", -+ "@babel/plugin-transform-parameters": "^7.22.5", -+ "@babel/plugin-transform-private-methods": "^7.22.5", -+ "@babel/plugin-transform-private-property-in-object": "^7.22.5", -+ "@babel/plugin-transform-property-literals": "^7.22.5", -+ "@babel/plugin-transform-regenerator": "^7.22.5", -+ "@babel/plugin-transform-reserved-words": "^7.22.5", -+ "@babel/plugin-transform-shorthand-properties": "^7.22.5", -+ "@babel/plugin-transform-spread": "^7.22.5", -+ "@babel/plugin-transform-sticky-regex": "^7.22.5", -+ "@babel/plugin-transform-template-literals": "^7.22.5", -+ "@babel/plugin-transform-typeof-symbol": "^7.22.5", -+ "@babel/plugin-transform-unicode-escapes": "^7.22.5", -+ "@babel/plugin-transform-unicode-property-regex": "^7.22.5", -+ "@babel/plugin-transform-unicode-regex": "^7.22.5", -+ "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", -- "@babel/types": "^7.16.8", -- "babel-plugin-polyfill-corejs2": "^0.3.0", -- "babel-plugin-polyfill-corejs3": "^0.5.0", -- "babel-plugin-polyfill-regenerator": "^0.3.0", -- "core-js-compat": "^3.20.2", -- "semver": "^6.3.0" -+ "@babel/types": "^7.22.5", -+ "babel-plugin-polyfill-corejs2": "^0.4.4", -+ "babel-plugin-polyfill-corejs3": "^0.8.2", -+ "babel-plugin-polyfill-regenerator": "^0.5.1", -+ "core-js-compat": "^3.31.0", -+ "semver": "^6.3.1" - }, - "dependencies": { - "semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -+ "version": "6.3.1", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", -+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/preset-modules": { -- "version": "0.1.5", -- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", -- "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", -+ "version": "0.1.6", -+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", -+ "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", -@@ -27558,70 +27738,77 @@ - "esutils": "^2.0.2" - } - }, -+ "@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 -+ }, - "@babel/runtime": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", -- "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", -+ "version": "7.22.6", -+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", -+ "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, - "requires": { -- "regenerator-runtime": "^0.13.4" -+ "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { -- "version": "7.16.7", -- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", -- "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", -+ "version": "7.22.5", -+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", -+ "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "requires": { -- "@babel/code-frame": "^7.16.7", -- "@babel/parser": "^7.16.7", -- "@babel/types": "^7.16.7" -+ "@babel/code-frame": "^7.22.5", -+ "@babel/parser": "^7.22.5", -+ "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { -- "version": "7.18.5", -- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", -- "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", -- "requires": { -- "@babel/code-frame": "^7.16.7", -- "@babel/generator": "^7.18.2", -- "@babel/helper-environment-visitor": "^7.18.2", -- "@babel/helper-function-name": "^7.17.9", -- "@babel/helper-hoist-variables": "^7.16.7", -- "@babel/helper-split-export-declaration": "^7.16.7", -- "@babel/parser": "^7.18.5", -- "@babel/types": "^7.18.4", -+ "version": "7.23.2", -+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", -+ "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", -+ "requires": { -+ "@babel/code-frame": "^7.22.13", -+ "@babel/generator": "^7.23.0", -+ "@babel/helper-environment-visitor": "^7.22.20", -+ "@babel/helper-function-name": "^7.23.0", -+ "@babel/helper-hoist-variables": "^7.22.5", -+ "@babel/helper-split-export-declaration": "^7.22.6", -+ "@babel/parser": "^7.23.0", -+ "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/generator": { -- "version": "7.18.2", -- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", -- "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", -+ "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "requires": { -- "@babel/types": "^7.18.2", -- "@jridgewell/gen-mapping": "^0.3.0", -+ "@babel/types": "^7.23.0", -+ "@jridgewell/gen-mapping": "^0.3.2", -+ "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, -- "@jridgewell/gen-mapping": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", -- "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", -+ "@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", - "requires": { -- "@jridgewell/set-array": "^1.0.0", -- "@jridgewell/sourcemap-codec": "^1.4.10", -- "@jridgewell/trace-mapping": "^0.3.9" -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" - } - } - } - }, - "@babel/types": { -- "version": "7.18.4", -- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", -- "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", -+ "version": "7.23.0", -+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", -+ "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", - "requires": { -- "@babel/helper-validator-identifier": "^7.16.7", -+ "@babel/helper-string-parser": "^7.22.5", -+ "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, -@@ -27679,22 +27866,6 @@ - "@jridgewell/trace-mapping": "0.3.9" - } - }, -- "@csstools/postcss-progressive-custom-properties": { -- "version": "1.3.0", -- "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", -- "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", -- "dev": true, -- "requires": { -- "postcss-value-parser": "^4.2.0" -- } -- }, -- "@csstools/selector-specificity": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz", -- "integrity": "sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA==", -- "dev": true, -- "requires": {} -- }, - "@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", -@@ -27707,21 +27878,190 @@ - } - }, - "@discoveryjs/json-ext": { -- "version": "0.5.6", -- "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", -- "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", -+ "version": "0.5.7", -+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", -+ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", -+ "dev": true -+ }, -+ "@esbuild/android-arm": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", -+ "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/android-arm64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", -+ "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/android-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", -+ "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/darwin-arm64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", -+ "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/darwin-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", -+ "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/freebsd-arm64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", -+ "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/freebsd-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", -+ "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/linux-arm": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", -+ "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/linux-arm64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", -+ "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/linux-ia32": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", -+ "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/linux-loong64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", -+ "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/linux-mips64el": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", -+ "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/linux-ppc64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", -+ "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/linux-riscv64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", -+ "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/linux-s390x": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", -+ "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/linux-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", -+ "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/netbsd-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", -+ "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/openbsd-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", -+ "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/sunos-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", -+ "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/win32-arm64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", -+ "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/win32-ia32": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", -+ "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", -+ "dev": true, -+ "optional": true -+ }, -+ "@esbuild/win32-x64": { -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", -+ "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", -+ "dev": true, -+ "optional": true -+ }, -+ "@eslint-community/eslint-utils": { -+ "version": "4.4.0", -+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", -+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", -+ "dev": true, -+ "requires": { -+ "eslint-visitor-keys": "^3.3.0" -+ } -+ }, -+ "@eslint-community/regexpp": { -+ "version": "4.10.0", -+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", -+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true - }, - "@eslint/eslintrc": { -- "version": "1.3.0", -- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", -- "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", -+ "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", -- "espree": "^9.3.2", -- "globals": "^13.15.0", -+ "espree": "^9.6.0", -+ "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", -@@ -27748,9 +28088,9 @@ - "dev": true - }, - "globals": { -- "version": "13.15.0", -- "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", -- "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", -+ "version": "13.23.0", -+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", -+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" -@@ -27788,6 +28128,12 @@ - } - } - }, -+ "@eslint/js": { -+ "version": "8.51.0", -+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", -+ "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", -+ "dev": true -+ }, - "@faker-js/faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", -@@ -27795,37 +28141,32 @@ - "dev": true - }, - "@fortawesome/angular-fontawesome": { -- "version": "0.10.2", -- "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.10.2.tgz", -- "integrity": "sha512-VxsCAo2lK74KwD236AKAhGpiethfz9yqCViIG2iRAZqgNmuZ6ihwumjbLW32n6hV4fFvCqLcHmpngoEl3TNiOg==", -+ "version": "0.13.0", -+ "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.13.0.tgz", -+ "integrity": "sha512-gzSPRdveOXNO7NIiMgTyB46aiHG0i98KinnAEqHXi8qzraM/kCcHn/0y3f4MhemX6kftwsFli0IU8RyHmtXlSQ==", - "requires": { -- "tslib": "^2.3.1" -+ "tslib": "^2.4.1" - } - }, - "@fortawesome/fontawesome-common-types": { -- "version": "6.1.1", -- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz", -- "integrity": "sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA==" -- }, -- "@fortawesome/fontawesome-free": { -- "version": "6.1.1", -- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.1.1.tgz", -- "integrity": "sha512-J/3yg2AIXc9wznaVqpHVX3Wa5jwKovVF0AMYSnbmcXTiL3PpRPfF58pzWucCwEiCJBp+hCNRLWClTomD8SseKg==" -+ "version": "6.4.2", -+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", -+ "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==" - }, - "@fortawesome/fontawesome-svg-core": { -- "version": "6.1.1", -- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.1.1.tgz", -- "integrity": "sha512-NCg0w2YIp81f4V6cMGD9iomfsIj7GWrqmsa0ZsPh59G7PKiGN1KymZNxmF00ssuAlo/VZmpK6xazsGOwzKYUMg==", -+ "version": "6.4.2", -+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", -+ "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", - "requires": { -- "@fortawesome/fontawesome-common-types": "6.1.1" -+ "@fortawesome/fontawesome-common-types": "6.4.2" - } - }, - "@fortawesome/free-solid-svg-icons": { -- "version": "6.1.1", -- "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.1.1.tgz", -- "integrity": "sha512-0/5exxavOhI/D4Ovm2r3vxNojGZioPwmFrKg0ZUH69Q68uFhFPs6+dhAToh6VEQBntxPRYPuT5Cg1tpNa9JUPg==", -+ "version": "6.4.2", -+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz", -+ "integrity": "sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==", - "requires": { -- "@fortawesome/fontawesome-common-types": "6.1.1" -+ "@fortawesome/fontawesome-common-types": "6.4.2" - } - }, - "@gar/promisify": { -@@ -27850,26 +28191,103 @@ - } - }, - "@humanwhocodes/config-array": { -- "version": "0.9.5", -- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", -- "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", -+ "version": "0.11.13", -+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", -+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dev": true, - "requires": { -- "@humanwhocodes/object-schema": "^1.2.1", -+ "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", -- "minimatch": "^3.0.4" -+ "minimatch": "^3.0.5" -+ }, -+ "dependencies": { -+ "minimatch": { -+ "version": "3.1.2", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", -+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", -+ "dev": true, -+ "requires": { -+ "brace-expansion": "^1.1.7" -+ } -+ } - } - }, -+ "@humanwhocodes/module-importer": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", -+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", -+ "dev": true -+ }, - "@humanwhocodes/object-schema": { -- "version": "1.2.1", -- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", -- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", -+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true - }, -- "@ibm/plex": { -- "version": "6.0.2", -- "resolved": "https://registry.npmjs.org/@ibm/plex/-/plex-6.0.2.tgz", -- "integrity": "sha512-0lBo4ju7/6B58cxmACCPVEGt9xjQ8+3lggRrW7pJOWxKAFsQ21whifwES5q3eJ5wDfL3QlsvMF4YXnOQPYaNdQ==" -+ "@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, -+ "requires": { -+ "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" -+ }, -+ "dependencies": { -+ "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 -+ }, -+ "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 -+ }, -+ "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 -+ }, -+ "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, -+ "requires": { -+ "eastasianwidth": "^0.2.0", -+ "emoji-regex": "^9.2.2", -+ "strip-ansi": "^7.0.1" -+ } -+ }, -+ "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, -+ "requires": { -+ "ansi-regex": "^6.0.1" -+ } -+ }, -+ "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, -+ "requires": { -+ "ansi-styles": "^6.1.0", -+ "string-width": "^5.0.1", -+ "strip-ansi": "^7.0.1" -+ } -+ } -+ } - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", -@@ -27897,16 +28315,16 @@ - "dev": true - }, - "@jest/console": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", -- "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", -+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "requires": { -- "@jest/types": "^27.5.1", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", -- "jest-message-util": "^27.5.1", -- "jest-util": "^27.5.1", -+ "jest-message-util": "^29.7.0", -+ "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "dependencies": { -@@ -27962,37 +28380,37 @@ - } - }, - "@jest/core": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", -- "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", -+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "requires": { -- "@jest/console": "^27.5.1", -- "@jest/reporters": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/console": "^29.7.0", -+ "@jest/reporters": "^29.7.0", -+ "@jest/test-result": "^29.7.0", -+ "@jest/transform": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", -- "emittery": "^0.8.1", -+ "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", -- "jest-changed-files": "^27.5.1", -- "jest-config": "^27.5.1", -- "jest-haste-map": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-regex-util": "^27.5.1", -- "jest-resolve": "^27.5.1", -- "jest-resolve-dependencies": "^27.5.1", -- "jest-runner": "^27.5.1", -- "jest-runtime": "^27.5.1", -- "jest-snapshot": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-validate": "^27.5.1", -- "jest-watcher": "^27.5.1", -+ "jest-changed-files": "^29.7.0", -+ "jest-config": "^29.7.0", -+ "jest-haste-map": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-regex-util": "^29.6.3", -+ "jest-resolve": "^29.7.0", -+ "jest-resolve-dependencies": "^29.7.0", -+ "jest-runner": "^29.7.0", -+ "jest-runtime": "^29.7.0", -+ "jest-snapshot": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jest-validate": "^29.7.0", -+ "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", -- "rimraf": "^3.0.0", -+ "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, -@@ -28049,75 +28467,104 @@ - } - }, - "@jest/environment": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", -- "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", -+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "requires": { -- "@jest/fake-timers": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/fake-timers": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/node": "*", -- "jest-mock": "^27.5.1" -+ "jest-mock": "^29.7.0" -+ } -+ }, -+ "@jest/expect": { -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", -+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", -+ "dev": true, -+ "requires": { -+ "expect": "^29.7.0", -+ "jest-snapshot": "^29.7.0" -+ } -+ }, -+ "@jest/expect-utils": { -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", -+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", -+ "dev": true, -+ "requires": { -+ "jest-get-type": "^29.6.3" - } - }, - "@jest/fake-timers": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", -- "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", -+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "requires": { -- "@jest/types": "^27.5.1", -- "@sinonjs/fake-timers": "^8.0.1", -+ "@jest/types": "^29.6.3", -+ "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", -- "jest-message-util": "^27.5.1", -- "jest-mock": "^27.5.1", -- "jest-util": "^27.5.1" -+ "jest-message-util": "^29.7.0", -+ "jest-mock": "^29.7.0", -+ "jest-util": "^29.7.0" - } - }, - "@jest/globals": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", -- "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", -+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "requires": { -- "@jest/environment": "^27.5.1", -- "@jest/types": "^27.5.1", -- "expect": "^27.5.1" -+ "@jest/environment": "^29.7.0", -+ "@jest/expect": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "jest-mock": "^29.7.0" - } - }, - "@jest/reporters": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", -- "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", -+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", -- "@jest/console": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/console": "^29.7.0", -+ "@jest/test-result": "^29.7.0", -+ "@jest/transform": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", -- "glob": "^7.1.2", -+ "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", -- "istanbul-lib-instrument": "^5.1.0", -+ "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", -- "jest-haste-map": "^27.5.1", -- "jest-resolve": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-worker": "^27.5.1", -+ "jest-message-util": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jest-worker": "^29.7.0", - "slash": "^3.0.0", -- "source-map": "^0.6.0", - "string-length": "^4.0.1", -- "terminal-link": "^2.0.0", -- "v8-to-istanbul": "^8.1.0" -+ "strip-ansi": "^6.0.0", -+ "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { -+ "@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", -+ "dev": true, -+ "requires": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" -+ } -+ }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", -@@ -28158,11 +28605,27 @@ - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, -- "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 -+ "istanbul-lib-instrument": { -+ "version": "6.0.1", -+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", -+ "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", -+ "dev": true, -+ "requires": { -+ "@babel/core": "^7.12.3", -+ "@babel/parser": "^7.14.7", -+ "@istanbuljs/schema": "^0.1.2", -+ "istanbul-lib-coverage": "^3.2.0", -+ "semver": "^7.5.4" -+ } -+ }, -+ "semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^6.0.0" -+ } - }, - "supports-color": { - "version": "7.2.0", -@@ -28175,72 +28638,95 @@ - } - } - }, -+ "@jest/schemas": { -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", -+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", -+ "dev": true, -+ "requires": { -+ "@sinclair/typebox": "^0.27.8" -+ } -+ }, - "@jest/source-map": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", -- "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", -+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "requires": { -+ "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", -- "graceful-fs": "^4.2.9", -- "source-map": "^0.6.0" -+ "graceful-fs": "^4.2.9" - }, - "dependencies": { -- "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 -+ "@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", -+ "dev": true, -+ "requires": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" -+ } - } - } - }, - "@jest/test-result": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", -- "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", -+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "requires": { -- "@jest/console": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/console": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", -- "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", -+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "requires": { -- "@jest/test-result": "^27.5.1", -+ "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", -- "jest-haste-map": "^27.5.1", -- "jest-runtime": "^27.5.1" -+ "jest-haste-map": "^29.7.0", -+ "slash": "^3.0.0" - } - }, - "@jest/transform": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", -- "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", -+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "requires": { -- "@babel/core": "^7.1.0", -- "@jest/types": "^27.5.1", -+ "@babel/core": "^7.11.6", -+ "@jest/types": "^29.6.3", -+ "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", -- "convert-source-map": "^1.4.0", -- "fast-json-stable-stringify": "^2.0.0", -+ "convert-source-map": "^2.0.0", -+ "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", -- "jest-haste-map": "^27.5.1", -- "jest-regex-util": "^27.5.1", -- "jest-util": "^27.5.1", -+ "jest-haste-map": "^29.7.0", -+ "jest-regex-util": "^29.6.3", -+ "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", -- "source-map": "^0.6.1", -- "write-file-atomic": "^3.0.0" -+ "write-file-atomic": "^4.0.2" - }, - "dependencies": { -+ "@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", -+ "dev": true, -+ "requires": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" -+ } -+ }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", -@@ -28275,18 +28761,18 @@ - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, -+ "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==", -+ "dev": true -+ }, - "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 - }, -- "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 -- }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -28299,15 +28785,16 @@ - } - }, - "@jest/types": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", -- "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", -+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "requires": { -+ "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", -- "@types/yargs": "^16.0.0", -+ "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "dependencies": { -@@ -28363,28 +28850,39 @@ - } - }, - "@jridgewell/gen-mapping": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", -- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", -+ "version": "0.3.3", -+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", -+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "requires": { -- "@jridgewell/set-array": "^1.0.0", -- "@jridgewell/sourcemap-codec": "^1.4.10" -+ "@jridgewell/set-array": "^1.0.1", -+ "@jridgewell/sourcemap-codec": "^1.4.10", -+ "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { -- "version": "3.0.7", -- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", -- "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", -+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" - }, - "@jridgewell/set-array": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", -- "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", -+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" -+ }, -+ "@jridgewell/source-map": { -+ "version": "0.3.5", -+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", -+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", -+ "dev": true, -+ "requires": { -+ "@jridgewell/gen-mapping": "^0.3.0", -+ "@jridgewell/trace-mapping": "^0.3.9" -+ } - }, - "@jridgewell/sourcemap-codec": { -- "version": "1.4.13", -- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", -- "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" -+ "version": "1.4.15", -+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", -+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", -@@ -28395,11 +28893,6 @@ - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, -- "@juggle/resize-observer": { -- "version": "3.3.1", -- "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.3.1.tgz", -- "integrity": "sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==" -- }, - "@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", -@@ -28415,42 +28908,43 @@ - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "dev": true - }, -+ "@leichtgewicht/ip-codec": { -+ "version": "2.0.4", -+ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", -+ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", -+ "dev": true -+ }, - "@ng-bootstrap/ng-bootstrap": { -- "version": "12.0.1", -- "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.0.1.tgz", -- "integrity": "sha512-q0N1Pi032kfqHdoHEu9RqSdmN0ycSKmlg0b4YaqgOxNcOfuI9bH3oSejCttcYhe0q5SPB0IgVDJ6M0MrcKVi6Q==", -+ "version": "15.1.1", -+ "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-15.1.1.tgz", -+ "integrity": "sha512-nZlIMMggtI3IHkGs0XPrUIUdpeEzQvfGV9M4I9IvCqiS2n4RwWoUvWK1ICo4csZqFNBDlCQx956gO6ZZUSL2mw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@ngtools/webpack": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.1.tgz", -- "integrity": "sha512-40iEqAA/l882MPbGuG5EYxzsPWJ37fT4fF22SkPLX2eBgNhJ4K8XMt0gqcFhkHUsSe63frg1qjQ1Pd31msu0bQ==", -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.6.tgz", -+ "integrity": "sha512-d8ZlZL6dOtWmHdjG9PTGBkdiJMcsXD2tp6WeFRVvTEuvCI3XvKsUXBvJDE+mZOhzn5pUEYt+1TR5DHjDZbME3w==", - "dev": true, - "requires": {} - }, - "@ngx-translate/core": { -- "version": "14.0.0", -- "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-14.0.0.tgz", -- "integrity": "sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w==", -- "requires": { -- "tslib": "^2.3.0" -- } -+ "version": "15.0.0", -+ "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-15.0.0.tgz", -+ "integrity": "sha512-Am5uiuR0bOOxyoercDnAA3rJVizo4RRqJHo8N3RqJ+XfzVP/I845yEnMADykOHvM6HkVm4SZSnJBOiz0Anx5BA==", -+ "requires": {} - }, - "@ngx-translate/http-loader": { -- "version": "7.0.0", -- "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-7.0.0.tgz", -- "integrity": "sha512-j+NpXXlcGVdyUNyY/qsJrqqeAdJdizCd+GKh3usXExSqy1aE9866jlAIL+xrfDU4w+LiMoma5pgE4emvFebZmA==", -- "requires": { -- "tslib": "^2.3.0" -- } -+ "version": "8.0.0", -+ "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-8.0.0.tgz", -+ "integrity": "sha512-SFMsdUcmHF5OdZkL1CHEoSAwbP5EbAOPTLLboOCRRoOg21P4GJx+51jxGdJeGve6LSKLf4Pay7BkTwmE6vxYlg==", -+ "requires": {} - }, - "@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==", -- "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" -@@ -28459,14 +28953,12 @@ - "@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==", -- "dev": true -+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@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==", -- "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" -@@ -28510,6 +29002,17 @@ - "ssri": "^8.0.1", - "treeverse": "^1.0.4", - "walk-up-path": "^1.0.0" -+ }, -+ "dependencies": { -+ "rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "requires": { -+ "glob": "^7.1.3" -+ } -+ } - } - }, - "@npmcli/fs": { -@@ -28613,6 +29116,17 @@ - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" -+ }, -+ "dependencies": { -+ "rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "requires": { -+ "glob": "^7.1.3" -+ } -+ } - } - }, - "@npmcli/name-from-folder": { -@@ -28797,56 +29311,82 @@ - "@octokit/openapi-types": "^12.4.0" - } - }, -+ "@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 -+ }, -+ "@pkgr/utils": { -+ "version": "2.4.2", -+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", -+ "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", -+ "dev": true, -+ "requires": { -+ "cross-spawn": "^7.0.3", -+ "fast-glob": "^3.3.0", -+ "is-glob": "^4.0.3", -+ "open": "^9.1.0", -+ "picocolors": "^1.0.0", -+ "tslib": "^2.6.0" -+ }, -+ "dependencies": { -+ "define-lazy-prop": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", -+ "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", -+ "dev": true -+ }, -+ "open": { -+ "version": "9.1.0", -+ "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", -+ "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", -+ "dev": true, -+ "requires": { -+ "default-browser": "^4.0.0", -+ "define-lazy-prop": "^3.0.0", -+ "is-inside-container": "^1.0.0", -+ "is-wsl": "^2.2.0" -+ } -+ } -+ } -+ }, - "@polka/url": { -- "version": "1.0.0-next.21", -- "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", -- "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", -+ "version": "1.0.0-next.23", -+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", -+ "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", - "dev": true - }, - "@popperjs/core": { -- "version": "2.11.5", -- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", -- "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==" -+ "version": "2.11.8", -+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", -+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" - }, - "@schematics/angular": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.1.tgz", -- "integrity": "sha512-+lrK/d1eJsAK6d6E9TDeg3Vc71bDy1KsE8M+lEINdX9Wax22mAz4pw20X9RSCw5RHgn+XcNUuMsgRJAwVhDNpg==", -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.6.tgz", -+ "integrity": "sha512-fM09WPqST+nhVGV5Q3fhG7WKo96kgSVMsbz3wGS0DmTn4zge7ZWnrW3VvbxnMapmGoKa9DFPqdqNln4ADcdIMQ==", - "dev": true, - "requires": { -- "@angular-devkit/core": "13.3.1", -- "@angular-devkit/schematics": "13.3.1", -- "jsonc-parser": "3.0.0" -+ "@angular-devkit/core": "16.2.6", -+ "@angular-devkit/schematics": "16.2.6", -+ "jsonc-parser": "3.2.0" - }, - "dependencies": { - "@angular-devkit/core": { -- "version": "13.3.1", -- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.1.tgz", -- "integrity": "sha512-eXAcQaP1mn6rnQb+5bv5NsamY6b34UYM7G+S154Hnma6CTTSGBtcmoNAJs8cekuFqWlw7YgpB/e15jR5OLPkDA==", -+ "version": "16.2.6", -+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.6.tgz", -+ "integrity": "sha512-iez/8NYXQT6fqVQLlKmZUIRkFUEZ88ACKbTwD4lBmk0+hXW+bQBxI7JOnE3C4zkcM2YeuTXIYsC5SebTKYiR4Q==", - "dev": true, - "requires": { -- "ajv": "8.9.0", -+ "ajv": "8.12.0", - "ajv-formats": "2.1.1", -- "fast-json-stable-stringify": "2.1.0", -- "magic-string": "0.25.7", -- "rxjs": "6.6.7", -- "source-map": "0.7.3" -+ "jsonc-parser": "3.2.0", -+ "picomatch": "2.3.1", -+ "rxjs": "7.8.1", -+ "source-map": "0.7.4" - } -- }, -- "rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -- "dev": true, -- "requires": { -- "tslib": "^1.9.0" -- } -- }, -- "tslib": { -- "version": "1.14.1", -- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", -- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", -- "dev": true - } - } - }, -@@ -28860,9 +29400,9 @@ - } - }, - "@sideway/formula": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", -- "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", -+ "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "@sideway/pinpoint": { -@@ -28871,24 +29411,277 @@ - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, -+ "@sigstore/bundle": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", -+ "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", -+ "dev": true, -+ "requires": { -+ "@sigstore/protobuf-specs": "^0.2.0" -+ } -+ }, -+ "@sigstore/protobuf-specs": { -+ "version": "0.2.1", -+ "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", -+ "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", -+ "dev": true -+ }, -+ "@sigstore/sign": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", -+ "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", -+ "dev": true, -+ "requires": { -+ "@sigstore/bundle": "^1.1.0", -+ "@sigstore/protobuf-specs": "^0.2.0", -+ "make-fetch-happen": "^11.0.1" -+ }, -+ "dependencies": { -+ "@npmcli/fs": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", -+ "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", -+ "dev": true, -+ "requires": { -+ "semver": "^7.3.5" -+ } -+ }, -+ "@tootallnate/once": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", -+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", -+ "dev": true -+ }, -+ "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, -+ "requires": { -+ "balanced-match": "^1.0.0" -+ } -+ }, -+ "cacache": { -+ "version": "17.1.4", -+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", -+ "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", -+ "dev": true, -+ "requires": { -+ "@npmcli/fs": "^3.1.0", -+ "fs-minipass": "^3.0.0", -+ "glob": "^10.2.2", -+ "lru-cache": "^7.7.1", -+ "minipass": "^7.0.3", -+ "minipass-collect": "^1.0.2", -+ "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" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "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, -+ "requires": { -+ "minipass": "^7.0.3" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "glob": { -+ "version": "10.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "requires": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" -+ } -+ }, -+ "http-proxy-agent": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", -+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", -+ "dev": true, -+ "requires": { -+ "@tootallnate/once": "2", -+ "agent-base": "6", -+ "debug": "4" -+ } -+ }, -+ "lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true -+ }, -+ "make-fetch-happen": { -+ "version": "11.1.1", -+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", -+ "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", -+ "dev": true, -+ "requires": { -+ "agentkeepalive": "^4.2.1", -+ "cacache": "^17.0.0", -+ "http-cache-semantics": "^4.1.1", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.0", -+ "is-lambda": "^1.0.1", -+ "lru-cache": "^7.7.1", -+ "minipass": "^5.0.0", -+ "minipass-fetch": "^3.0.0", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "negotiator": "^0.6.3", -+ "promise-retry": "^2.0.1", -+ "socks-proxy-agent": "^7.0.0", -+ "ssri": "^10.0.0" -+ } -+ }, -+ "minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", -+ "dev": true, -+ "requires": { -+ "brace-expansion": "^2.0.1" -+ } -+ }, -+ "minipass": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", -+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", -+ "dev": true -+ }, -+ "minipass-fetch": { -+ "version": "3.0.4", -+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", -+ "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", -+ "dev": true, -+ "requires": { -+ "encoding": "^0.1.13", -+ "minipass": "^7.0.3", -+ "minipass-sized": "^1.0.3", -+ "minizlib": "^2.1.2" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "socks-proxy-agent": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", -+ "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", -+ "dev": true, -+ "requires": { -+ "agent-base": "^6.0.2", -+ "debug": "^4.3.3", -+ "socks": "^2.6.2" -+ } -+ }, -+ "ssri": { -+ "version": "10.0.5", -+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", -+ "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", -+ "dev": true, -+ "requires": { -+ "minipass": "^7.0.3" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "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, -+ "requires": { -+ "unique-slug": "^4.0.0" -+ } -+ }, -+ "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, -+ "requires": { -+ "imurmurhash": "^0.1.4" -+ } -+ } -+ } -+ }, -+ "@sigstore/tuf": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", -+ "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", -+ "dev": true, -+ "requires": { -+ "@sigstore/protobuf-specs": "^0.2.0", -+ "tuf-js": "^1.1.7" -+ } -+ }, -+ "@sinclair/typebox": { -+ "version": "0.27.8", -+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", -+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", -+ "dev": true -+ }, - "@sinonjs/commons": { -- "version": "1.8.3", -- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", -- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", -+ "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { -- "version": "8.1.0", -- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", -- "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", -+ "version": "10.3.0", -+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", -+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "requires": { -- "@sinonjs/commons": "^1.7.0" -+ "@sinonjs/commons": "^3.0.0" - } - }, -+ "@socket.io/component-emitter": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", -+ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", -+ "dev": true -+ }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", -@@ -28919,32 +29712,68 @@ - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, -+ "@tufjs/canonical-json": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", -+ "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", -+ "dev": true -+ }, -+ "@tufjs/models": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", -+ "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", -+ "dev": true, -+ "requires": { -+ "@tufjs/canonical-json": "1.0.0", -+ "minimatch": "^9.0.0" -+ }, -+ "dependencies": { -+ "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, -+ "requires": { -+ "balanced-match": "^1.0.0" -+ } -+ }, -+ "minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", -+ "dev": true, -+ "requires": { -+ "brace-expansion": "^2.0.1" -+ } -+ } -+ } -+ }, - "@types/babel__core": { -- "version": "7.1.19", -- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", -- "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", -+ "version": "7.20.3", -+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", -+ "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", - "dev": true, - "requires": { -- "@babel/parser": "^7.1.0", -- "@babel/types": "^7.0.0", -+ "@babel/parser": "^7.20.7", -+ "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { -- "version": "7.6.4", -- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", -- "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", -+ "version": "7.6.6", -+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", -+ "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { -- "version": "7.4.1", -- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", -- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", -+ "version": "7.4.3", -+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", -+ "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", -@@ -28952,18 +29781,18 @@ - } - }, - "@types/babel__traverse": { -- "version": "7.17.1", -- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", -- "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", -+ "version": "7.20.3", -+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", -+ "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", - "dev": true, - "requires": { -- "@babel/types": "^7.3.0" -+ "@babel/types": "^7.20.7" - } - }, - "@types/body-parser": { -- "version": "1.19.2", -- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", -- "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", -+ "version": "1.19.4", -+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", -+ "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", - "dev": true, - "requires": { - "@types/connect": "*", -@@ -28971,9 +29800,9 @@ - } - }, - "@types/bonjour": { -- "version": "3.5.10", -- "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", -- "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", -+ "version": "3.5.12", -+ "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.12.tgz", -+ "integrity": "sha512-ky0kWSqXVxSqgqJvPIkgFkcn4C8MnRog308Ou8xBBIVo39OmUFy+jqNe0nPwLCDFxUpmT9EvT91YzOJgkDRcFg==", - "dev": true, - "requires": { - "@types/node": "*" -@@ -28989,37 +29818,43 @@ - } - }, - "@types/connect": { -- "version": "3.4.35", -- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", -- "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", -+ "version": "3.4.37", -+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.37.tgz", -+ "integrity": "sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { -- "version": "1.3.5", -- "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", -- "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", -+ "version": "1.5.2", -+ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz", -+ "integrity": "sha512-gX2j9x+NzSh4zOhnRPSdPPmTepS4DfxES0AvIFv3jGv5QyeAJf6u6dY5/BAoAJU9Qq1uTvwOku8SSC2GnCRl6Q==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, -- "@types/dompurify": { -- "version": "2.3.3", -- "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-2.3.3.tgz", -- "integrity": "sha512-nnVQSgRVuZ/843oAfhA25eRSNzUFcBPk/LOiw5gm8mD9/X7CNcbRkQu/OsjCewO8+VIYfPxUnXvPEVGenw14+w==", -+ "@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 -+ }, -+ "@types/cors": { -+ "version": "2.8.15", -+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.15.tgz", -+ "integrity": "sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==", - "dev": true, - "requires": { -- "@types/trusted-types": "*" -+ "@types/node": "*" - } - }, - "@types/eslint": { -- "version": "7.29.0", -- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", -- "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", -+ "version": "8.44.6", -+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.6.tgz", -+ "integrity": "sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==", - "dev": true, - "requires": { - "@types/estree": "*", -@@ -29027,9 +29862,9 @@ - } - }, - "@types/eslint-scope": { -- "version": "3.7.3", -- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", -- "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", -+ "version": "3.7.6", -+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.6.tgz", -+ "integrity": "sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==", - "dev": true, - "requires": { - "@types/eslint": "*", -@@ -29037,9 +29872,9 @@ - } - }, - "@types/estree": { -- "version": "0.0.51", -- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", -- "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.4.tgz", -+ "integrity": "sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw==", - "dev": true - }, - "@types/expect": { -@@ -29049,26 +29884,27 @@ - "dev": true - }, - "@types/express": { -- "version": "4.17.13", -- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", -- "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", -+ "version": "4.17.20", -+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.20.tgz", -+ "integrity": "sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==", - "dev": true, - "requires": { - "@types/body-parser": "*", -- "@types/express-serve-static-core": "^4.17.18", -+ "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { -- "version": "4.17.29", -- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", -- "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", -+ "version": "4.17.39", -+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", -+ "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", -- "@types/range-parser": "*" -+ "@types/range-parser": "*", -+ "@types/send": "*" - } - }, - "@types/form-data": { -@@ -29091,55 +29927,72 @@ - } - }, - "@types/graceful-fs": { -- "version": "4.1.5", -- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", -- "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", -+ "version": "4.1.8", -+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz", -+ "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, -+ "@types/http-errors": { -+ "version": "2.0.3", -+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", -+ "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==", -+ "dev": true -+ }, - "@types/http-proxy": { -- "version": "1.17.9", -- "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", -- "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", -+ "version": "1.17.13", -+ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.13.tgz", -+ "integrity": "sha512-GkhdWcMNiR5QSQRYnJ+/oXzu0+7JJEPC8vkWXK351BkhjraZF+1W13CUYARUvX9+NqIU2n6YHA4iwywsc/M6Sw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", -- "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", -+ "version": "2.0.5", -+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", -+ "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==", - "dev": true - }, - "@types/istanbul-lib-report": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", -- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz", -+ "integrity": "sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", -- "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", -+ "version": "3.0.3", -+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz", -+ "integrity": "sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { -- "version": "27.4.1", -- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", -- "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", -+ "version": "29.5.5", -+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", -+ "integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", - "dev": true, - "requires": { -- "jest-matcher-utils": "^27.0.0", -- "pretty-format": "^27.0.0" -+ "expect": "^29.0.0", -+ "pretty-format": "^29.0.0" -+ } -+ }, -+ "@types/jsdom": { -+ "version": "20.0.1", -+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", -+ "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", -+ "dev": true, -+ "requires": { -+ "@types/node": "*", -+ "@types/tough-cookie": "*", -+ "parse5": "^7.0.0" - } - }, - "@types/json-schema": { -@@ -29148,21 +30001,10 @@ - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, -- "@types/json5": { -- "version": "0.0.29", -- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", -- "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", -- "dev": true -- }, -- "@types/marked": { -- "version": "4.0.3", -- "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.3.tgz", -- "integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==" -- }, - "@types/mime": { -- "version": "1.3.2", -- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", -- "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", -+ "version": "1.3.4", -+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", -+ "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==", - "dev": true - }, - "@types/minimatch": { -@@ -29172,29 +30014,26 @@ - "dev": true - }, - "@types/node": { -- "version": "16.11.26", -- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", -- "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==", -+ "version": "18.18.5", -+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.5.tgz", -+ "integrity": "sha512-4slmbtwV59ZxitY4ixUZdy1uRLf9eSIvBWPQxNjhHYWEtn0FryfKpyS2cvADYXTayWdKEIsJengncrVvkI4I6A==", - "dev": true - }, -+ "@types/node-forge": { -+ "version": "1.3.8", -+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.8.tgz", -+ "integrity": "sha512-vGXshY9vim9CJjrpcS5raqSjEfKlJcWy2HNdgUasR66fAnVEYarrf1ULV4nfvpC1nZq/moA9qyqBcu83x+Jlrg==", -+ "dev": true, -+ "requires": { -+ "@types/node": "*" -+ } -+ }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, -- "@types/parse-json": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", -- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", -- "dev": true -- }, -- "@types/prettier": { -- "version": "2.6.3", -- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", -- "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", -- "dev": true -- }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", -@@ -29202,9 +30041,9 @@ - "dev": true - }, - "@types/range-parser": { -- "version": "1.2.4", -- "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", -- "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", -+ "version": "1.2.6", -+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", -+ "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==", - "dev": true - }, - "@types/retry": { -@@ -29213,44 +30052,61 @@ - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, -+ "@types/semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", -+ "dev": true -+ }, -+ "@types/send": { -+ "version": "0.17.3", -+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.3.tgz", -+ "integrity": "sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==", -+ "dev": true, -+ "requires": { -+ "@types/mime": "^1", -+ "@types/node": "*" -+ } -+ }, - "@types/serve-index": { -- "version": "1.9.1", -- "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", -- "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", -+ "version": "1.9.3", -+ "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.3.tgz", -+ "integrity": "sha512-4KG+yMEuvDPRrYq5fyVm/I2uqAJSAwZK9VSa+Zf+zUq9/oxSSvy3kkIqyL+jjStv6UCVi8/Aho0NHtB1Fwosrg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { -- "version": "1.13.10", -- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", -- "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", -+ "version": "1.15.4", -+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", -+ "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", - "dev": true, - "requires": { -- "@types/mime": "^1", -+ "@types/http-errors": "*", -+ "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { -- "version": "0.3.33", -- "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", -- "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", -+ "version": "0.3.35", -+ "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.35.tgz", -+ "integrity": "sha512-tIF57KB+ZvOBpAQwSaACfEu7htponHXaFzP7RfKYgsOS0NoYnn+9+jzp7bbq4fWerizI3dTB4NfAZoyeQKWJLw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/stack-utils": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", -- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", -+ "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==", - "dev": true - }, -- "@types/trusted-types": { -- "version": "2.0.2", -- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", -- "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", -+ "@types/tough-cookie": { -+ "version": "4.0.4", -+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.4.tgz", -+ "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==", - "dev": true - }, - "@types/vinyl": { -@@ -29264,336 +30120,473 @@ - } - }, - "@types/ws": { -- "version": "8.5.3", -- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", -- "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", -+ "version": "8.5.8", -+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", -+ "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { -- "version": "16.0.4", -- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", -- "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", -+ "version": "17.0.29", -+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz", -+ "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { -- "version": "21.0.0", -- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", -- "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", -+ "version": "21.0.2", -+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz", -+ "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz", -- "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==", -- "dev": true, -- "requires": { -- "@typescript-eslint/scope-manager": "5.18.0", -- "@typescript-eslint/type-utils": "5.18.0", -- "@typescript-eslint/utils": "5.18.0", -- "debug": "^4.3.2", -- "functional-red-black-tree": "^1.0.1", -- "ignore": "^5.1.8", -- "regexpp": "^3.2.0", -- "semver": "^7.3.5", -- "tsutils": "^3.21.0" -- } -- }, -- "@typescript-eslint/experimental-utils": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.17.0.tgz", -- "integrity": "sha512-U4sM5z0/ymSYqQT6I7lz8l0ZZ9zrya5VIwrwAP5WOJVabVtVsIpTMxPQe+D3qLyePT+VlETUTO2nA1+PufPx9Q==", -- "dev": true, -- "requires": { -- "@typescript-eslint/utils": "5.17.0" -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.5.tgz", -+ "integrity": "sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==", -+ "dev": true, -+ "requires": { -+ "@eslint-community/regexpp": "^4.5.1", -+ "@typescript-eslint/scope-manager": "6.7.5", -+ "@typescript-eslint/type-utils": "6.7.5", -+ "@typescript-eslint/utils": "6.7.5", -+ "@typescript-eslint/visitor-keys": "6.7.5", -+ "debug": "^4.3.4", -+ "graphemer": "^1.4.0", -+ "ignore": "^5.2.4", -+ "natural-compare": "^1.4.0", -+ "semver": "^7.5.4", -+ "ts-api-utils": "^1.0.1" - }, - "dependencies": { -- "@typescript-eslint/scope-manager": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz", -- "integrity": "sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w==", -- "dev": true, -- "requires": { -- "@typescript-eslint/types": "5.17.0", -- "@typescript-eslint/visitor-keys": "5.17.0" -- } -- }, -- "@typescript-eslint/types": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.17.0.tgz", -- "integrity": "sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw==", -+ "@types/json-schema": { -+ "version": "7.0.14", -+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", -+ "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", - "dev": true - }, -- "@typescript-eslint/typescript-estree": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz", -- "integrity": "sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg==", -- "dev": true, -- "requires": { -- "@typescript-eslint/types": "5.17.0", -- "@typescript-eslint/visitor-keys": "5.17.0", -- "debug": "^4.3.2", -- "globby": "^11.0.4", -- "is-glob": "^4.0.3", -- "semver": "^7.3.5", -- "tsutils": "^3.21.0" -- } -- }, - "@typescript-eslint/utils": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.17.0.tgz", -- "integrity": "sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA==", -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.5.tgz", -+ "integrity": "sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==", - "dev": true, - "requires": { -- "@types/json-schema": "^7.0.9", -- "@typescript-eslint/scope-manager": "5.17.0", -- "@typescript-eslint/types": "5.17.0", -- "@typescript-eslint/typescript-estree": "5.17.0", -- "eslint-scope": "^5.1.1", -- "eslint-utils": "^3.0.0" -+ "@eslint-community/eslint-utils": "^4.4.0", -+ "@types/json-schema": "^7.0.12", -+ "@types/semver": "^7.5.0", -+ "@typescript-eslint/scope-manager": "6.7.5", -+ "@typescript-eslint/types": "6.7.5", -+ "@typescript-eslint/typescript-estree": "6.7.5", -+ "semver": "^7.5.4" - } - }, -- "@typescript-eslint/visitor-keys": { -- "version": "5.17.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz", -- "integrity": "sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA==", -+ "semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { -- "@typescript-eslint/types": "5.17.0", -- "eslint-visitor-keys": "^3.0.0" -+ "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/parser": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz", -- "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==", -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", -+ "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", - "dev": true, - "requires": { -- "@typescript-eslint/scope-manager": "5.18.0", -- "@typescript-eslint/types": "5.18.0", -- "@typescript-eslint/typescript-estree": "5.18.0", -- "debug": "^4.3.2" -+ "@typescript-eslint/scope-manager": "6.7.5", -+ "@typescript-eslint/types": "6.7.5", -+ "@typescript-eslint/typescript-estree": "6.7.5", -+ "@typescript-eslint/visitor-keys": "6.7.5", -+ "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", -- "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==", -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", -+ "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", - "dev": true, - "requires": { -- "@typescript-eslint/types": "5.18.0", -- "@typescript-eslint/visitor-keys": "5.18.0" -+ "@typescript-eslint/types": "6.7.5", -+ "@typescript-eslint/visitor-keys": "6.7.5" - } - }, - "@typescript-eslint/type-utils": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz", -- "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==", -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.5.tgz", -+ "integrity": "sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==", - "dev": true, - "requires": { -- "@typescript-eslint/utils": "5.18.0", -- "debug": "^4.3.2", -- "tsutils": "^3.21.0" -+ "@typescript-eslint/typescript-estree": "6.7.5", -+ "@typescript-eslint/utils": "6.7.5", -+ "debug": "^4.3.4", -+ "ts-api-utils": "^1.0.1" -+ }, -+ "dependencies": { -+ "@types/json-schema": { -+ "version": "7.0.14", -+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", -+ "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", -+ "dev": true -+ }, -+ "@typescript-eslint/utils": { -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.5.tgz", -+ "integrity": "sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==", -+ "dev": true, -+ "requires": { -+ "@eslint-community/eslint-utils": "^4.4.0", -+ "@types/json-schema": "^7.0.12", -+ "@types/semver": "^7.5.0", -+ "@typescript-eslint/scope-manager": "6.7.5", -+ "@typescript-eslint/types": "6.7.5", -+ "@typescript-eslint/typescript-estree": "6.7.5", -+ "semver": "^7.5.4" -+ } -+ }, -+ "semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^6.0.0" -+ } -+ } - } - }, - "@typescript-eslint/types": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz", -- "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==", -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", -+ "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz", -- "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==", -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", -+ "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", - "dev": true, - "requires": { -- "@typescript-eslint/types": "5.18.0", -- "@typescript-eslint/visitor-keys": "5.18.0", -- "debug": "^4.3.2", -- "globby": "^11.0.4", -+ "@typescript-eslint/types": "6.7.5", -+ "@typescript-eslint/visitor-keys": "6.7.5", -+ "debug": "^4.3.4", -+ "globby": "^11.1.0", - "is-glob": "^4.0.3", -- "semver": "^7.3.5", -- "tsutils": "^3.21.0" -+ "semver": "^7.5.4", -+ "ts-api-utils": "^1.0.1" -+ }, -+ "dependencies": { -+ "semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^6.0.0" -+ } -+ } - } - }, - "@typescript-eslint/utils": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", -- "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", -+ "version": "5.62.0", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", -+ "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "requires": { -+ "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", -- "@typescript-eslint/scope-manager": "5.18.0", -- "@typescript-eslint/types": "5.18.0", -- "@typescript-eslint/typescript-estree": "5.18.0", -+ "@types/semver": "^7.3.12", -+ "@typescript-eslint/scope-manager": "5.62.0", -+ "@typescript-eslint/types": "5.62.0", -+ "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", -- "eslint-utils": "^3.0.0" -+ "semver": "^7.3.7" -+ }, -+ "dependencies": { -+ "@typescript-eslint/scope-manager": { -+ "version": "5.62.0", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", -+ "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", -+ "dev": true, -+ "requires": { -+ "@typescript-eslint/types": "5.62.0", -+ "@typescript-eslint/visitor-keys": "5.62.0" -+ } -+ }, -+ "@typescript-eslint/types": { -+ "version": "5.62.0", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", -+ "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", -+ "dev": true -+ }, -+ "@typescript-eslint/typescript-estree": { -+ "version": "5.62.0", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", -+ "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", -+ "dev": true, -+ "requires": { -+ "@typescript-eslint/types": "5.62.0", -+ "@typescript-eslint/visitor-keys": "5.62.0", -+ "debug": "^4.3.4", -+ "globby": "^11.1.0", -+ "is-glob": "^4.0.3", -+ "semver": "^7.3.7", -+ "tsutils": "^3.21.0" -+ } -+ }, -+ "@typescript-eslint/visitor-keys": { -+ "version": "5.62.0", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", -+ "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", -+ "dev": true, -+ "requires": { -+ "@typescript-eslint/types": "5.62.0", -+ "eslint-visitor-keys": "^3.3.0" -+ } -+ }, -+ "semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^6.0.0" -+ } -+ } - } - }, - "@typescript-eslint/visitor-keys": { -- "version": "5.18.0", -- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", -- "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==", -+ "version": "6.7.5", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", -+ "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", - "dev": true, - "requires": { -- "@typescript-eslint/types": "5.18.0", -- "eslint-visitor-keys": "^3.0.0" -+ "@typescript-eslint/types": "6.7.5", -+ "eslint-visitor-keys": "^3.4.1" - } - }, -+ "@vitejs/plugin-basic-ssl": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", -+ "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", -+ "dev": true, -+ "requires": {} -+ }, - "@webassemblyjs/ast": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", -- "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", -+ "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "requires": { -- "@webassemblyjs/helper-numbers": "1.11.1", -- "@webassemblyjs/helper-wasm-bytecode": "1.11.1" -+ "@webassemblyjs/helper-numbers": "1.11.6", -+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "@webassemblyjs/floating-point-hex-parser": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", -- "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", -+ "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 - }, - "@webassemblyjs/helper-api-error": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", -- "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", -+ "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 - }, - "@webassemblyjs/helper-buffer": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", -- "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", -+ "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", -- "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", -+ "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "requires": { -- "@webassemblyjs/floating-point-hex-parser": "1.11.1", -- "@webassemblyjs/helper-api-error": "1.11.1", -+ "@webassemblyjs/floating-point-hex-parser": "1.11.6", -+ "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", -- "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", -+ "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 - }, - "@webassemblyjs/helper-wasm-section": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", -- "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", -+ "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "requires": { -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/helper-buffer": "1.11.1", -- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", -- "@webassemblyjs/wasm-gen": "1.11.1" -+ "@webassemblyjs/ast": "1.11.6", -+ "@webassemblyjs/helper-buffer": "1.11.6", -+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", -+ "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "@webassemblyjs/ieee754": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", -- "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", -+ "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", -- "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", -+ "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", -- "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", -+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", -- "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", -+ "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "requires": { -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/helper-buffer": "1.11.1", -- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", -- "@webassemblyjs/helper-wasm-section": "1.11.1", -- "@webassemblyjs/wasm-gen": "1.11.1", -- "@webassemblyjs/wasm-opt": "1.11.1", -- "@webassemblyjs/wasm-parser": "1.11.1", -- "@webassemblyjs/wast-printer": "1.11.1" -+ "@webassemblyjs/ast": "1.11.6", -+ "@webassemblyjs/helper-buffer": "1.11.6", -+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6", -+ "@webassemblyjs/helper-wasm-section": "1.11.6", -+ "@webassemblyjs/wasm-gen": "1.11.6", -+ "@webassemblyjs/wasm-opt": "1.11.6", -+ "@webassemblyjs/wasm-parser": "1.11.6", -+ "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "@webassemblyjs/wasm-gen": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", -- "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", -+ "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "requires": { -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", -- "@webassemblyjs/ieee754": "1.11.1", -- "@webassemblyjs/leb128": "1.11.1", -- "@webassemblyjs/utf8": "1.11.1" -+ "@webassemblyjs/ast": "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" - } - }, - "@webassemblyjs/wasm-opt": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", -- "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", -+ "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "requires": { -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/helper-buffer": "1.11.1", -- "@webassemblyjs/wasm-gen": "1.11.1", -- "@webassemblyjs/wasm-parser": "1.11.1" -+ "@webassemblyjs/ast": "1.11.6", -+ "@webassemblyjs/helper-buffer": "1.11.6", -+ "@webassemblyjs/wasm-gen": "1.11.6", -+ "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "@webassemblyjs/wasm-parser": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", -- "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", -+ "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "requires": { -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/helper-api-error": "1.11.1", -- "@webassemblyjs/helper-wasm-bytecode": "1.11.1", -- "@webassemblyjs/ieee754": "1.11.1", -- "@webassemblyjs/leb128": "1.11.1", -- "@webassemblyjs/utf8": "1.11.1" -+ "@webassemblyjs/ast": "1.11.6", -+ "@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" - } - }, - "@webassemblyjs/wast-printer": { -- "version": "1.11.1", -- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", -- "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", -+ "version": "1.11.6", -+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", -+ "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "requires": { -- "@webassemblyjs/ast": "1.11.1", -+ "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, -+ "@wessberg/ts-evaluator": { -+ "version": "0.0.27", -+ "resolved": "https://registry.npmjs.org/@wessberg/ts-evaluator/-/ts-evaluator-0.0.27.tgz", -+ "integrity": "sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA==", -+ "dev": true, -+ "requires": { -+ "chalk": "^4.1.0", -+ "jsdom": "^16.4.0", -+ "object-path": "^0.11.5", -+ "tslib": "^2.0.3" -+ }, -+ "dependencies": { -+ "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, -+ "requires": { -+ "color-convert": "^2.0.1" -+ } -+ }, -+ "chalk": { -+ "version": "4.1.2", -+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", -+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", -+ "dev": true, -+ "requires": { -+ "ansi-styles": "^4.1.0", -+ "supports-color": "^7.1.0" -+ } -+ }, -+ "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, -+ "requires": { -+ "color-name": "~1.1.4" -+ } -+ }, -+ "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 -+ }, -+ "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 -+ }, -+ "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, -+ "requires": { -+ "has-flag": "^4.0.0" -+ } -+ } -+ } -+ }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", -@@ -29635,9 +30628,9 @@ - } - }, - "acorn": { -- "version": "8.7.1", -- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", -- "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", -+ "version": "8.11.2", -+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", -+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true - }, - "acorn-globals": { -@@ -29659,9 +30652,9 @@ - } - }, - "acorn-import-assertions": { -- "version": "1.8.0", -- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", -- "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", -+ "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, - "requires": {} - }, -@@ -29701,12 +30694,6 @@ - } - } - }, -- "after": { -- "version": "0.8.2", -- "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", -- "integrity": "sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==", -- "dev": true -- }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", -@@ -29738,9 +30725,9 @@ - } - }, - "ajv": { -- "version": "8.9.0", -- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", -- "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", -+ "version": "8.12.0", -+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", -+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", -@@ -29768,9 +30755,9 @@ - } - }, - "ansi-colors": { -- "version": "4.1.1", -- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", -- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", -+ "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 - }, - "ansi-escapes": { -@@ -29841,27 +30828,6 @@ - "sprintf-js": "~1.0.2" - } - }, -- "arr-diff": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", -- "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", -- "dev": true, -- "requires": { -- "arr-flatten": "^1.0.1" -- } -- }, -- "arr-flatten": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", -- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", -- "dev": true -- }, -- "arr-union": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", -- "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", -- "dev": true -- }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", -@@ -29880,18 +30846,6 @@ - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, -- "array-unique": { -- "version": "0.2.1", -- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", -- "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", -- "dev": true -- }, -- "arraybuffer.slice": { -- "version": "0.0.7", -- "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", -- "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", -- "dev": true -- }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", -@@ -29919,18 +30873,6 @@ - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true - }, -- "assign-symbols": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", -- "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", -- "dev": true -- }, -- "astral-regex": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", -- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", -- "dev": true -- }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", -@@ -29940,36 +30882,18 @@ - "lodash": "^4.17.14" - } - }, -- "async-each": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", -- "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", -- "dev": true -- }, - "async-each-series": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", - "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", - "dev": true - }, -- "async-limiter": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", -- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", -- "dev": true -- }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, -- "atob": { -- "version": "2.1.2", -- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", -- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", -- "dev": true -- }, - "atomically": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", -@@ -29977,13 +30901,13 @@ - "dev": true - }, - "autoprefixer": { -- "version": "10.4.7", -- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", -- "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", -+ "version": "10.4.14", -+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", -+ "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "requires": { -- "browserslist": "^4.20.3", -- "caniuse-lite": "^1.0.30001335", -+ "browserslist": "^4.21.5", -+ "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", -@@ -30007,6 +30931,17 @@ - "xml2js": "0.4.19" - }, - "dependencies": { -+ "buffer": { -+ "version": "4.9.2", -+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", -+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", -+ "dev": true, -+ "requires": { -+ "base64-js": "^1.0.2", -+ "ieee754": "^1.1.4", -+ "isarray": "^1.0.0" -+ } -+ }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", -@@ -30028,26 +30963,24 @@ - "dev": true - }, - "axios": { -- "version": "0.17.1", -- "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", -- "integrity": "sha512-mZzWRyJeJ0rtK7e1/6iYBUzmeXjzei+1h1IvbedyU0sB52++tU5AU6r6TLXpwNVR0ebXIpvTVW+9CpWNyc1n8w==", -+ "version": "0.21.4", -+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", -+ "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "requires": { -- "follow-redirects": "^1.2.5", -- "is-buffer": "^1.1.5" -+ "follow-redirects": "^1.14.0" - } - }, - "babel-jest": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", -- "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", -+ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "requires": { -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", -- "babel-preset-jest": "^27.5.1", -+ "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" -@@ -30094,57 +31027,24 @@ - "dev": true - }, - "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, -- "requires": { -- "has-flag": "^4.0.0" -- } -- } -- } -- }, -- "babel-loader": { -- "version": "8.2.3", -- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", -- "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", -- "dev": true, -- "requires": { -- "find-cache-dir": "^3.3.1", -- "loader-utils": "^1.4.0", -- "make-dir": "^3.1.0", -- "schema-utils": "^2.6.5" -- }, -- "dependencies": { -- "json5": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", -- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", -- "dev": true, -- "requires": { -- "minimist": "^1.2.0" -- } -- }, -- "loader-utils": { -- "version": "1.4.0", -- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", -- "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", -+ "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, - "requires": { -- "big.js": "^5.2.2", -- "emojis-list": "^3.0.0", -- "json5": "^1.0.1" -+ "has-flag": "^4.0.0" - } - } - } - }, -- "babel-plugin-dynamic-import-node": { -- "version": "2.3.3", -- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", -- "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", -+ "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, - "requires": { -- "object.assign": "^4.1.0" -+ "find-cache-dir": "^4.0.0", -+ "schema-utils": "^4.0.0" - } - }, - "babel-plugin-istanbul": { -@@ -30161,53 +31061,53 @@ - } - }, - "babel-plugin-jest-hoist": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", -- "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", -+ "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", -- "@types/babel__core": "^7.0.0", -+ "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-polyfill-corejs2": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", -- "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", -+ "version": "0.4.6", -+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", -+ "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", - "dev": true, - "requires": { -- "@babel/compat-data": "^7.13.11", -- "@babel/helper-define-polyfill-provider": "^0.3.1", -- "semver": "^6.1.1" -+ "@babel/compat-data": "^7.22.6", -+ "@babel/helper-define-polyfill-provider": "^0.4.3", -+ "semver": "^6.3.1" - }, - "dependencies": { - "semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -+ "version": "6.3.1", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", -+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { -- "version": "0.5.2", -- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", -- "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", -+ "version": "0.8.6", -+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", -+ "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", - "dev": true, - "requires": { -- "@babel/helper-define-polyfill-provider": "^0.3.1", -- "core-js-compat": "^3.21.0" -+ "@babel/helper-define-polyfill-provider": "^0.4.3", -+ "core-js-compat": "^3.33.1" - } - }, - "babel-plugin-polyfill-regenerator": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", -- "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", -+ "version": "0.5.3", -+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", -+ "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", - "dev": true, - "requires": { -- "@babel/helper-define-polyfill-provider": "^0.3.1" -+ "@babel/helper-define-polyfill-provider": "^0.4.3" - } - }, - "babel-preset-current-node-syntax": { -@@ -30231,56 +31131,19 @@ - } - }, - "babel-preset-jest": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", -- "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", -+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "requires": { -- "babel-plugin-jest-hoist": "^27.5.1", -+ "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, -- "backo2": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", -- "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==", -- "dev": true -- }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", -- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" -- }, -- "base": { -- "version": "0.11.2", -- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", -- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", -- "dev": true, -- "requires": { -- "cache-base": "^1.0.1", -- "class-utils": "^0.3.5", -- "component-emitter": "^1.2.1", -- "define-property": "^1.0.0", -- "isobject": "^3.0.1", -- "mixin-deep": "^1.2.0", -- "pascalcase": "^0.1.1" -- }, -- "dependencies": { -- "define-property": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", -- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", -- "dev": true, -- "requires": { -- "is-descriptor": "^1.0.0" -- } -- } -- } -- }, -- "base64-arraybuffer": { -- "version": "0.1.5", -- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", -- "integrity": "sha512-437oANT9tP582zZMwSvZGy2nmSeAb8DW2me3y+Uv1Wp2Rulr8Mqlyrv3E7MLxmsiaPSMMDmiDVzgE+e8zlMx9g==", -+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { -@@ -30290,9 +31153,9 @@ - "dev": true - }, - "base64id": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", -- "integrity": "sha512-rz8L+d/xByiB/vLVftPkyY215fqNrmasrcJsYkVcm4TgJNz+YXKrFaFAWibSaHkiKoSgMDCb+lipOIRQNGYesw==", -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", -+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true - }, - "batch": { -@@ -30316,14 +31179,11 @@ - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true - }, -- "better-assert": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", -- "integrity": "sha512-bYeph2DFlpK1XmGs6fvlLRUN29QISM3GBuUwSFsMY2XRx4AvC0WNCS57j4c/xGrK2RS24C1w3YoBOsw9fT46tQ==", -- "dev": true, -- "requires": { -- "callsite": "1.0.0" -- } -+ "big-integer": { -+ "version": "1.6.51", -+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", -+ "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", -+ "dev": true - }, - "big.js": { - "version": "5.2.2", -@@ -30345,14 +31205,13 @@ - "write-file-atomic": "^4.0.0" - }, - "dependencies": { -- "write-file-atomic": { -- "version": "4.0.1", -- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", -- "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", -+ "rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { -- "imurmurhash": "^0.1.4", -- "signal-exit": "^3.0.7" -+ "glob": "^7.1.3" - } - } - } -@@ -30368,16 +31227,6 @@ - "integrity": "sha512-PQu3Kyv9dM4FnwB7XGj1+HucW+ShvJzJqjuw1JkKVs1mWdwOKVcRjOi+pV9X52A0tNvrPCsPkbFFQb+wE1EAXw==", - "dev": true - }, -- "bindings": { -- "version": "1.5.0", -- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", -- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", -- "dev": true, -- "optional": true, -- "requires": { -- "file-uri-to-path": "1.0.0" -- } -- }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", -@@ -30401,16 +31250,10 @@ - } - } - }, -- "blob": { -- "version": "0.0.5", -- "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", -- "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", -- "dev": true -- }, - "body-parser": { -- "version": "1.20.0", -- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", -- "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", -+ "version": "1.20.1", -+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", -+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", -@@ -30421,7 +31264,7 @@ - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", -- "qs": "6.10.3", -+ "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" -@@ -30462,30 +31305,19 @@ - "requires": { - "ee-first": "1.1.1" - } -- }, -- "qs": { -- "version": "6.10.3", -- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", -- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", -- "dev": true, -- "requires": { -- "side-channel": "^1.0.4" -- } - } - } - }, -- "bonjour": { -- "version": "3.5.0", -- "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", -- "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", -+ "bonjour-service": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", -+ "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "requires": { -- "array-flatten": "^2.1.0", -- "deep-equal": "^1.0.1", -+ "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", -- "dns-txt": "^2.0.2", -- "multicast-dns": "^6.0.1", -- "multicast-dns-service-types": "^1.1.0" -+ "fast-deep-equal": "^3.1.3", -+ "multicast-dns": "^7.2.5" - } - }, - "boolbase": { -@@ -30495,15 +31327,25 @@ - "dev": true - }, - "bootstrap": { -- "version": "5.1.3", -- "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", -- "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", -+ "version": "5.3.2", -+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", -+ "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", - "requires": {} - }, -+ "bplist-parser": { -+ "version": "0.2.0", -+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", -+ "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", -+ "dev": true, -+ "requires": { -+ "big-integer": "^1.6.44" -+ } -+ }, - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" -@@ -30524,706 +31366,170 @@ - "dev": true - }, - "browser-sync": { -- "version": "2.24.1", -- "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.24.1.tgz", -- "integrity": "sha512-GCYd5WAoshtyz2/Ycy3Nj4F7rGOCwsFZIegcpQ8iGkk24ZQDo9kFIRlHYWBTcDRnLqEM/Lst79fr5POz3qCzOA==", -+ "version": "2.29.3", -+ "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.3.tgz", -+ "integrity": "sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==", - "dev": true, - "requires": { -- "browser-sync-ui": "v1.0.1", -+ "browser-sync-client": "^2.29.3", -+ "browser-sync-ui": "^2.29.3", - "bs-recipes": "1.3.4", -- "chokidar": "1.7.0", -- "connect": "3.5.0", -- "connect-history-api-fallback": "^1.5.0", -+ "chalk": "4.1.2", -+ "chokidar": "^3.5.1", -+ "connect": "3.6.6", -+ "connect-history-api-fallback": "^1", - "dev-ip": "^1.0.1", -- "easy-extender": "2.3.2", -- "eazy-logger": "3.0.2", -+ "easy-extender": "^2.3.4", -+ "eazy-logger": "^4.0.1", - "etag": "^1.8.1", - "fresh": "^0.5.2", - "fs-extra": "3.0.1", -- "http-proxy": "1.15.2", -- "immutable": "3.8.2", -- "localtunnel": "1.9.0", -- "micromatch": "2.3.11", -- "opn": "4.0.2", -- "portscanner": "2.1.1", -- "qs": "6.2.3", -+ "http-proxy": "^1.18.1", -+ "immutable": "^3", -+ "localtunnel": "^2.0.1", -+ "micromatch": "^4.0.2", -+ "opn": "5.3.0", -+ "portscanner": "2.2.0", - "raw-body": "^2.3.2", - "resp-modifier": "6.0.2", - "rx": "4.1.0", -- "serve-index": "1.8.0", -+ "send": "0.16.2", -+ "serve-index": "1.9.1", - "serve-static": "1.13.2", - "server-destroy": "1.0.1", -- "socket.io": "2.0.4", -- "ua-parser-js": "0.7.17", -- "yargs": "6.4.0" -+ "socket.io": "^4.4.1", -+ "ua-parser-js": "^1.0.33", -+ "yargs": "^17.3.1" - }, - "dependencies": { -- "ansi-regex": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", -- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", -- "dev": true -- }, -- "anymatch": { -- "version": "1.3.2", -- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", -- "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", -- "dev": true, -- "requires": { -- "micromatch": "^2.1.5", -- "normalize-path": "^2.0.0" -- } -- }, -- "batch": { -- "version": "0.5.3", -- "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", -- "integrity": "sha512-aQgHPLH2DHpFTpBl5/GiVdNzHEqsLCSs1RiPvqkKP1+7RkNJlv71kL8/KXmvvaLqoZ7ylmvqkZhLjjAoRz8Xgw==", -- "dev": true -- }, -- "binary-extensions": { -- "version": "1.13.1", -- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", -- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", -- "dev": true -- }, -- "braces": { -- "version": "1.8.5", -- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", -- "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", -- "dev": true, -- "requires": { -- "expand-range": "^1.8.1", -- "preserve": "^0.2.0", -- "repeat-element": "^1.1.2" -- } -- }, -- "camelcase": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", -- "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", -- "dev": true -- }, -- "chokidar": { -- "version": "1.7.0", -- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", -- "integrity": "sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==", -+ "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, - "requires": { -- "anymatch": "^1.3.0", -- "async-each": "^1.0.0", -- "fsevents": "^1.0.0", -- "glob-parent": "^2.0.0", -- "inherits": "^2.0.1", -- "is-binary-path": "^1.0.0", -- "is-glob": "^2.0.0", -- "path-is-absolute": "^1.0.0", -- "readdirp": "^2.0.0" -+ "color-convert": "^2.0.1" - } - }, -- "cliui": { -- "version": "3.2.0", -- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", -- "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", -+ "chalk": { -+ "version": "4.1.2", -+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", -+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { -- "string-width": "^1.0.1", -- "strip-ansi": "^3.0.1", -- "wrap-ansi": "^2.0.0" -+ "ansi-styles": "^4.1.0", -+ "supports-color": "^7.1.0" - } - }, -- "debug": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", -- "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", -+ "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, - "requires": { -- "ms": "0.7.1" -+ "color-name": "~1.1.4" - } - }, -- "eventemitter3": { -- "version": "1.2.0", -- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", -- "integrity": "sha512-DOFqA1MF46fmZl2xtzXR3MPCRsXqgoFqdXcrCVYM3JNnfUeHTm/fh/v/iU7gBFpwkuBmoJPAm5GuhdDfSEJMJA==", -+ "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 - }, -- "fill-range": { -+ "has-flag": { - "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", -- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", -- "dev": true, -- "requires": { -- "extend-shallow": "^2.0.1", -- "is-number": "^3.0.0", -- "repeat-string": "^1.6.1", -- "to-regex-range": "^2.1.0" -- }, -- "dependencies": { -- "extend-shallow": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -- "dev": true, -- "requires": { -- "is-extendable": "^0.1.0" -- } -- } -- } -- }, -- "find-up": { -- "version": "1.1.2", -- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", -- "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", -- "dev": true, -- "requires": { -- "path-exists": "^2.0.0", -- "pinkie-promise": "^2.0.0" -- } -- }, -- "fsevents": { -- "version": "1.2.13", -- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", -- "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", -- "dev": true, -- "optional": true, -- "requires": { -- "bindings": "^1.5.0", -- "nan": "^2.12.1" -- } -- }, -- "get-caller-file": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", -- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", -- "dev": true -- }, -- "glob-parent": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", -- "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", -- "dev": true, -- "requires": { -- "is-glob": "^2.0.0" -- } -- }, -- "http-errors": { -- "version": "1.5.1", -- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", -- "integrity": "sha512-ftkc2U5ADKHv8Ny1QJaDn8xnE18G+fP5QYupx9c3Xk6L5Vgo3qK8Bgbpb4a+jRtaF/YQKjIuXA5J0tde4Tojng==", -- "dev": true, -- "requires": { -- "inherits": "2.0.3", -- "setprototypeof": "1.0.2", -- "statuses": ">= 1.3.1 < 2" -- } -- }, -- "http-proxy": { -- "version": "1.15.2", -- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", -- "integrity": "sha512-E6A/0XNoSfQuCUtxoHuj788eRfZPIp3eCXpQHe2uV+Ebbkq6dvcWSbb9lrC9NdMBedAZBNMB5JRRA3kiiyRRxg==", -- "dev": true, -- "requires": { -- "eventemitter3": "1.x.x", -- "requires-port": "1.x.x" -- } -- }, -- "inherits": { -- "version": "2.0.3", -- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", -- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", -- "dev": true -- }, -- "invert-kv": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", -- "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", -+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", -+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, -- "is-accessor-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", -- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- } -- }, -- "is-binary-path": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", -- "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", -+ "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, - "requires": { -- "binary-extensions": "^1.0.0" -+ "has-flag": "^4.0.0" - } -- }, -- "is-data-descriptor": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", -- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", -+ } -+ } -+ }, -+ "browser-sync-client": { -+ "version": "2.29.3", -+ "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz", -+ "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==", -+ "dev": true, -+ "requires": { -+ "etag": "1.8.1", -+ "fresh": "0.5.2", -+ "mitt": "^1.1.3" -+ } -+ }, -+ "browser-sync-ui": { -+ "version": "2.29.3", -+ "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz", -+ "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==", -+ "dev": true, -+ "requires": { -+ "async-each-series": "0.1.1", -+ "chalk": "4.1.2", -+ "connect-history-api-fallback": "^1", -+ "immutable": "^3", -+ "server-destroy": "1.0.1", -+ "socket.io-client": "^4.4.1", -+ "stream-throttle": "^0.1.3" -+ }, -+ "dependencies": { -+ "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, - "requires": { -- "kind-of": "^3.0.2" -+ "color-convert": "^2.0.1" - } - }, -- "is-extglob": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", -- "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", -- "dev": true -- }, -- "is-fullwidth-code-point": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", -- "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", -+ "chalk": { -+ "version": "4.1.2", -+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", -+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { -- "number-is-nan": "^1.0.0" -+ "ansi-styles": "^4.1.0", -+ "supports-color": "^7.1.0" - } - }, -- "is-glob": { -+ "color-convert": { - "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", -- "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", -- "dev": true, -- "requires": { -- "is-extglob": "^1.0.0" -- } -- }, -- "is-number": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", -- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- } -- }, -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- }, -- "lcid": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", -- "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", -- "dev": true, -- "requires": { -- "invert-kv": "^1.0.0" -- } -- }, -- "micromatch": { -- "version": "2.3.11", -- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", -- "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", -- "dev": true, -- "requires": { -- "arr-diff": "^2.0.0", -- "array-unique": "^0.2.1", -- "braces": "^1.8.2", -- "expand-brackets": "^0.1.4", -- "extglob": "^0.3.1", -- "filename-regex": "^2.0.0", -- "is-extglob": "^1.0.0", -- "is-glob": "^2.0.1", -- "kind-of": "^3.0.2", -- "normalize-path": "^2.0.1", -- "object.omit": "^2.0.0", -- "parse-glob": "^3.0.4", -- "regex-cache": "^0.4.2" -- } -- }, -- "ms": { -- "version": "0.7.1", -- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", -- "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", -- "dev": true -- }, -- "normalize-path": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", -- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", -- "dev": true, -- "requires": { -- "remove-trailing-separator": "^1.0.1" -- } -- }, -- "os-locale": { -- "version": "1.4.0", -- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", -- "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", -- "dev": true, -- "requires": { -- "lcid": "^1.0.0" -- } -- }, -- "path-exists": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", -- "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", -- "dev": true, -- "requires": { -- "pinkie-promise": "^2.0.0" -- } -- }, -- "path-type": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", -- "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", -- "dev": true, -- "requires": { -- "graceful-fs": "^4.1.2", -- "pify": "^2.0.0", -- "pinkie-promise": "^2.0.0" -- } -- }, -- "read-pkg": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", -- "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", -- "dev": true, -- "requires": { -- "load-json-file": "^1.0.0", -- "normalize-package-data": "^2.3.2", -- "path-type": "^1.0.0" -- } -- }, -- "read-pkg-up": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", -- "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", -- "dev": true, -- "requires": { -- "find-up": "^1.0.0", -- "read-pkg": "^1.0.0" -- } -- }, -- "readable-stream": { -- "version": "2.3.7", -- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", -- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", -- "dev": true, -- "requires": { -- "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" -- } -- }, -- "readdirp": { -- "version": "2.2.1", -- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", -- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", -- "dev": true, -- "requires": { -- "graceful-fs": "^4.1.11", -- "micromatch": "^3.1.10", -- "readable-stream": "^2.0.2" -- }, -- "dependencies": { -- "arr-diff": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", -- "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", -- "dev": true -- }, -- "array-unique": { -- "version": "0.3.2", -- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", -- "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", -- "dev": true -- }, -- "braces": { -- "version": "2.3.2", -- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", -- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", -- "dev": true, -- "requires": { -- "arr-flatten": "^1.1.0", -- "array-unique": "^0.3.2", -- "extend-shallow": "^2.0.1", -- "fill-range": "^4.0.0", -- "isobject": "^3.0.1", -- "repeat-element": "^1.1.2", -- "snapdragon": "^0.8.1", -- "snapdragon-node": "^2.0.1", -- "split-string": "^3.0.2", -- "to-regex": "^3.0.1" -- }, -- "dependencies": { -- "extend-shallow": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -- "dev": true, -- "requires": { -- "is-extendable": "^0.1.0" -- } -- } -- } -- }, -- "debug": { -- "version": "2.6.9", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", -- "dev": true, -- "requires": { -- "ms": "2.0.0" -- } -- }, -- "expand-brackets": { -- "version": "2.1.4", -- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", -- "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", -- "dev": true, -- "requires": { -- "debug": "^2.3.3", -- "define-property": "^0.2.5", -- "extend-shallow": "^2.0.1", -- "posix-character-classes": "^0.1.0", -- "regex-not": "^1.0.0", -- "snapdragon": "^0.8.1", -- "to-regex": "^3.0.1" -- }, -- "dependencies": { -- "define-property": { -- "version": "0.2.5", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", -- "dev": true, -- "requires": { -- "is-descriptor": "^0.1.0" -- } -- }, -- "extend-shallow": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -- "dev": true, -- "requires": { -- "is-extendable": "^0.1.0" -- } -- }, -- "is-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", -- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", -- "dev": true, -- "requires": { -- "is-accessor-descriptor": "^0.1.6", -- "is-data-descriptor": "^0.1.4", -- "kind-of": "^5.0.0" -- } -- }, -- "kind-of": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", -- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", -- "dev": true -- } -- } -- }, -- "extglob": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", -- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", -- "dev": true, -- "requires": { -- "array-unique": "^0.3.2", -- "define-property": "^1.0.0", -- "expand-brackets": "^2.1.4", -- "extend-shallow": "^2.0.1", -- "fragment-cache": "^0.2.1", -- "regex-not": "^1.0.0", -- "snapdragon": "^0.8.1", -- "to-regex": "^3.0.1" -- }, -- "dependencies": { -- "define-property": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", -- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", -- "dev": true, -- "requires": { -- "is-descriptor": "^1.0.0" -- } -- }, -- "extend-shallow": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -- "dev": true, -- "requires": { -- "is-extendable": "^0.1.0" -- } -- } -- } -- }, -- "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 -- }, -- "micromatch": { -- "version": "3.1.10", -- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", -- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", -- "dev": true, -- "requires": { -- "arr-diff": "^4.0.0", -- "array-unique": "^0.3.2", -- "braces": "^2.3.1", -- "define-property": "^2.0.2", -- "extend-shallow": "^3.0.2", -- "extglob": "^2.0.4", -- "fragment-cache": "^0.2.1", -- "kind-of": "^6.0.2", -- "nanomatch": "^1.2.9", -- "object.pick": "^1.3.0", -- "regex-not": "^1.0.0", -- "snapdragon": "^0.8.1", -- "to-regex": "^3.0.2" -- } -- }, -- "ms": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", -- "dev": true -- } -- } -- }, -- "serve-index": { -- "version": "1.8.0", -- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.8.0.tgz", -- "integrity": "sha512-XnbKO4axHnVgU7wuoP68XsJFC4sqtCENQ6z+9HwdL/vMpgykFFQD9zEkW+QzcxeNY7m2HzkDM4XbRa0UWeSW0w==", -+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", -+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { -- "accepts": "~1.3.3", -- "batch": "0.5.3", -- "debug": "~2.2.0", -- "escape-html": "~1.0.3", -- "http-errors": "~1.5.0", -- "mime-types": "~2.1.11", -- "parseurl": "~1.3.1" -+ "color-name": "~1.1.4" - } - }, -- "setprototypeof": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", -- "integrity": "sha512-mNRSo7UFE4c4tjxlZ3KxO5r+3oQUD1M/KXbp/XTwTwybL4VR9T8Ltmv5DvZX8iRz6C3hQmQftXEV0EmTKRV6mg==", -+ "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 - }, -- "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, -- "requires": { -- "safe-buffer": "~5.1.0" -- } -- }, -- "string-width": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", -- "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", -- "dev": true, -- "requires": { -- "code-point-at": "^1.0.0", -- "is-fullwidth-code-point": "^1.0.0", -- "strip-ansi": "^3.0.0" -- } -- }, -- "strip-ansi": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", -- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", -- "dev": true, -- "requires": { -- "ansi-regex": "^2.0.0" -- } -- }, -- "to-regex-range": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", -- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", -- "dev": true, -- "requires": { -- "is-number": "^3.0.0", -- "repeat-string": "^1.6.1" -- } -- }, -- "wrap-ansi": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", -- "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", -- "dev": true, -- "requires": { -- "string-width": "^1.0.1", -- "strip-ansi": "^3.0.1" -- } -- }, -- "y18n": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", -- "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", -+ "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 - }, -- "yargs": { -- "version": "6.4.0", -- "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", -- "integrity": "sha512-A15csWvmIXbonra+RWt2beKGIt1HQTyd/cs2Wpv2y0uYZvUH7EU5vrzgWZN8j3bPzeQqg4JMtGXmYTWKHIOl9A==", -- "dev": true, -- "requires": { -- "camelcase": "^3.0.0", -- "cliui": "^3.2.0", -- "decamelize": "^1.1.1", -- "get-caller-file": "^1.0.1", -- "os-locale": "^1.4.0", -- "read-pkg-up": "^1.0.1", -- "require-directory": "^2.1.1", -- "require-main-filename": "^1.0.1", -- "set-blocking": "^2.0.0", -- "string-width": "^1.0.2", -- "which-module": "^1.0.0", -- "window-size": "^0.2.0", -- "y18n": "^3.2.1", -- "yargs-parser": "^4.1.0" -- } -- }, -- "yargs-parser": { -- "version": "4.2.1", -- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", -- "integrity": "sha512-+QQWqC2xeL0N5/TE+TY6OGEqyNRM+g2/r712PDNYgiCdXYCApXf1vzfmDSLBxfGRwV+moTq/V8FnMI24JCm2Yg==", -+ "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, - "requires": { -- "camelcase": "^3.0.0" -+ "has-flag": "^4.0.0" - } - } - } - }, -- "browser-sync-ui": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-1.0.1.tgz", -- "integrity": "sha512-RIxmwVVcUFhRd1zxp7m2FfLnXHf59x4Gtj8HFwTA//3VgYI3AKkaQAuDL8KDJnE59XqCshxZa13JYuIWtZlKQg==", -- "dev": true, -- "requires": { -- "async-each-series": "0.1.1", -- "connect-history-api-fallback": "^1.1.0", -- "immutable": "^3.7.6", -- "server-destroy": "1.0.1", -- "socket.io-client": "2.0.4", -- "stream-throttle": "^0.1.3" -- } -- }, - "browser-sync-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/browser-sync-webpack-plugin/-/browser-sync-webpack-plugin-2.3.0.tgz", -@@ -31234,15 +31540,14 @@ - } - }, - "browserslist": { -- "version": "4.20.4", -- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", -- "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", -+ "version": "4.22.1", -+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", -+ "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "requires": { -- "caniuse-lite": "^1.0.30001349", -- "electron-to-chromium": "^1.4.147", -- "escalade": "^3.1.1", -- "node-releases": "^2.0.5", -- "picocolors": "^1.0.0" -+ "caniuse-lite": "^1.0.30001541", -+ "electron-to-chromium": "^1.4.535", -+ "node-releases": "^2.0.13", -+ "update-browserslist-db": "^1.0.13" - } - }, - "bs-logger": { -@@ -31270,14 +31575,21 @@ - } - }, - "buffer": { -- "version": "4.9.2", -- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", -- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", -+ "version": "6.0.3", -+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", -+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { -- "base64-js": "^1.0.2", -- "ieee754": "^1.1.4", -- "isarray": "^1.0.0" -+ "base64-js": "^1.3.1", -+ "ieee754": "^1.2.1" -+ }, -+ "dependencies": { -+ "ieee754": { -+ "version": "1.2.1", -+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", -+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", -+ "dev": true -+ } - } - }, - "buffer-from": { -@@ -31286,18 +31598,21 @@ - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, -- "buffer-indexof": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", -- "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", -- "dev": true -- }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, -+ "bundle-name": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", -+ "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", -+ "dev": true, -+ "requires": { -+ "run-applescript": "^5.0.0" -+ } -+ }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", -@@ -31328,23 +31643,17 @@ - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" -- } -- }, -- "cache-base": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", -- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", -- "dev": true, -- "requires": { -- "collection-visit": "^1.0.0", -- "component-emitter": "^1.2.1", -- "get-value": "^2.0.6", -- "has-value": "^1.0.0", -- "isobject": "^3.0.1", -- "set-value": "^2.0.0", -- "to-object-path": "^0.3.0", -- "union-value": "^1.0.0", -- "unset-value": "^1.0.0" -+ }, -+ "dependencies": { -+ "rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "requires": { -+ "glob": "^7.1.3" -+ } -+ } - } - }, - "call-bind": { -@@ -31357,12 +31666,6 @@ - "get-intrinsic": "^1.0.2" - } - }, -- "callsite": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", -- "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", -- "dev": true -- }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", -@@ -31375,15 +31678,10 @@ - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, -- "can-use-dom": { -- "version": "0.1.0", -- "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", -- "integrity": "sha512-ceOhN1DL7Y4O6M0j9ICgmTYziV89WMd96SvSl0REd8PMgrY0B/WBOPoed5S1KUmJqXgUXh8gzSe6E3ae27upsQ==" -- }, - "caniuse-lite": { -- "version": "1.0.30001358", -- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001358.tgz", -- "integrity": "sha512-hvp8PSRymk85R20bsDra7ZTCpSVGN/PAz9pSAjPSjKC+rNmnUk5vCRgJwiTT/O4feQ/yu/drvZYpKxxhbFuChw==" -+ "version": "1.0.30001559", -+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz", -+ "integrity": "sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==" - }, - "caseless": { - "version": "0.12.0", -@@ -31455,104 +31753,17 @@ - "dev": true - }, - "ci-info": { -- "version": "3.3.2", -- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", -- "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", -+ "version": "3.9.0", -+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", -+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true - }, -- "circular-dependency-plugin": { -- "version": "5.2.2", -- "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", -- "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", -- "dev": true, -- "requires": {} -- }, - "cjs-module-lexer": { -- "version": "1.2.2", -- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", -- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", -+ "version": "1.2.3", -+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", -+ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, -- "class-utils": { -- "version": "0.3.6", -- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", -- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", -- "dev": true, -- "requires": { -- "arr-union": "^3.1.0", -- "define-property": "^0.2.5", -- "isobject": "^3.0.0", -- "static-extend": "^0.1.1" -- }, -- "dependencies": { -- "define-property": { -- "version": "0.2.5", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", -- "dev": true, -- "requires": { -- "is-descriptor": "^0.1.0" -- } -- }, -- "is-accessor-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", -- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- }, -- "dependencies": { -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -- } -- }, -- "is-data-descriptor": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", -- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- }, -- "dependencies": { -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -- } -- }, -- "is-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", -- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", -- "dev": true, -- "requires": { -- "is-accessor-descriptor": "^0.1.6", -- "is-data-descriptor": "^0.1.4", -- "kind-of": "^5.0.0" -- } -- }, -- "kind-of": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", -- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", -- "dev": true -- } -- } -- }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", -@@ -31617,9 +31828,9 @@ - } - }, - "strip-ansi": { -- "version": "7.0.1", -- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", -- "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", -+ "version": "7.1.0", -+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", -+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" -@@ -31634,12 +31845,12 @@ - "dev": true - }, - "cliui": { -- "version": "7.0.4", -- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", -- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", -+ "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==", - "requires": { - "string-width": "^4.2.0", -- "strip-ansi": "^6.0.0", -+ "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, -@@ -31724,28 +31935,12 @@ - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, -- "code-point-at": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", -- "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", -- "dev": true -- }, - "collect-v8-coverage": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", -- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", -+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, -- "collection-visit": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", -- "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", -- "dev": true, -- "requires": { -- "map-visit": "^1.0.0", -- "object-visit": "^1.0.0" -- } -- }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", -@@ -31786,9 +31981,9 @@ - "dev": true - }, - "colorette": { -- "version": "2.0.19", -- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", -- "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", -+ "version": "2.0.20", -+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", -+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "colors": { -@@ -31817,9 +32012,9 @@ - } - }, - "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==", -+ "version": "11.0.0", -+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", -+ "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", - "dev": true - }, - "common-ancestor-path": { -@@ -31828,30 +32023,18 @@ - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, -+ "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 -+ }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, -- "component-bind": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", -- "integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==", -- "dev": true -- }, -- "component-emitter": { -- "version": "1.2.1", -- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", -- "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==", -- "dev": true -- }, -- "component-inherit": { -- "version": "0.0.3", -- "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", -- "integrity": "sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==", -- "dev": true -- }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", -@@ -31902,7 +32085,8 @@ - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", -- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" -+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", -+ "dev": true - }, - "concat-stream": { - "version": "1.6.2", -@@ -31943,19 +32127,20 @@ - } - }, - "concurrently": { -- "version": "7.1.0", -- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.1.0.tgz", -- "integrity": "sha512-Bz0tMlYKZRUDqJlNiF/OImojMB9ruKUz6GCfmhFnSapXgPe+3xzY4byqoKG9tUZ7L2PGEUjfLPOLfIX3labnmw==", -+ "version": "8.2.1", -+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.1.tgz", -+ "integrity": "sha512-nVraf3aXOpIcNud5pB9M82p1tynmZkrSGQ1p6X/VY8cJ+2LMVqAgXsJxYYefACSHbTYlm92O1xuhdGTjwoEvbQ==", - "dev": true, - "requires": { -- "chalk": "^4.1.0", -- "date-fns": "^2.16.1", -+ "chalk": "^4.1.2", -+ "date-fns": "^2.30.0", - "lodash": "^4.17.21", -- "rxjs": "^6.6.3", -- "spawn-command": "^0.0.2-1", -- "supports-color": "^8.1.0", -+ "rxjs": "^7.8.1", -+ "shell-quote": "^1.8.1", -+ "spawn-command": "0.0.2", -+ "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", -- "yargs": "^16.2.0" -+ "yargs": "^17.7.2" - }, - "dependencies": { - "ansi-styles": { -@@ -32009,15 +32194,6 @@ - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, -- "rxjs": { -- "version": "6.6.7", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", -- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", -- "dev": true, -- "requires": { -- "tslib": "^1.9.0" -- } -- }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", -@@ -32026,27 +32202,6 @@ - "requires": { - "has-flag": "^4.0.0" - } -- }, -- "tslib": { -- "version": "1.14.1", -- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", -- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", -- "dev": true -- }, -- "yargs": { -- "version": "16.2.0", -- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", -- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", -- "dev": true, -- "requires": { -- "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" -- } - } - } - }, -@@ -32069,36 +32224,30 @@ - } - }, - "connect": { -- "version": "3.5.0", -- "resolved": "https://registry.npmjs.org/connect/-/connect-3.5.0.tgz", -- "integrity": "sha512-UWZ2TvKuiKryxJJVRgINgqkQjKjzIu92glQP+jSFrS0LL5De9oOKnFSbZzsGenZ65EnpgWQtFBQ1Bg6blLpWVA==", -+ "version": "3.6.6", -+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", -+ "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==", - "dev": true, - "requires": { -- "debug": "~2.2.0", -- "finalhandler": "0.5.0", -- "parseurl": "~1.3.1", -- "utils-merge": "1.0.0" -+ "debug": "2.6.9", -+ "finalhandler": "1.1.0", -+ "parseurl": "~1.3.2", -+ "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", -- "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", -+ "version": "2.6.9", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { -- "ms": "0.7.1" -+ "ms": "2.0.0" - } - }, - "ms": { -- "version": "0.7.1", -- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", -- "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", -- "dev": true -- }, -- "utils-merge": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", -- "integrity": "sha512-HwU9SLQEtyo+0uoKXd1nkLqigUWLB+QuNQR4OcmB73eWqksM5ovuqcycks2x043W8XVb75rG1HQ0h93TMXkzQQ==", -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } -@@ -32133,9 +32282,9 @@ - } - }, - "content-type": { -- "version": "1.0.4", -- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", -- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", -+ "version": "1.0.5", -+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", -+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true - }, - "convert-source-map": { -@@ -32147,9 +32296,9 @@ - } - }, - "cookie": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", -- "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", -+ "version": "0.4.2", -+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", -+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "cookie-signature": { -@@ -32167,32 +32316,20 @@ - "is-what": "^3.14.1" - } - }, -- "copy-descriptor": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", -- "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", -- "dev": true -- }, - "copy-webpack-plugin": { -- "version": "10.2.4", -- "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", -- "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", -+ "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, - "requires": { -- "fast-glob": "^3.2.7", -+ "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", -- "globby": "^12.0.2", -+ "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { -- "array-union": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", -- "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", -- "dev": true -- }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", -@@ -32203,31 +32340,18 @@ - } - }, - "globby": { -- "version": "12.2.0", -- "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", -- "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", -+ "version": "13.2.2", -+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", -+ "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "requires": { -- "array-union": "^3.0.1", - "dir-glob": "^3.0.1", -- "fast-glob": "^3.2.7", -- "ignore": "^5.1.9", -+ "fast-glob": "^3.3.0", -+ "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, -- "schema-utils": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", -- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", -- "dev": true, -- "requires": { -- "@types/json-schema": "^7.0.9", -- "ajv": "^8.8.0", -- "ajv-formats": "^2.1.1", -- "ajv-keywords": "^5.0.0" -- } -- }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", -@@ -32236,27 +32360,13 @@ - } - } - }, -- "core-js": { -- "version": "3.20.3", -- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.3.tgz", -- "integrity": "sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag==" -- }, - "core-js-compat": { -- "version": "3.23.2", -- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.2.tgz", -- "integrity": "sha512-lrgZvxFwbQp9v7E8mX0rJ+JX7Bvh4eGULZXA1IAyjlsnWvCdw6TF8Tg6xtaSUSJMrSrMaLdpmk+V54LM1dvfOA==", -+ "version": "3.33.2", -+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz", -+ "integrity": "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==", - "dev": true, - "requires": { -- "browserslist": "^4.20.4", -- "semver": "7.0.0" -- }, -- "dependencies": { -- "semver": { -- "version": "7.0.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", -- "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", -- "dev": true -- } -+ "browserslist": "^4.22.1" - } - }, - "core-util-is": { -@@ -32265,17 +32375,109 @@ - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, -+ "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, -+ "requires": { -+ "object-assign": "^4", -+ "vary": "^1" -+ } -+ }, - "cosmiconfig": { -- "version": "7.0.1", -- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", -- "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", -+ "version": "8.3.6", -+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", -+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "requires": { -- "@types/parse-json": "^4.0.0", -- "import-fresh": "^3.2.1", -- "parse-json": "^5.0.0", -- "path-type": "^4.0.0", -- "yaml": "^1.10.0" -+ "import-fresh": "^3.3.0", -+ "js-yaml": "^4.1.0", -+ "parse-json": "^5.2.0", -+ "path-type": "^4.0.0" -+ }, -+ "dependencies": { -+ "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 -+ }, -+ "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, -+ "requires": { -+ "argparse": "^2.0.1" -+ } -+ } -+ } -+ }, -+ "create-jest": { -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", -+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", -+ "dev": true, -+ "requires": { -+ "@jest/types": "^29.6.3", -+ "chalk": "^4.0.0", -+ "exit": "^0.1.2", -+ "graceful-fs": "^4.2.9", -+ "jest-config": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "prompts": "^2.0.1" -+ }, -+ "dependencies": { -+ "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, -+ "requires": { -+ "color-convert": "^2.0.1" -+ } -+ }, -+ "chalk": { -+ "version": "4.1.2", -+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", -+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", -+ "dev": true, -+ "requires": { -+ "ansi-styles": "^4.1.0", -+ "supports-color": "^7.1.0" -+ } -+ }, -+ "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, -+ "requires": { -+ "color-name": "~1.1.4" -+ } -+ }, -+ "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 -+ }, -+ "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 -+ }, -+ "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, -+ "requires": { -+ "has-flag": "^4.0.0" -+ } -+ } - } - }, - "create-require": { -@@ -32285,16 +32487,17 @@ - "dev": true - }, - "critters": { -- "version": "0.0.16", -- "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", -- "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", -+ "version": "0.0.20", -+ "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.20.tgz", -+ "integrity": "sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", -- "css-select": "^4.2.0", -- "parse5": "^6.0.1", -- "parse5-htmlparser2-tree-adapter": "^6.0.1", -- "postcss": "^8.3.7", -+ "css-select": "^5.1.0", -+ "dom-serializer": "^2.0.0", -+ "domhandler": "^5.0.2", -+ "htmlparser2": "^8.0.2", -+ "postcss": "^8.4.23", - "pretty-bytes": "^5.3.0" - }, - "dependencies": { -@@ -32360,76 +32563,43 @@ - "which": "^2.0.1" - } - }, -- "css": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", -- "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", -- "dev": true, -- "requires": { -- "inherits": "^2.0.4", -- "source-map": "^0.6.1", -- "source-map-resolve": "^0.6.0" -- }, -- "dependencies": { -- "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 -- } -- } -- }, -- "css-blank-pseudo": { -- "version": "3.0.3", -- "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", -- "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", -- "dev": true, -- "requires": { -- "postcss-selector-parser": "^6.0.9" -- } -- }, -- "css-has-pseudo": { -- "version": "3.0.4", -- "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", -- "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", -- "dev": true, -- "requires": { -- "postcss-selector-parser": "^6.0.9" -- } -- }, - "css-loader": { -- "version": "6.5.1", -- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", -- "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", -+ "version": "6.8.1", -+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", -+ "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", -- "postcss": "^8.2.15", -+ "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", -- "postcss-modules-local-by-default": "^4.0.0", -+ "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", -- "postcss-value-parser": "^4.1.0", -- "semver": "^7.3.5" -+ "postcss-value-parser": "^4.2.0", -+ "semver": "^7.3.8" -+ }, -+ "dependencies": { -+ "semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^6.0.0" -+ } -+ } - } - }, -- "css-prefers-color-scheme": { -- "version": "6.0.3", -- "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", -- "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", -- "dev": true, -- "requires": {} -- }, - "css-select": { -- "version": "4.3.0", -- "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", -- "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", -+ "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, - "requires": { - "boolbase": "^1.0.0", -- "css-what": "^6.0.1", -- "domhandler": "^4.3.1", -- "domutils": "^2.8.0", -+ "css-what": "^6.1.0", -+ "domhandler": "^5.0.2", -+ "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, -@@ -32439,12 +32609,6 @@ - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, -- "cssdb": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-5.1.0.tgz", -- "integrity": "sha512-/vqjXhv1x9eGkE/zO6o8ZOI7dgdZbLVLUGyVRbPgk6YipXbW87YzUCcO+Jrmi5bwJlAH6oD+MNeZyRgXea1GZw==", -- "dev": true -- }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", -@@ -32501,10 +32665,13 @@ - } - }, - "date-fns": { -- "version": "2.28.0", -- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz", -- "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==", -- "dev": true -+ "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, -+ "requires": { -+ "@babel/runtime": "^7.21.0" -+ } - }, - "dateformat": { - "version": "4.6.3", -@@ -32513,9 +32680,9 @@ - "dev": true - }, - "dayjs": { -- "version": "1.11.0", -- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.0.tgz", -- "integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==" -+ "version": "1.11.10", -+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", -+ "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" - }, - "debounce-fn": { - "version": "4.0.0", -@@ -32527,9 +32694,9 @@ - } - }, - "debug": { -- "version": "4.3.3", -- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", -- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", -+ "version": "4.3.4", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", -+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } -@@ -32540,43 +32707,18 @@ - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", - "dev": true - }, -- "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 -- }, - "decimal.js": { -- "version": "10.3.1", -- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", -- "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", -- "dev": true -- }, -- "decode-uri-component": { -- "version": "0.2.0", -- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", -- "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", -+ "version": "10.4.3", -+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", -+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "dedent": { -- "version": "0.7.0", -- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", -- "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", -- "dev": true -- }, -- "deep-equal": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", -- "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", -+ "version": "1.5.1", -+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", -+ "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, -- "requires": { -- "is-arguments": "^1.0.4", -- "is-date-object": "^1.0.1", -- "is-regex": "^1.0.4", -- "object-is": "^1.0.1", -- "object-keys": "^1.1.1", -- "regexp.prototype.flags": "^1.2.0" -- } -+ "requires": {} - }, - "deep-extend": { - "version": "0.6.0", -@@ -32591,11 +32733,100 @@ - "dev": true - }, - "deepmerge": { -- "version": "4.2.2", -- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", -- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", -+ "version": "4.3.1", -+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", -+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, -+ "default-browser": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", -+ "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", -+ "dev": true, -+ "requires": { -+ "bundle-name": "^3.0.0", -+ "default-browser-id": "^3.0.0", -+ "execa": "^7.1.1", -+ "titleize": "^3.0.0" -+ }, -+ "dependencies": { -+ "execa": { -+ "version": "7.2.0", -+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", -+ "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", -+ "dev": true, -+ "requires": { -+ "cross-spawn": "^7.0.3", -+ "get-stream": "^6.0.1", -+ "human-signals": "^4.3.0", -+ "is-stream": "^3.0.0", -+ "merge-stream": "^2.0.0", -+ "npm-run-path": "^5.1.0", -+ "onetime": "^6.0.0", -+ "signal-exit": "^3.0.7", -+ "strip-final-newline": "^3.0.0" -+ } -+ }, -+ "human-signals": { -+ "version": "4.3.1", -+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", -+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", -+ "dev": true -+ }, -+ "is-stream": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", -+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", -+ "dev": true -+ }, -+ "mimic-fn": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", -+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", -+ "dev": true -+ }, -+ "npm-run-path": { -+ "version": "5.1.0", -+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", -+ "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", -+ "dev": true, -+ "requires": { -+ "path-key": "^4.0.0" -+ } -+ }, -+ "onetime": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", -+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", -+ "dev": true, -+ "requires": { -+ "mimic-fn": "^4.0.0" -+ } -+ }, -+ "path-key": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", -+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", -+ "dev": true -+ }, -+ "strip-final-newline": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", -+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", -+ "dev": true -+ } -+ } -+ }, -+ "default-browser-id": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", -+ "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", -+ "dev": true, -+ "requires": { -+ "bplist-parser": "^0.2.0", -+ "untildify": "^4.0.0" -+ } -+ }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", -@@ -32620,42 +32851,6 @@ - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, -- "define-properties": { -- "version": "1.1.4", -- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", -- "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", -- "dev": true, -- "requires": { -- "has-property-descriptors": "^1.0.0", -- "object-keys": "^1.1.1" -- } -- }, -- "define-property": { -- "version": "2.0.2", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", -- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", -- "dev": true, -- "requires": { -- "is-descriptor": "^1.0.2", -- "isobject": "^3.0.1" -- } -- }, -- "del": { -- "version": "6.1.1", -- "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", -- "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", -- "dev": true, -- "requires": { -- "globby": "^11.0.1", -- "graceful-fs": "^4.2.4", -- "is-glob": "^4.0.1", -- "is-path-cwd": "^2.2.0", -- "is-path-inside": "^3.0.2", -- "p-map": "^4.0.0", -- "rimraf": "^3.0.2", -- "slash": "^3.0.0" -- } -- }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", -@@ -32674,11 +32869,6 @@ - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, -- "dependency-graph": { -- "version": "0.11.0", -- "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", -- "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" -- }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", -@@ -32692,9 +32882,9 @@ - "dev": true - }, - "detect-indent": { -- "version": "6.1.0", -- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", -- "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", -+ "version": "7.0.1", -+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", -+ "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", - "dev": true - }, - "detect-newline": { -@@ -32738,9 +32928,9 @@ - "dev": true - }, - "diff-sequences": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", -- "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", -+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true - }, - "dir-glob": { -@@ -32759,22 +32949,12 @@ - "dev": true - }, - "dns-packet": { -- "version": "1.3.4", -- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", -- "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", -- "dev": true, -- "requires": { -- "ip": "^1.1.0", -- "safe-buffer": "^5.0.1" -- } -- }, -- "dns-txt": { -- "version": "2.0.2", -- "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", -- "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", -+ "version": "5.6.1", -+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", -+ "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dev": true, - "requires": { -- "buffer-indexof": "^1.0.0" -+ "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { -@@ -32787,14 +32967,14 @@ - } - }, - "dom-serializer": { -- "version": "1.4.1", -- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", -- "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", -+ "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, - "requires": { -- "domelementtype": "^2.0.1", -- "domhandler": "^4.2.0", -- "entities": "^2.0.0" -+ "domelementtype": "^2.3.0", -+ "domhandler": "^5.0.2", -+ "entities": "^4.2.0" - } - }, - "domelementtype": { -@@ -32821,28 +33001,23 @@ - } - }, - "domhandler": { -- "version": "4.3.1", -- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", -- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", -+ "version": "5.0.3", -+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", -+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "requires": { -- "domelementtype": "^2.2.0" -+ "domelementtype": "^2.3.0" - } - }, -- "dompurify": { -- "version": "2.3.8", -- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.8.tgz", -- "integrity": "sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw==" -- }, - "domutils": { -- "version": "2.8.0", -- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", -- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", -+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "requires": { -- "dom-serializer": "^1.0.1", -- "domelementtype": "^2.2.0", -- "domhandler": "^4.2.0" -+ "dom-serializer": "^2.0.0", -+ "domelementtype": "^2.3.0", -+ "domhandler": "^5.0.3" - } - }, - "dot-prop": { -@@ -32873,29 +33048,72 @@ - "dev": true - }, - "easy-extender": { -- "version": "2.3.2", -- "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.2.tgz", -- "integrity": "sha512-JS6aNiMrVY6g6S2xrXzynGqa403OicnnC2K2M3WWUBWkJme/Y3XCONjqBw93AP2XpqeRtf6hoOPRzUZzYwqlEQ==", -+ "version": "2.3.4", -+ "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", -+ "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", - "dev": true, - "requires": { -- "lodash": "^3.10.1" -- }, -- "dependencies": { -- "lodash": { -- "version": "3.10.1", -- "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", -- "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==", -- "dev": true -- } -+ "lodash": "^4.17.10" - } - }, - "eazy-logger": { -- "version": "3.0.2", -- "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", -- "integrity": "sha512-bBW7dFZ3k2TbIEBcd4CsyxhIbWRnjA7PEnBOuouOxvzr2Z5zY2hgiXDh+q/pKy6soeC4tdUCwA1dbpDry3+DqA==", -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", -+ "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", - "dev": true, - "requires": { -- "tfunk": "^3.0.1" -+ "chalk": "4.1.2" -+ }, -+ "dependencies": { -+ "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, -+ "requires": { -+ "color-convert": "^2.0.1" -+ } -+ }, -+ "chalk": { -+ "version": "4.1.2", -+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", -+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", -+ "dev": true, -+ "requires": { -+ "ansi-styles": "^4.1.0", -+ "supports-color": "^7.1.0" -+ } -+ }, -+ "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, -+ "requires": { -+ "color-name": "~1.1.4" -+ } -+ }, -+ "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 -+ }, -+ "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 -+ }, -+ "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, -+ "requires": { -+ "has-flag": "^4.0.0" -+ } -+ } - } - }, - "ecc-jsbn": { -@@ -32924,14 +33142,14 @@ - } - }, - "electron-to-chromium": { -- "version": "1.4.163", -- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.163.tgz", -- "integrity": "sha512-c9q94pUVqIdc8hyr7jZDB4bNEoNF3QJ7y35lnddMD+mXtiv5GsL1bT/RmfW/KEOmvlNg5Oy1qioiy4tA7e864Q==" -+ "version": "1.4.572", -+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.572.tgz", -+ "integrity": "sha512-RlFobl4D3ieetbnR+2EpxdzFl9h0RAJkPK3pfiwMug2nhBin2ZCsGIAJWdpNniLz43sgXam/CgipOmvTA+rUiA==" - }, - "emittery": { -- "version": "0.8.1", -- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", -- "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", -+ "version": "0.13.1", -+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", -+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true - }, - "emoji-regex": { -@@ -32939,11 +33157,6 @@ - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, -- "emoji-toolkit": { -- "version": "6.6.0", -- "resolved": "https://registry.npmjs.org/emoji-toolkit/-/emoji-toolkit-6.6.0.tgz", -- "integrity": "sha512-pEu0kow2p1N8zCKnn/L6H0F3rWUBB3P3hVjr/O5yl1fK7N9jU4vO4G7EFapC5Y3XwZLUCY0FZbOPyTkH+4V2eQ==" -- }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", -@@ -32994,112 +33207,64 @@ - } - }, - "engine.io": { -- "version": "3.1.5", -- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", -- "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", -+ "version": "6.5.3", -+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.3.tgz", -+ "integrity": "sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==", - "dev": true, - "requires": { -+ "@types/cookie": "^0.4.1", -+ "@types/cors": "^2.8.12", -+ "@types/node": ">=10.0.0", - "accepts": "~1.3.4", -- "base64id": "1.0.0", -- "cookie": "0.3.1", -- "debug": "~3.1.0", -- "engine.io-parser": "~2.1.0", -- "uws": "~9.14.0", -- "ws": "~3.3.1" -+ "base64id": "2.0.0", -+ "cookie": "~0.4.1", -+ "cors": "~2.8.5", -+ "debug": "~4.3.1", -+ "engine.io-parser": "~5.2.1", -+ "ws": "~8.11.0" - }, - "dependencies": { -- "debug": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", -- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", -- "dev": true, -- "requires": { -- "ms": "2.0.0" -- } -- }, -- "ms": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", -- "dev": true -- }, - "ws": { -- "version": "3.3.3", -- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", -- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", -+ "version": "8.11.0", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", -+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, -- "requires": { -- "async-limiter": "~1.0.0", -- "safe-buffer": "~5.1.0", -- "ultron": "~1.1.0" -- } -+ "requires": {} - } - } - }, - "engine.io-client": { -- "version": "3.1.6", -- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", -- "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", -+ "version": "6.5.2", -+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", -+ "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", - "dev": true, - "requires": { -- "component-emitter": "1.2.1", -- "component-inherit": "0.0.3", -- "debug": "~3.1.0", -- "engine.io-parser": "~2.1.1", -- "has-cors": "1.1.0", -- "indexof": "0.0.1", -- "parseqs": "0.0.5", -- "parseuri": "0.0.5", -- "ws": "~3.3.1", -- "xmlhttprequest-ssl": "~1.5.4", -- "yeast": "0.1.2" -+ "@socket.io/component-emitter": "~3.1.0", -+ "debug": "~4.3.1", -+ "engine.io-parser": "~5.2.1", -+ "ws": "~8.11.0", -+ "xmlhttprequest-ssl": "~2.0.0" - }, - "dependencies": { -- "debug": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", -- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", -- "dev": true, -- "requires": { -- "ms": "2.0.0" -- } -- }, -- "ms": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", -- "dev": true -- }, - "ws": { -- "version": "3.3.3", -- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", -- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", -+ "version": "8.11.0", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", -+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, -- "requires": { -- "async-limiter": "~1.0.0", -- "safe-buffer": "~5.1.0", -- "ultron": "~1.1.0" -- } -+ "requires": {} - } - } - }, - "engine.io-parser": { -- "version": "2.1.3", -- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", -- "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", -- "dev": true, -- "requires": { -- "after": "0.8.2", -- "arraybuffer.slice": "~0.0.7", -- "base64-arraybuffer": "0.1.5", -- "blob": "0.0.5", -- "has-binary2": "~1.0.2" -- } -+ "version": "5.2.1", -+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", -+ "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", -+ "dev": true - }, - "enhanced-resolve": { -- "version": "5.9.3", -- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", -- "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", -+ "version": "5.15.0", -+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", -+ "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", -@@ -33107,9 +33272,9 @@ - } - }, - "entities": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", -- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", -+ "version": "4.5.0", -+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", -+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true - }, - "env-paths": { -@@ -33150,178 +33315,47 @@ - } - }, - "es-module-lexer": { -- "version": "0.9.3", -- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", -- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", -+ "version": "1.3.1", -+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", -+ "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", - "dev": true - }, - "esbuild": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.22.tgz", -- "integrity": "sha512-CjFCFGgYtbFOPrwZNJf7wsuzesx8kqwAffOlbYcFDLFuUtP8xloK1GH+Ai13Qr0RZQf9tE7LMTHJ2iVGJ1SKZA==", -- "dev": true, -- "optional": true, -- "requires": { -- "esbuild-android-arm64": "0.14.22", -- "esbuild-darwin-64": "0.14.22", -- "esbuild-darwin-arm64": "0.14.22", -- "esbuild-freebsd-64": "0.14.22", -- "esbuild-freebsd-arm64": "0.14.22", -- "esbuild-linux-32": "0.14.22", -- "esbuild-linux-64": "0.14.22", -- "esbuild-linux-arm": "0.14.22", -- "esbuild-linux-arm64": "0.14.22", -- "esbuild-linux-mips64le": "0.14.22", -- "esbuild-linux-ppc64le": "0.14.22", -- "esbuild-linux-riscv64": "0.14.22", -- "esbuild-linux-s390x": "0.14.22", -- "esbuild-netbsd-64": "0.14.22", -- "esbuild-openbsd-64": "0.14.22", -- "esbuild-sunos-64": "0.14.22", -- "esbuild-windows-32": "0.14.22", -- "esbuild-windows-64": "0.14.22", -- "esbuild-windows-arm64": "0.14.22" -- } -- }, -- "esbuild-android-arm64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.22.tgz", -- "integrity": "sha512-k1Uu4uC4UOFgrnTj2zuj75EswFSEBK+H6lT70/DdS4mTAOfs2ECv2I9ZYvr3w0WL0T4YItzJdK7fPNxcPw6YmQ==", -- "dev": true, -- "optional": true -- }, -- "esbuild-darwin-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.22.tgz", -- "integrity": "sha512-d8Ceuo6Vw6HM3fW218FB6jTY6O3r2WNcTAU0SGsBkXZ3k8SDoRLd3Nrc//EqzdgYnzDNMNtrWegK2Qsss4THhw==", -- "dev": true, -- "optional": true -- }, -- "esbuild-darwin-arm64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.22.tgz", -- "integrity": "sha512-YAt9Tj3SkIUkswuzHxkaNlT9+sg0xvzDvE75LlBo4DI++ogSgSmKNR6B4eUhU5EUUepVXcXdRIdqMq9ppeRqfw==", -- "dev": true, -- "optional": true -- }, -- "esbuild-freebsd-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.22.tgz", -- "integrity": "sha512-ek1HUv7fkXMy87Qm2G4IRohN+Qux4IcnrDBPZGXNN33KAL0pEJJzdTv0hB/42+DCYWylSrSKxk3KUXfqXOoH4A==", -- "dev": true, -- "optional": true -- }, -- "esbuild-freebsd-arm64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.22.tgz", -- "integrity": "sha512-zPh9SzjRvr9FwsouNYTqgqFlsMIW07O8mNXulGeQx6O5ApgGUBZBgtzSlBQXkHi18WjrosYfsvp5nzOKiWzkjQ==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-32": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.22.tgz", -- "integrity": "sha512-SnpveoE4nzjb9t2hqCIzzTWBM0RzcCINDMBB67H6OXIuDa4KqFqaIgmTchNA9pJKOVLVIKd5FYxNiJStli21qg==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.22.tgz", -- "integrity": "sha512-Zcl9Wg7gKhOWWNqAjygyqzB+fJa19glgl2JG7GtuxHyL1uEnWlpSMytTLMqtfbmRykIHdab797IOZeKwk5g0zg==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-arm": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.22.tgz", -- "integrity": "sha512-soPDdbpt/C0XvOOK45p4EFt8HbH5g+0uHs5nUKjHVExfgR7du734kEkXR/mE5zmjrlymk5AA79I0VIvj90WZ4g==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-arm64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.22.tgz", -- "integrity": "sha512-8q/FRBJtV5IHnQChO3LHh/Jf7KLrxJ/RCTGdBvlVZhBde+dk3/qS9fFsUy+rs3dEi49aAsyVitTwlKw1SUFm+A==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-mips64le": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.22.tgz", -- "integrity": "sha512-SiNDfuRXhGh1JQLLA9JPprBgPVFOsGuQ0yDfSPTNxztmVJd8W2mX++c4FfLpAwxuJe183mLuKf7qKCHQs5ZnBQ==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-ppc64le": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.22.tgz", -- "integrity": "sha512-6t/GI9I+3o1EFm2AyN9+TsjdgWCpg2nwniEhjm2qJWtJyJ5VzTXGUU3alCO3evopu8G0hN2Bu1Jhz2YmZD0kng==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-riscv64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.22.tgz", -- "integrity": "sha512-AyJHipZKe88sc+tp5layovquw5cvz45QXw5SaDgAq2M911wLHiCvDtf/07oDx8eweCyzYzG5Y39Ih568amMTCQ==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-s390x": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.22.tgz", -- "integrity": "sha512-Sz1NjZewTIXSblQDZWEFZYjOK6p8tV6hrshYdXZ0NHTjWE+lwxpOpWeElUGtEmiPcMT71FiuA9ODplqzzSxkzw==", -- "dev": true, -- "optional": true -- }, -- "esbuild-netbsd-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.22.tgz", -- "integrity": "sha512-TBbCtx+k32xydImsHxvFgsOCuFqCTGIxhzRNbgSL1Z2CKhzxwT92kQMhxort9N/fZM2CkRCPPs5wzQSamtzEHA==", -- "dev": true, -- "optional": true -- }, -- "esbuild-openbsd-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.22.tgz", -- "integrity": "sha512-vK912As725haT313ANZZZN+0EysEEQXWC/+YE4rQvOQzLuxAQc2tjbzlAFREx3C8+uMuZj/q7E5gyVB7TzpcTA==", -- "dev": true, -- "optional": true -- }, -- "esbuild-sunos-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.22.tgz", -- "integrity": "sha512-/mbJdXTW7MTcsPhtfDsDyPEOju9EOABvCjeUU2OJ7fWpX/Em/H3WYDa86tzLUbcVg++BScQDzqV/7RYw5XNY0g==", -- "dev": true, -- "optional": true -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", -+ "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", -+ "dev": true, -+ "requires": { -+ "@esbuild/android-arm": "0.18.17", -+ "@esbuild/android-arm64": "0.18.17", -+ "@esbuild/android-x64": "0.18.17", -+ "@esbuild/darwin-arm64": "0.18.17", -+ "@esbuild/darwin-x64": "0.18.17", -+ "@esbuild/freebsd-arm64": "0.18.17", -+ "@esbuild/freebsd-x64": "0.18.17", -+ "@esbuild/linux-arm": "0.18.17", -+ "@esbuild/linux-arm64": "0.18.17", -+ "@esbuild/linux-ia32": "0.18.17", -+ "@esbuild/linux-loong64": "0.18.17", -+ "@esbuild/linux-mips64el": "0.18.17", -+ "@esbuild/linux-ppc64": "0.18.17", -+ "@esbuild/linux-riscv64": "0.18.17", -+ "@esbuild/linux-s390x": "0.18.17", -+ "@esbuild/linux-x64": "0.18.17", -+ "@esbuild/netbsd-x64": "0.18.17", -+ "@esbuild/openbsd-x64": "0.18.17", -+ "@esbuild/sunos-x64": "0.18.17", -+ "@esbuild/win32-arm64": "0.18.17", -+ "@esbuild/win32-ia32": "0.18.17", -+ "@esbuild/win32-x64": "0.18.17" -+ } - }, - "esbuild-wasm": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.22.tgz", -- "integrity": "sha512-FOSAM29GN1fWusw0oLMv6JYhoheDIh5+atC72TkJKfIUMID6yISlicoQSd9gsNSFsNBvABvtE2jR4JB1j4FkFw==", -+ "version": "0.18.17", -+ "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.18.17.tgz", -+ "integrity": "sha512-9OHGcuRzy+I8ziF9FzjfKLWAPbvi0e/metACVg9k6bK+SI4FFxeV6PcZsz8RIVaMD4YNehw+qj6UMR3+qj/EuQ==", - "dev": true - }, -- "esbuild-windows-32": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.22.tgz", -- "integrity": "sha512-1vRIkuvPTjeSVK3diVrnMLSbkuE36jxA+8zGLUOrT4bb7E/JZvDRhvtbWXWaveUc/7LbhaNFhHNvfPuSw2QOQg==", -- "dev": true, -- "optional": true -- }, -- "esbuild-windows-64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.22.tgz", -- "integrity": "sha512-AxjIDcOmx17vr31C5hp20HIwz1MymtMjKqX4qL6whPj0dT9lwxPexmLj6G1CpR3vFhui6m75EnBEe4QL82SYqw==", -- "dev": true, -- "optional": true -- }, -- "esbuild-windows-arm64": { -- "version": "0.14.22", -- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.22.tgz", -- "integrity": "sha512-5wvQ+39tHmRhNpu2Fx04l7QfeK3mQ9tKzDqqGR8n/4WUxsFxnVLfDRBGirIfk4AfWlxk60kqirlODPoT5LqMUg==", -- "dev": true, -- "optional": true -- }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", -@@ -33339,15 +33373,14 @@ - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "escodegen": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", -- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", -+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", -- "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { -@@ -33357,95 +33390,58 @@ - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, -- "levn": { -- "version": "0.3.0", -- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", -- "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", -- "dev": true, -- "requires": { -- "prelude-ls": "~1.1.2", -- "type-check": "~0.3.2" -- } -- }, -- "optionator": { -- "version": "0.8.3", -- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", -- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", -- "dev": true, -- "requires": { -- "deep-is": "~0.1.3", -- "fast-levenshtein": "~2.0.6", -- "levn": "~0.3.0", -- "prelude-ls": "~1.1.2", -- "type-check": "~0.3.2", -- "word-wrap": "~1.2.3" -- } -- }, -- "prelude-ls": { -- "version": "1.1.2", -- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", -- "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", -- "dev": true -- }, - "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 -- }, -- "type-check": { -- "version": "0.3.2", -- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", -- "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", -- "dev": true, -- "requires": { -- "prelude-ls": "~1.1.2" -- } - } - } - }, - "eslint": { -- "version": "8.12.0", -- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", -- "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", -- "dev": true, -- "requires": { -- "@eslint/eslintrc": "^1.2.1", -- "@humanwhocodes/config-array": "^0.9.2", -- "ajv": "^6.10.0", -+ "version": "8.51.0", -+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", -+ "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", -+ "dev": true, -+ "requires": { -+ "@eslint-community/eslint-utils": "^4.2.0", -+ "@eslint-community/regexpp": "^4.6.1", -+ "@eslint/eslintrc": "^2.1.2", -+ "@eslint/js": "8.51.0", -+ "@humanwhocodes/config-array": "^0.11.11", -+ "@humanwhocodes/module-importer": "^1.0.1", -+ "@nodelib/fs.walk": "^1.2.8", -+ "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", -- "eslint-scope": "^7.1.1", -- "eslint-utils": "^3.0.0", -- "eslint-visitor-keys": "^3.3.0", -- "espree": "^9.3.1", -- "esquery": "^1.4.0", -+ "eslint-scope": "^7.2.2", -+ "eslint-visitor-keys": "^3.4.3", -+ "espree": "^9.6.1", -+ "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", -- "functional-red-black-tree": "^1.0.1", -- "glob-parent": "^6.0.1", -- "globals": "^13.6.0", -+ "find-up": "^5.0.0", -+ "glob-parent": "^6.0.2", -+ "globals": "^13.19.0", -+ "graphemer": "^1.4.0", - "ignore": "^5.2.0", -- "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", -+ "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", -- "minimatch": "^3.0.4", -+ "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", -- "optionator": "^0.9.1", -- "regexpp": "^3.2.0", -+ "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", -- "strip-json-comments": "^3.1.0", -- "text-table": "^0.2.0", -- "v8-compile-cache": "^2.0.3" -+ "text-table": "^0.2.0" - }, - "dependencies": { - "ajv": { -@@ -33507,9 +33503,9 @@ - "dev": true - }, - "eslint-scope": { -- "version": "7.1.1", -- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", -- "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", -+ "version": "7.2.2", -+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", -+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", -@@ -33522,6 +33518,16 @@ - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, -+ "find-up": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", -+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", -+ "dev": true, -+ "requires": { -+ "locate-path": "^6.0.0", -+ "path-exists": "^4.0.0" -+ } -+ }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", -@@ -33532,9 +33538,9 @@ - } - }, - "globals": { -- "version": "13.15.0", -- "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", -- "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", -+ "version": "13.23.0", -+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", -+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" -@@ -33561,6 +33567,42 @@ - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, -+ "locate-path": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", -+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", -+ "dev": true, -+ "requires": { -+ "p-locate": "^5.0.0" -+ } -+ }, -+ "minimatch": { -+ "version": "3.1.2", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", -+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", -+ "dev": true, -+ "requires": { -+ "brace-expansion": "^1.1.7" -+ } -+ }, -+ "p-limit": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", -+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", -+ "dev": true, -+ "requires": { -+ "yocto-queue": "^0.1.0" -+ } -+ }, -+ "p-locate": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", -+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", -+ "dev": true, -+ "requires": { -+ "p-limit": "^3.0.2" -+ } -+ }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -33579,9 +33621,9 @@ - } - }, - "eslint-config-prettier": { -- "version": "8.5.0", -- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", -- "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", -+ "version": "9.0.0", -+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", -+ "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", - "dev": true, - "requires": {} - }, -@@ -33595,89 +33637,34 @@ - "estraverse": "^4.1.1" - } - }, -- "eslint-utils": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", -- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", -- "dev": true, -- "requires": { -- "eslint-visitor-keys": "^2.0.0" -- }, -- "dependencies": { -- "eslint-visitor-keys": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", -- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", -- "dev": true -- } -- } -- }, - "eslint-visitor-keys": { -- "version": "3.3.0", -- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", -- "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", -+ "version": "3.4.3", -+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", -+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true - }, - "eslint-webpack-plugin": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", -- "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-4.0.1.tgz", -+ "integrity": "sha512-fUFcXpui/FftGx3NzvWgLZXlLbu+m74sUxGEgxgoxYcUtkIQbS6SdNNZkS99m5ycb23TfoNYrDpp1k/CK5j6Hw==", - "dev": true, - "requires": { -- "@types/eslint": "^7.28.2", -- "jest-worker": "^27.3.1", -- "micromatch": "^4.0.4", -+ "@types/eslint": "^8.37.0", -+ "jest-worker": "^29.5.0", -+ "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", -- "schema-utils": "^3.1.1" -- }, -- "dependencies": { -- "ajv": { -- "version": "6.12.6", -- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", -- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", -- "dev": true, -- "requires": { -- "fast-deep-equal": "^3.1.1", -- "fast-json-stable-stringify": "^2.0.0", -- "json-schema-traverse": "^0.4.1", -- "uri-js": "^4.2.2" -- } -- }, -- "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, -- "requires": {} -- }, -- "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 -- }, -- "schema-utils": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", -- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", -- "dev": true, -- "requires": { -- "@types/json-schema": "^7.0.8", -- "ajv": "^6.12.5", -- "ajv-keywords": "^3.5.2" -- } -- } -+ "schema-utils": "^4.0.0" - } - }, - "espree": { -- "version": "9.3.2", -- "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", -- "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", -+ "version": "9.6.1", -+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", -+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "requires": { -- "acorn": "^8.7.1", -+ "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", -- "eslint-visitor-keys": "^3.3.0" -+ "eslint-visitor-keys": "^3.4.1" - } - }, - "esprima": { -@@ -33687,9 +33674,9 @@ - "dev": true - }, - "esquery": { -- "version": "1.4.0", -- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", -- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", -+ "version": "1.5.0", -+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", -+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" -@@ -33779,87 +33766,34 @@ - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, -- "expand-brackets": { -- "version": "0.1.5", -- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", -- "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", -- "dev": true, -- "requires": { -- "is-posix-bracket": "^0.1.0" -- } -- }, -- "expand-range": { -- "version": "1.8.2", -- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", -- "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", -- "dev": true, -- "requires": { -- "fill-range": "^2.1.0" -- }, -- "dependencies": { -- "fill-range": { -- "version": "2.2.4", -- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", -- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", -- "dev": true, -- "requires": { -- "is-number": "^2.1.0", -- "isobject": "^2.0.0", -- "randomatic": "^3.0.0", -- "repeat-element": "^1.1.2", -- "repeat-string": "^1.5.2" -- } -- }, -- "is-number": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", -- "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- } -- }, -- "isobject": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", -- "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", -- "dev": true, -- "requires": { -- "isarray": "1.0.0" -- } -- }, -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -- } -- }, - "expect": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", -- "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", -+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "requires": { -- "@jest/types": "^27.5.1", -- "jest-get-type": "^27.5.1", -- "jest-matcher-utils": "^27.5.1", -- "jest-message-util": "^27.5.1" -+ "@jest/expect-utils": "^29.7.0", -+ "jest-get-type": "^29.6.3", -+ "jest-matcher-utils": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-util": "^29.7.0" - } - }, -+ "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 -+ }, - "express": { -- "version": "4.18.1", -- "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", -- "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", -+ "version": "4.18.2", -+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", -+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", -- "body-parser": "1.20.0", -+ "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", -@@ -33878,7 +33812,7 @@ - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", -- "qs": "6.10.3", -+ "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", -@@ -33953,15 +33887,6 @@ - "ee-first": "1.1.1" - } - }, -- "qs": { -- "version": "6.10.3", -- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", -- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", -- "dev": true, -- "requires": { -- "side-channel": "^1.0.4" -- } -- }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", -@@ -34023,27 +33948,6 @@ - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, -- "extend-shallow": { -- "version": "3.0.2", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", -- "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", -- "dev": true, -- "requires": { -- "assign-symbols": "^1.0.0", -- "is-extendable": "^1.0.1" -- }, -- "dependencies": { -- "is-extendable": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", -- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", -- "dev": true, -- "requires": { -- "is-plain-object": "^2.0.4" -- } -- } -- } -- }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", -@@ -34055,23 +33959,6 @@ - "tmp": "^0.0.33" - } - }, -- "extglob": { -- "version": "0.3.2", -- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", -- "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", -- "dev": true, -- "requires": { -- "is-extglob": "^1.0.0" -- }, -- "dependencies": { -- "is-extglob": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", -- "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", -- "dev": true -- } -- } -- }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", -@@ -34085,10 +33972,9 @@ - "dev": true - }, - "fast-glob": { -- "version": "3.2.11", -- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", -- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", -- "dev": true, -+ "version": "3.3.0", -+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", -+ "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", -@@ -34113,7 +33999,6 @@ - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", -- "dev": true, - "requires": { - "reusify": "^1.0.4" - } -@@ -34128,9 +34013,9 @@ - } - }, - "fb-watchman": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", -- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", -+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" -@@ -34160,13 +34045,6 @@ - "flat-cache": "^3.0.4" - } - }, -- "file-uri-to-path": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", -- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", -- "dev": true, -- "optional": true -- }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", -@@ -34196,12 +34074,6 @@ - } - } - }, -- "filename-regex": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", -- "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==", -- "dev": true -- }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", -@@ -34211,44 +34083,105 @@ - } - }, - "finalhandler": { -- "version": "0.5.0", -- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.0.tgz", -- "integrity": "sha512-KCwi04Tss2Qa+3NQkU3/4lBYXfHYunl3YM0rDJPxhdZ1qjlGvf/BilX2g7vm/qkHUMs5MncaD9f/VTdYN95iig==", -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", -+ "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", - "dev": true, - "requires": { -- "debug": "~2.2.0", -+ "debug": "2.6.9", -+ "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", -- "statuses": "~1.3.0", -+ "parseurl": "~1.3.2", -+ "statuses": "~1.3.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", -- "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", -+ "version": "2.6.9", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { -- "ms": "0.7.1" -+ "ms": "2.0.0" - } - }, - "ms": { -- "version": "0.7.1", -- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", -- "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==", -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "find-cache-dir": { -- "version": "3.3.2", -- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", -- "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", -+ "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, - "requires": { -- "commondir": "^1.0.1", -- "make-dir": "^3.0.2", -- "pkg-dir": "^4.1.0" -+ "common-path-prefix": "^3.0.0", -+ "pkg-dir": "^7.0.0" -+ }, -+ "dependencies": { -+ "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, -+ "requires": { -+ "locate-path": "^7.1.0", -+ "path-exists": "^5.0.0" -+ } -+ }, -+ "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, -+ "requires": { -+ "p-locate": "^6.0.0" -+ } -+ }, -+ "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, -+ "requires": { -+ "yocto-queue": "^1.0.0" -+ } -+ }, -+ "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, -+ "requires": { -+ "p-limit": "^4.0.0" -+ } -+ }, -+ "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 -+ }, -+ "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, -+ "requires": { -+ "find-up": "^6.3.0" -+ } -+ }, -+ "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 -+ } - } - }, - "find-up": { -@@ -34314,6 +34247,17 @@ - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" -+ }, -+ "dependencies": { -+ "rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "requires": { -+ "glob": "^7.1.3" -+ } -+ } - } - }, - "flatted": { -@@ -34329,14 +34273,13 @@ - "dev": true - }, - "folder-hash": { -- "version": "4.0.2", -- "resolved": "https://registry.npmjs.org/folder-hash/-/folder-hash-4.0.2.tgz", -- "integrity": "sha512-Iw9GCqdA+zHfDVvk90TSAV66jq0IwiZaPvPgUiW+DHRwnaPOeZomzlgutx9QclinsQGz/XcVIGlDEJbFhCV5wA==", -+ "version": "4.0.4", -+ "resolved": "https://registry.npmjs.org/folder-hash/-/folder-hash-4.0.4.tgz", -+ "integrity": "sha512-zEyYH+UsHEfJJcCRSf9ai5I4CTZwZ8ObONRuEI5hcEmJY5pS0FUWKruX9mMnYJrgC7MlPFDYnGsK1R+WFYjLlQ==", - "dev": true, - "requires": { - "debug": "^4.3.3", -- "graceful-fs": "~4.2.9", -- "minimatch": "~5.0.0" -+ "minimatch": "~5.1.2" - }, - "dependencies": { - "brace-expansion": { -@@ -34349,9 +34292,9 @@ - } - }, - "minimatch": { -- "version": "5.0.1", -- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", -- "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", -+ "version": "5.1.6", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", -+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" -@@ -34365,19 +34308,22 @@ - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true - }, -- "for-in": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", -- "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", -- "dev": true -- }, -- "for-own": { -- "version": "0.1.5", -- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", -- "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", -+ "foreground-child": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", -+ "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { -- "for-in": "^1.0.1" -+ "cross-spawn": "^7.0.0", -+ "signal-exit": "^4.0.1" -+ }, -+ "dependencies": { -+ "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 -+ } - } - }, - "forever-agent": { -@@ -34404,20 +34350,11 @@ - "dev": true - }, - "fraction.js": { -- "version": "4.2.0", -- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", -- "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", -+ "version": "4.3.7", -+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", -+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true - }, -- "fragment-cache": { -- "version": "0.2.1", -- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", -- "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", -- "dev": true, -- "requires": { -- "map-cache": "^0.2.2" -- } -- }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", -@@ -34445,15 +34382,16 @@ - } - }, - "fs-monkey": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", -- "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", -+ "version": "1.0.5", -+ "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", -+ "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", -- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" -+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", -+ "dev": true - }, - "fsevents": { - "version": "2.3.2", -@@ -34462,21 +34400,9 @@ - "optional": true - }, - "function-bind": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", -- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", -- "dev": true -- }, -- "functional-red-black-tree": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", -- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", -- "dev": true -- }, -- "functions-have-names": { -- "version": "1.2.3", -- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", -- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", -+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true - }, - "gauge": { -@@ -34602,13 +34528,32 @@ - "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", - "dev": true - }, -- "debug": { -- "version": "4.3.4", -- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", -- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", -+ "detect-indent": { -+ "version": "6.1.0", -+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", -+ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", -+ "dev": true -+ }, -+ "git-hooks-list": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-1.0.3.tgz", -+ "integrity": "sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==", -+ "dev": true -+ }, -+ "globby": { -+ "version": "10.0.0", -+ "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.0.tgz", -+ "integrity": "sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==", - "dev": true, - "requires": { -- "ms": "2.1.2" -+ "@types/glob": "^7.1.1", -+ "array-union": "^2.1.0", -+ "dir-glob": "^3.0.1", -+ "fast-glob": "^3.0.3", -+ "glob": "^7.1.3", -+ "ignore": "^5.1.1", -+ "merge2": "^1.2.3", -+ "slash": "^3.0.0" - } - }, - "has-flag": { -@@ -34617,6 +34562,27 @@ - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, -+ "java-parser": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/java-parser/-/java-parser-2.0.1.tgz", -+ "integrity": "sha512-IPzs8LN8drvAZKbgW1MLLsrEeW4TwSy714I6ZHlEGNV6/42S2xRU5zDn3lP6uZQakwi7nyC00T6lZvwEnBujzw==", -+ "dev": true, -+ "requires": { -+ "chevrotain": "6.5.0", -+ "lodash": "4.17.21" -+ }, -+ "dependencies": { -+ "chevrotain": { -+ "version": "6.5.0", -+ "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-6.5.0.tgz", -+ "integrity": "sha512-BwqQ/AgmKJ8jcMEjaSnfMybnKMgGTrtDKowfTP3pX4jwVy0kNjRsT/AP6h+wC3+3NC+X8X15VWBnTCQlX+wQFg==", -+ "dev": true, -+ "requires": { -+ "regexp-to-ast": "0.4.0" -+ } -+ } -+ } -+ }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", -@@ -34635,6 +34601,60 @@ - "brace-expansion": "^2.0.1" - } - }, -+ "prettier": { -+ "version": "2.6.2", -+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", -+ "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", -+ "dev": true -+ }, -+ "prettier-plugin-java": { -+ "version": "1.6.1", -+ "resolved": "https://registry.npmjs.org/prettier-plugin-java/-/prettier-plugin-java-1.6.1.tgz", -+ "integrity": "sha512-kSY17V/P88nILlILb5iMp16TVJy6Ls9Jy4zAzI4+GsEuRDZH5VqRuLd8aJS1ImWxVgRjNBmoFOjxYyxkRM0SRA==", -+ "dev": true, -+ "requires": { -+ "java-parser": "2.0.1", -+ "lodash": "4.17.21", -+ "prettier": "2.3.1" -+ }, -+ "dependencies": { -+ "prettier": { -+ "version": "2.3.1", -+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", -+ "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", -+ "dev": true -+ } -+ } -+ }, -+ "prettier-plugin-packagejson": { -+ "version": "2.2.17", -+ "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.2.17.tgz", -+ "integrity": "sha512-Z1l3stIdkEzuv5w2ZyLl7mvl1Q/7vr2wjLAaKCQtafPHB7h09dir0tgXK/W5iEc/jP+C4XtvJl/HhiZBvPh4rQ==", -+ "dev": true, -+ "requires": { -+ "sort-package-json": "1.55.0" -+ } -+ }, -+ "regexp-to-ast": { -+ "version": "0.4.0", -+ "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.4.0.tgz", -+ "integrity": "sha512-4qf/7IsIKfSNHQXSwial1IFmfM1Cc/whNBQqRwe0V2stPe7KmN1U0tWQiIx6JiirgSrisjE0eECdNf7Tav1Ntw==", -+ "dev": true -+ }, -+ "sort-package-json": { -+ "version": "1.55.0", -+ "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-1.55.0.tgz", -+ "integrity": "sha512-xhKvRD8WGbALjXQkVuk4/93Z/2NIO+5IzKamdMjN5kn3L+N+M9YWQssmM6GXlQr9v1F7PGWsOJEo1gvXOhM7Mg==", -+ "dev": true, -+ "requires": { -+ "detect-indent": "^6.0.0", -+ "detect-newline": "3.1.0", -+ "git-hooks-list": "1.0.3", -+ "globby": "10.0.0", -+ "is-plain-obj": "2.1.0", -+ "sort-object-keys": "^1.1.3" -+ } -+ }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -34673,18 +34693,18 @@ - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, -+ "get-stdin": { -+ "version": "9.0.0", -+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", -+ "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", -+ "dev": true -+ }, - "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 - }, -- "get-value": { -- "version": "2.0.6", -- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", -- "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", -- "dev": true -- }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", -@@ -34695,9 +34715,9 @@ - } - }, - "git-hooks-list": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-1.0.3.tgz", -- "integrity": "sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==", -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.1.0.tgz", -+ "integrity": "sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==", - "dev": true - }, - "github-username": { -@@ -34713,6 +34733,7 @@ - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", -+ "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", -@@ -34722,42 +34743,6 @@ - "path-is-absolute": "^1.0.0" - } - }, -- "glob-base": { -- "version": "0.3.0", -- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", -- "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", -- "dev": true, -- "requires": { -- "glob-parent": "^2.0.0", -- "is-glob": "^2.0.0" -- }, -- "dependencies": { -- "glob-parent": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", -- "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", -- "dev": true, -- "requires": { -- "is-glob": "^2.0.0" -- } -- }, -- "is-extglob": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", -- "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", -- "dev": true -- }, -- "is-glob": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", -- "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", -- "dev": true, -- "requires": { -- "is-extglob": "^1.0.0" -- } -- } -- } -- }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", -@@ -34797,6 +34782,12 @@ - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, -+ "graphemer": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", -+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", -+ "dev": true -+ }, - "grouped-queue": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-2.0.0.tgz", -@@ -34809,6 +34800,15 @@ - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true - }, -+ "guess-parser": { -+ "version": "0.4.22", -+ "resolved": "https://registry.npmjs.org/guess-parser/-/guess-parser-0.4.22.tgz", -+ "integrity": "sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==", -+ "dev": true, -+ "requires": { -+ "@wessberg/ts-evaluator": "0.0.27" -+ } -+ }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", -@@ -34869,131 +34869,30 @@ - "function-bind": "^1.1.1" - } - }, -- "has-ansi": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", -- "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", -- "dev": true, -- "requires": { -- "ansi-regex": "^2.0.0" -- }, -- "dependencies": { -- "ansi-regex": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", -- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", -- "dev": true -- } -- } -- }, -- "has-binary2": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", -- "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", -- "dev": true, -- "requires": { -- "isarray": "2.0.1" -- }, -- "dependencies": { -- "isarray": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", -- "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==", -- "dev": true -- } -- } -- }, -- "has-cors": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", -- "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==", -- "dev": true -- }, - "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==" - }, -- "has-property-descriptors": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", -- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", -- "dev": true, -- "requires": { -- "get-intrinsic": "^1.1.1" -- } -- }, - "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 - }, -- "has-tostringtag": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", -- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", -- "dev": true, -- "requires": { -- "has-symbols": "^1.0.2" -- } -- }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, -- "has-value": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", -- "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", -- "dev": true, -- "requires": { -- "get-value": "^2.0.6", -- "has-values": "^1.0.0", -- "isobject": "^3.0.0" -- } -- }, -- "has-values": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", -- "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", -+ "hasown": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", -+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, - "requires": { -- "is-number": "^3.0.0", -- "kind-of": "^4.0.0" -- }, -- "dependencies": { -- "is-number": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", -- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- }, -- "dependencies": { -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -- } -- }, -- "kind-of": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", -- "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -+ "function-bind": "^1.1.2" - } - }, - "hdr-histogram-js": { -@@ -35035,9 +34934,9 @@ - }, - "dependencies": { - "readable-stream": { -- "version": "2.3.7", -- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", -- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", -+ "version": "2.3.8", -+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", -+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", -@@ -35070,9 +34969,9 @@ - } - }, - "html-entities": { -- "version": "2.3.3", -- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", -- "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", -+ "version": "2.4.0", -+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", -+ "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true - }, - "html-escaper": { -@@ -35081,6 +34980,18 @@ - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, -+ "htmlparser2": { -+ "version": "8.0.2", -+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", -+ "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", -+ "dev": true, -+ "requires": { -+ "domelementtype": "^2.3.0", -+ "domhandler": "^5.0.3", -+ "domutils": "^3.0.1", -+ "entities": "^4.4.0" -+ } -+ }, - "http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", -@@ -35094,9 +35005,9 @@ - } - }, - "http-cache-semantics": { -- "version": "4.1.0", -- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", -- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", -+ "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 - }, - "http-deceiver": { -@@ -35133,9 +35044,9 @@ - } - }, - "http-parser-js": { -- "version": "0.5.6", -- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", -- "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", -+ "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 - }, - "http-proxy": { -@@ -35210,9 +35121,9 @@ - } - }, - "https-proxy-agent": { -- "version": "5.0.0", -- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", -- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", -+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", -@@ -35235,9 +35146,9 @@ - } - }, - "husky": { -- "version": "7.0.4", -- "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", -- "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", -+ "version": "8.0.3", -+ "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", -+ "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true - }, - "iconv-lite": { -@@ -35263,9 +35174,9 @@ - "dev": true - }, - "ignore": { -- "version": "5.2.0", -- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", -- "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", -+ "version": "5.2.4", -+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", -+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "ignore-walk": { -@@ -35330,12 +35241,6 @@ - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, -- "indexof": { -- "version": "0.0.1", -- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", -- "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==", -- "dev": true -- }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", -@@ -35346,6 +35251,7 @@ - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", -+ "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" -@@ -35354,18 +35260,19 @@ - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", -- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" -+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", -+ "dev": true - }, - "ini": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", -- "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", -+ "version": "4.1.1", -+ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", -+ "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true - }, - "inquirer": { -- "version": "8.2.0", -- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", -- "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", -+ "version": "8.2.4", -+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", -+ "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", -@@ -35378,10 +35285,11 @@ - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", -- "rxjs": "^7.2.0", -+ "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", -- "through": "^2.3.6" -+ "through": "^2.3.6", -+ "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { -@@ -35719,30 +35627,11 @@ - "dev": true - }, - "ipaddr.js": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", -- "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", -+ "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true - }, -- "is-accessor-descriptor": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", -- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", -- "dev": true, -- "requires": { -- "kind-of": "^6.0.0" -- } -- }, -- "is-arguments": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", -- "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", -- "dev": true, -- "requires": { -- "call-bind": "^1.0.2", -- "has-tostringtag": "^1.0.0" -- } -- }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", -@@ -35757,48 +35646,13 @@ - "binary-extensions": "^2.0.0" - } - }, -- "is-buffer": { -- "version": "1.1.6", -- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", -- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", -- "dev": true -- }, - "is-core-module": { -- "version": "2.9.0", -- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", -- "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", -+ "version": "2.13.1", -+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", -+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "requires": { -- "has": "^1.0.3" -- } -- }, -- "is-data-descriptor": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", -- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", -- "dev": true, -- "requires": { -- "kind-of": "^6.0.0" -- } -- }, -- "is-date-object": { -- "version": "1.0.5", -- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", -- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", -- "dev": true, -- "requires": { -- "has-tostringtag": "^1.0.0" -- } -- }, -- "is-descriptor": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", -- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", -- "dev": true, -- "requires": { -- "is-accessor-descriptor": "^1.0.0", -- "is-data-descriptor": "^1.0.0", -- "kind-of": "^6.0.2" -+ "hasown": "^2.0.0" - } - }, - "is-docker": { -@@ -35807,27 +35661,6 @@ - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, -- "is-dotfile": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", -- "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==", -- "dev": true -- }, -- "is-equal-shallow": { -- "version": "0.1.3", -- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", -- "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", -- "dev": true, -- "requires": { -- "is-primitive": "^2.0.0" -- } -- }, -- "is-extendable": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", -- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", -- "dev": true -- }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", -@@ -35853,6 +35686,23 @@ - "is-extglob": "^2.1.1" - } - }, -+ "is-inside-container": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", -+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", -+ "dev": true, -+ "requires": { -+ "is-docker": "^3.0.0" -+ }, -+ "dependencies": { -+ "is-docker": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", -+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", -+ "dev": true -+ } -+ } -+ }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", -@@ -35885,12 +35735,6 @@ - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, -- "is-path-cwd": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", -- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", -- "dev": true -- }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", -@@ -35912,34 +35756,12 @@ - "isobject": "^3.0.1" - } - }, -- "is-posix-bracket": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", -- "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==", -- "dev": true -- }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, -- "is-primitive": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", -- "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==", -- "dev": true -- }, -- "is-regex": { -- "version": "1.1.4", -- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", -- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", -- "dev": true, -- "requires": { -- "call-bind": "^1.0.2", -- "has-tostringtag": "^1.0.0" -- } -- }, - "is-scoped": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-2.1.0.tgz", -@@ -35979,12 +35801,6 @@ - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, -- "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 -- }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", -@@ -36052,13 +35868,13 @@ - } - }, - "istanbul-lib-report": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", -- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", -+ "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, - "requires": { - "istanbul-lib-coverage": "^3.0.0", -- "make-dir": "^3.0.0", -+ "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { -@@ -36099,15 +35915,25 @@ - } - }, - "istanbul-reports": { -- "version": "3.1.4", -- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", -- "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", -+ "version": "3.1.6", -+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", -+ "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, -+ "jackspeak": { -+ "version": "2.3.6", -+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", -+ "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", -+ "dev": true, -+ "requires": { -+ "@isaacs/cliui": "^8.0.2", -+ "@pkgjs/parseargs": "^0.11.0" -+ } -+ }, - "jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", -@@ -36178,9 +36004,9 @@ - } - }, - "java-parser": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/java-parser/-/java-parser-2.0.1.tgz", -- "integrity": "sha512-IPzs8LN8drvAZKbgW1MLLsrEeW4TwSy714I6ZHlEGNV6/42S2xRU5zDn3lP6uZQakwi7nyC00T6lZvwEnBujzw==", -+ "version": "2.0.5", -+ "resolved": "https://registry.npmjs.org/java-parser/-/java-parser-2.0.5.tgz", -+ "integrity": "sha512-AwieTO24Itcu0GgP9pBXs8gkqBtkmReclpBgXF4NkbIjdS7cn7hqpebjTmb5ouYYLFR+m3yh5fR3nW1NRrthdg==", - "dev": true, - "requires": { - "chevrotain": "6.5.0", -@@ -36205,52 +36031,65 @@ - } - }, - "jest": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", -- "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", -+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "requires": { -- "@jest/core": "^27.5.1", -+ "@jest/core": "^29.7.0", -+ "@jest/types": "^29.6.3", - "import-local": "^3.0.2", -- "jest-cli": "^27.5.1" -+ "jest-cli": "^29.7.0" - } - }, - "jest-changed-files": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", -- "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", -+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "requires": { -- "@jest/types": "^27.5.1", - "execa": "^5.0.0", -- "throat": "^6.0.1" -+ "jest-util": "^29.7.0", -+ "p-limit": "^3.1.0" -+ }, -+ "dependencies": { -+ "p-limit": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", -+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", -+ "dev": true, -+ "requires": { -+ "yocto-queue": "^0.1.0" -+ } -+ } - } - }, - "jest-circus": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", -- "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", -+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "requires": { -- "@jest/environment": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/environment": "^29.7.0", -+ "@jest/expect": "^29.7.0", -+ "@jest/test-result": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", -- "dedent": "^0.7.0", -- "expect": "^27.5.1", -+ "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", -- "jest-each": "^27.5.1", -- "jest-matcher-utils": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-runtime": "^27.5.1", -- "jest-snapshot": "^27.5.1", -- "jest-util": "^27.5.1", -- "pretty-format": "^27.5.1", -+ "jest-each": "^29.7.0", -+ "jest-matcher-utils": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-runtime": "^29.7.0", -+ "jest-snapshot": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "p-limit": "^3.1.0", -+ "pretty-format": "^29.7.0", -+ "pure-rand": "^6.0.0", - "slash": "^3.0.0", -- "stack-utils": "^2.0.3", -- "throat": "^6.0.1" -+ "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { -@@ -36293,6 +36132,15 @@ - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, -+ "p-limit": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", -+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", -+ "dev": true, -+ "requires": { -+ "yocto-queue": "^0.1.0" -+ } -+ }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -36305,23 +36153,22 @@ - } - }, - "jest-cli": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", -- "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", -+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "requires": { -- "@jest/core": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/core": "^29.7.0", -+ "@jest/test-result": "^29.7.0", -+ "@jest/types": "^29.6.3", - "chalk": "^4.0.0", -+ "create-jest": "^29.7.0", - "exit": "^0.1.2", -- "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", -- "jest-config": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-validate": "^27.5.1", -- "prompts": "^2.0.1", -- "yargs": "^16.2.0" -+ "jest-config": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jest-validate": "^29.7.0", -+ "yargs": "^17.3.1" - }, - "dependencies": { - "ansi-styles": { -@@ -36372,52 +36219,35 @@ - "requires": { - "has-flag": "^4.0.0" - } -- }, -- "yargs": { -- "version": "16.2.0", -- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", -- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", -- "dev": true, -- "requires": { -- "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" -- } - } - } - }, - "jest-config": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", -- "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", -+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "requires": { -- "@babel/core": "^7.8.0", -- "@jest/test-sequencer": "^27.5.1", -- "@jest/types": "^27.5.1", -- "babel-jest": "^27.5.1", -+ "@babel/core": "^7.11.6", -+ "@jest/test-sequencer": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", -- "glob": "^7.1.1", -+ "glob": "^7.1.3", - "graceful-fs": "^4.2.9", -- "jest-circus": "^27.5.1", -- "jest-environment-jsdom": "^27.5.1", -- "jest-environment-node": "^27.5.1", -- "jest-get-type": "^27.5.1", -- "jest-jasmine2": "^27.5.1", -- "jest-regex-util": "^27.5.1", -- "jest-resolve": "^27.5.1", -- "jest-runner": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-validate": "^27.5.1", -+ "jest-circus": "^29.7.0", -+ "jest-environment-node": "^29.7.0", -+ "jest-get-type": "^29.6.3", -+ "jest-regex-util": "^29.6.3", -+ "jest-resolve": "^29.7.0", -+ "jest-runner": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", -- "pretty-format": "^27.5.1", -+ "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, -@@ -36480,15 +36310,15 @@ - "dev": true - }, - "jest-diff": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", -- "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", -+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", -- "diff-sequences": "^27.5.1", -- "jest-get-type": "^27.5.1", -- "pretty-format": "^27.5.1" -+ "diff-sequences": "^29.6.3", -+ "jest-get-type": "^29.6.3", -+ "pretty-format": "^29.7.0" - }, - "dependencies": { - "ansi-styles": { -@@ -36543,157 +36373,25 @@ - } - }, - "jest-docblock": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", -- "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", -+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", -- "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", -+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "requires": { -- "@jest/types": "^27.5.1", -+ "@jest/types": "^29.6.3", - "chalk": "^4.0.0", -- "jest-get-type": "^27.5.1", -- "jest-util": "^27.5.1", -- "pretty-format": "^27.5.1" -- }, -- "dependencies": { -- "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, -- "requires": { -- "color-convert": "^2.0.1" -- } -- }, -- "chalk": { -- "version": "4.1.2", -- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", -- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", -- "dev": true, -- "requires": { -- "ansi-styles": "^4.1.0", -- "supports-color": "^7.1.0" -- } -- }, -- "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, -- "requires": { -- "color-name": "~1.1.4" -- } -- }, -- "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 -- }, -- "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 -- }, -- "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, -- "requires": { -- "has-flag": "^4.0.0" -- } -- } -- } -- }, -- "jest-environment-jsdom": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", -- "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", -- "dev": true, -- "requires": { -- "@jest/environment": "^27.5.1", -- "@jest/fake-timers": "^27.5.1", -- "@jest/types": "^27.5.1", -- "@types/node": "*", -- "jest-mock": "^27.5.1", -- "jest-util": "^27.5.1", -- "jsdom": "^16.6.0" -- } -- }, -- "jest-environment-node": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", -- "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", -- "dev": true, -- "requires": { -- "@jest/environment": "^27.5.1", -- "@jest/fake-timers": "^27.5.1", -- "@jest/types": "^27.5.1", -- "@types/node": "*", -- "jest-mock": "^27.5.1", -- "jest-util": "^27.5.1" -- } -- }, -- "jest-get-type": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", -- "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", -- "dev": true -- }, -- "jest-haste-map": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", -- "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", -- "dev": true, -- "requires": { -- "@jest/types": "^27.5.1", -- "@types/graceful-fs": "^4.1.2", -- "@types/node": "*", -- "anymatch": "^3.0.3", -- "fb-watchman": "^2.0.0", -- "fsevents": "^2.3.2", -- "graceful-fs": "^4.2.9", -- "jest-regex-util": "^27.5.1", -- "jest-serializer": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-worker": "^27.5.1", -- "micromatch": "^4.0.4", -- "walker": "^1.0.7" -- } -- }, -- "jest-jasmine2": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", -- "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", -- "dev": true, -- "requires": { -- "@jest/environment": "^27.5.1", -- "@jest/source-map": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/types": "^27.5.1", -- "@types/node": "*", -- "chalk": "^4.0.0", -- "co": "^4.6.0", -- "expect": "^27.5.1", -- "is-generator-fn": "^2.0.0", -- "jest-each": "^27.5.1", -- "jest-matcher-utils": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-runtime": "^27.5.1", -- "jest-snapshot": "^27.5.1", -- "jest-util": "^27.5.1", -- "pretty-format": "^27.5.1", -- "throat": "^6.0.1" -+ "jest-get-type": "^29.6.3", -+ "jest-util": "^29.7.0", -+ "pretty-format": "^29.7.0" - }, - "dependencies": { - "ansi-styles": { -@@ -36747,10 +36445,261 @@ - } - } - }, -+ "jest-environment-jsdom": { -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", -+ "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", -+ "dev": true, -+ "requires": { -+ "@jest/environment": "^29.7.0", -+ "@jest/fake-timers": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "@types/jsdom": "^20.0.0", -+ "@types/node": "*", -+ "jest-mock": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jsdom": "^20.0.0" -+ }, -+ "dependencies": { -+ "@tootallnate/once": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", -+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", -+ "dev": true -+ }, -+ "acorn-globals": { -+ "version": "7.0.1", -+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", -+ "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", -+ "dev": true, -+ "requires": { -+ "acorn": "^8.1.0", -+ "acorn-walk": "^8.0.2" -+ } -+ }, -+ "acorn-walk": { -+ "version": "8.3.0", -+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", -+ "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", -+ "dev": true -+ }, -+ "cssom": { -+ "version": "0.5.0", -+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", -+ "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", -+ "dev": true -+ }, -+ "data-urls": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", -+ "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", -+ "dev": true, -+ "requires": { -+ "abab": "^2.0.6", -+ "whatwg-mimetype": "^3.0.0", -+ "whatwg-url": "^11.0.0" -+ } -+ }, -+ "domexception": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", -+ "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", -+ "dev": true, -+ "requires": { -+ "webidl-conversions": "^7.0.0" -+ } -+ }, -+ "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, -+ "requires": { -+ "asynckit": "^0.4.0", -+ "combined-stream": "^1.0.8", -+ "mime-types": "^2.1.12" -+ } -+ }, -+ "html-encoding-sniffer": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", -+ "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", -+ "dev": true, -+ "requires": { -+ "whatwg-encoding": "^2.0.0" -+ } -+ }, -+ "http-proxy-agent": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", -+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", -+ "dev": true, -+ "requires": { -+ "@tootallnate/once": "2", -+ "agent-base": "6", -+ "debug": "4" -+ } -+ }, -+ "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, -+ "requires": { -+ "safer-buffer": ">= 2.1.2 < 3.0.0" -+ } -+ }, -+ "jsdom": { -+ "version": "20.0.3", -+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", -+ "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", -+ "dev": true, -+ "requires": { -+ "abab": "^2.0.6", -+ "acorn": "^8.8.1", -+ "acorn-globals": "^7.0.0", -+ "cssom": "^0.5.0", -+ "cssstyle": "^2.3.0", -+ "data-urls": "^3.0.2", -+ "decimal.js": "^10.4.2", -+ "domexception": "^4.0.0", -+ "escodegen": "^2.0.0", -+ "form-data": "^4.0.0", -+ "html-encoding-sniffer": "^3.0.0", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.1", -+ "is-potential-custom-element-name": "^1.0.1", -+ "nwsapi": "^2.2.2", -+ "parse5": "^7.1.1", -+ "saxes": "^6.0.0", -+ "symbol-tree": "^3.2.4", -+ "tough-cookie": "^4.1.2", -+ "w3c-xmlserializer": "^4.0.0", -+ "webidl-conversions": "^7.0.0", -+ "whatwg-encoding": "^2.0.0", -+ "whatwg-mimetype": "^3.0.0", -+ "whatwg-url": "^11.0.0", -+ "ws": "^8.11.0", -+ "xml-name-validator": "^4.0.0" -+ } -+ }, -+ "saxes": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", -+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", -+ "dev": true, -+ "requires": { -+ "xmlchars": "^2.2.0" -+ } -+ }, -+ "tr46": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", -+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", -+ "dev": true, -+ "requires": { -+ "punycode": "^2.1.1" -+ } -+ }, -+ "w3c-xmlserializer": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", -+ "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", -+ "dev": true, -+ "requires": { -+ "xml-name-validator": "^4.0.0" -+ } -+ }, -+ "webidl-conversions": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", -+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", -+ "dev": true -+ }, -+ "whatwg-encoding": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", -+ "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", -+ "dev": true, -+ "requires": { -+ "iconv-lite": "0.6.3" -+ } -+ }, -+ "whatwg-mimetype": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", -+ "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", -+ "dev": true -+ }, -+ "whatwg-url": { -+ "version": "11.0.0", -+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", -+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", -+ "dev": true, -+ "requires": { -+ "tr46": "^3.0.0", -+ "webidl-conversions": "^7.0.0" -+ } -+ }, -+ "ws": { -+ "version": "8.14.2", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", -+ "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", -+ "dev": true, -+ "requires": {} -+ }, -+ "xml-name-validator": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", -+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", -+ "dev": true -+ } -+ } -+ }, -+ "jest-environment-node": { -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", -+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", -+ "dev": true, -+ "requires": { -+ "@jest/environment": "^29.7.0", -+ "@jest/fake-timers": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "@types/node": "*", -+ "jest-mock": "^29.7.0", -+ "jest-util": "^29.7.0" -+ } -+ }, -+ "jest-get-type": { -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", -+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", -+ "dev": true -+ }, -+ "jest-haste-map": { -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", -+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", -+ "dev": true, -+ "requires": { -+ "@jest/types": "^29.6.3", -+ "@types/graceful-fs": "^4.1.3", -+ "@types/node": "*", -+ "anymatch": "^3.0.3", -+ "fb-watchman": "^2.0.0", -+ "fsevents": "^2.3.2", -+ "graceful-fs": "^4.2.9", -+ "jest-regex-util": "^29.6.3", -+ "jest-util": "^29.7.0", -+ "jest-worker": "^29.7.0", -+ "micromatch": "^4.0.4", -+ "walker": "^1.0.8" -+ } -+ }, - "jest-junit": { -- "version": "13.1.0", -- "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-13.1.0.tgz", -- "integrity": "sha512-ECbhzEG3Oe2IH3Mnwcv2vAXM4qTbcObN/gTUzwKPlpaNsf2G/zlj/teEUqRGV17YQiQ4AqzTf3pCO7W59DKVIw==", -+ "version": "16.0.0", -+ "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", -+ "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", -@@ -36760,25 +36709,25 @@ - } - }, - "jest-leak-detector": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", -- "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", -+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "requires": { -- "jest-get-type": "^27.5.1", -- "pretty-format": "^27.5.1" -+ "jest-get-type": "^29.6.3", -+ "pretty-format": "^29.7.0" - } - }, - "jest-matcher-utils": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", -- "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", -+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "requires": { - "chalk": "^4.0.0", -- "jest-diff": "^27.5.1", -- "jest-get-type": "^27.5.1", -- "pretty-format": "^27.5.1" -+ "jest-diff": "^29.7.0", -+ "jest-get-type": "^29.6.3", -+ "pretty-format": "^29.7.0" - }, - "dependencies": { - "ansi-styles": { -@@ -36833,18 +36782,18 @@ - } - }, - "jest-message-util": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", -- "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", -+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", -- "@jest/types": "^27.5.1", -+ "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", -- "pretty-format": "^27.5.1", -+ "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, -@@ -36901,218 +36850,58 @@ - } - }, - "jest-mock": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", -- "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", -+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "requires": { -- "@jest/types": "^27.5.1", -- "@types/node": "*" -+ "@jest/types": "^29.6.3", -+ "@types/node": "*", -+ "jest-util": "^29.7.0" - } - }, - "jest-pnp-resolver": { -- "version": "1.2.2", -- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", -- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", -+ "version": "1.2.3", -+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", -+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-preset-angular": { -- "version": "11.1.1", -- "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-11.1.1.tgz", -- "integrity": "sha512-ZlYiKJhAQSU9wIjncX59xutcj49R4MiDsTPSwZiwdTAHQvHm32MS6SGimQIVBqh1DukfwYX0NXKS0D/onLAsLQ==", -+ "version": "13.1.2", -+ "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-13.1.2.tgz", -+ "integrity": "sha512-kuzuIch/YYTMaMnuGDaiZEu++Bjc5WskOAmMwqWO0Grpcd0SulqTOV70Gz6Q/ZOQuMye+LS4KPyIVfqnJr2e3g==", - "dev": true, - "requires": { - "bs-logger": "^0.2.6", -- "esbuild": "0.14.11", -- "esbuild-wasm": "0.14.11", -- "jest-environment-jsdom": "^27.0.0", -- "pretty-format": "^27.0.0", -- "ts-jest": "^27.0.0" -- }, -- "dependencies": { -- "esbuild": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.11.tgz", -- "integrity": "sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg==", -- "dev": true, -- "optional": true, -- "requires": { -- "esbuild-android-arm64": "0.14.11", -- "esbuild-darwin-64": "0.14.11", -- "esbuild-darwin-arm64": "0.14.11", -- "esbuild-freebsd-64": "0.14.11", -- "esbuild-freebsd-arm64": "0.14.11", -- "esbuild-linux-32": "0.14.11", -- "esbuild-linux-64": "0.14.11", -- "esbuild-linux-arm": "0.14.11", -- "esbuild-linux-arm64": "0.14.11", -- "esbuild-linux-mips64le": "0.14.11", -- "esbuild-linux-ppc64le": "0.14.11", -- "esbuild-linux-s390x": "0.14.11", -- "esbuild-netbsd-64": "0.14.11", -- "esbuild-openbsd-64": "0.14.11", -- "esbuild-sunos-64": "0.14.11", -- "esbuild-windows-32": "0.14.11", -- "esbuild-windows-64": "0.14.11", -- "esbuild-windows-arm64": "0.14.11" -- } -- }, -- "esbuild-android-arm64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz", -- "integrity": "sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw==", -- "dev": true, -- "optional": true -- }, -- "esbuild-darwin-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz", -- "integrity": "sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ==", -- "dev": true, -- "optional": true -- }, -- "esbuild-darwin-arm64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz", -- "integrity": "sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg==", -- "dev": true, -- "optional": true -- }, -- "esbuild-freebsd-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz", -- "integrity": "sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA==", -- "dev": true, -- "optional": true -- }, -- "esbuild-freebsd-arm64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz", -- "integrity": "sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-32": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz", -- "integrity": "sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz", -- "integrity": "sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-arm": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz", -- "integrity": "sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-arm64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz", -- "integrity": "sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-mips64le": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz", -- "integrity": "sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-ppc64le": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz", -- "integrity": "sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ==", -- "dev": true, -- "optional": true -- }, -- "esbuild-linux-s390x": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz", -- "integrity": "sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw==", -- "dev": true, -- "optional": true -- }, -- "esbuild-netbsd-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz", -- "integrity": "sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw==", -- "dev": true, -- "optional": true -- }, -- "esbuild-openbsd-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz", -- "integrity": "sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q==", -- "dev": true, -- "optional": true -- }, -- "esbuild-sunos-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz", -- "integrity": "sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg==", -- "dev": true, -- "optional": true -- }, -- "esbuild-wasm": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.11.tgz", -- "integrity": "sha512-9e1R6hv0hiU+BkJI2edqUuWfXUbOP2Mox+Ijl/uY1vLLlSsunkrcADqD/4Rz+VCEDzw6ecscJM+uJqR2fRmEUg==", -- "dev": true -- }, -- "esbuild-windows-32": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz", -- "integrity": "sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ==", -- "dev": true, -- "optional": true -- }, -- "esbuild-windows-64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz", -- "integrity": "sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg==", -- "dev": true, -- "optional": true -- }, -- "esbuild-windows-arm64": { -- "version": "0.14.11", -- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz", -- "integrity": "sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ==", -- "dev": true, -- "optional": true -- } -+ "esbuild": ">=0.13.8", -+ "esbuild-wasm": ">=0.13.8", -+ "jest-environment-jsdom": "^29.0.0", -+ "jest-util": "^29.0.0", -+ "pretty-format": "^29.0.0", -+ "ts-jest": "^29.0.0" - } - }, - "jest-regex-util": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", -- "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", -+ "version": "29.6.3", -+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", -+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true - }, - "jest-resolve": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", -- "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", -+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "requires": { -- "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", -- "jest-haste-map": "^27.5.1", -+ "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", -- "jest-util": "^27.5.1", -- "jest-validate": "^27.5.1", -+ "jest-util": "^29.7.0", -+ "jest-validate": "^29.7.0", - "resolve": "^1.20.0", -- "resolve.exports": "^1.1.0", -+ "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "dependencies": { -@@ -37168,43 +36957,42 @@ - } - }, - "jest-resolve-dependencies": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", -- "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", -+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "requires": { -- "@jest/types": "^27.5.1", -- "jest-regex-util": "^27.5.1", -- "jest-snapshot": "^27.5.1" -+ "jest-regex-util": "^29.6.3", -+ "jest-snapshot": "^29.7.0" - } - }, - "jest-runner": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", -- "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", -+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "requires": { -- "@jest/console": "^27.5.1", -- "@jest/environment": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/console": "^29.7.0", -+ "@jest/environment": "^29.7.0", -+ "@jest/test-result": "^29.7.0", -+ "@jest/transform": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", -- "emittery": "^0.8.1", -+ "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", -- "jest-docblock": "^27.5.1", -- "jest-environment-jsdom": "^27.5.1", -- "jest-environment-node": "^27.5.1", -- "jest-haste-map": "^27.5.1", -- "jest-leak-detector": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-resolve": "^27.5.1", -- "jest-runtime": "^27.5.1", -- "jest-util": "^27.5.1", -- "jest-worker": "^27.5.1", -- "source-map-support": "^0.5.6", -- "throat": "^6.0.1" -+ "jest-docblock": "^29.7.0", -+ "jest-environment-node": "^29.7.0", -+ "jest-haste-map": "^29.7.0", -+ "jest-leak-detector": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-resolve": "^29.7.0", -+ "jest-runtime": "^29.7.0", -+ "jest-util": "^29.7.0", -+ "jest-watcher": "^29.7.0", -+ "jest-worker": "^29.7.0", -+ "p-limit": "^3.1.0", -+ "source-map-support": "0.5.13" - }, - "dependencies": { - "ansi-styles": { -@@ -37247,6 +37035,31 @@ - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, -+ "p-limit": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", -+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", -+ "dev": true, -+ "requires": { -+ "yocto-queue": "^0.1.0" -+ } -+ }, -+ "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 -+ }, -+ "source-map-support": { -+ "version": "0.5.13", -+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", -+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", -+ "dev": true, -+ "requires": { -+ "buffer-from": "^1.0.0", -+ "source-map": "^0.6.0" -+ } -+ }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -37259,31 +37072,31 @@ - } - }, - "jest-runtime": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", -- "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", -- "dev": true, -- "requires": { -- "@jest/environment": "^27.5.1", -- "@jest/fake-timers": "^27.5.1", -- "@jest/globals": "^27.5.1", -- "@jest/source-map": "^27.5.1", -- "@jest/test-result": "^27.5.1", -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", -+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", -+ "dev": true, -+ "requires": { -+ "@jest/environment": "^29.7.0", -+ "@jest/fake-timers": "^29.7.0", -+ "@jest/globals": "^29.7.0", -+ "@jest/source-map": "^29.6.3", -+ "@jest/test-result": "^29.7.0", -+ "@jest/transform": "^29.7.0", -+ "@jest/types": "^29.6.3", -+ "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", -- "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", -- "jest-haste-map": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-mock": "^27.5.1", -- "jest-regex-util": "^27.5.1", -- "jest-resolve": "^27.5.1", -- "jest-snapshot": "^27.5.1", -- "jest-util": "^27.5.1", -+ "jest-haste-map": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-mock": "^29.7.0", -+ "jest-regex-util": "^29.6.3", -+ "jest-resolve": "^29.7.0", -+ "jest-snapshot": "^29.7.0", -+ "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, -@@ -37339,44 +37152,32 @@ - } - } - }, -- "jest-serializer": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", -- "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", -- "dev": true, -- "requires": { -- "@types/node": "*", -- "graceful-fs": "^4.2.9" -- } -- }, - "jest-snapshot": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", -- "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", -+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "requires": { -- "@babel/core": "^7.7.2", -+ "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", -+ "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", -- "@babel/traverse": "^7.7.2", -- "@babel/types": "^7.0.0", -- "@jest/transform": "^27.5.1", -- "@jest/types": "^27.5.1", -- "@types/babel__traverse": "^7.0.4", -- "@types/prettier": "^2.1.5", -+ "@babel/types": "^7.3.3", -+ "@jest/expect-utils": "^29.7.0", -+ "@jest/transform": "^29.7.0", -+ "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", -- "expect": "^27.5.1", -+ "expect": "^29.7.0", - "graceful-fs": "^4.2.9", -- "jest-diff": "^27.5.1", -- "jest-get-type": "^27.5.1", -- "jest-haste-map": "^27.5.1", -- "jest-matcher-utils": "^27.5.1", -- "jest-message-util": "^27.5.1", -- "jest-util": "^27.5.1", -+ "jest-diff": "^29.7.0", -+ "jest-get-type": "^29.6.3", -+ "jest-matcher-utils": "^29.7.0", -+ "jest-message-util": "^29.7.0", -+ "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", -- "pretty-format": "^27.5.1", -- "semver": "^7.3.2" -+ "pretty-format": "^29.7.0", -+ "semver": "^7.5.3" - }, - "dependencies": { - "ansi-styles": { -@@ -37419,6 +37220,15 @@ - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, -+ "semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^6.0.0" -+ } -+ }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -@@ -37430,22 +37240,31 @@ - } - } - }, -- "jest-sonar-reporter": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/jest-sonar-reporter/-/jest-sonar-reporter-2.0.0.tgz", -- "integrity": "sha512-ZervDCgEX5gdUbdtWsjdipLN3bKJwpxbvhkYNXTAYvAckCihobSLr9OT/IuyNIRT1EZMDDwR6DroWtrq+IL64w==", -+ "jest-sonar": { -+ "version": "0.2.16", -+ "resolved": "https://registry.npmjs.org/jest-sonar/-/jest-sonar-0.2.16.tgz", -+ "integrity": "sha512-ES6Z9BbIVDELtbz+/b6pv41B2qOfp38cQpoCLqei21FtlkG/GzhyQ0M3egEIM+erpJOkpRKM8Tc8/YQtHdiTXA==", - "dev": true, - "requires": { -- "xml": "^1.0.1" -+ "entities": "4.3.0", -+ "strip-ansi": "6.0.1" -+ }, -+ "dependencies": { -+ "entities": { -+ "version": "4.3.0", -+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", -+ "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==", -+ "dev": true -+ } - } - }, - "jest-util": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", -- "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", -+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "requires": { -- "@jest/types": "^27.5.1", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", -@@ -37505,17 +37324,17 @@ - } - }, - "jest-validate": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", -- "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", -+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "requires": { -- "@jest/types": "^27.5.1", -+ "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", -- "jest-get-type": "^27.5.1", -+ "jest-get-type": "^29.6.3", - "leven": "^3.1.0", -- "pretty-format": "^27.5.1" -+ "pretty-format": "^29.7.0" - }, - "dependencies": { - "ansi-styles": { -@@ -37576,17 +37395,18 @@ - } - }, - "jest-watcher": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", -- "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", -+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "requires": { -- "@jest/test-result": "^27.5.1", -- "@jest/types": "^27.5.1", -+ "@jest/test-result": "^29.7.0", -+ "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", -- "jest-util": "^27.5.1", -+ "emittery": "^0.13.1", -+ "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "dependencies": { -@@ -37642,12 +37462,13 @@ - } - }, - "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==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", -+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "requires": { - "@types/node": "*", -+ "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, -@@ -37669,6 +37490,12 @@ - } - } - }, -+ "jiti": { -+ "version": "1.21.0", -+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", -+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", -+ "dev": true -+ }, - "jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", -@@ -37676,15 +37503,15 @@ - "dev": true - }, - "joi": { -- "version": "17.6.0", -- "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", -- "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", -+ "version": "17.11.0", -+ "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", -+ "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", -- "@sideway/formula": "^3.0.0", -+ "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, -@@ -37742,6 +37569,14 @@ - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" -+ }, -+ "dependencies": { -+ "parse5": { -+ "version": "6.0.1", -+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", -+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", -+ "dev": true -+ } - } - }, - "jsesc": { -@@ -37749,12 +37584,6 @@ - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, -- "json-parse-better-errors": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", -- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", -- "dev": true -- }, - "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", -@@ -37798,14 +37627,14 @@ - "dev": true - }, - "json5": { -- "version": "2.2.1", -- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", -- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" -+ "version": "2.2.3", -+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", -+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonc-parser": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", -- "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", -+ "version": "3.2.0", -+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", -+ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "jsonfile": { -@@ -37856,21 +37685,6 @@ - "source-map-support": "^0.5.5" - } - }, -- "katex": { -- "version": "0.15.6", -- "resolved": "https://registry.npmjs.org/katex/-/katex-0.15.6.tgz", -- "integrity": "sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==", -- "requires": { -- "commander": "^8.0.0" -- }, -- "dependencies": { -- "commander": { -- "version": "8.3.0", -- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", -- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" -- } -- } -- }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", -@@ -37884,9 +37698,9 @@ - "dev": true - }, - "klona": { -- "version": "2.0.5", -- "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", -- "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", -+ "version": "2.0.6", -+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", -+ "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true - }, - "kuler": { -@@ -37895,6 +37709,16 @@ - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true - }, -+ "launch-editor": { -+ "version": "2.6.1", -+ "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", -+ "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", -+ "dev": true, -+ "requires": { -+ "picocolors": "^1.0.0", -+ "shell-quote": "^1.8.1" -+ } -+ }, - "lcid": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", -@@ -37905,9 +37729,9 @@ - } - }, - "less": { -- "version": "4.1.2", -- "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", -- "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", -+ "version": "4.1.3", -+ "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", -+ "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "dev": true, - "requires": { - "copy-anything": "^2.0.1", -@@ -37916,7 +37740,7 @@ - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", -- "needle": "^2.5.2", -+ "needle": "^3.1.0", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" -@@ -37941,9 +37765,9 @@ - "optional": true - }, - "semver": { -- "version": "5.7.1", -- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", -- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", -+ "version": "5.7.2", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", -+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "optional": true - }, -@@ -37957,9 +37781,9 @@ - } - }, - "less-loader": { -- "version": "10.2.0", -- "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz", -- "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==", -+ "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, - "requires": { - "klona": "^2.0.4" -@@ -37991,9 +37815,9 @@ - } - }, - "lilconfig": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", -- "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", -+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true - }, - "limiter": { -@@ -38009,139 +37833,163 @@ - "dev": true - }, - "lint-staged": { -- "version": "12.3.7", -- "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.7.tgz", -- "integrity": "sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ==", -+ "version": "14.0.1", -+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-14.0.1.tgz", -+ "integrity": "sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==", - "dev": true, - "requires": { -- "cli-truncate": "^3.1.0", -- "colorette": "^2.0.16", -- "commander": "^8.3.0", -- "debug": "^4.3.3", -- "execa": "^5.1.1", -- "lilconfig": "2.0.4", -- "listr2": "^4.0.1", -- "micromatch": "^4.0.4", -- "normalize-path": "^3.0.0", -- "object-inspect": "^1.12.0", -- "pidtree": "^0.5.0", -- "string-argv": "^0.3.1", -- "supports-color": "^9.2.1", -- "yaml": "^1.10.2" -+ "chalk": "5.3.0", -+ "commander": "11.0.0", -+ "debug": "4.3.4", -+ "execa": "7.2.0", -+ "lilconfig": "2.1.0", -+ "listr2": "6.6.1", -+ "micromatch": "4.0.5", -+ "pidtree": "0.6.0", -+ "string-argv": "0.3.2", -+ "yaml": "2.3.1" - }, - "dependencies": { -- "commander": { -- "version": "8.3.0", -- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", -- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", -+ "chalk": { -+ "version": "5.3.0", -+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", -+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true - }, -- "supports-color": { -- "version": "9.2.2", -- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", -- "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", -- "dev": true -- } -- } -- }, -- "listr2": { -- "version": "4.0.5", -- "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", -- "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", -- "dev": true, -- "requires": { -- "cli-truncate": "^2.1.0", -- "colorette": "^2.0.16", -- "log-update": "^4.0.0", -- "p-map": "^4.0.0", -- "rfdc": "^1.3.0", -- "rxjs": "^7.5.5", -- "through": "^2.3.8", -- "wrap-ansi": "^7.0.0" -- }, -- "dependencies": { -- "ansi-styles": { -- "version": "4.3.0", -- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", -- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", -+ "execa": { -+ "version": "7.2.0", -+ "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", -+ "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "requires": { -- "color-convert": "^2.0.1" -+ "cross-spawn": "^7.0.3", -+ "get-stream": "^6.0.1", -+ "human-signals": "^4.3.0", -+ "is-stream": "^3.0.0", -+ "merge-stream": "^2.0.0", -+ "npm-run-path": "^5.1.0", -+ "onetime": "^6.0.0", -+ "signal-exit": "^3.0.7", -+ "strip-final-newline": "^3.0.0" - } - }, -- "cli-truncate": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", -- "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", -+ "human-signals": { -+ "version": "4.3.1", -+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", -+ "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", -+ "dev": true -+ }, -+ "is-stream": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", -+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", -+ "dev": true -+ }, -+ "mimic-fn": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", -+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", -+ "dev": true -+ }, -+ "npm-run-path": { -+ "version": "5.1.0", -+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", -+ "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "requires": { -- "slice-ansi": "^3.0.0", -- "string-width": "^4.2.0" -+ "path-key": "^4.0.0" - } - }, -- "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==", -+ "onetime": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", -+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { -- "color-name": "~1.1.4" -+ "mimic-fn": "^4.0.0" - } - }, -- "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==", -+ "path-key": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", -+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - }, -- "is-fullwidth-code-point": { -+ "strip-final-newline": { - "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==", -+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", -+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true -- }, -- "slice-ansi": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", -- "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", -- "dev": true, -- "requires": { -- "ansi-styles": "^4.0.0", -- "astral-regex": "^2.0.0", -- "is-fullwidth-code-point": "^3.0.0" -- } - } - } - }, -- "load-json-file": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", -- "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", -+ "listr2": { -+ "version": "6.6.1", -+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", -+ "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", - "dev": true, - "requires": { -- "graceful-fs": "^4.1.2", -- "parse-json": "^2.2.0", -- "pify": "^2.0.0", -- "pinkie-promise": "^2.0.0", -- "strip-bom": "^2.0.0" -+ "cli-truncate": "^3.1.0", -+ "colorette": "^2.0.20", -+ "eventemitter3": "^5.0.1", -+ "log-update": "^5.0.1", -+ "rfdc": "^1.3.0", -+ "wrap-ansi": "^8.1.0" - }, - "dependencies": { -- "parse-json": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", -- "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", -+ "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 -+ }, -+ "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 -+ }, -+ "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 -+ }, -+ "eventemitter3": { -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", -+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", -+ "dev": true -+ }, -+ "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, - "requires": { -- "error-ex": "^1.2.0" -+ "eastasianwidth": "^0.2.0", -+ "emoji-regex": "^9.2.2", -+ "strip-ansi": "^7.0.1" - } - }, -- "strip-bom": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", -- "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", -+ "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, - "requires": { -- "is-utf8": "^0.2.0" -+ "ansi-regex": "^6.0.1" -+ } -+ }, -+ "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, -+ "requires": { -+ "ansi-styles": "^6.1.0", -+ "string-width": "^5.0.1", -+ "strip-ansi": "^7.0.1" - } - } - } -@@ -38179,216 +38027,63 @@ - "dev": true - }, - "loader-utils": { -- "version": "3.2.0", -- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", -- "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", -+ "version": "3.2.1", -+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", -+ "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true - }, - "localtunnel": { -- "version": "1.9.0", -- "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.0.tgz", -- "integrity": "sha512-wCIiIHJ8kKIcWkTQE3m1VRABvsH2ZuOkiOpZUofUCf6Q42v3VIZ+Q0YfX1Z4sYDRj0muiKL1bLvz1FeoxsPO0w==", -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", -+ "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", - "dev": true, - "requires": { -- "axios": "0.17.1", -- "debug": "2.6.8", -+ "axios": "0.21.4", -+ "debug": "4.3.2", - "openurl": "1.1.1", -- "yargs": "6.6.0" -+ "yargs": "17.1.1" - }, - "dependencies": { -- "ansi-regex": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", -- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", -- "dev": true -- }, -- "camelcase": { -- "version": "3.0.0", -- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", -- "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", -- "dev": true -- }, - "cliui": { -- "version": "3.2.0", -- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", -- "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", -+ "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, - "requires": { -- "string-width": "^1.0.1", -- "strip-ansi": "^3.0.1", -- "wrap-ansi": "^2.0.0" -+ "string-width": "^4.2.0", -+ "strip-ansi": "^6.0.0", -+ "wrap-ansi": "^7.0.0" - } - }, - "debug": { -- "version": "2.6.8", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", -- "integrity": "sha512-E22fsyWPt/lr4/UgQLt/pXqerGMDsanhbnmqIS3VAXuDi1v3IpiwXe2oncEIondHSBuPDWRoK/pMjlvi8FuOXQ==", -- "dev": true, -- "requires": { -- "ms": "2.0.0" -- } -- }, -- "find-up": { -- "version": "1.1.2", -- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", -- "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", -- "dev": true, -- "requires": { -- "path-exists": "^2.0.0", -- "pinkie-promise": "^2.0.0" -- } -- }, -- "get-caller-file": { -- "version": "1.0.3", -- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", -- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", -- "dev": true -- }, -- "invert-kv": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", -- "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", -- "dev": true -- }, -- "is-fullwidth-code-point": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", -- "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", -- "dev": true, -- "requires": { -- "number-is-nan": "^1.0.0" -- } -- }, -- "lcid": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", -- "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", -- "dev": true, -- "requires": { -- "invert-kv": "^1.0.0" -- } -- }, -- "ms": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", -- "dev": true -- }, -- "os-locale": { -- "version": "1.4.0", -- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", -- "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", -- "dev": true, -- "requires": { -- "lcid": "^1.0.0" -- } -- }, -- "path-exists": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", -- "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", -- "dev": true, -- "requires": { -- "pinkie-promise": "^2.0.0" -- } -- }, -- "path-type": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", -- "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", -- "dev": true, -- "requires": { -- "graceful-fs": "^4.1.2", -- "pify": "^2.0.0", -- "pinkie-promise": "^2.0.0" -- } -- }, -- "read-pkg": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", -- "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", -+ "version": "4.3.2", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", -+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { -- "load-json-file": "^1.0.0", -- "normalize-package-data": "^2.3.2", -- "path-type": "^1.0.0" -- } -- }, -- "read-pkg-up": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", -- "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", -- "dev": true, -- "requires": { -- "find-up": "^1.0.0", -- "read-pkg": "^1.0.0" -- } -- }, -- "string-width": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", -- "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", -- "dev": true, -- "requires": { -- "code-point-at": "^1.0.0", -- "is-fullwidth-code-point": "^1.0.0", -- "strip-ansi": "^3.0.0" -- } -- }, -- "strip-ansi": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", -- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", -- "dev": true, -- "requires": { -- "ansi-regex": "^2.0.0" -- } -- }, -- "wrap-ansi": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", -- "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", -- "dev": true, -- "requires": { -- "string-width": "^1.0.1", -- "strip-ansi": "^3.0.1" -+ "ms": "2.1.2" - } - }, -- "y18n": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", -- "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", -- "dev": true -- }, - "yargs": { -- "version": "6.6.0", -- "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", -- "integrity": "sha512-6/QWTdisjnu5UHUzQGst+UOEuEVwIzFVGBjq3jMTFNs5WJQsH/X6nMURSaScIdF5txylr1Ao9bvbWiKi2yXbwA==", -+ "version": "17.1.1", -+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", -+ "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", - "dev": true, - "requires": { -- "camelcase": "^3.0.0", -- "cliui": "^3.2.0", -- "decamelize": "^1.1.1", -- "get-caller-file": "^1.0.1", -- "os-locale": "^1.4.0", -- "read-pkg-up": "^1.0.1", -+ "cliui": "^7.0.2", -+ "escalade": "^3.1.1", -+ "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", -- "require-main-filename": "^1.0.1", -- "set-blocking": "^2.0.0", -- "string-width": "^1.0.2", -- "which-module": "^1.0.0", -- "y18n": "^3.2.1", -- "yargs-parser": "^4.2.0" -+ "string-width": "^4.2.0", -+ "y18n": "^5.0.5", -+ "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { -- "version": "4.2.1", -- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", -- "integrity": "sha512-+QQWqC2xeL0N5/TE+TY6OGEqyNRM+g2/r712PDNYgiCdXYCApXf1vzfmDSLBxfGRwV+moTq/V8FnMI24JCm2Yg==", -- "dev": true, -- "requires": { -- "camelcase": "^3.0.0" -- } -+ "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 - } - } - }, -@@ -38410,7 +38105,26 @@ - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", -- "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" -+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", -+ "dev": true -+ }, -+ "lodash.escape": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", -+ "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", -+ "dev": true -+ }, -+ "lodash.flatten": { -+ "version": "4.4.0", -+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", -+ "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", -+ "dev": true -+ }, -+ "lodash.invokemap": { -+ "version": "4.6.0", -+ "resolved": "https://registry.npmjs.org/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz", -+ "integrity": "sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==", -+ "dev": true - }, - "lodash.isfinite": { - "version": "3.3.2", -@@ -38421,7 +38135,8 @@ - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", -- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" -+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", -+ "dev": true - }, - "lodash.merge": { - "version": "4.6.2", -@@ -38429,10 +38144,17 @@ - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, -- "lodash.throttle": { -- "version": "4.1.1", -- "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", -- "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" -+ "lodash.pullall": { -+ "version": "4.2.0", -+ "resolved": "https://registry.npmjs.org/lodash.pullall/-/lodash.pullall-4.2.0.tgz", -+ "integrity": "sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==", -+ "dev": true -+ }, -+ "lodash.uniqby": { -+ "version": "4.7.0", -+ "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", -+ "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", -+ "dev": true - }, - "log-symbols": { - "version": "4.1.0", -@@ -38496,67 +38218,99 @@ - } - }, - "log-update": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", -- "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", -+ "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", - "dev": true, - "requires": { -- "ansi-escapes": "^4.3.0", -- "cli-cursor": "^3.1.0", -- "slice-ansi": "^4.0.0", -- "wrap-ansi": "^6.2.0" -+ "ansi-escapes": "^5.0.0", -+ "cli-cursor": "^4.0.0", -+ "slice-ansi": "^5.0.0", -+ "strip-ansi": "^7.0.1", -+ "wrap-ansi": "^8.0.1" - }, - "dependencies": { -- "ansi-styles": { -- "version": "4.3.0", -- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", -- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", -+ "ansi-escapes": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", -+ "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", - "dev": true, - "requires": { -- "color-convert": "^2.0.1" -+ "type-fest": "^1.0.2" - } - }, -- "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==", -+ "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 -+ }, -+ "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 -+ }, -+ "cli-cursor": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", -+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "requires": { -- "color-name": "~1.1.4" -+ "restore-cursor": "^4.0.0" - } - }, -- "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 -- }, -- "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==", -+ "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 - }, -- "slice-ansi": { -+ "restore-cursor": { - "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", -- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", -+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", -+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", -+ "dev": true, -+ "requires": { -+ "onetime": "^5.1.0", -+ "signal-exit": "^3.0.2" -+ } -+ }, -+ "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, -+ "requires": { -+ "eastasianwidth": "^0.2.0", -+ "emoji-regex": "^9.2.2", -+ "strip-ansi": "^7.0.1" -+ } -+ }, -+ "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, - "requires": { -- "ansi-styles": "^4.0.0", -- "astral-regex": "^2.0.0", -- "is-fullwidth-code-point": "^3.0.0" -+ "ansi-regex": "^6.0.1" - } - }, -+ "type-fest": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", -+ "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", -+ "dev": true -+ }, - "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==", -+ "version": "8.1.0", -+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", -+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { -- "ansi-styles": "^4.0.0", -- "string-width": "^4.1.0", -- "strip-ansi": "^6.0.0" -+ "ansi-styles": "^6.1.0", -+ "string-width": "^5.0.1", -+ "strip-ansi": "^7.0.1" - } - } - } -@@ -38589,28 +38343,31 @@ - "dev": true - }, - "magic-string": { -- "version": "0.25.7", -- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", -- "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", -+ "version": "0.30.1", -+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", -+ "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", - "dev": true, - "requires": { -- "sourcemap-codec": "^1.4.4" -+ "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, - "make-dir": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", -- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", -+ "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, - "requires": { -- "semver": "^6.0.0" -+ "semver": "^7.5.3" - }, - "dependencies": { - "semver": { -- "version": "6.3.0", -- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -- "dev": true -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^6.0.0" -+ } - } - } - }, -@@ -38662,32 +38419,6 @@ - "p-defer": "^1.0.0" - } - }, -- "map-cache": { -- "version": "0.2.2", -- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", -- "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", -- "dev": true -- }, -- "map-visit": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", -- "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", -- "dev": true, -- "requires": { -- "object-visit": "^1.0.0" -- } -- }, -- "marked": { -- "version": "4.0.17", -- "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.17.tgz", -- "integrity": "sha512-Wfk0ATOK5iPxM4ptrORkFemqroz0ZDxp5MWfYA7H/F+wO17NRWV5Ypxi6p3g2Xmw2bKeiYOl6oVnLHKxBA0VhA==" -- }, -- "math-random": { -- "version": "1.0.4", -- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", -- "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", -- "dev": true -- }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", -@@ -38752,12 +38483,12 @@ - } - }, - "memfs": { -- "version": "3.4.6", -- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.6.tgz", -- "integrity": "sha512-rH9mjopto6Wkr7RFuH9l9dk3qb2XGOcYKr7xMhaYqfzuJqOqhRrcFvfD7JMuPj6SLmPreh5+6eAuv36NFAU+Mw==", -+ "version": "3.5.3", -+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", -+ "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "requires": { -- "fs-monkey": "^1.0.3" -+ "fs-monkey": "^1.0.4" - } - }, - "merge-descriptors": { -@@ -38800,8 +38531,7 @@ - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", -- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", -- "dev": true -+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", -@@ -38813,7 +38543,6 @@ - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", -- "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" -@@ -38847,26 +38576,12 @@ - "dev": true - }, - "mini-css-extract-plugin": { -- "version": "2.5.3", -- "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz", -- "integrity": "sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==", -+ "version": "2.7.6", -+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", -+ "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" -- }, -- "dependencies": { -- "schema-utils": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", -- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", -- "dev": true, -- "requires": { -- "@types/json-schema": "^7.0.9", -- "ajv": "^8.8.0", -- "ajv-formats": "^2.1.1", -- "ajv-keywords": "^5.0.0" -- } -- } - } - }, - "minimalistic-assert": { -@@ -38879,14 +38594,15 @@ - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", -+ "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { -- "version": "1.2.6", -- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", -- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", -+ "version": "1.2.8", -+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", -+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "minipass": { -@@ -38966,26 +38682,11 @@ - "yallist": "^4.0.0" - } - }, -- "mixin-deep": { -- "version": "1.3.2", -- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", -- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", -- "dev": true, -- "requires": { -- "for-in": "^1.0.2", -- "is-extendable": "^1.0.1" -- }, -- "dependencies": { -- "is-extendable": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", -- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", -- "dev": true, -- "requires": { -- "is-plain-object": "^2.0.4" -- } -- } -- } -+ "mitt": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", -+ "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", -+ "dev": true - }, - "mkdirp": { - "version": "1.0.4", -@@ -39004,11 +38705,6 @@ - "mkdirp": "^1.0.3" - } - }, -- "moment": { -- "version": "2.29.3", -- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", -- "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" -- }, - "mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", -@@ -39021,21 +38717,15 @@ - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { -- "version": "6.2.3", -- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", -- "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", -+ "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, - "requires": { -- "dns-packet": "^1.3.1", -+ "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, -- "multicast-dns-service-types": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", -- "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==", -- "dev": true -- }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", -@@ -39055,52 +38745,12 @@ - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, -- "nan": { -- "version": "2.16.0", -- "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", -- "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", -- "dev": true, -- "optional": true -- }, - "nanoid": { -- "version": "3.3.4", -- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", -- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", -+ "version": "3.3.6", -+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", -+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, -- "nanomatch": { -- "version": "1.2.13", -- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", -- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", -- "dev": true, -- "requires": { -- "arr-diff": "^4.0.0", -- "array-unique": "^0.3.2", -- "define-property": "^2.0.2", -- "extend-shallow": "^3.0.2", -- "fragment-cache": "^0.2.1", -- "is-windows": "^1.0.2", -- "kind-of": "^6.0.2", -- "object.pick": "^1.3.0", -- "regex-not": "^1.0.0", -- "snapdragon": "^0.8.1", -- "to-regex": "^3.0.1" -- }, -- "dependencies": { -- "arr-diff": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", -- "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", -- "dev": true -- }, -- "array-unique": { -- "version": "0.3.2", -- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", -- "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", -- "dev": true -- } -- } -- }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", -@@ -39108,14 +38758,14 @@ - "dev": true - }, - "needle": { -- "version": "2.9.1", -- "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", -- "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", -+ "version": "3.2.0", -+ "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", -+ "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", -- "iconv-lite": "^0.4.4", -+ "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "dependencies": { -@@ -39129,10 +38779,20 @@ - "ms": "^2.1.1" - } - }, -+ "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, -+ "requires": { -+ "safer-buffer": ">= 2.1.2 < 3.0.0" -+ } -+ }, - "sax": { -- "version": "1.2.4", -- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", -- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", -+ "version": "1.3.0", -+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", -+ "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", - "dev": true, - "optional": true - } -@@ -39151,34 +38811,13 @@ - "dev": true - }, - "ngx-infinite-scroll": { -- "version": "13.0.1", -- "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-13.0.1.tgz", -- "integrity": "sha512-B0E5gxnM/ljM76ap/cb9SYI7RUDBK3bNRPY3W+j+ynkrDtJWzyVgVp0Diit4HqnTUskOYmRctwfP/CVznH4v9A==", -- "requires": { -- "tslib": "^2.3.0" -- } -- }, -- "ngx-markdown": { -- "version": "13.1.0", -- "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-13.1.0.tgz", -- "integrity": "sha512-Bm4WhMI9xSnWTzzQWs/e1+d/l0s3+eFU0Ug/lcePmiWEZAPqiceEe6akjh4+Tjp61SmZ/wmKr8Kvc8mr9moP9A==", -+ "version": "16.0.0", -+ "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-16.0.0.tgz", -+ "integrity": "sha512-bzyNYd+wVlUUxcopRVr2DAa81eEc8vITtKVvb+c7R1uy8hWPTlxOEXf3L1qA4FMwTEzCQ9b37TXzlJji3qBy+A==", - "requires": { -- "@types/marked": "^4.0.2", -- "emoji-toolkit": "^6.6.0", -- "katex": "^0.15.1", -- "marked": "^4.0.10", -- "prismjs": "^1.25.0", - "tslib": "^2.3.0" - } - }, -- "ngx-webstorage": { -- "version": "9.0.0", -- "resolved": "https://registry.npmjs.org/ngx-webstorage/-/ngx-webstorage-9.0.0.tgz", -- "integrity": "sha512-OighIRoNiGlJLM+mcb850ZkmEdY4JYnGNqKy91hlMgmD9zvUCwC+6pcv1NMncxBP9vnQAqRb65cdY5MBppGM/Q==", -- "requires": { -- "tslib": "^2.0.0" -- } -- }, - "nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", -@@ -39252,12 +38891,23 @@ - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" -+ }, -+ "dependencies": { -+ "rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "requires": { -+ "glob": "^7.1.3" -+ } -+ } - } - }, - "node-gyp-build": { -- "version": "4.4.0", -- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", -- "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", -+ "version": "4.6.1", -+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", -+ "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", - "dev": true, - "optional": true - }, -@@ -39282,9 +38932,9 @@ - } - }, - "node-releases": { -- "version": "2.0.5", -- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", -- "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" -+ "version": "2.0.13", -+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", -+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" - }, - "nopt": { - "version": "5.0.0", -@@ -39543,6 +39193,50 @@ - "brace-expansion": "^2.0.1" - } - }, -+ "rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "requires": { -+ "glob": "^7.1.3" -+ }, -+ "dependencies": { -+ "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, -+ "requires": { -+ "balanced-match": "^1.0.0", -+ "concat-map": "0.0.1" -+ } -+ }, -+ "glob": { -+ "version": "7.2.3", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", -+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", -+ "dev": true, -+ "requires": { -+ "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" -+ } -+ }, -+ "minimatch": { -+ "version": "3.1.2", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", -+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", -+ "dev": true, -+ "requires": { -+ "brace-expansion": "^1.1.7" -+ } -+ } -+ } -+ }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", -@@ -39595,16 +39289,10 @@ - "boolbase": "^1.0.0" - } - }, -- "number-is-nan": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", -- "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", -- "dev": true -- }, - "nwsapi": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", -- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", -+ "version": "2.2.7", -+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", -+ "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "oauth-sign": { -@@ -39619,148 +39307,18 @@ - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, -- "object-component": { -- "version": "0.0.3", -- "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", -- "integrity": "sha512-S0sN3agnVh2SZNEIGc0N1X4Z5K0JeFbGBrnuZpsxuUh5XLF0BnvWkMjRXo/zGKLd/eghvNIKcx1pQkmUjXIyrA==", -- "dev": true -- }, -- "object-copy": { -- "version": "0.1.0", -- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", -- "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", -- "dev": true, -- "requires": { -- "copy-descriptor": "^0.1.0", -- "define-property": "^0.2.5", -- "kind-of": "^3.0.3" -- }, -- "dependencies": { -- "define-property": { -- "version": "0.2.5", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", -- "dev": true, -- "requires": { -- "is-descriptor": "^0.1.0" -- } -- }, -- "is-accessor-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", -- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- } -- }, -- "is-data-descriptor": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", -- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- } -- }, -- "is-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", -- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", -- "dev": true, -- "requires": { -- "is-accessor-descriptor": "^0.1.6", -- "is-data-descriptor": "^0.1.4", -- "kind-of": "^5.0.0" -- }, -- "dependencies": { -- "kind-of": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", -- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", -- "dev": true -- } -- } -- }, -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -- } -- }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, -- "object-is": { -- "version": "1.1.5", -- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", -- "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", -- "dev": true, -- "requires": { -- "call-bind": "^1.0.2", -- "define-properties": "^1.1.3" -- } -- }, -- "object-keys": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", -- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", -- "dev": true -- }, - "object-path": { -- "version": "0.9.2", -- "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", -- "integrity": "sha512-hPv/mbCYtXOhhqstmodis0boF1ooA8yz3PDJwTnkZvOlaJkd5aCAgA9tq6BUjJW5w8jXHI2qi9+w5N0tz+AAaA==", -+ "version": "0.11.8", -+ "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", -+ "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", - "dev": true - }, -- "object-visit": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", -- "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", -- "dev": true, -- "requires": { -- "isobject": "^3.0.0" -- } -- }, -- "object.assign": { -- "version": "4.1.2", -- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", -- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", -- "dev": true, -- "requires": { -- "call-bind": "^1.0.0", -- "define-properties": "^1.1.3", -- "has-symbols": "^1.0.1", -- "object-keys": "^1.1.1" -- } -- }, -- "object.omit": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", -- "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", -- "dev": true, -- "requires": { -- "for-own": "^0.1.4", -- "is-extendable": "^0.1.1" -- } -- }, -- "object.pick": { -- "version": "1.3.0", -- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", -- "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", -- "dev": true, -- "requires": { -- "isobject": "^3.0.1" -- } -- }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", -@@ -39786,6 +39344,7 @@ - "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, - "requires": { - "wrappy": "1" - } -@@ -39817,9 +39376,9 @@ - } - }, - "open": { -- "version": "8.4.0", -- "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", -- "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", -+ "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, - "requires": { - "define-lazy-prop": "^2.0.0", -@@ -39840,27 +39399,34 @@ - "dev": true - }, - "opn": { -- "version": "4.0.2", -- "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", -- "integrity": "sha512-iPBWbPP4OEOzR1xfhpGLDh+ypKBOygunZhM9jBtA7FS5sKjEiMZw0EFb82hnDOmTZX90ZWLoZKUza4cVt8MexA==", -+ "version": "5.3.0", -+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", -+ "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "dev": true, - "requires": { -- "object-assign": "^4.0.1", -- "pinkie-promise": "^2.0.0" -+ "is-wsl": "^1.1.0" -+ }, -+ "dependencies": { -+ "is-wsl": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", -+ "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", -+ "dev": true -+ } - } - }, - "optionator": { -- "version": "0.9.1", -- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", -- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", -+ "version": "0.9.3", -+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", -+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "requires": { -+ "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", -- "type-check": "^0.4.0", -- "word-wrap": "^1.2.3" -+ "type-check": "^0.4.0" - } - }, - "ora": { -@@ -40115,6 +39681,17 @@ - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" -+ }, -+ "dependencies": { -+ "rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dev": true, -+ "requires": { -+ "glob": "^7.1.3" -+ } -+ } - } - }, - "pako": { -@@ -40155,35 +39732,6 @@ - "integrity": "sha512-UGyowyjtx26n65kdAMWhm6/3uy5uSrpcuH7tt+QEVudiBoVS+eqHxD5kbi9oWVRwj7sCzXqwuM+rUGw7earl6A==", - "dev": true - }, -- "parse-glob": { -- "version": "3.0.4", -- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", -- "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", -- "dev": true, -- "requires": { -- "glob-base": "^0.3.0", -- "is-dotfile": "^1.0.0", -- "is-extglob": "^1.0.0", -- "is-glob": "^2.0.0" -- }, -- "dependencies": { -- "is-extglob": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", -- "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", -- "dev": true -- }, -- "is-glob": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", -- "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", -- "dev": true, -- "requires": { -- "is-extglob": "^1.0.0" -- } -- } -- } -- }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", -@@ -40203,55 +39751,32 @@ - "dev": true - }, - "parse5": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", -- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", -- "dev": true -- }, -- "parse5-html-rewriting-stream": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", -- "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", -+ "version": "7.1.2", -+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", -+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "requires": { -- "parse5": "^6.0.1", -- "parse5-sax-parser": "^6.0.1" -+ "entities": "^4.4.0" - } - }, -- "parse5-htmlparser2-tree-adapter": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", -- "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", -+ "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, - "requires": { -- "parse5": "^6.0.1" -+ "entities": "^4.3.0", -+ "parse5": "^7.0.0", -+ "parse5-sax-parser": "^7.0.0" - } - }, - "parse5-sax-parser": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", -- "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", -- "dev": true, -- "requires": { -- "parse5": "^6.0.1" -- } -- }, -- "parseqs": { -- "version": "0.0.5", -- "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", -- "integrity": "sha512-B3Nrjw2aL7aI4TDujOzfA4NsEc4u1lVcIRE0xesutH8kjeWF70uk+W5cBlIQx04zUH9NTBvuN36Y9xLRPK6Jjw==", -- "dev": true, -- "requires": { -- "better-assert": "~1.0.0" -- } -- }, -- "parseuri": { -- "version": "0.0.5", -- "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", -- "integrity": "sha512-ijhdxJu6l5Ru12jF0JvzXVPvsC+VibqeaExlNoMhWN6VQ79PGjkmc7oA4W1lp00sFkNyj0fx6ivPLdV51/UMog==", -+ "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, - "requires": { -- "better-assert": "~1.0.0" -+ "parse5": "^7.0.0" - } - }, - "parseurl": { -@@ -40260,12 +39785,6 @@ - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, -- "pascalcase": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", -- "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", -- "dev": true -- }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", -@@ -40275,7 +39794,8 @@ - "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==" -+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", -+ "dev": true - }, - "path-key": { - "version": "3.1.1", -@@ -40289,6 +39809,30 @@ - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, -+ "path-scurry": { -+ "version": "1.10.1", -+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", -+ "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^9.1.1 || ^10.0.0", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" -+ }, -+ "dependencies": { -+ "lru-cache": { -+ "version": "10.0.1", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", -+ "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", -+ "dev": true -+ }, -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", -@@ -40318,9 +39862,9 @@ - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pidtree": { -- "version": "0.5.0", -- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", -- "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", -+ "version": "0.6.0", -+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", -+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true - }, - "pify": { -@@ -40329,31 +39873,16 @@ - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, -- "pinkie": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", -- "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", -- "dev": true -- }, -- "pinkie-promise": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", -- "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", -- "dev": true, -- "requires": { -- "pinkie": "^2.0.0" -- } -- }, - "pirates": { -- "version": "4.0.5", -- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", -- "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", -+ "version": "4.0.6", -+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", -+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true - }, - "piscina": { -- "version": "3.2.0", -- "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", -- "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.0.0.tgz", -+ "integrity": "sha512-641nAmJS4k4iqpNUqfggqUBUMmlw0ZoM5VZKdQkV2e970Inn3Tk9kroCc1wpsYLD07vCwpys5iY0d3xI/9WkTg==", - "dev": true, - "requires": { - "eventemitter-asyncresource": "^1.0.0", -@@ -40422,257 +39951,49 @@ - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true - }, -- "portfinder": { -- "version": "1.0.28", -- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", -- "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", -- "dev": true, -- "requires": { -- "async": "^2.6.2", -- "debug": "^3.1.1", -- "mkdirp": "^0.5.5" -- }, -- "dependencies": { -- "debug": { -- "version": "3.2.7", -- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", -- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", -- "dev": true, -- "requires": { -- "ms": "^2.1.1" -- } -- }, -- "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, -- "requires": { -- "minimist": "^1.2.6" -- } -- } -- } -- }, - "portscanner": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", -- "integrity": "sha512-CUxI7PHXrWJTIPmQs1YJFyD4uesS3om2jVcgS3T1eYPyd60s1l0m7tf35Fn5KRAtV51SAD7BmImaOGf6vwhiFQ==", -+ "version": "2.2.0", -+ "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", -+ "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", - "dev": true, - "requires": { -- "async": "1.5.2", -+ "async": "^2.6.0", - "is-number-like": "^1.0.3" -- }, -- "dependencies": { -- "async": { -- "version": "1.5.2", -- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", -- "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", -- "dev": true -- } - } - }, -- "posix-character-classes": { -- "version": "0.1.1", -- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", -- "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", -- "dev": true -- }, - "postcss": { -- "version": "8.4.5", -- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", -- "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", -+ "version": "8.4.31", -+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", -+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "requires": { -- "nanoid": "^3.1.30", -+ "nanoid": "^3.3.6", - "picocolors": "^1.0.0", -- "source-map-js": "^1.0.1" -- } -- }, -- "postcss-attribute-case-insensitive": { -- "version": "5.0.1", -- "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.1.tgz", -- "integrity": "sha512-wrt2VndqSLJpyBRNz9OmJcgnhI9MaongeWgapdBuUMu2a/KNJ8SENesG4SdiTnQwGO9b1VKbTWYAfCPeokLqZQ==", -- "dev": true, -- "requires": { -- "postcss-selector-parser": "^6.0.10" -- } -- }, -- "postcss-color-functional-notation": { -- "version": "4.2.3", -- "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.3.tgz", -- "integrity": "sha512-5fbr6FzFzjwHXKsVnkmEYrJYG8VNNzvD1tAXaPPWR97S6rhKI5uh2yOfV5TAzhDkZoq4h+chxEplFDc8GeyFtw==", -- "dev": true, -- "requires": { -- "postcss-value-parser": "^4.2.0" -- } -- }, -- "postcss-color-hex-alpha": { -- "version": "8.0.4", -- "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", -- "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", -- "dev": true, -- "requires": { -- "postcss-value-parser": "^4.2.0" -- } -- }, -- "postcss-color-rebeccapurple": { -- "version": "7.1.0", -- "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.0.tgz", -- "integrity": "sha512-1jtE5AKnZcKq4pjOrltFHcbEM2/IvtbD1OdhZ/wqds18//bh0UmQkffcCkzDJU+/vGodfIsVQeKn+45CJvX9Bw==", -- "dev": true, -- "requires": { -- "postcss-value-parser": "^4.2.0" -- } -- }, -- "postcss-custom-media": { -- "version": "8.0.2", -- "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", -- "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", -- "dev": true, -- "requires": { -- "postcss-value-parser": "^4.2.0" -- } -- }, -- "postcss-custom-properties": { -- "version": "12.1.8", -- "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz", -- "integrity": "sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==", -- "dev": true, -- "requires": { -- "postcss-value-parser": "^4.2.0" -- } -- }, -- "postcss-custom-selectors": { -- "version": "6.0.3", -- "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", -- "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", -- "dev": true, -- "requires": { -- "postcss-selector-parser": "^6.0.4" -- } -- }, -- "postcss-dir-pseudo-class": { -- "version": "6.0.4", -- "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", -- "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", -- "dev": true, -- "requires": { -- "postcss-selector-parser": "^6.0.9" -- } -- }, -- "postcss-double-position-gradients": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz", -- "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==", -- "dev": true, -- "requires": { -- "@csstools/postcss-progressive-custom-properties": "^1.1.0", -- "postcss-value-parser": "^4.2.0" -- } -- }, -- "postcss-env-function": { -- "version": "4.0.6", -- "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", -- "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", -- "dev": true, -- "requires": { -- "postcss-value-parser": "^4.2.0" -- } -- }, -- "postcss-focus-visible": { -- "version": "6.0.4", -- "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", -- "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", -- "dev": true, -- "requires": { -- "postcss-selector-parser": "^6.0.9" -- } -- }, -- "postcss-focus-within": { -- "version": "5.0.4", -- "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", -- "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", -- "dev": true, -- "requires": { -- "postcss-selector-parser": "^6.0.9" -- } -- }, -- "postcss-font-variant": { -- "version": "5.0.0", -- "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", -- "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", -- "dev": true, -- "requires": {} -- }, -- "postcss-gap-properties": { -- "version": "3.0.3", -- "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", -- "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", -- "dev": true, -- "requires": {} -- }, -- "postcss-image-set-function": { -- "version": "4.0.6", -- "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", -- "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", -- "dev": true, -- "requires": { -- "postcss-value-parser": "^4.2.0" -- } -- }, -- "postcss-import": { -- "version": "14.0.2", -- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", -- "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", -- "dev": true, -- "requires": { -- "postcss-value-parser": "^4.0.0", -- "read-cache": "^1.0.0", -- "resolve": "^1.1.7" -- } -- }, -- "postcss-initial": { -- "version": "4.0.1", -- "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", -- "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", -- "dev": true, -- "requires": {} -- }, -- "postcss-lab-function": { -- "version": "4.2.0", -- "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", -- "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", -- "dev": true, -- "requires": { -- "@csstools/postcss-progressive-custom-properties": "^1.1.0", -- "postcss-value-parser": "^4.2.0" -+ "source-map-js": "^1.0.2" - } - }, - "postcss-loader": { -- "version": "6.2.1", -- "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", -- "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", -+ "version": "7.3.3", -+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", -+ "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", - "dev": true, - "requires": { -- "cosmiconfig": "^7.0.0", -- "klona": "^2.0.5", -- "semver": "^7.3.5" -+ "cosmiconfig": "^8.2.0", -+ "jiti": "^1.18.2", -+ "semver": "^7.3.8" -+ }, -+ "dependencies": { -+ "semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^6.0.0" -+ } -+ } - } - }, -- "postcss-logical": { -- "version": "5.0.4", -- "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", -- "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", -- "dev": true, -- "requires": {} -- }, -- "postcss-media-minmax": { -- "version": "5.0.0", -- "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", -- "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", -- "dev": true, -- "requires": {} -- }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", -@@ -40681,9 +40002,9 @@ - "requires": {} - }, - "postcss-modules-local-by-default": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", -- "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", -+ "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", -@@ -40709,109 +40030,10 @@ - "icss-utils": "^5.0.0" - } - }, -- "postcss-nesting": { -- "version": "10.1.8", -- "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.8.tgz", -- "integrity": "sha512-txdb3/idHYsBbNDFo1PFY0ExCgH5nfWi8G5lO49e6iuU42TydbODTzJgF5UuL5bhgeSlnAtDgfFTDG0Cl1zaSQ==", -- "dev": true, -- "requires": { -- "@csstools/selector-specificity": "^2.0.0", -- "postcss-selector-parser": "^6.0.10" -- } -- }, -- "postcss-overflow-shorthand": { -- "version": "3.0.3", -- "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", -- "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", -- "dev": true, -- "requires": {} -- }, -- "postcss-page-break": { -- "version": "3.0.4", -- "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", -- "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", -- "dev": true, -- "requires": {} -- }, -- "postcss-place": { -- "version": "7.0.4", -- "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", -- "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", -- "dev": true, -- "requires": { -- "postcss-value-parser": "^4.2.0" -- } -- }, -- "postcss-preset-env": { -- "version": "7.2.3", -- "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz", -- "integrity": "sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA==", -- "dev": true, -- "requires": { -- "autoprefixer": "^10.4.2", -- "browserslist": "^4.19.1", -- "caniuse-lite": "^1.0.30001299", -- "css-blank-pseudo": "^3.0.2", -- "css-has-pseudo": "^3.0.3", -- "css-prefers-color-scheme": "^6.0.2", -- "cssdb": "^5.0.0", -- "postcss-attribute-case-insensitive": "^5.0.0", -- "postcss-color-functional-notation": "^4.2.1", -- "postcss-color-hex-alpha": "^8.0.2", -- "postcss-color-rebeccapurple": "^7.0.2", -- "postcss-custom-media": "^8.0.0", -- "postcss-custom-properties": "^12.1.2", -- "postcss-custom-selectors": "^6.0.0", -- "postcss-dir-pseudo-class": "^6.0.3", -- "postcss-double-position-gradients": "^3.0.4", -- "postcss-env-function": "^4.0.4", -- "postcss-focus-visible": "^6.0.3", -- "postcss-focus-within": "^5.0.3", -- "postcss-font-variant": "^5.0.0", -- "postcss-gap-properties": "^3.0.2", -- "postcss-image-set-function": "^4.0.4", -- "postcss-initial": "^4.0.1", -- "postcss-lab-function": "^4.0.3", -- "postcss-logical": "^5.0.3", -- "postcss-media-minmax": "^5.0.0", -- "postcss-nesting": "^10.1.2", -- "postcss-overflow-shorthand": "^3.0.2", -- "postcss-page-break": "^3.0.4", -- "postcss-place": "^7.0.3", -- "postcss-pseudo-class-any-link": "^7.0.2", -- "postcss-replace-overflow-wrap": "^4.0.0", -- "postcss-selector-not": "^5.0.0" -- } -- }, -- "postcss-pseudo-class-any-link": { -- "version": "7.1.4", -- "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.4.tgz", -- "integrity": "sha512-JxRcLXm96u14N3RzFavPIE9cRPuOqLDuzKeBsqi4oRk4vt8n0A7I0plFs/VXTg7U2n7g/XkQi0OwqTO3VWBfEg==", -- "dev": true, -- "requires": { -- "postcss-selector-parser": "^6.0.10" -- } -- }, -- "postcss-replace-overflow-wrap": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", -- "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", -- "dev": true, -- "requires": {} -- }, -- "postcss-selector-not": { -- "version": "5.0.0", -- "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", -- "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", -- "dev": true, -- "requires": { -- "balanced-match": "^1.0.0" -- } -- }, - "postcss-selector-parser": { -- "version": "6.0.10", -- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", -- "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", -+ "version": "6.0.13", -+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", -+ "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", -@@ -40881,44 +40103,31 @@ - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, -- "preserve": { -- "version": "0.2.0", -- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", -- "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==", -- "dev": true -- }, - "prettier": { -- "version": "2.6.2", -- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", -- "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", -+ "version": "3.0.3", -+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", -+ "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true - }, - "prettier-plugin-java": { -- "version": "1.6.1", -- "resolved": "https://registry.npmjs.org/prettier-plugin-java/-/prettier-plugin-java-1.6.1.tgz", -- "integrity": "sha512-kSY17V/P88nILlILb5iMp16TVJy6Ls9Jy4zAzI4+GsEuRDZH5VqRuLd8aJS1ImWxVgRjNBmoFOjxYyxkRM0SRA==", -+ "version": "2.3.1", -+ "resolved": "https://registry.npmjs.org/prettier-plugin-java/-/prettier-plugin-java-2.3.1.tgz", -+ "integrity": "sha512-OYn8skqKnE5YUVL8f2ocayA6XCJK8PqsEz3pfATbDqzgdaSYDLhE/s8KrXrX9gj8KXIG6Wx0CMoXTNH8+ED22w==", - "dev": true, - "requires": { -- "java-parser": "2.0.1", -+ "java-parser": "2.0.5", - "lodash": "4.17.21", -- "prettier": "2.3.1" -- }, -- "dependencies": { -- "prettier": { -- "version": "2.3.1", -- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", -- "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", -- "dev": true -- } -+ "prettier": "3.0.3" - } - }, - "prettier-plugin-packagejson": { -- "version": "2.2.17", -- "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.2.17.tgz", -- "integrity": "sha512-Z1l3stIdkEzuv5w2ZyLl7mvl1Q/7vr2wjLAaKCQtafPHB7h09dir0tgXK/W5iEc/jP+C4XtvJl/HhiZBvPh4rQ==", -+ "version": "2.4.6", -+ "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.4.6.tgz", -+ "integrity": "sha512-5JGfzkJRL0DLNyhwmiAV9mV0hZLHDwddFCs2lc9CNxOChpoWUQVe8K4qTMktmevmDlMpok2uT10nvHUyU59sNw==", - "dev": true, - "requires": { -- "sort-package-json": "1.55.0" -+ "sort-package-json": "2.6.0", -+ "synckit": "0.8.5" - } - }, - "pretty-bytes": { -@@ -40928,14 +40137,14 @@ - "dev": true - }, - "pretty-format": { -- "version": "27.5.1", -- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", -- "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", -+ "version": "29.7.0", -+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", -+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "requires": { -- "ansi-regex": "^5.0.1", -+ "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", -- "react-is": "^17.0.1" -+ "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { -@@ -40946,11 +40155,6 @@ - } - } - }, -- "prismjs": { -- "version": "1.28.0", -- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", -- "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==" -- }, - "proc-log": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", -@@ -41063,23 +40267,37 @@ - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, -- "qs": { -- "version": "6.2.3", -- "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", -- "integrity": "sha512-AY4g8t3LMboim0t6XWFdz6J5OuJ1ZNYu54SXihS/OMpgyCqYmcAJnWqkNSOjSjWmq3xxy+GF9uWQI2lI/7tKIA==", -+ "pure-rand": { -+ "version": "6.0.4", -+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", -+ "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", - "dev": true - }, -+ "qs": { -+ "version": "6.11.0", -+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", -+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", -+ "dev": true, -+ "requires": { -+ "side-channel": "^1.0.4" -+ } -+ }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true - }, -+ "querystringify": { -+ "version": "2.2.0", -+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", -+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", -+ "dev": true -+ }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", -- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", -- "dev": true -+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "randexp": { - "version": "0.5.3", -@@ -41091,25 +40309,6 @@ - "ret": "^0.2.0" - } - }, -- "randomatic": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", -- "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", -- "dev": true, -- "requires": { -- "is-number": "^4.0.0", -- "kind-of": "^6.0.0", -- "math-random": "^1.0.1" -- }, -- "dependencies": { -- "is-number": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", -- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", -- "dev": true -- } -- } -- }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", -@@ -41138,26 +40337,107 @@ - } - }, - "react-is": { -- "version": "17.0.2", -- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", -- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", -+ "version": "18.2.0", -+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", -+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, -- "read-cache": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", -- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", -- "dev": true, -- "requires": { -- "pify": "^2.3.0" -- } -- }, - "read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", - "dev": true - }, -+ "read-package-json": { -+ "version": "6.0.4", -+ "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", -+ "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", -+ "dev": true, -+ "requires": { -+ "glob": "^10.2.2", -+ "json-parse-even-better-errors": "^3.0.0", -+ "normalize-package-data": "^5.0.0", -+ "npm-normalize-package-bin": "^3.0.0" -+ }, -+ "dependencies": { -+ "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, -+ "requires": { -+ "balanced-match": "^1.0.0" -+ } -+ }, -+ "glob": { -+ "version": "10.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "requires": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" -+ } -+ }, -+ "hosted-git-info": { -+ "version": "6.1.1", -+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", -+ "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^7.5.1" -+ } -+ }, -+ "json-parse-even-better-errors": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", -+ "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", -+ "dev": true -+ }, -+ "lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true -+ }, -+ "minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", -+ "dev": true, -+ "requires": { -+ "brace-expansion": "^2.0.1" -+ } -+ }, -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ }, -+ "normalize-package-data": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", -+ "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", -+ "dev": true, -+ "requires": { -+ "hosted-git-info": "^6.0.0", -+ "is-core-module": "^2.8.1", -+ "semver": "^7.3.5", -+ "validate-npm-package-license": "^3.0.4" -+ } -+ }, -+ "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 -+ } -+ } -+ }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", -@@ -41259,48 +40539,29 @@ - "dev": true - }, - "regenerate-unicode-properties": { -- "version": "10.0.1", -- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", -- "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", -+ "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, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { -- "version": "0.13.9", -- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", -- "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", -+ "version": "0.13.11", -+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", -+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regenerator-transform": { -- "version": "0.15.0", -- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", -- "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", -+ "version": "0.15.2", -+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", -+ "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, -- "regex-cache": { -- "version": "0.4.4", -- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", -- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", -- "dev": true, -- "requires": { -- "is-equal-shallow": "^0.1.3" -- } -- }, -- "regex-not": { -- "version": "1.0.2", -- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", -- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", -- "dev": true, -- "requires": { -- "extend-shallow": "^3.0.2", -- "safe-regex": "^1.1.0" -- } -- }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", -@@ -41313,47 +40574,24 @@ - "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", - "dev": true - }, -- "regexp.prototype.flags": { -- "version": "1.4.3", -- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", -- "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", -- "dev": true, -- "requires": { -- "call-bind": "^1.0.2", -- "define-properties": "^1.1.3", -- "functions-have-names": "^1.2.2" -- } -- }, -- "regexpp": { -- "version": "3.2.0", -- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", -- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", -- "dev": true -- }, - "regexpu-core": { -- "version": "5.0.1", -- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", -- "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", -+ "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, - "requires": { -+ "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", -- "regenerate-unicode-properties": "^10.0.1", -- "regjsgen": "^0.6.0", -- "regjsparser": "^0.8.2", -+ "regenerate-unicode-properties": "^10.1.0", -+ "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", -- "unicode-match-property-value-ecmascript": "^2.0.0" -+ "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, -- "regjsgen": { -- "version": "0.6.0", -- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", -- "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", -- "dev": true -- }, - "regjsparser": { -- "version": "0.8.4", -- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", -- "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", -+ "version": "0.9.1", -+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", -+ "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" -@@ -41373,18 +40611,6 @@ - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, -- "repeat-element": { -- "version": "1.1.4", -- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", -- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", -- "dev": true -- }, -- "repeat-string": { -- "version": "1.6.1", -- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", -- "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", -- "dev": true -- }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", -@@ -41465,12 +40691,6 @@ - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, -- "require-main-filename": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", -- "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", -- "dev": true -- }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", -@@ -41478,12 +40698,12 @@ - "dev": true - }, - "resolve": { -- "version": "1.22.0", -- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", -- "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", -+ "version": "1.22.2", -+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", -+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "requires": { -- "is-core-module": "^2.8.1", -+ "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } -@@ -41503,12 +40723,6 @@ - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, -- "resolve-url": { -- "version": "0.2.1", -- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", -- "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", -- "dev": true -- }, - "resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", -@@ -41542,9 +40756,9 @@ - } - }, - "resolve.exports": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", -- "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", -+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true - }, - "resp-modifier": { -@@ -41599,8 +40813,7 @@ - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", -- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", -- "dev": true -+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rfdc": { - "version": "1.3.0", -@@ -41609,12 +40822,69 @@ - "dev": true - }, - "rimraf": { -- "version": "3.0.2", -- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "version": "5.0.5", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", -+ "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", - "dev": true, - "requires": { -- "glob": "^7.1.3" -+ "glob": "^10.3.7" -+ }, -+ "dependencies": { -+ "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, -+ "requires": { -+ "balanced-match": "^1.0.0" -+ } -+ }, -+ "glob": { -+ "version": "10.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "requires": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" -+ } -+ }, -+ "minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", -+ "dev": true, -+ "requires": { -+ "brace-expansion": "^2.0.1" -+ } -+ }, -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "rollup": { -+ "version": "3.29.4", -+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", -+ "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", -+ "dev": true, -+ "requires": { -+ "fsevents": "~2.3.2" -+ } -+ }, -+ "run-applescript": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", -+ "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", -+ "dev": true, -+ "requires": { -+ "execa": "^5.0.0" - } - }, - "run-async": { -@@ -41627,7 +40897,6 @@ - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", -- "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } -@@ -41639,9 +40908,9 @@ - "dev": true - }, - "rxjs": { -- "version": "7.5.5", -- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", -- "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", -+ "version": "7.8.1", -+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", -+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "requires": { - "tslib": "^2.1.0" - } -@@ -41651,23 +40920,6 @@ - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, -- "safe-regex": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", -- "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", -- "dev": true, -- "requires": { -- "ret": "~0.1.10" -- }, -- "dependencies": { -- "ret": { -- "version": "0.1.15", -- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", -- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", -- "dev": true -- } -- } -- }, - "safe-stable-stringify": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", -@@ -41681,9 +40933,9 @@ - "dev": true - }, - "sass": { -- "version": "1.49.9", -- "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", -- "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", -+ "version": "1.64.1", -+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", -+ "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", -@@ -41692,20 +40944,19 @@ - }, - "dependencies": { - "immutable": { -- "version": "4.1.0", -- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", -- "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", -+ "version": "4.3.4", -+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", -+ "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", - "dev": true - } - } - }, - "sass-loader": { -- "version": "12.4.0", -- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", -- "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", -+ "version": "13.3.2", -+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", -+ "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", - "dev": true, - "requires": { -- "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, -@@ -41725,41 +40976,15 @@ - } - }, - "schema-utils": { -- "version": "2.7.1", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", -- "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", -+ "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, - "requires": { -- "@types/json-schema": "^7.0.5", -- "ajv": "^6.12.4", -- "ajv-keywords": "^3.5.2" -- }, -- "dependencies": { -- "ajv": { -- "version": "6.12.6", -- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", -- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", -- "dev": true, -- "requires": { -- "fast-deep-equal": "^3.1.1", -- "fast-json-stable-stringify": "^2.0.0", -- "json-schema-traverse": "^0.4.1", -- "uri-js": "^4.2.2" -- } -- }, -- "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, -- "requires": {} -- }, -- "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 -- } -+ "@types/json-schema": "^7.0.9", -+ "ajv": "^8.9.0", -+ "ajv-formats": "^2.1.1", -+ "ajv-keywords": "^5.1.0" - } - }, - "scoped-regex": { -@@ -41775,11 +41000,12 @@ - "dev": true - }, - "selfsigned": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", -- "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", -+ "version": "2.4.1", -+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", -+ "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dev": true, - "requires": { -+ "@types/node-forge": "^1.3.0", - "node-forge": "^1" - } - }, -@@ -41866,9 +41092,9 @@ - } - }, - "serialize-javascript": { -- "version": "6.0.0", -- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", -- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", -+ "version": "6.0.1", -+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", -+ "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" -@@ -41960,29 +41186,6 @@ - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, -- "set-value": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", -- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", -- "dev": true, -- "requires": { -- "extend-shallow": "^2.0.1", -- "is-extendable": "^0.1.1", -- "is-plain-object": "^2.0.3", -- "split-string": "^3.0.1" -- }, -- "dependencies": { -- "extend-shallow": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -- "dev": true, -- "requires": { -- "is-extendable": "^0.1.0" -- } -- } -- } -- }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", -@@ -42013,6 +41216,12 @@ - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, -+ "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 -+ }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", -@@ -42047,6 +41256,224 @@ - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, -+ "sigstore": { -+ "version": "1.9.0", -+ "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", -+ "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", -+ "dev": true, -+ "requires": { -+ "@sigstore/bundle": "^1.1.0", -+ "@sigstore/protobuf-specs": "^0.2.0", -+ "@sigstore/sign": "^1.0.0", -+ "@sigstore/tuf": "^1.0.3", -+ "make-fetch-happen": "^11.0.1" -+ }, -+ "dependencies": { -+ "@npmcli/fs": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", -+ "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", -+ "dev": true, -+ "requires": { -+ "semver": "^7.3.5" -+ } -+ }, -+ "@tootallnate/once": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", -+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", -+ "dev": true -+ }, -+ "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, -+ "requires": { -+ "balanced-match": "^1.0.0" -+ } -+ }, -+ "cacache": { -+ "version": "17.1.4", -+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", -+ "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", -+ "dev": true, -+ "requires": { -+ "@npmcli/fs": "^3.1.0", -+ "fs-minipass": "^3.0.0", -+ "glob": "^10.2.2", -+ "lru-cache": "^7.7.1", -+ "minipass": "^7.0.3", -+ "minipass-collect": "^1.0.2", -+ "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" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "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, -+ "requires": { -+ "minipass": "^7.0.3" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "glob": { -+ "version": "10.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "requires": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" -+ } -+ }, -+ "http-proxy-agent": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", -+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", -+ "dev": true, -+ "requires": { -+ "@tootallnate/once": "2", -+ "agent-base": "6", -+ "debug": "4" -+ } -+ }, -+ "lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true -+ }, -+ "make-fetch-happen": { -+ "version": "11.1.1", -+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", -+ "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", -+ "dev": true, -+ "requires": { -+ "agentkeepalive": "^4.2.1", -+ "cacache": "^17.0.0", -+ "http-cache-semantics": "^4.1.1", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.0", -+ "is-lambda": "^1.0.1", -+ "lru-cache": "^7.7.1", -+ "minipass": "^5.0.0", -+ "minipass-fetch": "^3.0.0", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "negotiator": "^0.6.3", -+ "promise-retry": "^2.0.1", -+ "socks-proxy-agent": "^7.0.0", -+ "ssri": "^10.0.0" -+ } -+ }, -+ "minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", -+ "dev": true, -+ "requires": { -+ "brace-expansion": "^2.0.1" -+ } -+ }, -+ "minipass": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", -+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", -+ "dev": true -+ }, -+ "minipass-fetch": { -+ "version": "3.0.4", -+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", -+ "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", -+ "dev": true, -+ "requires": { -+ "encoding": "^0.1.13", -+ "minipass": "^7.0.3", -+ "minipass-sized": "^1.0.3", -+ "minizlib": "^2.1.2" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "socks-proxy-agent": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", -+ "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", -+ "dev": true, -+ "requires": { -+ "agent-base": "^6.0.2", -+ "debug": "^4.3.3", -+ "socks": "^2.6.2" -+ } -+ }, -+ "ssri": { -+ "version": "10.0.5", -+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", -+ "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", -+ "dev": true, -+ "requires": { -+ "minipass": "^7.0.3" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "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, -+ "requires": { -+ "unique-slug": "^4.0.0" -+ } -+ }, -+ "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, -+ "requires": { -+ "imurmurhash": "^0.1.4" -+ } -+ } -+ } -+ }, - "simple-git": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.5.0.tgz", -@@ -42075,28 +41502,15 @@ - } - } - }, -- "simplebar": { -- "version": "5.3.8", -- "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.3.8.tgz", -- "integrity": "sha512-LOHjyOcihx++zFN+vuktoZBGpCarFCtHIVDWXOf2VELbGDknq3Hw/sddafRp1aCg123VNkHWOFHUDHYEXAtufQ==", -- "requires": { -- "@juggle/resize-observer": "^3.3.1", -- "can-use-dom": "^0.1.0", -- "core-js": "^3.0.1", -- "lodash.debounce": "^4.0.8", -- "lodash.memoize": "^4.1.2", -- "lodash.throttle": "^4.1.1" -- } -- }, - "sirv": { -- "version": "1.0.19", -- "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", -- "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", -+ "version": "2.0.3", -+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", -+ "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", - "dev": true, - "requires": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", -- "totalist": "^1.0.0" -+ "totalist": "^3.0.0" - } - }, - "sisteransi": { -@@ -42122,9 +41536,9 @@ - }, - "dependencies": { - "ansi-styles": { -- "version": "6.1.0", -- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", -- "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", -+ "version": "6.2.1", -+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", -+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - } - } -@@ -42135,282 +41549,59 @@ - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, -- "snapdragon": { -- "version": "0.8.2", -- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", -- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", -- "dev": true, -- "requires": { -- "base": "^0.11.1", -- "debug": "^2.2.0", -- "define-property": "^0.2.5", -- "extend-shallow": "^2.0.1", -- "map-cache": "^0.2.2", -- "source-map": "^0.5.6", -- "source-map-resolve": "^0.5.0", -- "use": "^3.1.0" -- }, -- "dependencies": { -- "debug": { -- "version": "2.6.9", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", -- "dev": true, -- "requires": { -- "ms": "2.0.0" -- } -- }, -- "define-property": { -- "version": "0.2.5", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", -- "dev": true, -- "requires": { -- "is-descriptor": "^0.1.0" -- } -- }, -- "extend-shallow": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", -- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", -- "dev": true, -- "requires": { -- "is-extendable": "^0.1.0" -- } -- }, -- "is-accessor-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", -- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- }, -- "dependencies": { -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -- } -- }, -- "is-data-descriptor": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", -- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- }, -- "dependencies": { -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -- } -- }, -- "is-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", -- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", -- "dev": true, -- "requires": { -- "is-accessor-descriptor": "^0.1.6", -- "is-data-descriptor": "^0.1.4", -- "kind-of": "^5.0.0" -- } -- }, -- "kind-of": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", -- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", -- "dev": true -- }, -- "ms": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", -- "dev": true -- }, -- "source-map": { -- "version": "0.5.7", -- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", -- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", -- "dev": true -- }, -- "source-map-resolve": { -- "version": "0.5.3", -- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", -- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", -- "dev": true, -- "requires": { -- "atob": "^2.1.2", -- "decode-uri-component": "^0.2.0", -- "resolve-url": "^0.2.1", -- "source-map-url": "^0.4.0", -- "urix": "^0.1.0" -- } -- } -- } -- }, -- "snapdragon-node": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", -- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", -- "dev": true, -- "requires": { -- "define-property": "^1.0.0", -- "isobject": "^3.0.0", -- "snapdragon-util": "^3.0.1" -- }, -- "dependencies": { -- "define-property": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", -- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", -- "dev": true, -- "requires": { -- "is-descriptor": "^1.0.0" -- } -- } -- } -- }, -- "snapdragon-util": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", -- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", -+ "socket.io": { -+ "version": "4.7.2", -+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", -+ "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", - "dev": true, - "requires": { -- "kind-of": "^3.2.0" -- }, -- "dependencies": { -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -+ "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" - } - }, -- "socket.io": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", -- "integrity": "sha512-8B/grLCFDGU1jtp6BxAjSFZAXTqnSxqelNJi8n/izlYjZaP0armkGF+BgS2ZJbm9bI5Yq7v9kNCuTbmIHVzuyA==", -+ "socket.io-adapter": { -+ "version": "2.5.2", -+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", -+ "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", - "dev": true, - "requires": { -- "debug": "~2.6.6", -- "engine.io": "~3.1.0", -- "socket.io-adapter": "~1.1.0", -- "socket.io-client": "2.0.4", -- "socket.io-parser": "~3.1.1" -+ "ws": "~8.11.0" - }, - "dependencies": { -- "debug": { -- "version": "2.6.9", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", -+ "ws": { -+ "version": "8.11.0", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", -+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, -- "requires": { -- "ms": "2.0.0" -- } -- }, -- "ms": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", -- "dev": true -+ "requires": {} - } - } - }, -- "socket.io-adapter": { -- "version": "1.1.2", -- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", -- "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", -- "dev": true -- }, - "socket.io-client": { -- "version": "2.0.4", -- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", -- "integrity": "sha512-dy30gOeQu8nitka60xDG1xutwmIiW+0pPBbBBZLgBCO2Sr4BODyxzcPDqiY2ZaV4kpAZguikwvRpo136mU5r0Q==", -+ "version": "4.7.2", -+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", -+ "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", - "dev": true, - "requires": { -- "backo2": "1.0.2", -- "base64-arraybuffer": "0.1.5", -- "component-bind": "1.0.0", -- "component-emitter": "1.2.1", -- "debug": "~2.6.4", -- "engine.io-client": "~3.1.0", -- "has-cors": "1.1.0", -- "indexof": "0.0.1", -- "object-component": "0.0.3", -- "parseqs": "0.0.5", -- "parseuri": "0.0.5", -- "socket.io-parser": "~3.1.1", -- "to-array": "0.1.4" -- }, -- "dependencies": { -- "debug": { -- "version": "2.6.9", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", -- "dev": true, -- "requires": { -- "ms": "2.0.0" -- } -- }, -- "ms": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", -- "dev": true -- } -+ "@socket.io/component-emitter": "~3.1.0", -+ "debug": "~4.3.2", -+ "engine.io-client": "~6.5.2", -+ "socket.io-parser": "~4.2.4" - } - }, - "socket.io-parser": { -- "version": "3.1.3", -- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", -- "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", -+ "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, - "requires": { -- "component-emitter": "1.2.1", -- "debug": "~3.1.0", -- "has-binary2": "~1.0.2", -- "isarray": "2.0.1" -- }, -- "dependencies": { -- "debug": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", -- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", -- "dev": true, -- "requires": { -- "ms": "2.0.0" -- } -- }, -- "isarray": { -- "version": "2.0.1", -- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", -- "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==", -- "dev": true -- }, -- "ms": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", -- "dev": true -- } -+ "@socket.io/component-emitter": "~3.1.0", -+ "debug": "~4.3.1" - } - }, - "sockjs": { -@@ -42461,41 +41652,57 @@ - "dev": true - }, - "sort-package-json": { -- "version": "1.55.0", -- "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-1.55.0.tgz", -- "integrity": "sha512-xhKvRD8WGbALjXQkVuk4/93Z/2NIO+5IzKamdMjN5kn3L+N+M9YWQssmM6GXlQr9v1F7PGWsOJEo1gvXOhM7Mg==", -+ "version": "2.6.0", -+ "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.6.0.tgz", -+ "integrity": "sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==", - "dev": true, - "requires": { -- "detect-indent": "^6.0.0", -- "detect-newline": "3.1.0", -- "git-hooks-list": "1.0.3", -- "globby": "10.0.0", -- "is-plain-obj": "2.1.0", -+ "detect-indent": "^7.0.1", -+ "detect-newline": "^4.0.0", -+ "get-stdin": "^9.0.0", -+ "git-hooks-list": "^3.0.0", -+ "globby": "^13.1.2", -+ "is-plain-obj": "^4.1.0", - "sort-object-keys": "^1.1.3" - }, - "dependencies": { -+ "detect-newline": { -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", -+ "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", -+ "dev": true -+ }, - "globby": { -- "version": "10.0.0", -- "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.0.tgz", -- "integrity": "sha512-3LifW9M4joGZasyYPz2A1U74zbC/45fvpXUvO/9KbSa+VV0aGZarWkfdgKyR9sExNP0t0x0ss/UMJpNpcaTspw==", -+ "version": "13.2.2", -+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", -+ "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "requires": { -- "@types/glob": "^7.1.1", -- "array-union": "^2.1.0", - "dir-glob": "^3.0.1", -- "fast-glob": "^3.0.3", -- "glob": "^7.1.3", -- "ignore": "^5.1.1", -- "merge2": "^1.2.3", -- "slash": "^3.0.0" -+ "fast-glob": "^3.3.0", -+ "ignore": "^5.2.4", -+ "merge2": "^1.4.1", -+ "slash": "^4.0.0" - } -+ }, -+ "is-plain-obj": { -+ "version": "4.1.0", -+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", -+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", -+ "dev": true -+ }, -+ "slash": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", -+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", -+ "dev": true - } - } - }, - "source-map": { -- "version": "0.7.3", -- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", -- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", -+ "version": "0.7.4", -+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", -+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - }, - "source-map-js": { -@@ -42505,14 +41712,14 @@ - "dev": true - }, - "source-map-loader": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", -- "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", -+ "version": "4.0.1", -+ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", -+ "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", - "dev": true, - "requires": { -- "abab": "^2.0.5", -+ "abab": "^2.0.6", - "iconv-lite": "^0.6.3", -- "source-map-js": "^1.0.1" -+ "source-map-js": "^1.0.2" - }, - "dependencies": { - "iconv-lite": { -@@ -42526,16 +41733,6 @@ - } - } - }, -- "source-map-resolve": { -- "version": "0.6.0", -- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", -- "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", -- "dev": true, -- "requires": { -- "atob": "^2.1.2", -- "decode-uri-component": "^0.2.0" -- } -- }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", -@@ -42554,21 +41751,10 @@ - } - } - }, -- "source-map-url": { -- "version": "0.4.1", -- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", -- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", -- "dev": true -- }, -- "sourcemap-codec": { -- "version": "1.4.8", -- "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", -- "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" -- }, - "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==", -+ "version": "0.0.2", -+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", -+ "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", - "dev": true - }, - "spdx-correct": { -@@ -42630,15 +41816,6 @@ - "wbuf": "^1.7.3" - } - }, -- "split-string": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", -- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", -- "dev": true, -- "requires": { -- "extend-shallow": "^3.0.0" -- } -- }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", -@@ -42678,9 +41855,9 @@ - "dev": true - }, - "stack-utils": { -- "version": "2.0.5", -- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", -- "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", -+ "version": "2.0.6", -+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", -+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" -@@ -42694,84 +41871,6 @@ - } - } - }, -- "static-extend": { -- "version": "0.1.2", -- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", -- "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", -- "dev": true, -- "requires": { -- "define-property": "^0.2.5", -- "object-copy": "^0.1.0" -- }, -- "dependencies": { -- "define-property": { -- "version": "0.2.5", -- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", -- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", -- "dev": true, -- "requires": { -- "is-descriptor": "^0.1.0" -- } -- }, -- "is-accessor-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", -- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- }, -- "dependencies": { -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -- } -- }, -- "is-data-descriptor": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", -- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- }, -- "dependencies": { -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -- } -- }, -- "is-descriptor": { -- "version": "0.1.6", -- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", -- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", -- "dev": true, -- "requires": { -- "is-accessor-descriptor": "^0.1.6", -- "is-data-descriptor": "^0.1.4", -- "kind-of": "^5.0.0" -- } -- }, -- "kind-of": { -- "version": "5.1.0", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", -- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", -- "dev": true -- } -- } -- }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", -@@ -42786,6 +41885,14 @@ - "requires": { - "commander": "^2.2.0", - "limiter": "^1.0.5" -+ }, -+ "dependencies": { -+ "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 -+ } - } - }, - "string_decoder": { -@@ -42806,9 +41913,9 @@ - } - }, - "string-argv": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", -- "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", -+ "version": "0.3.2", -+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", -+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true - }, - "string-length": { -@@ -42838,6 +41945,25 @@ - } - } - }, -+ "string-width-cjs": { -+ "version": "npm:string-width@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, -+ "requires": { -+ "emoji-regex": "^8.0.0", -+ "is-fullwidth-code-point": "^3.0.0", -+ "strip-ansi": "^6.0.1" -+ }, -+ "dependencies": { -+ "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==", -+ "dev": true -+ } -+ } -+ }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", -@@ -42846,6 +41972,15 @@ - "ansi-regex": "^5.0.1" - } - }, -+ "strip-ansi-cjs": { -+ "version": "npm:strip-ansi@6.0.1", -+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", -+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", -+ "dev": true, -+ "requires": { -+ "ansi-regex": "^5.0.1" -+ } -+ }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", -@@ -42894,39 +42029,6 @@ - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, -- "stylus": { -- "version": "0.56.0", -- "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.56.0.tgz", -- "integrity": "sha512-Ev3fOb4bUElwWu4F9P9WjnnaSpc8XB9OFHSFZSKMFL1CE1oM+oFXWEgAqPmmZIyhBihuqIQlFsVTypiiS9RxeA==", -- "dev": true, -- "requires": { -- "css": "^3.0.0", -- "debug": "^4.3.2", -- "glob": "^7.1.6", -- "safer-buffer": "^2.1.2", -- "sax": "~1.2.4", -- "source-map": "^0.7.3" -- }, -- "dependencies": { -- "sax": { -- "version": "1.2.4", -- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", -- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", -- "dev": true -- } -- } -- }, -- "stylus-loader": { -- "version": "6.2.0", -- "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz", -- "integrity": "sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==", -- "dev": true, -- "requires": { -- "fast-glob": "^3.2.7", -- "klona": "^2.0.4", -- "normalize-path": "^3.0.0" -- } -- }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", -@@ -42935,33 +42037,6 @@ - "has-flag": "^3.0.0" - } - }, -- "supports-hyperlinks": { -- "version": "2.2.0", -- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", -- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", -- "dev": true, -- "requires": { -- "has-flag": "^4.0.0", -- "supports-color": "^7.0.0" -- }, -- "dependencies": { -- "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 -- }, -- "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, -- "requires": { -- "has-flag": "^4.0.0" -- } -- } -- } -- }, - "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", -@@ -42969,9 +42044,9 @@ - "dev": true - }, - "swagger-ui-dist": { -- "version": "4.10.3", -- "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.10.3.tgz", -- "integrity": "sha512-eR4vsd7sYo0Sx7ZKRP5Z04yij7JkNmIlUQfrDQgC+xO5ABYx+waabzN+nDsQTLAJ4Z04bjkRd8xqkJtbxr3G7w==", -+ "version": "5.9.0", -+ "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.9.0.tgz", -+ "integrity": "sha512-NUHSYoe5XRTk/Are8jPJ6phzBh3l9l33nEyXosM17QInoV95/jng8+PuSGtbD407QoPf93MH3Bkh773OgesJpA==", - "dev": true - }, - "symbol-observable": { -@@ -42986,6 +42061,16 @@ - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, -+ "synckit": { -+ "version": "0.8.5", -+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", -+ "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", -+ "dev": true, -+ "requires": { -+ "@pkgr/utils": "^2.3.1", -+ "tslib": "^2.5.0" -+ } -+ }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", -@@ -43006,41 +42091,49 @@ - "yallist": "^4.0.0" - } - }, -- "terminal-link": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", -- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", -- "dev": true, -- "requires": { -- "ansi-escapes": "^4.2.1", -- "supports-hyperlinks": "^2.0.0" -- } -- }, - "terser": { -- "version": "5.11.0", -- "resolved": "https://registry.npmjs.org/terser/-/terser-5.11.0.tgz", -- "integrity": "sha512-uCA9DLanzzWSsN1UirKwylhhRz3aKPInlfmpGfw8VN6jHsAtu8HJtIpeeHHK23rxnE/cDc+yvmq5wqkIC6Kn0A==", -+ "version": "5.19.2", -+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", -+ "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "requires": { -- "acorn": "^8.5.0", -+ "@jridgewell/source-map": "^0.3.3", -+ "acorn": "^8.8.2", - "commander": "^2.20.0", -- "source-map": "~0.7.2", - "source-map-support": "~0.5.20" -+ }, -+ "dependencies": { -+ "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 -+ } - } - }, - "terser-webpack-plugin": { -- "version": "5.3.3", -- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", -- "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", -+ "version": "5.3.9", -+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", -+ "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "requires": { -- "@jridgewell/trace-mapping": "^0.3.7", -+ "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", -- "serialize-javascript": "^6.0.0", -- "terser": "^5.7.2" -+ "serialize-javascript": "^6.0.1", -+ "terser": "^5.16.8" - }, - "dependencies": { -+ "@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", -+ "dev": true, -+ "requires": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" -+ } -+ }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", -@@ -43060,6 +42153,23 @@ - "dev": true, - "requires": {} - }, -+ "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 -+ }, -+ "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, -+ "requires": { -+ "@types/node": "*", -+ "merge-stream": "^2.0.0", -+ "supports-color": "^8.0.0" -+ } -+ }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", -@@ -43067,15 +42177,24 @@ - "dev": true - }, - "schema-utils": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", -- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", -+ "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, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } -+ }, -+ "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, -+ "requires": { -+ "has-flag": "^4.0.0" -+ } - } - } - }, -@@ -43108,58 +42227,6 @@ - "integrity": "sha512-MeqZRHLuaGamUXGuVn2ivtU3LA3mLCCIO5kUGoohTCoGmCBg/+8yPhWVX9WSl9telvVd8erftjFk9Fwb2dD6rw==", - "dev": true - }, -- "tfunk": { -- "version": "3.1.0", -- "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", -- "integrity": "sha512-EX54VPFZvUApnSKJdMLLyJkmhsEiEK4yvXoIFPPvkDIltvQR0c1xTCIGFKdsCAjhJJWIowiypbyZ1UYWMWO88Q==", -- "dev": true, -- "requires": { -- "chalk": "^1.1.1", -- "object-path": "^0.9.0" -- }, -- "dependencies": { -- "ansi-regex": { -- "version": "2.1.1", -- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", -- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", -- "dev": true -- }, -- "ansi-styles": { -- "version": "2.2.1", -- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", -- "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", -- "dev": true -- }, -- "chalk": { -- "version": "1.1.3", -- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", -- "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", -- "dev": true, -- "requires": { -- "ansi-styles": "^2.2.1", -- "escape-string-regexp": "^1.0.2", -- "has-ansi": "^2.0.0", -- "strip-ansi": "^3.0.0", -- "supports-color": "^2.0.0" -- } -- }, -- "strip-ansi": { -- "version": "3.0.1", -- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", -- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", -- "dev": true, -- "requires": { -- "ansi-regex": "^2.0.0" -- } -- }, -- "supports-color": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", -- "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", -- "dev": true -- } -- } -- }, - "then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", -@@ -43195,24 +42262,9 @@ - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } -- }, -- "qs": { -- "version": "6.10.5", -- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.5.tgz", -- "integrity": "sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ==", -- "dev": true, -- "requires": { -- "side-channel": "^1.0.4" -- } - } - } - }, -- "throat": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", -- "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", -- "dev": true -- }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", -@@ -43225,6 +42277,12 @@ - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, -+ "titleize": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", -+ "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", -+ "dev": true -+ }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", -@@ -43240,49 +42298,11 @@ - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, -- "to-array": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", -- "integrity": "sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==", -- "dev": true -- }, - "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==" - }, -- "to-object-path": { -- "version": "0.3.0", -- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", -- "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", -- "dev": true, -- "requires": { -- "kind-of": "^3.0.2" -- }, -- "dependencies": { -- "kind-of": { -- "version": "3.2.2", -- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", -- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", -- "dev": true, -- "requires": { -- "is-buffer": "^1.1.5" -- } -- } -- } -- }, -- "to-regex": { -- "version": "3.0.2", -- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", -- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", -- "dev": true, -- "requires": { -- "define-property": "^2.0.2", -- "extend-shallow": "^3.0.2", -- "regex-not": "^1.0.2", -- "safe-regex": "^1.1.0" -- } -- }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", -@@ -43298,20 +42318,29 @@ - "dev": true - }, - "totalist": { -- "version": "1.1.0", -- "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", -- "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", -+ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true - }, - "tough-cookie": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", -- "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", -+ "version": "4.1.3", -+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", -+ "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", -- "universalify": "^0.1.2" -+ "universalify": "^0.2.0", -+ "url-parse": "^1.5.3" -+ }, -+ "dependencies": { -+ "universalify": { -+ "version": "0.2.0", -+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", -+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", -+ "dev": true -+ } - } - }, - "tr46": { -@@ -43341,20 +42370,38 @@ - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", - "dev": true - }, -+ "ts-api-utils": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", -+ "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", -+ "dev": true, -+ "requires": {} -+ }, - "ts-jest": { -- "version": "27.1.4", -- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", -- "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", -+ "version": "29.1.1", -+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", -+ "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", -- "jest-util": "^27.0.0", -- "json5": "2.x", -+ "jest-util": "^29.0.0", -+ "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", -- "semver": "7.x", -- "yargs-parser": "20.x" -+ "semver": "^7.5.3", -+ "yargs-parser": "^21.0.1" -+ }, -+ "dependencies": { -+ "semver": { -+ "version": "7.5.4", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", -+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", -+ "dev": true, -+ "requires": { -+ "lru-cache": "^6.0.0" -+ } -+ } - } - }, - "ts-node": { -@@ -43387,26 +42434,16 @@ - } - }, - "tsconfig-paths": { -- "version": "3.14.1", -- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", -- "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", -+ "version": "4.2.0", -+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", -+ "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "requires": { -- "@types/json5": "^0.0.29", -- "json5": "^1.0.1", -+ "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { -- "json5": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", -- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", -- "dev": true, -- "requires": { -- "minimist": "^1.2.0" -- } -- }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", -@@ -43416,9 +42453,9 @@ - } - }, - "tslib": { -- "version": "2.3.1", -- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", -- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" -+ "version": "2.6.2", -+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", -+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "tsutils": { - "version": "3.21.0", -@@ -43437,6 +42474,222 @@ - } - } - }, -+ "tuf-js": { -+ "version": "1.1.7", -+ "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", -+ "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", -+ "dev": true, -+ "requires": { -+ "@tufjs/models": "1.0.4", -+ "debug": "^4.3.4", -+ "make-fetch-happen": "^11.1.1" -+ }, -+ "dependencies": { -+ "@npmcli/fs": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", -+ "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", -+ "dev": true, -+ "requires": { -+ "semver": "^7.3.5" -+ } -+ }, -+ "@tootallnate/once": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", -+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", -+ "dev": true -+ }, -+ "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, -+ "requires": { -+ "balanced-match": "^1.0.0" -+ } -+ }, -+ "cacache": { -+ "version": "17.1.4", -+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", -+ "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", -+ "dev": true, -+ "requires": { -+ "@npmcli/fs": "^3.1.0", -+ "fs-minipass": "^3.0.0", -+ "glob": "^10.2.2", -+ "lru-cache": "^7.7.1", -+ "minipass": "^7.0.3", -+ "minipass-collect": "^1.0.2", -+ "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" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "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, -+ "requires": { -+ "minipass": "^7.0.3" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "glob": { -+ "version": "10.3.10", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", -+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", -+ "dev": true, -+ "requires": { -+ "foreground-child": "^3.1.0", -+ "jackspeak": "^2.3.5", -+ "minimatch": "^9.0.1", -+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", -+ "path-scurry": "^1.10.1" -+ } -+ }, -+ "http-proxy-agent": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", -+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", -+ "dev": true, -+ "requires": { -+ "@tootallnate/once": "2", -+ "agent-base": "6", -+ "debug": "4" -+ } -+ }, -+ "lru-cache": { -+ "version": "7.18.3", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", -+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", -+ "dev": true -+ }, -+ "make-fetch-happen": { -+ "version": "11.1.1", -+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", -+ "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", -+ "dev": true, -+ "requires": { -+ "agentkeepalive": "^4.2.1", -+ "cacache": "^17.0.0", -+ "http-cache-semantics": "^4.1.1", -+ "http-proxy-agent": "^5.0.0", -+ "https-proxy-agent": "^5.0.0", -+ "is-lambda": "^1.0.1", -+ "lru-cache": "^7.7.1", -+ "minipass": "^5.0.0", -+ "minipass-fetch": "^3.0.0", -+ "minipass-flush": "^1.0.5", -+ "minipass-pipeline": "^1.2.4", -+ "negotiator": "^0.6.3", -+ "promise-retry": "^2.0.1", -+ "socks-proxy-agent": "^7.0.0", -+ "ssri": "^10.0.0" -+ } -+ }, -+ "minimatch": { -+ "version": "9.0.3", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", -+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", -+ "dev": true, -+ "requires": { -+ "brace-expansion": "^2.0.1" -+ } -+ }, -+ "minipass": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", -+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", -+ "dev": true -+ }, -+ "minipass-fetch": { -+ "version": "3.0.4", -+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", -+ "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", -+ "dev": true, -+ "requires": { -+ "encoding": "^0.1.13", -+ "minipass": "^7.0.3", -+ "minipass-sized": "^1.0.3", -+ "minizlib": "^2.1.2" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "socks-proxy-agent": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", -+ "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", -+ "dev": true, -+ "requires": { -+ "agent-base": "^6.0.2", -+ "debug": "^4.3.3", -+ "socks": "^2.6.2" -+ } -+ }, -+ "ssri": { -+ "version": "10.0.5", -+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", -+ "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", -+ "dev": true, -+ "requires": { -+ "minipass": "^7.0.3" -+ }, -+ "dependencies": { -+ "minipass": { -+ "version": "7.0.4", -+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", -+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", -+ "dev": true -+ } -+ } -+ }, -+ "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, -+ "requires": { -+ "unique-slug": "^4.0.0" -+ } -+ }, -+ "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, -+ "requires": { -+ "imurmurhash": "^0.1.4" -+ } -+ } -+ } -+ }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", -@@ -43495,30 +42748,15 @@ - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, -- "typedarray-to-buffer": { -- "version": "3.1.5", -- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", -- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", -- "dev": true, -- "requires": { -- "is-typedarray": "^1.0.0" -- } -- }, - "typescript": { -- "version": "4.6.3", -- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", -- "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==" -+ "version": "5.1.6", -+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", -+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==" - }, - "ua-parser-js": { -- "version": "0.7.17", -- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", -- "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", -- "dev": true -- }, -- "ultron": { -- "version": "1.1.1", -- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", -- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", -+ "version": "1.0.37", -+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", -+ "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { -@@ -43538,29 +42776,17 @@ - } - }, - "unicode-match-property-value-ecmascript": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", -- "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", -+ "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 - }, - "unicode-property-aliases-ecmascript": { -- "version": "2.0.0", -- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", -- "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", -+ "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 - }, -- "union-value": { -- "version": "1.0.1", -- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", -- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", -- "dev": true, -- "requires": { -- "arr-union": "^3.1.0", -- "get-value": "^2.0.6", -- "is-extendable": "^0.1.1", -- "set-value": "^2.0.1" -- } -- }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", -@@ -43597,52 +42823,21 @@ - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, -- "unset-value": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", -- "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", -- "dev": true, -- "requires": { -- "has-value": "^0.3.1", -- "isobject": "^3.0.0" -- }, -- "dependencies": { -- "has-value": { -- "version": "0.3.1", -- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", -- "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", -- "dev": true, -- "requires": { -- "get-value": "^2.0.3", -- "has-values": "^0.1.4", -- "isobject": "^2.0.0" -- }, -- "dependencies": { -- "isobject": { -- "version": "2.1.0", -- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", -- "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", -- "dev": true, -- "requires": { -- "isarray": "1.0.0" -- } -- } -- } -- }, -- "has-values": { -- "version": "0.1.4", -- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", -- "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", -- "dev": true -- } -- } -- }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, -+ "update-browserslist-db": { -+ "version": "1.0.13", -+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", -+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", -+ "requires": { -+ "escalade": "^3.1.1", -+ "picocolors": "^1.0.0" -+ } -+ }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", -@@ -43652,12 +42847,6 @@ - "punycode": "^2.1.0" - } - }, -- "urix": { -- "version": "0.1.0", -- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", -- "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", -- "dev": true -- }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", -@@ -43676,11 +42865,15 @@ - } - } - }, -- "use": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", -- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", -- "dev": true -+ "url-parse": { -+ "version": "1.5.10", -+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", -+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", -+ "dev": true, -+ "requires": { -+ "querystringify": "^2.1.1", -+ "requires-port": "^1.0.0" -+ } - }, - "util-deprecate": { - "version": "1.0.2", -@@ -43700,19 +42893,6 @@ - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, -- "uws": { -- "version": "9.14.0", -- "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", -- "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", -- "dev": true, -- "optional": true -- }, -- "v8-compile-cache": { -- "version": "2.3.0", -- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", -- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", -- "dev": true -- }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", -@@ -43720,14 +42900,32 @@ - "dev": true - }, - "v8-to-istanbul": { -- "version": "8.1.1", -- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", -- "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", -+ "version": "9.1.3", -+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", -+ "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", - "dev": true, - "requires": { -+ "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", -- "convert-source-map": "^1.6.0", -- "source-map": "^0.7.3" -+ "convert-source-map": "^2.0.0" -+ }, -+ "dependencies": { -+ "@jridgewell/trace-mapping": { -+ "version": "0.3.20", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", -+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", -+ "dev": true, -+ "requires": { -+ "@jridgewell/resolve-uri": "^3.1.0", -+ "@jridgewell/sourcemap-codec": "^1.4.14" -+ } -+ }, -+ "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==", -+ "dev": true -+ } - } - }, - "validate-npm-package-license": { -@@ -43801,6 +42999,18 @@ - "vinyl": "^2.0.1" - } - }, -+ "vite": { -+ "version": "4.4.7", -+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz", -+ "integrity": "sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==", -+ "dev": true, -+ "requires": { -+ "esbuild": "^0.18.10", -+ "fsevents": "~2.3.2", -+ "postcss": "^8.4.26", -+ "rollup": "^3.25.2" -+ } -+ }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", -@@ -43820,25 +43030,37 @@ - } - }, - "wait-on": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", -- "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", -+ "version": "7.0.1", -+ "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz", -+ "integrity": "sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==", - "dev": true, - "requires": { -- "axios": "^0.25.0", -- "joi": "^17.6.0", -+ "axios": "^0.27.2", -+ "joi": "^17.7.0", - "lodash": "^4.17.21", -- "minimist": "^1.2.5", -- "rxjs": "^7.5.4" -+ "minimist": "^1.2.7", -+ "rxjs": "^7.8.0" - }, - "dependencies": { - "axios": { -- "version": "0.25.0", -- "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", -- "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", -+ "version": "0.27.2", -+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", -+ "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", -+ "dev": true, -+ "requires": { -+ "follow-redirects": "^1.14.9", -+ "form-data": "^4.0.0" -+ } -+ }, -+ "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, - "requires": { -- "follow-redirects": "^1.14.7" -+ "asynckit": "^0.4.0", -+ "combined-stream": "^1.0.8", -+ "mime-types": "^2.1.12" - } - } - } -@@ -43893,34 +43115,34 @@ - "dev": true - }, - "webpack": { -- "version": "5.71.0", -- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.71.0.tgz", -- "integrity": "sha512-g4dFT7CFG8LY0iU5G8nBL6VlkT21Z7dcYDpJAEJV5Q1WLb9UwnFbrem1k7K52ILqEmomN7pnzWFxxE6SlDY56A==", -+ "version": "5.88.2", -+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", -+ "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", -- "@types/estree": "^0.0.51", -- "@webassemblyjs/ast": "1.11.1", -- "@webassemblyjs/wasm-edit": "1.11.1", -- "@webassemblyjs/wasm-parser": "1.11.1", -- "acorn": "^8.4.1", -- "acorn-import-assertions": "^1.7.6", -+ "@types/estree": "^1.0.0", -+ "@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.14.5", - "chrome-trace-event": "^1.0.2", -- "enhanced-resolve": "^5.9.2", -- "es-module-lexer": "^0.9.0", -+ "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-better-errors": "^1.0.2", -+ "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.1.0", -+ "schema-utils": "^3.2.0", - "tapable": "^2.1.1", -- "terser-webpack-plugin": "^5.1.3", -- "watchpack": "^2.3.1", -+ "terser-webpack-plugin": "^5.3.7", -+ "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { -@@ -43956,9 +43178,9 @@ - "dev": true - }, - "schema-utils": { -- "version": "3.1.1", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", -- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", -+ "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, - "requires": { - "@types/json-schema": "^7.0.8", -@@ -43969,19 +43191,27 @@ - } - }, - "webpack-bundle-analyzer": { -- "version": "4.5.0", -- "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", -- "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", -+ "version": "4.9.1", -+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz", -+ "integrity": "sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==", - "dev": true, - "requires": { -+ "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", -- "chalk": "^4.1.0", - "commander": "^7.2.0", -+ "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", -- "lodash": "^4.17.20", -+ "is-plain-object": "^5.0.0", -+ "lodash.debounce": "^4.0.8", -+ "lodash.escape": "^4.0.1", -+ "lodash.flatten": "^4.4.0", -+ "lodash.invokemap": "^4.6.0", -+ "lodash.pullall": "^4.2.0", -+ "lodash.uniqby": "^4.7.0", - "opener": "^1.5.2", -- "sirv": "^1.0.7", -+ "picocolors": "^1.0.0", -+ "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "dependencies": { -@@ -43991,167 +43221,118 @@ - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, -- "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, -- "requires": { -- "color-convert": "^2.0.1" -- } -- }, -- "chalk": { -- "version": "4.1.2", -- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", -- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", -- "dev": true, -- "requires": { -- "ansi-styles": "^4.1.0", -- "supports-color": "^7.1.0" -- } -- }, -- "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, -- "requires": { -- "color-name": "~1.1.4" -- } -- }, -- "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 -- }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, -- "has-flag": { -+ "escape-string-regexp": { - "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", -- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", -+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", -+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, -- "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, -- "requires": { -- "has-flag": "^4.0.0" -- } -+ "is-plain-object": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", -+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", -+ "dev": true - } - } - }, - "webpack-dev-middleware": { -- "version": "5.3.0", -- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", -- "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", -+ "version": "6.1.1", -+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", -+ "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", - "dev": true, - "requires": { - "colorette": "^2.0.10", -- "memfs": "^3.2.2", -+ "memfs": "^3.4.12", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" -- }, -- "dependencies": { -- "schema-utils": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", -- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", -- "dev": true, -- "requires": { -- "@types/json-schema": "^7.0.9", -- "ajv": "^8.8.0", -- "ajv-formats": "^2.1.1", -- "ajv-keywords": "^5.0.0" -- } -- } - } - }, - "webpack-dev-server": { -- "version": "4.7.3", -- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", -- "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", -+ "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, - "requires": { - "@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.2.2", -+ "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", -- "bonjour": "^3.5.0", -- "chokidar": "^3.5.2", -+ "bonjour-service": "^1.0.11", -+ "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", -- "connect-history-api-fallback": "^1.6.0", -+ "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", -- "del": "^6.0.0", -- "express": "^4.17.1", -+ "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", -- "http-proxy-middleware": "^2.0.0", -+ "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", -- "portfinder": "^1.0.28", -+ "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", -- "selfsigned": "^2.0.0", -+ "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", -- "sockjs": "^0.3.21", -+ "sockjs": "^0.3.24", - "spdy": "^4.0.2", -- "strip-ansi": "^7.0.0", -- "webpack-dev-middleware": "^5.3.0", -- "ws": "^8.1.0" -+ "webpack-dev-middleware": "^5.3.1", -+ "ws": "^8.13.0" - }, - "dependencies": { -- "ansi-regex": { -- "version": "6.0.1", -- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", -- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", -+ "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 - }, -- "schema-utils": { -- "version": "4.0.0", -- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", -- "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", -+ "rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { -- "@types/json-schema": "^7.0.9", -- "ajv": "^8.8.0", -- "ajv-formats": "^2.1.1", -- "ajv-keywords": "^5.0.0" -+ "glob": "^7.1.3" - } - }, -- "strip-ansi": { -- "version": "7.0.1", -- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", -- "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", -+ "webpack-dev-middleware": { -+ "version": "5.3.3", -+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", -+ "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "requires": { -- "ansi-regex": "^6.0.1" -+ "colorette": "^2.0.10", -+ "memfs": "^3.4.3", -+ "mime-types": "^2.1.31", -+ "range-parser": "^1.2.1", -+ "schema-utils": "^4.0.0" - } - }, - "ws": { -- "version": "8.8.0", -- "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", -- "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", -+ "version": "8.14.2", -+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", -+ "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", - "dev": true, - "requires": {} - } - } - }, - "webpack-merge": { -- "version": "5.8.0", -- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", -- "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", -+ "version": "5.9.0", -+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", -+ "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", -@@ -44235,12 +43416,6 @@ - "isexe": "^2.0.0" - } - }, -- "which-module": { -- "version": "1.0.0", -- "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", -- "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", -- "dev": true -- }, - "which-pm": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", -@@ -44266,12 +43441,6 @@ - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, -- "window-size": { -- "version": "0.2.0", -- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", -- "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", -- "dev": true -- }, - "windows-release": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", -@@ -44352,12 +43521,6 @@ - "triple-beam": "^1.3.0" - } - }, -- "word-wrap": { -- "version": "1.2.3", -- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", -- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", -- "dev": true -- }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", -@@ -44391,21 +43554,57 @@ - } - } - }, -+ "wrap-ansi-cjs": { -+ "version": "npm:wrap-ansi@7.0.0", -+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", -+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", -+ "dev": true, -+ "requires": { -+ "ansi-styles": "^4.0.0", -+ "string-width": "^4.1.0", -+ "strip-ansi": "^6.0.0" -+ }, -+ "dependencies": { -+ "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, -+ "requires": { -+ "color-convert": "^2.0.1" -+ } -+ }, -+ "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, -+ "requires": { -+ "color-name": "~1.1.4" -+ } -+ }, -+ "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 -+ } -+ } -+ }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", -- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" -+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", -+ "dev": true - }, - "write-file-atomic": { -- "version": "3.0.3", -- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", -- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", -+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", -- "is-typedarray": "^1.0.0", -- "signal-exit": "^3.0.2", -- "typedarray-to-buffer": "^3.1.5" -+ "signal-exit": "^3.0.7" - } - }, - "ws": { -@@ -44450,9 +43649,9 @@ - "dev": true - }, - "xmlhttprequest-ssl": { -- "version": "1.5.5", -- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", -- "integrity": "sha512-/bFPLUgJrfGUL10AIv4Y7/CUt6so9CLtB/oFxQSHseSDNNCdC6vwwKEqwLN6wNPBg9YWXAiMu8jkf6RPRS/75Q==", -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", -+ "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", - "dev": true - }, - "y18n": { -@@ -44466,43 +43665,29 @@ - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { -- "version": "1.10.2", -- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", -- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", -+ "version": "2.3.1", -+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", -+ "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true - }, - "yargs": { -- "version": "17.5.1", -- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", -- "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", -+ "version": "17.7.2", -+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", -+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { -- "cliui": "^7.0.2", -+ "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.0.0" -- }, -- "dependencies": { -- "yargs-parser": { -- "version": "21.0.1", -- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", -- "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" -- } -+ "yargs-parser": "^21.1.1" - } - }, - "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 -- }, -- "yeast": { -- "version": "0.1.2", -- "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", -- "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==", -- "dev": true -+ "version": "21.1.1", -+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", -+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - }, - "yeoman-environment": { - "version": "3.9.1", -@@ -44809,11 +43994,11 @@ - "dev": true - }, - "zone.js": { -- "version": "0.11.4", -- "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.4.tgz", -- "integrity": "sha512-DDh2Ab+A/B+9mJyajPjHFPWfYU1H+pdun4wnnk0OcQTNjem1XQSZ2CDW+rfZEUDjv5M19SBqAkjZi0x5wuB5Qw==", -+ "version": "0.13.3", -+ "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.3.tgz", -+ "integrity": "sha512-MKPbmZie6fASC/ps4dkmIhaT5eonHkEt6eAy80K42tAm0G2W+AahLJjbfi6X9NPdciOE9GRFTTM8u2IiF6O3ww==", - "requires": { -- "tslib": "^2.0.0" -+ "tslib": "^2.3.0" - } - } - } -diff --git a/package.json b/package.json -index 0669dfe3..e2d12077 100644 ---- a/package.json -+++ b/package.json -@@ -1,44 +1,41 @@ - { - "name": "team-dojo", -- "version": "2.1.0-alpha1", -+ "version": "0.0.1-SNAPSHOT", - "private": true, -- "description": "TeamDojo is a tool to skill your Teams", -- "license": "Apache-2.0", -+ "description": "Description for Team Dojo", -+ "license": "UNLICENSED", - "scripts": { - "app:start": "./gradlew", -+ "app:up": "docker compose -f src/main/docker/app.yml up --wait", - "backend:build-cache": "npm run backend:info && npm run backend:nohttp:test && npm run ci:e2e:package", - "backend:doc:test": "./gradlew javadoc -x webapp -x webapp_test", - "backend:info": "./gradlew -v", - "backend:nohttp:test": "./gradlew checkstyleNohttp -x webapp -x webapp_test", - "backend:start": "./gradlew -x webapp -x webapp_test", -- "backend:unit:test": "./gradlew test integrationTest -x webapp -x webapp_test -Dlogging.level.ROOT=OFF -Dlogging.level.org.zalando=OFF -Dlogging.level.tech.jhipster=OFF -Dlogging.level.com.iteratec.teamdojo=OFF -Dlogging.level.org.springframework=OFF -Dlogging.level.org.springframework.web=OFF -Dlogging.level.org.springframework.security=OFF", -+ "backend:unit:test": "./gradlew test integrationTest -x webapp -x webapp_test -Dlogging.level.ROOT=OFF -Dlogging.level.tech.jhipster=OFF -Dlogging.level.com.iteratec.teamdojo=OFF -Dlogging.level.org.springframework=OFF -Dlogging.level.org.springframework.web=OFF -Dlogging.level.org.springframework.security=OFF", - "build": "npm run webapp:prod --", - "build-watch": "concurrently 'npm run webapp:build:dev -- --watch' npm:backend:start", - "ci:backend:test": "npm run backend:info && npm run backend:doc:test && npm run backend:nohttp:test && npm run backend:unit:test -- -P$npm_package_config_default_environment", - "ci:e2e:package": "npm run java:$npm_package_config_packaging:$npm_package_config_default_environment -- -Pe2e -Denforcer.skip=true", - "postci:e2e:package": "cp build/libs/*.$npm_package_config_packaging e2e.$npm_package_config_packaging", - "ci:e2e:prepare": "npm run ci:e2e:prepare:docker", -- "ci:e2e:prepare:docker": "npm run docker:db:up && npm run docker:others:up && docker ps -a", -- "preci:e2e:server:start": "npm run docker:db:await --if-present && npm run docker:others:await --if-present", -- "ci:e2e:server:start": "java -jar e2e.$npm_package_config_packaging --spring.profiles.active=e2e,$npm_package_config_default_environment -Dlogging.level.ROOT=OFF -Dlogging.level.org.zalando=OFF -Dlogging.level.tech.jhipster=OFF -Dlogging.level.com.iteratec.teamdojo=OFF -Dlogging.level.org.springframework=OFF -Dlogging.level.org.springframework.web=OFF -Dlogging.level.org.springframework.security=OFF --logging.level.org.springframework.web=ERROR", -- "ci:e2e:teardown": "npm run ci:e2e:teardown:docker", -- "ci:e2e:teardown:docker": "npm run docker:db:down --if-present && npm run docker:others:down && docker ps -a", -+ "ci:e2e:prepare:docker": "npm run services:up --if-present && docker ps -a", -+ "preci:e2e:server:start": "npm run services:db:await --if-present && npm run services:others:await --if-present", -+ "ci:e2e:server:start": "java -jar e2e.$npm_package_config_packaging --spring.profiles.active=e2e,$npm_package_config_default_environment -Dlogging.level.ROOT=OFF -Dlogging.level.tech.jhipster=OFF -Dlogging.level.com.iteratec.teamdojo=OFF -Dlogging.level.org.springframework=OFF -Dlogging.level.org.springframework.web=OFF -Dlogging.level.org.springframework.security=OFF --logging.level.org.springframework.web=ERROR", -+ "ci:e2e:teardown": "npm run ci:e2e:teardown:docker --if-present", -+ "ci:e2e:teardown:docker": "docker compose -f src/main/docker/services.yml down -v && docker ps -a", - "ci:frontend:build": "npm run webapp:build:$npm_package_config_default_environment", - "ci:frontend:test": "npm run ci:frontend:build && npm test", -- "clean-www": "rimraf build/resources/main/static/app/{src,build/}", -- "cleanup": "rimraf build/resources/main/static/", -- "docker:app:up": "docker-compose -f src/main/docker/app.yml up -d", -- "docker:db:down": "docker-compose -f src/main/docker/postgresql.yml down -v --remove-orphans", -- "docker:db:up": "docker-compose -f src/main/docker/postgresql.yml up -d", -- "docker:jhipster-registry:down": "docker-compose -f src/main/docker/jhipster-registry.yml down -v --remove-orphans", -- "docker:jhipster-registry:up": "docker-compose -f src/main/docker/jhipster-registry.yml up -d", -- "docker:keycloak:down": "docker-compose -f src/main/docker/keycloak.yml down -v --remove-orphans", -- "docker:keycloak:up": "docker-compose -f src/main/docker/keycloak.yml up -d", -- "docker:others:await": "echo \"Waiting for keycloak to start\" && wait-on -t 180000 http-get://localhost:9080/auth/realms/jhipster && echo \"keycloak started\" || echo \"keycloak not running, make sure oauth2 server is running\" && echo \"Waiting for jhipster-registry to start\" && wait-on -t 180000 http-get://localhost:8761/management/health && echo \"jhipster-registry started\"", -- "docker:others:down": "npm run docker:keycloak:down && npm run docker:jhipster-registry:down", -- "predocker:others:up": "", -- "docker:others:up": "npm run docker:keycloak:up && npm run docker:jhipster-registry:up", -+ "clean-www": "rimraf build/resources/main/static/", -+ "cleanup": "rimraf build/", -+ "docker:db:down": "docker compose -f src/main/docker/postgresql.yml down -v", -+ "docker:db:up": "docker compose -f src/main/docker/postgresql.yml up --wait", -+ "docker:jhipster-registry:down": "docker compose -f src/main/docker/jhipster-registry.yml down -v", -+ "docker:jhipster-registry:up": "docker compose -f src/main/docker/jhipster-registry.yml up --wait", -+ "docker:keycloak:down": "docker compose -f src/main/docker/keycloak.yml down -v", -+ "docker:keycloak:up": "docker compose -f src/main/docker/keycloak.yml up --wait", - "java:docker": "./gradlew bootJar -Pprod jibDockerBuild", -+ "java:docker:arm64": "npm run java:docker -- -PjibArchitecture=arm64", - "java:docker:dev": "npm run java:docker -- -Pdev,webapp", - "java:docker:prod": "npm run java:docker -- -Pprod", - "java:jar": "./gradlew bootJar -x test -x integrationTest", -@@ -51,9 +48,10 @@ - "lint": "eslint . --ext .js,.ts", - "lint:fix": "npm run lint -- --fix", - "prepare": "husky install", -- "prettier:check": "prettier --check \"{,src/**/,webpack/}*.{md,json,yml,html,cjs,mjs,js,ts,tsx,css,scss,java}\"", -- "prettier:format": "prettier --write \"{,src/**/,webpack/}*.{md,json,yml,html,cjs,mjs,js,ts,tsx,css,scss,java}\"", -+ "prettier:check": "prettier --check \"{,src/**/,webpack/,.blueprint/**/}*.{md,json,yml,html,cjs,mjs,js,ts,tsx,css,scss,java}\"", -+ "prettier:format": "prettier --write \"{,src/**/,webpack/,.blueprint/**/}*.{md,json,yml,html,cjs,mjs,js,ts,tsx,css,scss,java}\"", - "serve": "npm run start --", -+ "services:up": "docker compose -f src/main/docker/services.yml up --wait", - "start": "ng serve --hmr", - "start-tls": "npm run webapp:dev-ssl", - "pretest": "npm run lint", -@@ -75,88 +73,78 @@ - "packaging": "jar" - }, - "dependencies": { -- "@angular/common": "13.3.1", -- "@angular/compiler": "13.3.1", -- "@angular/core": "13.3.1", -- "@angular/forms": "13.3.1", -- "@angular/localize": "13.3.1", -- "@angular/platform-browser": "13.3.1", -- "@angular/platform-browser-dynamic": "13.3.1", -- "@angular/router": "13.3.1", -- "@fortawesome/angular-fontawesome": "0.10.2", -- "@fortawesome/fontawesome-free": "^6.1.1", -- "@fortawesome/fontawesome-svg-core": "6.1.1", -- "@fortawesome/free-solid-svg-icons": "6.1.1", -- "@ibm/plex": "^6.0.0", -- "@ng-bootstrap/ng-bootstrap": "12.0.1", -- "@ngx-translate/core": "14.0.0", -- "@ngx-translate/http-loader": "7.0.0", -- "@popperjs/core": "2.11.5", -- "bootstrap": "5.1.3", -- "dayjs": "1.11.0", -- "dompurify": "^2.3.8", -- "moment": "^2.29.2", -- "ngx-infinite-scroll": "13.0.1", -- "ngx-markdown": "^13.1.0", -- "ngx-webstorage": "9.0.0", -- "rxjs": "7.5.5", -- "simplebar": "^5.3.6", -- "tslib": "2.3.1", -- "zone.js": "0.11.4" -+ "@angular/common": "16.2.9", -+ "@angular/compiler": "16.2.9", -+ "@angular/core": "16.2.9", -+ "@angular/forms": "16.2.9", -+ "@angular/localize": "16.2.9", -+ "@angular/platform-browser": "16.2.9", -+ "@angular/platform-browser-dynamic": "16.2.9", -+ "@angular/router": "16.2.9", -+ "@fortawesome/angular-fontawesome": "0.13.0", -+ "@fortawesome/fontawesome-svg-core": "6.4.2", -+ "@fortawesome/free-solid-svg-icons": "6.4.2", -+ "@ng-bootstrap/ng-bootstrap": "15.1.1", -+ "@ngx-translate/core": "15.0.0", -+ "@ngx-translate/http-loader": "8.0.0", -+ "@popperjs/core": "2.11.8", -+ "bootstrap": "5.3.2", -+ "dayjs": "1.11.10", -+ "ngx-infinite-scroll": "16.0.0", -+ "rxjs": "7.8.1", -+ "tslib": "2.6.2", -+ "zone.js": "0.13.3" - }, - "devDependencies": { -- "@angular-builders/custom-webpack": "13.1.0", -- "@angular-builders/jest": "13.0.3", -- "@angular-devkit/build-angular": "13.3.1", -- "@angular-eslint/eslint-plugin": "13.2.0", -- "@angular/cli": "13.3.1", -- "@angular/compiler-cli": "13.3.1", -- "@angular/service-worker": "13.3.1", -- "@types/dompurify": "^2.3.3", -- "@types/jest": "27.4.1", -- "@types/node": "16.11.26", -- "@typescript-eslint/eslint-plugin": "5.18.0", -- "@typescript-eslint/parser": "5.18.0", -- "browser-sync": "^2.24.1", -+ "@angular-builders/custom-webpack": "16.0.1", -+ "@angular-builders/jest": "16.0.1", -+ "@angular-devkit/build-angular": "16.2.6", -+ "@angular-eslint/eslint-plugin": "16.2.0", -+ "@angular/cli": "16.2.6", -+ "@angular/compiler-cli": "16.2.9", -+ "@angular/service-worker": "16.2.9", -+ "@types/jest": "29.5.5", -+ "@types/node": "18.18.5", -+ "@typescript-eslint/eslint-plugin": "6.7.5", -+ "@typescript-eslint/parser": "6.7.5", -+ "browser-sync": "2.29.3", - "browser-sync-webpack-plugin": "2.3.0", -- "concurrently": "7.1.0", -- "copy-webpack-plugin": "10.2.4", -- "eslint": "8.12.0", -- "eslint-config-prettier": "8.5.0", -- "eslint-webpack-plugin": "3.1.1", -- "folder-hash": "4.0.2", -- "generator-jhipster": "^7.8.1", -- "husky": "7.0.4", -- "jest": "27.5.1", -+ "buffer": "6.0.3", -+ "concurrently": "8.2.1", -+ "copy-webpack-plugin": "11.0.0", -+ "eslint": "8.51.0", -+ "eslint-config-prettier": "9.0.0", -+ "eslint-webpack-plugin": "4.0.1", -+ "folder-hash": "4.0.4", -+ "generator-jhipster": "7.8.1", -+ "husky": "8.0.3", -+ "jest": "29.7.0", - "jest-date-mock": "1.0.8", -- "jest-junit": "13.1.0", -- "jest-preset-angular": "11.1.1", -- "jest-sonar-reporter": "2.0.0", -- "lint-staged": "12.3.7", -+ "jest-environment-jsdom": "29.7.0", -+ "jest-junit": "16.0.0", -+ "jest-preset-angular": "13.1.2", -+ "jest-sonar": "0.2.16", -+ "lint-staged": "14.0.1", - "merge-jsons-webpack-plugin": "2.0.1", -- "prettier": "2.6.2", -- "prettier-plugin-java": "1.6.1", -- "prettier-plugin-packagejson": "2.2.17", -- "rimraf": "3.0.2", -- "swagger-ui-dist": "4.10.3", -- "ts-jest": "27.1.4", -- "typescript": "4.6.3", -- "wait-on": "6.0.1", -- "webpack-bundle-analyzer": "4.5.0", -- "webpack-merge": "5.8.0", -+ "prettier": "3.0.3", -+ "prettier-plugin-java": "2.3.1", -+ "prettier-plugin-packagejson": "2.4.6", -+ "rimraf": "5.0.5", -+ "swagger-ui-dist": "5.9.0", -+ "ts-jest": "29.1.1", -+ "typescript": "5.1.6", -+ "wait-on": "7.0.1", -+ "webpack-bundle-analyzer": "4.9.1", -+ "webpack-merge": "5.9.0", - "webpack-notifier": "1.15.0" - }, - "engines": { -- "node": ">=16.14.0" -+ "node": ">=18.18.1" - }, - "cacheDirectories": [ - "node_modules" - ], -- "jestSonar": { -- "reportPath": "build/test-results/jest", -- "reportFile": "TESTS-results-sonar.xml" -- }, - "overrides": { -- "webpack": "5.71.0" -+ "webpack": "5.88.2" - } - } -diff --git a/settings.gradle b/settings.gradle -index be1a1f11..233bd049 100644 ---- a/settings.gradle -+++ b/settings.gradle -@@ -1,9 +1,7 @@ - - pluginManagement { - repositories { -- maven { url 'https://repo.spring.io/milestone' } -- gradlePluginPortal() -- //jhipster-needle-gradle-plugin-management-repositories - JHipster will add additional entries here -+ // jhipster-needle-gradle-plugin-management-repositories - JHipster will add additional entries here - } - plugins { - id 'org.springframework.boot' version "${springBootVersion}" -@@ -11,11 +9,12 @@ pluginManagement { - id 'com.gorylenko.gradle-git-properties' version "${gitPropertiesPluginVersion}" - id "org.openapi.generator" version "${openapiPluginVersion}" - id 'com.github.node-gradle.node' version "${gradleNodePluginVersion}" -- id 'org.liquibase.gradle' version "${liquibasePluginVersion}" - id 'org.sonarqube' version "${sonarqubePluginVersion}" -+ id 'com.diffplug.spotless' version "${spotlessPluginVersion}" - id "io.spring.nohttp" version "${noHttpCheckstyleVersion}" - id 'com.github.andygoossens.gradle-modernizer-plugin' version "${modernizerPluginVersion}" -- //jhipster-needle-gradle-plugin-management-plugins - JHipster will add additional entries here -+ id "org.liquibase.gradle" version "${liquibasePluginVersion}" -+ // jhipster-needle-gradle-plugin-management-plugins - JHipster will add additional entries here - } - } - -diff --git a/sonar-project.properties b/sonar-project.properties -index dbe4afb6..03d42c86 100644 ---- a/sonar-project.properties -+++ b/sonar-project.properties -@@ -1,27 +1,34 @@ --sonar.projectKey=teamDojo --sonar.projectName=teamDojo generated by jhipster --sonar.projectVersion=1.0 -+sonar.projectKey = teamDojo -+sonar.projectName = teamDojo generated by jhipster - --sonar.sources=src/main/ --sonar.host.url=http://localhost:9001 -+# Typescript tests files must be inside sources and tests, othewise `INFO: Test execution data ignored for 80 unknown files, including:` is -+# shown. -+sonar.sources = src -+sonar.tests = src -+sonar.host.url = http://localhost:9001 - --sonar.test.inclusions=src/test/**/*.*, src/main/webapp/app/**/*.spec.ts --sonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml --sonar.java.codeCoveragePlugin=jacoco --sonar.junit.reportPaths=build/test-results/test, build/test-results/integrationTest --sonar.testExecutionReportPaths=build/test-results/jest/TESTS-results-sonar.xml --sonar.javascript.lcov.reportPaths=build/test-results/lcov.info -+sonar.test.inclusions = src/test/**/*.*, src/main/webapp/app/**/*.spec.ts -+sonar.coverage.jacoco.xmlReportPaths = build/reports/jacoco/test/jacocoTestReport.xml -+sonar.java.codeCoveragePlugin = jacoco -+sonar.junit.reportPaths = build/test-results/test, build/test-results/integrationTest -+sonar.testExecutionReportPaths = build/test-results/jest/TESTS-results-sonar.xml -+sonar.javascript.lcov.reportPaths = build/test-results/lcov.info - --sonar.sourceEncoding=UTF-8 --sonar.exclusions=src/main/webapp/content/**/*.*, src/main/webapp/i18n/*.js, build/resources/main/static/**/*.* -+sonar.sourceEncoding = UTF-8 -+sonar.exclusions = src/main/webapp/content/**/*.*, src/main/webapp/i18n/*.js, build/resources/main/static/**/*.* -+ -+sonar.issue.ignore.multicriteria = S3437,S4684,S5145,UndocumentedApi - --sonar.issue.ignore.multicriteria=S3437,S4684,UndocumentedApi - # Rule https://rules.sonarsource.com/java/RSPEC-3437 is ignored, as a JPA-managed field cannot be transient --sonar.issue.ignore.multicriteria.S3437.resourceKey=src/main/java/**/* --sonar.issue.ignore.multicriteria.S3437.ruleKey=squid:S3437 --# Rule https://rules.sonarsource.com/java/RSPEC-1176 is ignored, as we want to follow "clean code" guidelines and classes, methods and arguments names should be self-explanatory --sonar.issue.ignore.multicriteria.UndocumentedApi.resourceKey=src/main/java/**/* --sonar.issue.ignore.multicriteria.UndocumentedApi.ruleKey=squid:UndocumentedApi -+sonar.issue.ignore.multicriteria.S3437.resourceKey = src/main/java/**/* -+sonar.issue.ignore.multicriteria.S3437.ruleKey = squid:S3437 - # Rule https://rules.sonarsource.com/java/RSPEC-4684 --sonar.issue.ignore.multicriteria.S4684.resourceKey=src/main/java/**/* --sonar.issue.ignore.multicriteria.S4684.ruleKey=java:S4684 -+sonar.issue.ignore.multicriteria.S4684.resourceKey = src/main/java/**/* -+sonar.issue.ignore.multicriteria.S4684.ruleKey = java:S4684 -+# Rule https://rules.sonarsource.com/java/RSPEC-5145 log filter is applied -+sonar.issue.ignore.multicriteria.S5145.resourceKey = src/main/java/**/* -+sonar.issue.ignore.multicriteria.S5145.ruleKey = javasecurity:S5145 -+# Rule https://rules.sonarsource.com/java/RSPEC-1176 is ignored, as we want to follow "clean code" guidelines and classes, methods and -+# arguments names should be self-explanatory -+sonar.issue.ignore.multicriteria.UndocumentedApi.resourceKey = src/main/java/**/* -+sonar.issue.ignore.multicriteria.UndocumentedApi.ruleKey = squid:UndocumentedApi -diff --git a/src/main/docker/app.yml b/src/main/docker/app.yml -index 92e66bb7..bcd7b29d 100644 ---- a/src/main/docker/app.yml -+++ b/src/main/docker/app.yml -@@ -1,56 +1,38 @@ - # This configuration is intended for development purpose, it's **your** responsibility to harden it for production --version: '3.8' -+name: teamdojo - services: -- teamdojo-app: -- image: docker.io/iteratec/teamdojo:2.0.0 -+ app: -+ image: teamdojo - environment: - - _JAVA_OPTIONS=-Xmx512m -Xms256m - - SPRING_PROFILES_ACTIVE=prod,api-docs -- - MANAGEMENT_METRICS_EXPORT_PROMETHEUS_ENABLED=true -- - SPRING_DATASOURCE_URL=jdbc:postgresql://teamdojo-postgresql:5432/teamDojo -- - SPRING_LIQUIBASE_URL=jdbc:postgresql://teamdojo-postgresql:5432/teamDojo -- - SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI=http://keycloak:9080/auth/realms/jhipster -+ - MANAGEMENT_PROMETHEUS_METRICS_EXPORT_ENABLED=true -+ - SPRING_DATASOURCE_URL=jdbc:postgresql://postgresql:5432/teamDojo -+ - SPRING_LIQUIBASE_URL=jdbc:postgresql://postgresql:5432/teamDojo -+ - SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI=http://keycloak:9080/realms/jhipster - - SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_ID=web_app - - SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_SECRET=web_app -- - JHIPSTER_SLEEP=30 # gives time for other services to boot before the application -- # If you want to expose these ports outside your dev PC, -- # remove the "127.0.0.1:" prefix - ports: - - 127.0.0.1:8080:8080 -- teamdojo-postgresql: -- image: postgres:14.2 -- # volumes: -- # - ~/volumes/jhipster/teamDojo/postgresql/:/var/lib/postgresql/data/ -- environment: -- - POSTGRES_USER=teamDojo -- - POSTGRES_PASSWORD= -- - POSTGRES_HOST_AUTH_METHOD=trust -- # If you want to expose these ports outside your dev PC, -- # remove the "127.0.0.1:" prefix -- ports: -- - 127.0.0.1:5432:5432 -+ healthcheck: -+ test: -+ - CMD -+ - curl -+ - -f -+ - http://localhost:8080/management/health -+ interval: 5s -+ timeout: 5s -+ retries: 40 -+ depends_on: -+ postgresql: -+ condition: service_healthy -+ keycloak: -+ condition: service_healthy -+ postgresql: -+ extends: -+ file: ./postgresql.yml -+ service: postgresql - keycloak: -- image: jboss/keycloak:16.1.0 -- command: -- [ -- '-b', -- '0.0.0.0', -- '-Dkeycloak.migration.action=import', -- '-Dkeycloak.migration.provider=dir', -- '-Dkeycloak.migration.dir=/opt/jboss/keycloak/realm-config', -- '-Dkeycloak.migration.strategy=OVERWRITE_EXISTING', -- '-Djboss.socket.binding.port-offset=1000', -- '-Dkeycloak.profile.feature.upload_scripts=enabled', -- ] -- volumes: -- - ./realm-config:/opt/jboss/keycloak/realm-config -- environment: -- - KEYCLOAK_USER=admin -- - KEYCLOAK_PASSWORD=admin -- - DB_VENDOR=h2 -- # If you want to expose these ports outside your dev PC, -- # remove the "127.0.0.1:" prefix -- ports: -- - 127.0.0.1:9080:9080 -- - 127.0.0.1:9443:9443 -- - 127.0.0.1:10990:10990 -+ extends: -+ file: ./keycloak.yml -+ service: keycloak -diff --git a/src/main/docker/jhipster-control-center.yml b/src/main/docker/jhipster-control-center.yml -index 13a9abfb..cc7a7cdd 100644 ---- a/src/main/docker/jhipster-control-center.yml -+++ b/src/main/docker/jhipster-control-center.yml -@@ -28,7 +28,7 @@ - # - In Consul mode, the ports are in the consul.yml file. - # - In Eureka mode, the ports are in the jhipster-registry.yml file. - --version: '3.8' -+name: teamdojo - services: - jhipster-control-center: - image: 'jhipster/jhipster-control-center:v0.5.0' -@@ -40,9 +40,8 @@ services: - environment: - - _JAVA_OPTIONS=-Xmx512m -Xms256m - - SPRING_PROFILES_ACTIVE=prod,api-docs,static,oauth2 -- - JHIPSTER_SLEEP=30 # gives time for other services to boot before the application - # For keycloak to work, you need to add '127.0.0.1 keycloak' to your hosts file -- - SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI=http://keycloak:9080/auth/realms/jhipster -+ - SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI=http://keycloak:9080/realms/jhipster - - SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_ID=jhipster-control-center - - SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_SECRET=jhipster-control-center - - SPRING_CLOUD_DISCOVERY_CLIENT_SIMPLE_INSTANCES_TEAMDOJO_0_URI=http://host.docker.internal:8080 -diff --git a/src/main/docker/jib/entrypoint.sh b/src/main/docker/jib/entrypoint.sh -index 238b3d44..5a068087 100644 ---- a/src/main/docker/jib/entrypoint.sh -+++ b/src/main/docker/jib/entrypoint.sh -@@ -1,4 +1,39 @@ --#!/bin/sh -+#!/bin/bash - - echo "The application will start in ${JHIPSTER_SLEEP}s..." && sleep ${JHIPSTER_SLEEP} -+ -+# usage: file_env VAR [DEFAULT] -+# ie: file_env 'XYZ_DB_PASSWORD' 'example' -+# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of -+# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -+file_env() { -+ local var="$1" -+ local fileVar="${var}_FILE" -+ local def="${2:-}" -+ if [[ ${!var:-} && ${!fileVar:-} ]]; then -+ echo >&2 "error: both $var and $fileVar are set (but are exclusive)" -+ exit 1 -+ fi -+ local val="$def" -+ if [[ ${!var:-} ]]; then -+ val="${!var}" -+ elif [[ ${!fileVar:-} ]]; then -+ val="$(< "${!fileVar}")" -+ fi -+ -+ if [[ -n $val ]]; then -+ export "$var"="$val" -+ fi -+ -+ unset "$fileVar" -+} -+ -+file_env 'SPRING_DATASOURCE_URL' -+file_env 'SPRING_DATASOURCE_USERNAME' -+file_env 'SPRING_DATASOURCE_PASSWORD' -+file_env 'SPRING_LIQUIBASE_URL' -+file_env 'SPRING_LIQUIBASE_USER' -+file_env 'SPRING_LIQUIBASE_PASSWORD' -+file_env 'JHIPSTER_REGISTRY_PASSWORD' -+ - exec java ${JAVA_OPTS} -noverify -XX:+AlwaysPreTouch -Djava.security.egd=file:/dev/./urandom -cp /app/resources/:/app/classes/:/app/libs/* "com.iteratec.teamdojo.TeamDojoApp" "$@" -diff --git a/src/main/docker/keycloak.yml b/src/main/docker/keycloak.yml -index 7fe3f96e..b795abea 100644 ---- a/src/main/docker/keycloak.yml -+++ b/src/main/docker/keycloak.yml -@@ -1,28 +1,28 @@ - # This configuration is intended for development purpose, it's **your** responsibility to harden it for production --version: '3.8' -+name: teamdojo - services: - keycloak: -- image: jboss/keycloak:16.1.0 -- command: -- [ -- '-b', -- '0.0.0.0', -- '-Dkeycloak.migration.action=import', -- '-Dkeycloak.migration.provider=dir', -- '-Dkeycloak.migration.dir=/opt/jboss/keycloak/realm-config', -- '-Dkeycloak.migration.strategy=OVERWRITE_EXISTING', -- '-Djboss.socket.binding.port-offset=1000', -- '-Dkeycloak.profile.feature.upload_scripts=enabled', -- ] -+ image: quay.io/keycloak/keycloak:22.0.4 -+ command: ['start-dev --import-realm'] - volumes: -- - ./realm-config:/opt/jboss/keycloak/realm-config -+ - ./realm-config:/opt/keycloak/data/import -+ - ./realm-config/keycloak-health-check.sh:/opt/keycloak/health-check.sh - environment: -- - KEYCLOAK_USER=admin -- - KEYCLOAK_PASSWORD=admin -- - DB_VENDOR=h2 -+ - KC_DB=dev-file -+ - KEYCLOAK_ADMIN=admin -+ - KEYCLOAK_ADMIN_PASSWORD=admin -+ - KC_FEATURES=scripts -+ - KC_HTTP_PORT=9080 -+ - KC_HTTPS_PORT=9443 -+ - KC_HEALTH_ENABLED=true - # If you want to expose these ports outside your dev PC, - # remove the "127.0.0.1:" prefix - ports: - - 127.0.0.1:9080:9080 - - 127.0.0.1:9443:9443 -- - 127.0.0.1:10990:10990 -+ healthcheck: -+ test: 'bash /opt/keycloak/health-check.sh' -+ interval: 5s -+ timeout: 5s -+ retries: 20 -+ start_period: 10s -diff --git a/src/main/docker/monitoring.yml b/src/main/docker/monitoring.yml -index d9404892..d8dbcc13 100644 ---- a/src/main/docker/monitoring.yml -+++ b/src/main/docker/monitoring.yml -@@ -1,8 +1,8 @@ - # This configuration is intended for development purpose, it's **your** responsibility to harden it for production --version: '3.8' -+name: teamdojo - services: -- teamdojo-prometheus: -- image: prom/prometheus:v2.33.3 -+ prometheus: -+ image: prom/prometheus:v2.47.2 - volumes: - - ./prometheus/:/etc/prometheus/ - command: -@@ -14,8 +14,8 @@ services: - # On MacOS, remove next line and replace localhost by host.docker.internal in prometheus/prometheus.yml and - # grafana/provisioning/datasources/datasource.yml - network_mode: 'host' # to test locally running service -- teamdojo-grafana: -- image: grafana/grafana:8.4.1 -+ grafana: -+ image: grafana/grafana:10.1.5 - volumes: - - ./grafana/provisioning/:/etc/grafana/provisioning/ - environment: -diff --git a/src/main/docker/postgresql.yml b/src/main/docker/postgresql.yml -index 89f53f9e..1bb84e5e 100644 ---- a/src/main/docker/postgresql.yml -+++ b/src/main/docker/postgresql.yml -@@ -1,14 +1,19 @@ - # This configuration is intended for development purpose, it's **your** responsibility to harden it for production --version: '3.8' -+name: teamdojo - services: -- teamdojo-postgresql: -- image: postgres:14.2 -+ postgresql: -+ image: postgres:16.0 - # volumes: - # - ~/volumes/jhipster/teamDojo/postgresql/:/var/lib/postgresql/data/ - environment: - - POSTGRES_USER=teamDojo - - POSTGRES_PASSWORD= - - POSTGRES_HOST_AUTH_METHOD=trust -+ healthcheck: -+ test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER}'] -+ interval: 5s -+ timeout: 5s -+ retries: 10 - # If you want to expose these ports outside your dev PC, - # remove the "127.0.0.1:" prefix - ports: -diff --git a/src/main/docker/realm-config/jhipster-realm.json b/src/main/docker/realm-config/jhipster-realm.json -index 4b53892a..79882ae9 100644 ---- a/src/main/docker/realm-config/jhipster-realm.json -+++ b/src/main/docker/realm-config/jhipster-realm.json -@@ -1,6 +1,8 @@ - { - "id": "jhipster", - "realm": "jhipster", -+ "displayName": "JHipster", -+ "displayNameHtml": "
JHipster
", - "notBefore": 0, - "defaultSignatureAlgorithm": "RS256", - "revokeRefreshToken": false, -@@ -98,7 +100,6 @@ - } - ], - "client": { -- "internal": [], - "realm-management": [ - { - "id": "a6249a12-d76c-4514-b137-e3018b243e25", -@@ -387,6 +388,15 @@ - "containerId": "6cc5a716-0880-47dc-b714-9a4967246b2f", - "attributes": {} - }, -+ { -+ "id": "16925eed-a410-4241-9af8-cc7992c42f7a", -+ "name": "view-groups", -+ "description": "${role_view-groups}", -+ "composite": false, -+ "clientRole": true, -+ "containerId": "6cc5a716-0880-47dc-b714-9a4967246b2f", -+ "attributes": {} -+ }, - { - "id": "a7f45fab-19c3-4c48-aca3-85f828ca0fed", - "name": "manage-account-links", -@@ -434,7 +444,8 @@ - "otpPolicyDigits": 6, - "otpPolicyLookAheadWindow": 1, - "otpPolicyPeriod": 30, -- "otpSupportedApplications": ["FreeOTP", "Google Authenticator"], -+ "otpPolicyCodeReusable": false, -+ "otpSupportedApplications": ["totpAppGoogleName", "totpAppFreeOTPName", "totpAppMicrosoftAuthenticatorName"], - "webAuthnPolicyRpEntityName": "keycloak", - "webAuthnPolicySignatureAlgorithms": ["ES256"], - "webAuthnPolicyRpId": "", -@@ -466,10 +477,7 @@ - "serviceAccountClientId": "internal", - "disableableCredentialTypes": [], - "requiredActions": [], -- "realmRoles": ["offline_access", "uma_authorization"], -- "clientRoles": { -- "account": ["view-profile", "manage-account"] -- }, -+ "realmRoles": ["default-roles-jhipster"], - "notBefore": 0, - "groups": [] - } -@@ -484,7 +492,7 @@ - "account": [ - { - "client": "account-console", -- "roles": ["manage-account"] -+ "roles": ["manage-account", "view-groups"] - } - ] - }, -@@ -499,7 +507,7 @@ - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", -- "secret": "**********", -+ "secret": "13430875-be37-430f-8e2e-c7d0d53fc119", - "redirectUris": ["/realms/jhipster/account/*"], - "webOrigins": [], - "notBefore": 0, -@@ -512,11 +520,13 @@ - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", -- "attributes": {}, -+ "attributes": { -+ "post.logout.redirect.uris": "+" -+ }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, -- "defaultClientScopes": ["web-origins", "roles", "profile", "email"], -+ "defaultClientScopes": ["web-origins", "acr", "roles", "profile", "email"], - "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] - }, - { -@@ -529,7 +539,7 @@ - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", -- "secret": "**********", -+ "secret": "00b8051d-46c5-4ae7-b600-f435f1bc61cc", - "redirectUris": ["/realms/jhipster/account/*"], - "webOrigins": [], - "notBefore": 0, -@@ -543,6 +553,7 @@ - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { -+ "post.logout.redirect.uris": "+", - "pkce.code.challenge.method": "S256" - }, - "authenticationFlowBindingOverrides": {}, -@@ -558,7 +569,7 @@ - "config": {} - } - ], -- "defaultClientScopes": ["web-origins", "roles", "profile", "email"], -+ "defaultClientScopes": ["web-origins", "acr", "roles", "profile", "email"], - "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] - }, - { -@@ -569,7 +580,7 @@ - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", -- "secret": "**********", -+ "secret": "bae70a2a-7955-4b06-8920-7fe30c189f81", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, -@@ -582,11 +593,13 @@ - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", -- "attributes": {}, -+ "attributes": { -+ "post.logout.redirect.uris": "+" -+ }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, -- "defaultClientScopes": ["web-origins", "roles", "profile", "email"], -+ "defaultClientScopes": ["web-origins", "acr", "roles", "profile", "email"], - "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] - }, - { -@@ -597,7 +610,7 @@ - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", -- "secret": "**********", -+ "secret": "af85a4e3-4be9-4658-b0f8-dbc66433f673", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, -@@ -610,99 +623,13 @@ - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", -- "attributes": {}, -- "authenticationFlowBindingOverrides": {}, -- "fullScopeAllowed": false, -- "nodeReRegistrationTimeout": 0, -- "defaultClientScopes": ["web-origins", "roles", "profile", "email"], -- "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] -- }, -- { -- "id": "10e6ea34-9f1e-49ef-8e28-7eb851459694", -- "clientId": "internal", -- "surrogateAuthRequired": false, -- "enabled": true, -- "alwaysDisplayInConsole": false, -- "clientAuthenticatorType": "client-secret", -- "secret": "internal", -- "redirectUris": [], -- "webOrigins": [], -- "notBefore": 0, -- "bearerOnly": false, -- "consentRequired": false, -- "standardFlowEnabled": false, -- "implicitFlowEnabled": false, -- "directAccessGrantsEnabled": false, -- "serviceAccountsEnabled": true, -- "publicClient": false, -- "frontchannelLogout": false, -- "protocol": "openid-connect", - "attributes": { -- "saml.assertion.signature": "false", -- "saml.force.post.binding": "false", -- "saml.multivalued.roles": "false", -- "saml.encrypt": "false", -- "saml.server.signature": "false", -- "saml.server.signature.keyinfo.ext": "false", -- "exclude.session.state.from.auth.response": "false", -- "saml_force_name_id_format": "false", -- "saml.client.signature": "false", -- "tls.client.certificate.bound.access.tokens": "false", -- "saml.authnstatement": "false", -- "display.on.consent.screen": "false", -- "saml.onetimeuse.condition": "false" -+ "post.logout.redirect.uris": "+" - }, - "authenticationFlowBindingOverrides": {}, -- "fullScopeAllowed": true, -- "nodeReRegistrationTimeout": -1, -- "protocolMappers": [ -- { -- "id": "ff2f50b4-5409-4789-bdda-fe731f14fbff", -- "name": "Client IP Address", -- "protocol": "openid-connect", -- "protocolMapper": "oidc-usersessionmodel-note-mapper", -- "consentRequired": false, -- "config": { -- "user.session.note": "clientAddress", -- "userinfo.token.claim": "true", -- "id.token.claim": "true", -- "access.token.claim": "true", -- "claim.name": "clientAddress", -- "jsonType.label": "String" -- } -- }, -- { -- "id": "72f9ae74-9e95-4b7b-a709-5086137410bb", -- "name": "Client ID", -- "protocol": "openid-connect", -- "protocolMapper": "oidc-usersessionmodel-note-mapper", -- "consentRequired": false, -- "config": { -- "user.session.note": "clientId", -- "userinfo.token.claim": "true", -- "id.token.claim": "true", -- "access.token.claim": "true", -- "claim.name": "clientId", -- "jsonType.label": "String" -- } -- }, -- { -- "id": "029bf6c8-5a19-4798-984c-bdb205d752d5", -- "name": "Client Host", -- "protocol": "openid-connect", -- "protocolMapper": "oidc-usersessionmodel-note-mapper", -- "consentRequired": false, -- "config": { -- "user.session.note": "clientHost", -- "userinfo.token.claim": "true", -- "id.token.claim": "true", -- "access.token.claim": "true", -- "claim.name": "clientHost", -- "jsonType.label": "String" -- } -- } -- ], -- "defaultClientScopes": ["web-origins", "roles", "profile", "email"], -+ "fullScopeAllowed": false, -+ "nodeReRegistrationTimeout": 0, -+ "defaultClientScopes": ["web-origins", "acr", "roles", "profile", "email"], - "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] - }, - { -@@ -732,6 +659,7 @@ - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", -+ "post.logout.redirect.uris": "+", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", -@@ -745,7 +673,7 @@ - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, -- "defaultClientScopes": ["web-origins", "jhipster", "roles", "profile", "email"], -+ "defaultClientScopes": ["web-origins", "acr", "jhipster", "roles", "profile", "email"], - "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] - }, - { -@@ -756,7 +684,7 @@ - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", -- "secret": "**********", -+ "secret": "e053ffdb-3c8a-4f05-a4ed-6b5a4b787b58", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, -@@ -769,11 +697,13 @@ - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", -- "attributes": {}, -+ "attributes": { -+ "post.logout.redirect.uris": "+" -+ }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, -- "defaultClientScopes": ["web-origins", "roles", "profile", "email"], -+ "defaultClientScopes": ["web-origins", "acr", "roles", "profile", "email"], - "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] - }, - { -@@ -786,7 +716,7 @@ - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", -- "secret": "**********", -+ "secret": "0dfd5649-9f3f-4266-825c-d873952aa378", - "redirectUris": ["/admin/jhipster/console/*"], - "webOrigins": ["+"], - "notBefore": 0, -@@ -800,6 +730,7 @@ - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { -+ "post.logout.redirect.uris": "+", - "pkce.code.challenge.method": "S256" - }, - "authenticationFlowBindingOverrides": {}, -@@ -822,7 +753,7 @@ - } - } - ], -- "defaultClientScopes": ["web-origins", "roles", "profile", "email"], -+ "defaultClientScopes": ["web-origins", "acr", "roles", "profile", "email"], - "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] - }, - { -@@ -835,7 +766,14 @@ - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "web_app", -- "redirectUris": ["dev.localhost.ionic:*", "http://127.0.0.1:*", "http://localhost:*", "https://127.0.0.1:*", "https://localhost:*"], -+ "redirectUris": [ -+ "dev.localhost.ionic:*", -+ "http://127.0.0.1:*", -+ "http://localhost:*", -+ "https://127.0.0.1:*", -+ "https://localhost:*", -+ "https://oauth.pstmn.io/v1/callback" -+ ], - "webOrigins": ["*"], - "notBefore": 0, - "bearerOnly": false, -@@ -852,6 +790,7 @@ - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", -+ "post.logout.redirect.uris": "+", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", -@@ -865,7 +804,7 @@ - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, -- "defaultClientScopes": ["web-origins", "jhipster", "roles", "profile", "email"], -+ "defaultClientScopes": ["web-origins", "acr", "jhipster", "roles", "profile", "email"], - "optionalClientScopes": ["address", "phone", "offline_access", "microprofile-jwt"] - } - ], -@@ -1390,6 +1329,29 @@ - } - ] - }, -+ { -+ "id": "49177925-3cb4-4fe1-9ced-d9a331dee5c6", -+ "name": "acr", -+ "description": "OpenID Connect scope for add acr (authentication context class reference) to the token", -+ "protocol": "openid-connect", -+ "attributes": { -+ "include.in.token.scope": "false", -+ "display.on.consent.screen": "false" -+ }, -+ "protocolMappers": [ -+ { -+ "id": "df11a217-a90d-4d01-9aab-84fbaa3a0ad6", -+ "name": "acr loa level", -+ "protocol": "openid-connect", -+ "protocolMapper": "oidc-acr-mapper", -+ "consentRequired": false, -+ "config": { -+ "id.token.claim": "true", -+ "access.token.claim": "true" -+ } -+ } -+ ] -+ }, - { - "id": "2daaac74-636f-4074-87a9-d1aba9dffb96", - "name": "web-origins", -@@ -1412,7 +1374,7 @@ - ] - } - ], -- "defaultDefaultClientScopes": ["web-origins", "email", "profile", "roles", "role_list"], -+ "defaultDefaultClientScopes": ["web-origins", "acr", "email", "profile", "roles", "role_list"], - "defaultOptionalClientScopes": ["offline_access", "phone", "address", "microprofile-jwt"], - "browserSecurityHeaders": { - "contentSecurityPolicyReportOnly": "", -@@ -1529,6 +1491,14 @@ - "config": {} - } - ], -+ "org.keycloak.userprofile.UserProfileProvider": [ -+ { -+ "id": "b05ccf0d-d8ac-4695-bd60-37018f8f94b4", -+ "providerId": "declarative-user-profile", -+ "subComponents": {}, -+ "config": {} -+ } -+ ], - "org.keycloak.keys.KeyProvider": [ - { - "id": "62707fae-58f9-4fc2-89fb-0c5d212dc3dc", -@@ -2222,6 +2192,24 @@ - "defaultAction": false, - "priority": 1000, - "config": {} -+ }, -+ { -+ "alias": "webauthn-register", -+ "name": "Webauthn Register", -+ "providerId": "webauthn-register", -+ "enabled": true, -+ "defaultAction": false, -+ "priority": 70, -+ "config": {} -+ }, -+ { -+ "alias": "webauthn-register-passwordless", -+ "name": "Webauthn Register Passwordless", -+ "providerId": "webauthn-register-passwordless", -+ "enabled": true, -+ "defaultAction": false, -+ "priority": 80, -+ "config": {} - } - ], - "browserFlow": "browser", -@@ -2241,14 +2229,75 @@ - "clientSessionMaxLifespan": "0", - "parRequestUriLifespan": "60", - "clientOfflineSessionIdleTimeout": "0", -- "cibaInterval": "5" -+ "cibaInterval": "5", -+ "realmReusableOtpCode": "false", -+ "frontendUrl": "", -+ "acr.loa.map": "[]" - }, -- "keycloakVersion": "16.1.0", -+ "keycloakVersion": "22.0.1", - "userManagedAccessAllowed": false, - "clientProfiles": { - "profiles": [] - }, - "clientPolicies": { - "policies": [] -- } -+ }, -+ "users": [ -+ { -+ "id": "4c973896-5761-41fc-8217-07c5d13a004b", -+ "createdTimestamp": 1505479415590, -+ "username": "admin", -+ "enabled": true, -+ "totp": false, -+ "emailVerified": true, -+ "firstName": "Admin", -+ "lastName": "Administrator", -+ "email": "admin@localhost", -+ "credentials": [ -+ { -+ "id": "b860462b-9b02-48ba-9523-d3a8926a917b", -+ "type": "password", -+ "createdDate": 1505479429154, -+ "secretData": "{\"value\":\"4pf9K2jWSCcHC+CwsZP/qidN5pSmDUe6AX6wBerSGdBVKkExay8MWKx+EKmaaObZW6FVsD8vdW/ZsyUFD9gJ1Q==\",\"salt\":\"1/qNkZ5kr77jOMOBPBogGw==\"}", -+ "credentialData": "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}" -+ } -+ ], -+ "disableableCredentialTypes": [], -+ "requiredActions": [], -+ "realmRoles": ["offline_access", "uma_authorization"], -+ "clientRoles": { -+ "account": ["view-profile", "manage-account"] -+ }, -+ "notBefore": 0, -+ "groups": ["/Admins", "/Users"] -+ }, -+ { -+ "id": "c4af4e2f-b432-4c3b-8405-cca86cd5b97b", -+ "createdTimestamp": 1505479373742, -+ "username": "user", -+ "enabled": true, -+ "totp": false, -+ "emailVerified": true, -+ "firstName": "", -+ "lastName": "User", -+ "email": "user@localhost", -+ "credentials": [ -+ { -+ "id": "7821832b-1e82-45a2-b8d3-f1a6ad909e64", -+ "type": "password", -+ "createdDate": 1505479392766, -+ "secretData": "{\"value\":\"MbKsMgWPnZyImih8s4SaoCSCq+XIY/c6S9F93sXEidHF1TjPWxCqMkec0+o3860CMLXHt3az61cIJOWI0FW9aw==\",\"salt\":\"fmpBI1r8R1u75hDLMUlwBw==\"}", -+ "credentialData": "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}" -+ } -+ ], -+ "disableableCredentialTypes": [], -+ "requiredActions": [], -+ "realmRoles": ["offline_access", "uma_authorization"], -+ "clientRoles": { -+ "account": ["view-profile", "manage-account"] -+ }, -+ "notBefore": 0, -+ "groups": ["/Users"] -+ } -+ ] - } -diff --git a/src/main/docker/realm-config/jhipster-users-0.json b/src/main/docker/realm-config/jhipster-users-0.json -deleted file mode 100644 -index e96d63cc..00000000 ---- a/src/main/docker/realm-config/jhipster-users-0.json -+++ /dev/null -@@ -1,61 +0,0 @@ --{ -- "realm": "jhipster", -- "users": [ -- { -- "id": "4c973896-5761-41fc-8217-07c5d13a004b", -- "createdTimestamp": 1505479415590, -- "username": "admin", -- "enabled": true, -- "totp": false, -- "emailVerified": true, -- "firstName": "Admin", -- "lastName": "Administrator", -- "email": "admin@localhost", -- "credentials": [ -- { -- "id": "b860462b-9b02-48ba-9523-d3a8926a917b", -- "type": "password", -- "createdDate": 1505479429154, -- "secretData": "{\"value\":\"4pf9K2jWSCcHC+CwsZP/qidN5pSmDUe6AX6wBerSGdBVKkExay8MWKx+EKmaaObZW6FVsD8vdW/ZsyUFD9gJ1Q==\",\"salt\":\"1/qNkZ5kr77jOMOBPBogGw==\"}", -- "credentialData": "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}" -- } -- ], -- "disableableCredentialTypes": [], -- "requiredActions": [], -- "realmRoles": ["offline_access", "uma_authorization"], -- "clientRoles": { -- "account": ["view-profile", "manage-account"] -- }, -- "notBefore": 0, -- "groups": ["/Admins", "/Users"] -- }, -- { -- "id": "c4af4e2f-b432-4c3b-8405-cca86cd5b97b", -- "createdTimestamp": 1505479373742, -- "username": "user", -- "enabled": true, -- "totp": false, -- "emailVerified": true, -- "firstName": "", -- "lastName": "User", -- "email": "user@localhost", -- "credentials": [ -- { -- "id": "7821832b-1e82-45a2-b8d3-f1a6ad909e64", -- "type": "password", -- "createdDate": 1505479392766, -- "secretData": "{\"value\":\"MbKsMgWPnZyImih8s4SaoCSCq+XIY/c6S9F93sXEidHF1TjPWxCqMkec0+o3860CMLXHt3az61cIJOWI0FW9aw==\",\"salt\":\"fmpBI1r8R1u75hDLMUlwBw==\"}", -- "credentialData": "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\"}" -- } -- ], -- "disableableCredentialTypes": [], -- "requiredActions": [], -- "realmRoles": ["offline_access", "uma_authorization"], -- "clientRoles": { -- "account": ["view-profile", "manage-account"] -- }, -- "notBefore": 0, -- "groups": ["/Users"] -- } -- ] --} -diff --git a/src/main/docker/sonar.yml b/src/main/docker/sonar.yml -index 14345b10..921f6afa 100644 ---- a/src/main/docker/sonar.yml -+++ b/src/main/docker/sonar.yml -@@ -1,13 +1,15 @@ - # This configuration is intended for development purpose, it's **your** responsibility to harden it for production --version: '3.8' -+name: teamdojo - services: -- teamdojo-sonar: -- image: sonarqube:9.3.0-community -- # Authentication is turned off for out of the box experience while trying out SonarQube -- # For real use cases delete sonar.forceAuthentication variable or set sonar.forceAuthentication=true -+ sonar: -+ container_name: sonarqube -+ image: sonarqube:10.2.1-community -+ # Forced authentication redirect for UI is turned off for out of the box experience while trying out SonarQube -+ # For real use cases delete SONAR_FORCEAUTHENTICATION variable or set SONAR_FORCEAUTHENTICATION=true - environment: -- - sonar.forceAuthentication=false -+ - SONAR_FORCEAUTHENTICATION=false - # If you want to expose these ports outside your dev PC, - # remove the "127.0.0.1:" prefix - ports: - - 127.0.0.1:9001:9000 -+ - 127.0.0.1:9000:9000 -diff --git a/src/main/docker/swagger-editor.yml b/src/main/docker/swagger-editor.yml -index fe815561..f6258ee4 100644 ---- a/src/main/docker/swagger-editor.yml -+++ b/src/main/docker/swagger-editor.yml -@@ -1,5 +1,5 @@ - # This configuration is intended for development purpose, it's **your** responsibility to harden it for production --version: '3.8' -+name: teamdojo - services: - swagger-editor: - image: swaggerapi/swagger-editor:latest -diff --git a/src/main/java/com/iteratec/teamdojo/ApplicationWebXml.java b/src/main/java/com/iteratec/teamdojo/ApplicationWebXml.java -index 6cc40436..a566476e 100644 ---- a/src/main/java/com/iteratec/teamdojo/ApplicationWebXml.java -+++ b/src/main/java/com/iteratec/teamdojo/ApplicationWebXml.java -@@ -1,6 +1,5 @@ - package com.iteratec.teamdojo; - --import com.iteratec.teamdojo.GeneratedByJHipster; - import org.springframework.boot.builder.SpringApplicationBuilder; - import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - import tech.jhipster.config.DefaultProfileUtil; -diff --git a/src/main/java/com/iteratec/teamdojo/GeneratedByJHipster.java b/src/main/java/com/iteratec/teamdojo/GeneratedByJHipster.java -index 23360218..bbcef8f8 100644 ---- a/src/main/java/com/iteratec/teamdojo/GeneratedByJHipster.java -+++ b/src/main/java/com/iteratec/teamdojo/GeneratedByJHipster.java -@@ -1,10 +1,10 @@ - package com.iteratec.teamdojo; - -+import jakarta.annotation.Generated; - import java.lang.annotation.ElementType; - import java.lang.annotation.Retention; - import java.lang.annotation.RetentionPolicy; - import java.lang.annotation.Target; --import javax.annotation.Generated; - - @Generated(value = "JHipster", comments = "Generated by JHipster 7.8.1") - @Retention(RetentionPolicy.SOURCE) -diff --git a/src/main/java/com/iteratec/teamdojo/TeamDojoApp.java b/src/main/java/com/iteratec/teamdojo/TeamDojoApp.java -index bfa2b6c4..f75ee4e8 100644 ---- a/src/main/java/com/iteratec/teamdojo/TeamDojoApp.java -+++ b/src/main/java/com/iteratec/teamdojo/TeamDojoApp.java -@@ -1,13 +1,13 @@ - package com.iteratec.teamdojo; - --import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.config.ApplicationProperties; -+import com.iteratec.teamdojo.config.CRLFLogConverter; -+import jakarta.annotation.PostConstruct; - import java.net.InetAddress; - import java.net.UnknownHostException; - import java.util.Arrays; - import java.util.Collection; - import java.util.Optional; --import javax.annotation.PostConstruct; - import org.apache.commons.lang3.StringUtils; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; -@@ -74,6 +74,7 @@ public class TeamDojoApp { - - private static void logApplicationStartup(Environment env) { - String protocol = Optional.ofNullable(env.getProperty("server.ssl.key-store")).map(key -> "https").orElse("http"); -+ String applicationName = env.getProperty("spring.application.name"); - String serverPort = env.getProperty("server.port"); - String contextPath = Optional - .ofNullable(env.getProperty("server.servlet.context-path")) -@@ -86,12 +87,16 @@ public class TeamDojoApp { - log.warn("The host name could not be determined, using `localhost` as fallback"); - } - log.info( -- "\n----------------------------------------------------------\n\t" + -- "Application '{}' is running! Access URLs:\n\t" + -- "Local: \t\t{}://localhost:{}{}\n\t" + -- "External: \t{}://{}:{}{}\n\t" + -- "Profile(s): \t{}\n----------------------------------------------------------", -- env.getProperty("spring.application.name"), -+ CRLFLogConverter.CRLF_SAFE_MARKER, -+ """ -+ -+ ---------------------------------------------------------- -+ \tApplication '{}' is running! Access URLs: -+ \tLocal: \t\t{}://localhost:{}{} -+ \tExternal: \t{}://{}:{}{} -+ \tProfile(s): \t{} -+ ----------------------------------------------------------""", -+ applicationName, - protocol, - serverPort, - contextPath, -diff --git a/src/main/java/com/iteratec/teamdojo/aop/logging/LoggingAspect.java b/src/main/java/com/iteratec/teamdojo/aop/logging/LoggingAspect.java -index ba5f2f9a..0badf79d 100644 ---- a/src/main/java/com/iteratec/teamdojo/aop/logging/LoggingAspect.java -+++ b/src/main/java/com/iteratec/teamdojo/aop/logging/LoggingAspect.java -@@ -85,7 +85,7 @@ public class LoggingAspect { - .error( - "Exception in {}() with cause = {}", - joinPoint.getSignature().getName(), -- e.getCause() != null ? e.getCause() : "NULL" -+ e.getCause() != null ? String.valueOf(e.getCause()) : "NULL" - ); - } - } -diff --git a/src/main/java/com/iteratec/teamdojo/config/ApplicationProperties.java b/src/main/java/com/iteratec/teamdojo/config/ApplicationProperties.java -index b4f4f422..1626661a 100644 ---- a/src/main/java/com/iteratec/teamdojo/config/ApplicationProperties.java -+++ b/src/main/java/com/iteratec/teamdojo/config/ApplicationProperties.java -@@ -11,4 +11,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties; - */ - @ConfigurationProperties(prefix = "application", ignoreUnknownFields = false) - @GeneratedByJHipster --public class ApplicationProperties {} -+public class ApplicationProperties { -+ // jhipster-needle-application-properties-property -+ // jhipster-needle-application-properties-property-getter -+ // jhipster-needle-application-properties-property-class -+} -diff --git a/src/main/java/com/iteratec/teamdojo/config/AsyncConfiguration.java b/src/main/java/com/iteratec/teamdojo/config/AsyncConfiguration.java -index 0925d199..acc1fe2a 100644 ---- a/src/main/java/com/iteratec/teamdojo/config/AsyncConfiguration.java -+++ b/src/main/java/com/iteratec/teamdojo/config/AsyncConfiguration.java -@@ -9,6 +9,7 @@ import org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptionHandler; - import org.springframework.boot.autoconfigure.task.TaskExecutionProperties; - import org.springframework.context.annotation.Bean; - import org.springframework.context.annotation.Configuration; -+import org.springframework.context.annotation.Profile; - import org.springframework.scheduling.annotation.AsyncConfigurer; - import org.springframework.scheduling.annotation.EnableAsync; - import org.springframework.scheduling.annotation.EnableScheduling; -@@ -18,6 +19,7 @@ import tech.jhipster.async.ExceptionHandlingAsyncTaskExecutor; - @Configuration - @EnableAsync - @EnableScheduling -+@Profile("!testdev & !testprod") - @GeneratedByJHipster - public class AsyncConfiguration implements AsyncConfigurer { - -diff --git a/src/main/java/com/iteratec/teamdojo/config/JacksonConfiguration.java b/src/main/java/com/iteratec/teamdojo/config/JacksonConfiguration.java -index d296b95f..f2b6d44a 100644 ---- a/src/main/java/com/iteratec/teamdojo/config/JacksonConfiguration.java -+++ b/src/main/java/com/iteratec/teamdojo/config/JacksonConfiguration.java -@@ -1,13 +1,11 @@ - package com.iteratec.teamdojo.config; - --import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module; -+import com.fasterxml.jackson.datatype.hibernate6.Hibernate6Module; - import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; - import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.springframework.context.annotation.Bean; - import org.springframework.context.annotation.Configuration; --import org.zalando.problem.jackson.ProblemModule; --import org.zalando.problem.violations.ConstraintViolationProblemModule; - - @Configuration - @GeneratedByJHipster -@@ -31,23 +29,7 @@ public class JacksonConfiguration { - * Support for Hibernate types in Jackson. - */ - @Bean -- public Hibernate5Module hibernate5Module() { -- return new Hibernate5Module(); -- } -- -- /* -- * Module for serialization/deserialization of RFC7807 Problem. -- */ -- @Bean -- public ProblemModule problemModule() { -- return new ProblemModule(); -- } -- -- /* -- * Module for serialization/deserialization of ConstraintViolationProblem. -- */ -- @Bean -- public ConstraintViolationProblemModule constraintViolationProblemModule() { -- return new ConstraintViolationProblemModule(); -+ public Hibernate6Module hibernate6Module() { -+ return new Hibernate6Module(); - } - } -diff --git a/src/main/java/com/iteratec/teamdojo/config/LiquibaseConfiguration.java b/src/main/java/com/iteratec/teamdojo/config/LiquibaseConfiguration.java -index d0ca2c95..b859ddfe 100644 ---- a/src/main/java/com/iteratec/teamdojo/config/LiquibaseConfiguration.java -+++ b/src/main/java/com/iteratec/teamdojo/config/LiquibaseConfiguration.java -@@ -33,8 +33,8 @@ public class LiquibaseConfiguration { - @Bean - public SpringLiquibase liquibase( - @Qualifier("taskExecutor") Executor executor, -- @LiquibaseDataSource ObjectProvider liquibaseDataSource, - LiquibaseProperties liquibaseProperties, -+ @LiquibaseDataSource ObjectProvider liquibaseDataSource, - ObjectProvider dataSource, - DataSourceProperties dataSourceProperties - ) { -@@ -56,7 +56,7 @@ public class LiquibaseConfiguration { - liquibase.setDatabaseChangeLogLockTable(liquibaseProperties.getDatabaseChangeLogLockTable()); - liquibase.setDatabaseChangeLogTable(liquibaseProperties.getDatabaseChangeLogTable()); - liquibase.setDropFirst(liquibaseProperties.isDropFirst()); -- liquibase.setLabels(liquibaseProperties.getLabels()); -+ liquibase.setLabelFilter(liquibaseProperties.getLabelFilter()); - liquibase.setChangeLogParameters(liquibaseProperties.getParameters()); - liquibase.setRollbackFile(liquibaseProperties.getRollbackFile()); - liquibase.setTestRollbackOnUpdate(liquibaseProperties.isTestRollbackOnUpdate()); -diff --git a/src/main/java/com/iteratec/teamdojo/config/LocaleConfiguration.java b/src/main/java/com/iteratec/teamdojo/config/LocaleConfiguration.java -index 2a3c8a28..5daa34ca 100644 ---- a/src/main/java/com/iteratec/teamdojo/config/LocaleConfiguration.java -+++ b/src/main/java/com/iteratec/teamdojo/config/LocaleConfiguration.java -@@ -14,9 +14,7 @@ public class LocaleConfiguration implements WebMvcConfigurer { - - @Bean - public LocaleResolver localeResolver() { -- AngularCookieLocaleResolver cookieLocaleResolver = new AngularCookieLocaleResolver(); -- cookieLocaleResolver.setCookieName("NG_TRANSLATE_LANG_KEY"); -- return cookieLocaleResolver; -+ return new AngularCookieLocaleResolver("NG_TRANSLATE_LANG_KEY"); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/config/OAuth2Configuration.java b/src/main/java/com/iteratec/teamdojo/config/OAuth2Configuration.java -index 5b882956..c51793cf 100644 ---- a/src/main/java/com/iteratec/teamdojo/config/OAuth2Configuration.java -+++ b/src/main/java/com/iteratec/teamdojo/config/OAuth2Configuration.java -@@ -30,7 +30,6 @@ public class OAuth2Configuration { - .authorizationCode() - .refreshToken(builder -> builder.clockSkew(Duration.ofMinutes(1))) - .clientCredentials() -- .password() - .build() - ); - -diff --git a/src/main/java/com/iteratec/teamdojo/config/OpenApiConfiguration.java b/src/main/java/com/iteratec/teamdojo/config/OpenApiConfiguration.java -index 4da03454..cb43645f 100644 ---- a/src/main/java/com/iteratec/teamdojo/config/OpenApiConfiguration.java -+++ b/src/main/java/com/iteratec/teamdojo/config/OpenApiConfiguration.java -@@ -1,7 +1,7 @@ - package com.iteratec.teamdojo.config; - - import com.iteratec.teamdojo.GeneratedByJHipster; --import org.springdoc.core.GroupedOpenApi; -+import org.springdoc.core.models.GroupedOpenApi; - import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; - import org.springframework.context.annotation.Bean; - import org.springframework.context.annotation.Configuration; -@@ -27,7 +27,7 @@ public class OpenApiConfiguration { - return GroupedOpenApi - .builder() - .group("openapi") -- .addOpenApiCustomiser(jhipsterOpenApiCustomizer) -+ .addOpenApiCustomizer(jhipsterOpenApiCustomizer) - .packagesToScan(API_FIRST_PACKAGE) - .pathsToMatch(properties.getDefaultIncludePattern()) - .build(); -diff --git a/src/main/java/com/iteratec/teamdojo/config/SecurityConfiguration.java b/src/main/java/com/iteratec/teamdojo/config/SecurityConfiguration.java -index b52fa808..669a0ce7 100644 ---- a/src/main/java/com/iteratec/teamdojo/config/SecurityConfiguration.java -+++ b/src/main/java/com/iteratec/teamdojo/config/SecurityConfiguration.java -@@ -1,24 +1,27 @@ - package com.iteratec.teamdojo.config; - -+import static org.springframework.security.config.Customizer.withDefaults; -+import static org.springframework.security.web.util.matcher.AntPathRequestMatcher.antMatcher; -+ - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.security.*; - import com.iteratec.teamdojo.security.SecurityUtils; - import com.iteratec.teamdojo.security.oauth2.AudienceValidator; - import com.iteratec.teamdojo.security.oauth2.CustomClaimConverter; - import com.iteratec.teamdojo.security.oauth2.JwtGrantedAuthorityConverter; -+import com.iteratec.teamdojo.web.filter.SpaWebFilter; - import java.util.*; - import org.springframework.beans.factory.annotation.Value; - import org.springframework.boot.web.client.RestTemplateBuilder; - import org.springframework.context.annotation.Bean; --import org.springframework.context.annotation.Import; -+import org.springframework.context.annotation.Configuration; - import org.springframework.core.convert.converter.Converter; --import org.springframework.http.HttpMethod; -+import org.springframework.core.env.Environment; -+import org.springframework.core.env.Profiles; - import org.springframework.security.authentication.AbstractAuthenticationToken; --import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -+import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; - import org.springframework.security.config.annotation.web.builders.HttpSecurity; --import org.springframework.security.config.annotation.web.builders.WebSecurity; --import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; --import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; -+import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer.FrameOptionsConfig; - import org.springframework.security.core.GrantedAuthority; - import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper; - import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository; -@@ -28,91 +31,90 @@ import org.springframework.security.oauth2.core.oidc.user.OidcUserAuthority; - import org.springframework.security.oauth2.jwt.*; - import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter; - import org.springframework.security.web.SecurityFilterChain; -+import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; - import org.springframework.security.web.csrf.CookieCsrfTokenRepository; --import org.springframework.security.web.csrf.CsrfFilter; -+import org.springframework.security.web.csrf.CsrfTokenRequestAttributeHandler; - import org.springframework.security.web.header.writers.ReferrerPolicyHeaderWriter; --import org.springframework.web.filter.CorsFilter; --import org.zalando.problem.spring.web.advice.security.SecurityProblemSupport; -+import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher; -+import org.springframework.web.servlet.handler.HandlerMappingIntrospector; -+import tech.jhipster.config.JHipsterConstants; - import tech.jhipster.config.JHipsterProperties; -+import tech.jhipster.web.filter.CookieCsrfFilter; - --@EnableWebSecurity --@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) --@Import(SecurityProblemSupport.class) -+@Configuration -+@EnableMethodSecurity(securedEnabled = true) - @GeneratedByJHipster - public class SecurityConfiguration { - -- private final JHipsterProperties jHipsterProperties; -+ private final Environment env; - -- private final CorsFilter corsFilter; -+ private final JHipsterProperties jHipsterProperties; - - @Value("${spring.security.oauth2.client.provider.oidc.issuer-uri}") - private String issuerUri; - -- private final SecurityProblemSupport problemSupport; -- -- public SecurityConfiguration(CorsFilter corsFilter, JHipsterProperties jHipsterProperties, SecurityProblemSupport problemSupport) { -- this.corsFilter = corsFilter; -- this.problemSupport = problemSupport; -+ public SecurityConfiguration(Environment env, JHipsterProperties jHipsterProperties) { -+ this.env = env; - this.jHipsterProperties = jHipsterProperties; - } - - @Bean -- public WebSecurityCustomizer webSecurityCustomizer() { -- return web -> -- web -- .ignoring() -- .antMatchers(HttpMethod.OPTIONS, "/**") -- .antMatchers("/app/**/*.{js,html}") -- .antMatchers("/i18n/**") -- .antMatchers("/content/**") -- .antMatchers("/h2-console/**") -- .antMatchers("/swagger-ui/**") -- .antMatchers("/test/**"); -+ public SecurityFilterChain filterChain(HttpSecurity http, MvcRequestMatcher.Builder mvc) throws Exception { -+ http -+ .cors(withDefaults()) -+ .csrf(csrf -> -+ csrf -+ .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) -+ // See https://stackoverflow.com/q/74447118/65681 -+ .csrfTokenRequestHandler(new CsrfTokenRequestAttributeHandler()) -+ ) -+ .addFilterAfter(new SpaWebFilter(), BasicAuthenticationFilter.class) -+ .addFilterAfter(new CookieCsrfFilter(), BasicAuthenticationFilter.class) -+ .headers(headers -> -+ headers -+ .contentSecurityPolicy(csp -> csp.policyDirectives(jHipsterProperties.getSecurity().getContentSecurityPolicy())) -+ .frameOptions(FrameOptionsConfig::sameOrigin) -+ .referrerPolicy(referrer -> referrer.policy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN)) -+ .permissionsPolicy(permissions -> -+ permissions.policy( -+ "camera=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), sync-xhr=()" -+ ) -+ ) -+ ) -+ .authorizeHttpRequests(authz -> -+ // prettier-ignore -+ authz -+ .requestMatchers(mvc.pattern("/index.html"), mvc.pattern("/*.js"), mvc.pattern("/*.map"), mvc.pattern("/*.css")).permitAll() -+ .requestMatchers(mvc.pattern("/*.ico"), mvc.pattern("/*.png"), mvc.pattern("/*.svg"), mvc.pattern("/*.webapp")).permitAll() -+ .requestMatchers(mvc.pattern("/app/**")).permitAll() -+ .requestMatchers(mvc.pattern("/i18n/**")).permitAll() -+ .requestMatchers(mvc.pattern("/content/**")).permitAll() -+ .requestMatchers(mvc.pattern("/swagger-ui/**")).permitAll() -+ .requestMatchers(mvc.pattern("/api/authenticate")).permitAll() -+ .requestMatchers(mvc.pattern("/api/auth-info")).permitAll() -+ .requestMatchers(mvc.pattern("/api/admin/**")).hasAuthority(AuthoritiesConstants.ADMIN) -+ .requestMatchers(mvc.pattern("/api/**")).authenticated() -+ .requestMatchers(mvc.pattern("/v3/api-docs/**")).hasAuthority(AuthoritiesConstants.ADMIN) -+ .requestMatchers(mvc.pattern("/management/health")).permitAll() -+ .requestMatchers(mvc.pattern("/management/health/**")).permitAll() -+ .requestMatchers(mvc.pattern("/management/info")).permitAll() -+ .requestMatchers(mvc.pattern("/management/prometheus")).permitAll() -+ .requestMatchers(mvc.pattern("/management/**")).hasAuthority(AuthoritiesConstants.ADMIN) -+ ) -+ .oauth2Login(withDefaults()) -+ .oauth2ResourceServer(oauth2 -> oauth2.jwt(jwt -> jwt.jwtAuthenticationConverter(authenticationConverter()))) -+ .oauth2Client(); -+ if (env.acceptsProfiles(Profiles.of(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT))) { -+ http -+ .csrf(csrf -> csrf.ignoringRequestMatchers(antMatcher("/h2-console/**"))) -+ .authorizeHttpRequests(authz -> authz.requestMatchers(antMatcher("/h2-console/**")).permitAll()); -+ } -+ return http.build(); - } - - @Bean -- public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { -- // @formatter:off -- http -- .csrf() -- .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) -- .and() -- .addFilterBefore(corsFilter, CsrfFilter.class) -- .exceptionHandling() -- .authenticationEntryPoint(problemSupport) -- .accessDeniedHandler(problemSupport) -- .and() -- .headers() -- .contentSecurityPolicy(jHipsterProperties.getSecurity().getContentSecurityPolicy()) -- .and() -- .referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.STRICT_ORIGIN_WHEN_CROSS_ORIGIN) -- .and() -- .permissionsPolicy().policy("camera=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), sync-xhr=()") -- .and() -- .frameOptions() -- .deny() -- .and() -- .authorizeRequests() -- .antMatchers("/api/authenticate").permitAll() -- .antMatchers("/api/auth-info").permitAll() -- .antMatchers("/api/admin/**").hasAuthority(AuthoritiesConstants.ADMIN) -- .antMatchers("/api/**").authenticated() -- .antMatchers("/management/health").permitAll() -- .antMatchers("/management/health/**").permitAll() -- .antMatchers("/management/info").permitAll() -- .antMatchers("/management/prometheus").permitAll() -- .antMatchers("/management/**").hasAuthority(AuthoritiesConstants.ADMIN) -- .and() -- .oauth2Login() -- .and() -- .oauth2ResourceServer() -- .jwt() -- .jwtAuthenticationConverter(authenticationConverter()) -- .and() -- .and() -- .oauth2Client(); -- return http.build(); -- // @formatter:on -+ MvcRequestMatcher.Builder mvc(HandlerMappingIntrospector introspector) { -+ return new MvcRequestMatcher.Builder(introspector); - } - - Converter authenticationConverter() { -diff --git a/src/main/java/com/iteratec/teamdojo/config/WebConfigurer.java b/src/main/java/com/iteratec/teamdojo/config/WebConfigurer.java -index 3f787b39..4abd887a 100644 ---- a/src/main/java/com/iteratec/teamdojo/config/WebConfigurer.java -+++ b/src/main/java/com/iteratec/teamdojo/config/WebConfigurer.java -@@ -3,10 +3,10 @@ package com.iteratec.teamdojo.config; - import static java.net.URLDecoder.decode; - - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.servlet.*; - import java.io.File; - import java.nio.charset.StandardCharsets; - import java.nio.file.Paths; --import javax.servlet.*; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.boot.web.server.*; -@@ -64,8 +64,7 @@ public class WebConfigurer implements ServletContextInitializer, WebServerFactor - } - - private void setLocationForStaticAssets(WebServerFactory server) { -- if (server instanceof ConfigurableServletWebServerFactory) { -- ConfigurableServletWebServerFactory servletWebServer = (ConfigurableServletWebServerFactory) server; -+ if (server instanceof ConfigurableServletWebServerFactory servletWebServer) { - File root; - String prefixPath = resolvePathPrefix(); - root = new File(prefixPath + "build/resources/main/static/"); -diff --git a/src/main/java/com/iteratec/teamdojo/domain/AbstractAuditingEntity.java b/src/main/java/com/iteratec/teamdojo/domain/AbstractAuditingEntity.java -index 0691e433..aaa3626c 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/AbstractAuditingEntity.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/AbstractAuditingEntity.java -@@ -1,12 +1,12 @@ - package com.iteratec.teamdojo.domain; - --import com.fasterxml.jackson.annotation.JsonIgnore; -+import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.Column; -+import jakarta.persistence.EntityListeners; -+import jakarta.persistence.MappedSuperclass; - import java.io.Serializable; - import java.time.Instant; --import javax.persistence.Column; --import javax.persistence.EntityListeners; --import javax.persistence.MappedSuperclass; - import org.springframework.data.annotation.CreatedBy; - import org.springframework.data.annotation.CreatedDate; - import org.springframework.data.annotation.LastModifiedBy; -@@ -19,29 +19,28 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; - */ - @MappedSuperclass - @EntityListeners(AuditingEntityListener.class) -+@JsonIgnoreProperties(value = { "createdBy", "createdDate", "lastModifiedBy", "lastModifiedDate" }, allowGetters = true) - @GeneratedByJHipster --public abstract class AbstractAuditingEntity implements Serializable { -+public abstract class AbstractAuditingEntity implements Serializable { - - private static final long serialVersionUID = 1L; - -+ public abstract T getId(); -+ - @CreatedBy - @Column(name = "created_by", nullable = false, length = 50, updatable = false) -- @JsonIgnore - private String createdBy; - - @CreatedDate - @Column(name = "created_date", updatable = false) -- @JsonIgnore - private Instant createdDate = Instant.now(); - - @LastModifiedBy - @Column(name = "last_modified_by", length = 50) -- @JsonIgnore - private String lastModifiedBy; - - @LastModifiedDate - @Column(name = "last_modified_date") -- @JsonIgnore - private Instant lastModifiedDate = Instant.now(); - - public String getCreatedBy() { -diff --git a/src/main/java/com/iteratec/teamdojo/domain/Activity.java b/src/main/java/com/iteratec/teamdojo/domain/Activity.java -index 08416365..4a574c4d 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/Activity.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/Activity.java -@@ -2,10 +2,10 @@ package com.iteratec.teamdojo.domain; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.enumeration.ActivityType; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -15,6 +15,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "activity") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class Activity implements Serializable { - -@@ -119,7 +120,7 @@ public class Activity implements Serializable { - if (!(o instanceof Activity)) { - return false; - } -- return id != null && id.equals(((Activity) o).id); -+ return getId() != null && getId().equals(((Activity) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/Authority.java b/src/main/java/com/iteratec/teamdojo/domain/Authority.java -index d8fe1f65..fa045387 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/Authority.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/Authority.java -@@ -1,14 +1,14 @@ - package com.iteratec.teamdojo.domain; - - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.Column; -+import jakarta.persistence.Entity; -+import jakarta.persistence.Id; -+import jakarta.persistence.Table; -+import jakarta.validation.constraints.NotNull; -+import jakarta.validation.constraints.Size; - import java.io.Serializable; - import java.util.Objects; --import javax.persistence.Column; --import javax.persistence.Entity; --import javax.persistence.Id; --import javax.persistence.Table; --import javax.validation.constraints.NotNull; --import javax.validation.constraints.Size; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -diff --git a/src/main/java/com/iteratec/teamdojo/domain/Badge.java b/src/main/java/com/iteratec/teamdojo/domain/Badge.java -index ca438351..578e944d 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/Badge.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/Badge.java -@@ -2,12 +2,12 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; - import java.util.HashSet; - import java.util.Set; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -17,6 +17,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "badge") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class Badge implements Serializable { - -@@ -75,15 +76,15 @@ public class Badge implements Serializable { - @Column(name = "updated_at", nullable = false) - private Instant updatedAt; - -- @OneToMany(mappedBy = "badge") -+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "badge") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) - @JsonIgnoreProperties(value = { "badge", "skill" }, allowSetters = true) - private Set skills = new HashSet<>(); - -- @ManyToOne -+ @ManyToOne(fetch = FetchType.LAZY) - private Image image; - -- @ManyToMany -+ @ManyToMany(fetch = FetchType.LAZY) - @JoinTable( - name = "rel_badge__dimensions", - joinColumns = @JoinColumn(name = "badge_id"), -@@ -330,7 +331,7 @@ public class Badge implements Serializable { - if (!(o instanceof Badge)) { - return false; - } -- return id != null && id.equals(((Badge) o).id); -+ return getId() != null && getId().equals(((Badge) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/BadgeSkill.java b/src/main/java/com/iteratec/teamdojo/domain/BadgeSkill.java -index 75ec530b..1ff1dcde 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/BadgeSkill.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/BadgeSkill.java -@@ -2,9 +2,9 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -14,6 +14,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "badge_skill") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class BadgeSkill implements Serializable { - -@@ -86,7 +87,7 @@ public class BadgeSkill implements Serializable { - if (!(o instanceof BadgeSkill)) { - return false; - } -- return id != null && id.equals(((BadgeSkill) o).id); -+ return getId() != null && getId().equals(((BadgeSkill) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/Comment.java b/src/main/java/com/iteratec/teamdojo/domain/Comment.java -index 91a4ffa5..fc68f10b 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/Comment.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/Comment.java -@@ -2,10 +2,10 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -15,6 +15,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "comment") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class Comment implements Serializable { - -@@ -139,7 +140,7 @@ public class Comment implements Serializable { - if (!(o instanceof Comment)) { - return false; - } -- return id != null && id.equals(((Comment) o).id); -+ return getId() != null && getId().equals(((Comment) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/Dimension.java b/src/main/java/com/iteratec/teamdojo/domain/Dimension.java -index 7e65a88b..bb50dad9 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/Dimension.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/Dimension.java -@@ -2,12 +2,12 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; - import java.util.HashSet; - import java.util.Set; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -17,6 +17,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "dimension") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class Dimension implements Serializable { - -@@ -53,17 +54,17 @@ public class Dimension implements Serializable { - @Column(name = "updated_at", nullable = false) - private Instant updatedAt; - -- @OneToMany(mappedBy = "dimension") -+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "dimension") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -- @JsonIgnoreProperties(value = { "dependsOn", "skills", "image", "dimension" }, allowSetters = true) -+ @JsonIgnoreProperties(value = { "dependsOn", "skills", "image", "dimension", "level" }, allowSetters = true) - private Set levels = new HashSet<>(); - -- @ManyToMany(mappedBy = "dimensions") -+ @ManyToMany(fetch = FetchType.LAZY, mappedBy = "dimensions") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) - @JsonIgnoreProperties(value = { "skills", "image", "dimensions" }, allowSetters = true) - private Set badges = new HashSet<>(); - -- @ManyToMany(mappedBy = "participations") -+ @ManyToMany(fetch = FetchType.LAZY, mappedBy = "participations") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) - @JsonIgnoreProperties(value = { "skills", "image", "participations", "group" }, allowSetters = true) - private Set participants = new HashSet<>(); -@@ -264,7 +265,7 @@ public class Dimension implements Serializable { - if (!(o instanceof Dimension)) { - return false; - } -- return id != null && id.equals(((Dimension) o).id); -+ return getId() != null && getId().equals(((Dimension) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/Image.java b/src/main/java/com/iteratec/teamdojo/domain/Image.java -index 44e318fd..d31f68a8 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/Image.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/Image.java -@@ -1,10 +1,10 @@ - package com.iteratec.teamdojo.domain; - - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -14,6 +14,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "image") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class Image implements Serializable { - -@@ -218,7 +219,7 @@ public class Image implements Serializable { - if (!(o instanceof Image)) { - return false; - } -- return id != null && id.equals(((Image) o).id); -+ return getId() != null && getId().equals(((Image) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/Level.java b/src/main/java/com/iteratec/teamdojo/domain/Level.java -index 999a1116..cc6bafcb 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/Level.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/Level.java -@@ -2,12 +2,12 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; - import java.util.HashSet; - import java.util.Set; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -17,6 +17,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "level") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class Level implements Serializable { - -@@ -68,17 +69,17 @@ public class Level implements Serializable { - @Column(name = "updated_at", nullable = false) - private Instant updatedAt; - -- @JsonIgnoreProperties(value = { "dependsOn", "skills", "image", "dimension" }, allowSetters = true) -- @OneToOne -+ @JsonIgnoreProperties(value = { "dependsOn", "skills", "image", "dimension", "level" }, allowSetters = true) -+ @OneToOne(fetch = FetchType.LAZY) - @JoinColumn(unique = true) - private Level dependsOn; - -- @OneToMany(mappedBy = "level") -+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "level") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) - @JsonIgnoreProperties(value = { "skill", "level" }, allowSetters = true) - private Set skills = new HashSet<>(); - -- @ManyToOne -+ @ManyToOne(fetch = FetchType.LAZY) - private Image image; - - @ManyToOne(optional = false) -@@ -86,6 +87,10 @@ public class Level implements Serializable { - @JsonIgnoreProperties(value = { "levels", "badges", "participants" }, allowSetters = true) - private Dimension dimension; - -+ @JsonIgnoreProperties(value = { "dependsOn", "skills", "image", "dimension", "level" }, allowSetters = true) -+ @OneToOne(fetch = FetchType.LAZY, mappedBy = "dependsOn") -+ private Level level; -+ - // jhipster-needle-entity-add-field - JHipster will add fields here - - public Long getId() { -@@ -288,6 +293,25 @@ public class Level implements Serializable { - return this; - } - -+ public Level getLevel() { -+ return this.level; -+ } -+ -+ public void setLevel(Level level) { -+ if (this.level != null) { -+ this.level.setDependsOn(null); -+ } -+ if (level != null) { -+ level.setDependsOn(this); -+ } -+ this.level = level; -+ } -+ -+ public Level level(Level level) { -+ this.setLevel(level); -+ return this; -+ } -+ - // jhipster-needle-entity-add-getters-setters - JHipster will add getters and setters here - - @Override -@@ -298,7 +322,7 @@ public class Level implements Serializable { - if (!(o instanceof Level)) { - return false; - } -- return id != null && id.equals(((Level) o).id); -+ return getId() != null && getId().equals(((Level) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/LevelSkill.java b/src/main/java/com/iteratec/teamdojo/domain/LevelSkill.java -index b74a649d..4f74cb84 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/LevelSkill.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/LevelSkill.java -@@ -2,9 +2,9 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -14,6 +14,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "level_skill") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class LevelSkill implements Serializable { - -@@ -32,7 +33,7 @@ public class LevelSkill implements Serializable { - - @ManyToOne(optional = false) - @NotNull -- @JsonIgnoreProperties(value = { "dependsOn", "skills", "image", "dimension" }, allowSetters = true) -+ @JsonIgnoreProperties(value = { "dependsOn", "skills", "image", "dimension", "level" }, allowSetters = true) - private Level level; - - // jhipster-needle-entity-add-field - JHipster will add fields here -@@ -86,7 +87,7 @@ public class LevelSkill implements Serializable { - if (!(o instanceof LevelSkill)) { - return false; - } -- return id != null && id.equals(((LevelSkill) o).id); -+ return getId() != null && getId().equals(((LevelSkill) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/PersistentAuditEvent.java b/src/main/java/com/iteratec/teamdojo/domain/PersistentAuditEvent.java -index d8259a30..128919e4 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/PersistentAuditEvent.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/PersistentAuditEvent.java -@@ -2,12 +2,12 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; - import java.util.HashSet; - import java.util.Set; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -17,6 +17,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "persistent_audit_event") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class PersistentAuditEvent implements Serializable { - -@@ -40,7 +41,7 @@ public class PersistentAuditEvent implements Serializable { - @Column(name = "audit_event_type", length = 30) - private String auditEventType; - -- @OneToMany(mappedBy = "event") -+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "event") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) - @JsonIgnoreProperties(value = { "event" }, allowSetters = true) - private Set data = new HashSet<>(); -@@ -140,7 +141,7 @@ public class PersistentAuditEvent implements Serializable { - if (!(o instanceof PersistentAuditEvent)) { - return false; - } -- return id != null && id.equals(((PersistentAuditEvent) o).id); -+ return getId() != null && getId().equals(((PersistentAuditEvent) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/PersistentAuditEventData.java b/src/main/java/com/iteratec/teamdojo/domain/PersistentAuditEventData.java -index 169495e9..9006ee32 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/PersistentAuditEventData.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/PersistentAuditEventData.java -@@ -2,9 +2,9 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -14,6 +14,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "persistent_audit_event_data") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class PersistentAuditEventData implements Serializable { - -@@ -104,7 +105,7 @@ public class PersistentAuditEventData implements Serializable { - if (!(o instanceof PersistentAuditEventData)) { - return false; - } -- return id != null && id.equals(((PersistentAuditEventData) o).id); -+ return getId() != null && getId().equals(((PersistentAuditEventData) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/Report.java b/src/main/java/com/iteratec/teamdojo/domain/Report.java -index 5d8b7da5..42e7f374 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/Report.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/Report.java -@@ -2,10 +2,10 @@ package com.iteratec.teamdojo.domain; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.enumeration.ReportType; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -15,6 +15,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "report") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class Report implements Serializable { - -@@ -139,7 +140,7 @@ public class Report implements Serializable { - if (!(o instanceof Report)) { - return false; - } -- return id != null && id.equals(((Report) o).id); -+ return getId() != null && getId().equals(((Report) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/Skill.java b/src/main/java/com/iteratec/teamdojo/domain/Skill.java -index 2d5b5bca..8258b826 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/Skill.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/Skill.java -@@ -2,12 +2,12 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; - import java.util.HashSet; - import java.util.Set; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -17,6 +17,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "skill") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class Skill implements Serializable { - -@@ -37,12 +38,12 @@ public class Skill implements Serializable { - @Column(name = "title_de", length = 80) - private String titleDE; - -- @Size(max = 8192) -- @Column(name = "description_en", length = 8192) -+ @Size(max = 2147483647) -+ @Column(name = "description_en", length = 2147483647) - private String descriptionEN; - -- @Size(max = 8192) -- @Column(name = "description_de", length = 8192) -+ @Size(max = 2147483647) -+ @Column(name = "description_de", length = 2147483647) - private String descriptionDE; - - @Size(max = 4096) -@@ -92,22 +93,22 @@ public class Skill implements Serializable { - @Column(name = "updated_at", nullable = false) - private Instant updatedAt; - -- @OneToMany(mappedBy = "skill") -+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "skill") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) - @JsonIgnoreProperties(value = { "badge", "skill" }, allowSetters = true) - private Set badges = new HashSet<>(); - -- @OneToMany(mappedBy = "skill") -+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "skill") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) - @JsonIgnoreProperties(value = { "skill", "level" }, allowSetters = true) - private Set levels = new HashSet<>(); - -- @OneToMany(mappedBy = "skill") -+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "skill") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) - @JsonIgnoreProperties(value = { "skill", "team" }, allowSetters = true) - private Set teams = new HashSet<>(); - -- @ManyToMany(mappedBy = "skills") -+ @ManyToMany(fetch = FetchType.LAZY, mappedBy = "skills") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) - @JsonIgnoreProperties(value = { "skills" }, allowSetters = true) - private Set trainings = new HashSet<>(); -@@ -456,7 +457,7 @@ public class Skill implements Serializable { - if (!(o instanceof Skill)) { - return false; - } -- return id != null && id.equals(((Skill) o).id); -+ return getId() != null && getId().equals(((Skill) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/Team.java b/src/main/java/com/iteratec/teamdojo/domain/Team.java -index 274e74e5..7e6fd7c4 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/Team.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/Team.java -@@ -2,12 +2,12 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; - import java.util.HashSet; - import java.util.Set; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -17,6 +17,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "team") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class Team implements Serializable { - -@@ -62,15 +63,15 @@ public class Team implements Serializable { - @Column(name = "updated_at", nullable = false) - private Instant updatedAt; - -- @OneToMany(mappedBy = "team") -+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "team") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) - @JsonIgnoreProperties(value = { "skill", "team" }, allowSetters = true) - private Set skills = new HashSet<>(); - -- @ManyToOne -+ @ManyToOne(fetch = FetchType.LAZY) - private Image image; - -- @ManyToMany -+ @ManyToMany(fetch = FetchType.LAZY) - @JoinTable( - name = "rel_team__participations", - joinColumns = @JoinColumn(name = "team_id"), -@@ -296,7 +297,7 @@ public class Team implements Serializable { - if (!(o instanceof Team)) { - return false; - } -- return id != null && id.equals(((Team) o).id); -+ return getId() != null && getId().equals(((Team) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/TeamGroup.java b/src/main/java/com/iteratec/teamdojo/domain/TeamGroup.java -index 82118990..565ebbc3 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/TeamGroup.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/TeamGroup.java -@@ -2,21 +2,23 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; - import java.util.HashSet; - import java.util.Set; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - - /** -- * A team group is a hierarchical construct to organize teams within a large organization into departments to separate\ndifferent teams more easily based on their organizational structure. -+ * A team group is a hierarchical construct to organize teams within a large organization into departments to separate -+ * different teams more easily based on their organizational structure. - */ - @Entity - @Table(name = "team_group") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class TeamGroup implements Serializable { - -@@ -45,12 +47,12 @@ public class TeamGroup implements Serializable { - @Column(name = "updated_at", nullable = false) - private Instant updatedAt; - -- @OneToMany(mappedBy = "group") -+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "group") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) - @JsonIgnoreProperties(value = { "skills", "image", "participations", "group" }, allowSetters = true) - private Set teams = new HashSet<>(); - -- @ManyToOne -+ @ManyToOne(fetch = FetchType.LAZY) - @JsonIgnoreProperties(value = { "teams", "parent" }, allowSetters = true) - private TeamGroup parent; - -@@ -175,7 +177,7 @@ public class TeamGroup implements Serializable { - if (!(o instanceof TeamGroup)) { - return false; - } -- return id != null && id.equals(((TeamGroup) o).id); -+ return getId() != null && getId().equals(((TeamGroup) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/TeamSkill.java b/src/main/java/com/iteratec/teamdojo/domain/TeamSkill.java -index a56dec8d..82ed39d7 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/TeamSkill.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/TeamSkill.java -@@ -3,10 +3,10 @@ package com.iteratec.teamdojo.domain; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.enumeration.SkillStatus; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -16,6 +16,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "team_skill") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class TeamSkill implements Serializable { - -@@ -239,7 +240,7 @@ public class TeamSkill implements Serializable { - if (!(o instanceof TeamSkill)) { - return false; - } -- return id != null && id.equals(((TeamSkill) o).id); -+ return getId() != null && getId().equals(((TeamSkill) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/Training.java b/src/main/java/com/iteratec/teamdojo/domain/Training.java -index acf4e1a6..4d8e5e81 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/Training.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/Training.java -@@ -2,12 +2,12 @@ package com.iteratec.teamdojo.domain; - - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; - import java.util.HashSet; - import java.util.Set; --import javax.persistence.*; --import javax.validation.constraints.*; - import org.hibernate.annotations.Cache; - import org.hibernate.annotations.CacheConcurrencyStrategy; - -@@ -17,6 +17,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Entity - @Table(name = "training") - @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class Training implements Serializable { - -@@ -72,7 +73,7 @@ public class Training implements Serializable { - @Column(name = "updated_at", nullable = false) - private Instant updatedAt; - -- @ManyToMany -+ @ManyToMany(fetch = FetchType.LAZY) - @JoinTable( - name = "rel_training__skill", - joinColumns = @JoinColumn(name = "training_id"), -@@ -275,7 +276,7 @@ public class Training implements Serializable { - if (!(o instanceof Training)) { - return false; - } -- return id != null && id.equals(((Training) o).id); -+ return getId() != null && getId().equals(((Training) o).getId()); - } - - @Override -diff --git a/src/main/java/com/iteratec/teamdojo/domain/User.java b/src/main/java/com/iteratec/teamdojo/domain/User.java -index 2e8a74c0..646e96b7 100644 ---- a/src/main/java/com/iteratec/teamdojo/domain/User.java -+++ b/src/main/java/com/iteratec/teamdojo/domain/User.java -@@ -3,15 +3,15 @@ package com.iteratec.teamdojo.domain; - import com.fasterxml.jackson.annotation.JsonIgnore; - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.config.Constants; -+import jakarta.persistence.*; -+import jakarta.validation.constraints.Email; -+import jakarta.validation.constraints.NotNull; -+import jakarta.validation.constraints.Pattern; -+import jakarta.validation.constraints.Size; - import java.io.Serializable; - import java.util.HashSet; - import java.util.Locale; - import java.util.Set; --import javax.persistence.*; --import javax.validation.constraints.Email; --import javax.validation.constraints.NotNull; --import javax.validation.constraints.Pattern; --import javax.validation.constraints.Size; - import org.apache.commons.lang3.StringUtils; - import org.hibernate.annotations.BatchSize; - import org.hibernate.annotations.Cache; -@@ -24,7 +24,7 @@ import org.hibernate.annotations.CacheConcurrencyStrategy; - @Table(name = "jhi_user") - @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) - @GeneratedByJHipster --public class User extends AbstractAuditingEntity implements Serializable { -+public class User extends AbstractAuditingEntity implements Serializable { - - private static final long serialVersionUID = 1L; - -diff --git a/src/main/java/com/iteratec/teamdojo/repository/ActivityRepository.java b/src/main/java/com/iteratec/teamdojo/repository/ActivityRepository.java -index 76c4b28b..b7d106ec 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/ActivityRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/ActivityRepository.java -@@ -6,7 +6,7 @@ import org.springframework.data.jpa.repository.*; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the Activity entity. -+ * Spring Data JPA repository for the Activity entity. - */ - @SuppressWarnings("unused") - @Repository -diff --git a/src/main/java/com/iteratec/teamdojo/repository/BadgeRepository.java b/src/main/java/com/iteratec/teamdojo/repository/BadgeRepository.java -index d59855ee..41b9e4e1 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/BadgeRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/BadgeRepository.java -@@ -11,7 +11,10 @@ import org.springframework.data.repository.query.Param; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the Badge entity. -+ * Spring Data JPA repository for the Badge entity. -+ * -+ * When extending this class, extend BadgeRepositoryWithBagRelationships too. -+ * For more information refer to https://github.com/jhipster/generator-jhipster/issues/17990. - */ - @Repository - @GeneratedByJHipster -@@ -28,13 +31,10 @@ public interface BadgeRepository extends BadgeRepositoryWithBagRelationships, Jp - return this.fetchBagRelationships(this.findAllWithToOneRelationships(pageable)); - } - -- @Query( -- value = "select distinct badge from Badge badge left join fetch badge.image", -- countQuery = "select count(distinct badge) from Badge badge" -- ) -+ @Query(value = "select badge from Badge badge left join fetch badge.image", countQuery = "select count(badge) from Badge badge") - Page findAllWithToOneRelationships(Pageable pageable); - -- @Query("select distinct badge from Badge badge left join fetch badge.image") -+ @Query("select badge from Badge badge left join fetch badge.image") - List findAllWithToOneRelationships(); - - @Query("select badge from Badge badge left join fetch badge.image where badge.id =:id") -diff --git a/src/main/java/com/iteratec/teamdojo/repository/BadgeRepositoryWithBagRelationshipsImpl.java b/src/main/java/com/iteratec/teamdojo/repository/BadgeRepositoryWithBagRelationshipsImpl.java -index ffc7f26b..648c1af1 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/BadgeRepositoryWithBagRelationshipsImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/BadgeRepositoryWithBagRelationshipsImpl.java -@@ -2,12 +2,13 @@ package com.iteratec.teamdojo.repository; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.Badge; -+import jakarta.persistence.EntityManager; -+import jakarta.persistence.PersistenceContext; - import java.util.Collections; -+import java.util.HashMap; - import java.util.List; - import java.util.Optional; --import javax.persistence.EntityManager; --import javax.persistence.PersistenceContext; --import org.hibernate.annotations.QueryHints; -+import java.util.stream.IntStream; - import org.springframework.data.domain.Page; - import org.springframework.data.domain.PageImpl; - -@@ -37,17 +38,19 @@ public class BadgeRepositoryWithBagRelationshipsImpl implements BadgeRepositoryW - - Badge fetchDimensions(Badge result) { - return entityManager -- .createQuery("select badge from Badge badge left join fetch badge.dimensions where badge is :badge", Badge.class) -- .setParameter("badge", result) -- .setHint(QueryHints.PASS_DISTINCT_THROUGH, false) -+ .createQuery("select badge from Badge badge left join fetch badge.dimensions where badge.id = :id", Badge.class) -+ .setParameter("id", result.getId()) - .getSingleResult(); - } - - List fetchDimensions(List badges) { -- return entityManager -- .createQuery("select distinct badge from Badge badge left join fetch badge.dimensions where badge in :badges", Badge.class) -+ HashMap order = new HashMap<>(); -+ IntStream.range(0, badges.size()).forEach(index -> order.put(badges.get(index).getId(), index)); -+ List result = entityManager -+ .createQuery("select badge from Badge badge left join fetch badge.dimensions where badge in :badges", Badge.class) - .setParameter("badges", badges) -- .setHint(QueryHints.PASS_DISTINCT_THROUGH, false) - .getResultList(); -+ Collections.sort(result, (o1, o2) -> Integer.compare(order.get(o1.getId()), order.get(o2.getId()))); -+ return result; - } - } -diff --git a/src/main/java/com/iteratec/teamdojo/repository/BadgeSkillRepository.java b/src/main/java/com/iteratec/teamdojo/repository/BadgeSkillRepository.java -index c56030fa..8fcd9fcc 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/BadgeSkillRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/BadgeSkillRepository.java -@@ -11,7 +11,7 @@ import org.springframework.data.repository.query.Param; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the BadgeSkill entity. -+ * Spring Data JPA repository for the BadgeSkill entity. - */ - @Repository - @GeneratedByJHipster -@@ -29,12 +29,12 @@ public interface BadgeSkillRepository extends JpaRepository, J - } - - @Query( -- value = "select distinct badgeSkill from BadgeSkill badgeSkill left join fetch badgeSkill.badge left join fetch badgeSkill.skill", -- countQuery = "select count(distinct badgeSkill) from BadgeSkill badgeSkill" -+ value = "select badgeSkill from BadgeSkill badgeSkill left join fetch badgeSkill.badge left join fetch badgeSkill.skill", -+ countQuery = "select count(badgeSkill) from BadgeSkill badgeSkill" - ) - Page findAllWithToOneRelationships(Pageable pageable); - -- @Query("select distinct badgeSkill from BadgeSkill badgeSkill left join fetch badgeSkill.badge left join fetch badgeSkill.skill") -+ @Query("select badgeSkill from BadgeSkill badgeSkill left join fetch badgeSkill.badge left join fetch badgeSkill.skill") - List findAllWithToOneRelationships(); - - @Query( -diff --git a/src/main/java/com/iteratec/teamdojo/repository/CommentRepository.java b/src/main/java/com/iteratec/teamdojo/repository/CommentRepository.java -index 536c96fd..a7c3afb8 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/CommentRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/CommentRepository.java -@@ -11,7 +11,7 @@ import org.springframework.data.repository.query.Param; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the Comment entity. -+ * Spring Data JPA repository for the Comment entity. - */ - @Repository - @GeneratedByJHipster -@@ -29,12 +29,12 @@ public interface CommentRepository extends JpaRepository, JpaSpec - } - - @Query( -- value = "select distinct comment from Comment comment left join fetch comment.team left join fetch comment.skill", -- countQuery = "select count(distinct comment) from Comment comment" -+ value = "select comment from Comment comment left join fetch comment.team left join fetch comment.skill", -+ countQuery = "select count(comment) from Comment comment" - ) - Page findAllWithToOneRelationships(Pageable pageable); - -- @Query("select distinct comment from Comment comment left join fetch comment.team left join fetch comment.skill") -+ @Query("select comment from Comment comment left join fetch comment.team left join fetch comment.skill") - List findAllWithToOneRelationships(); - - @Query("select comment from Comment comment left join fetch comment.team left join fetch comment.skill where comment.id =:id") -diff --git a/src/main/java/com/iteratec/teamdojo/repository/DimensionRepository.java b/src/main/java/com/iteratec/teamdojo/repository/DimensionRepository.java -index 3c27573a..57351947 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/DimensionRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/DimensionRepository.java -@@ -6,7 +6,7 @@ import org.springframework.data.jpa.repository.*; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the Dimension entity. -+ * Spring Data JPA repository for the Dimension entity. - */ - @SuppressWarnings("unused") - @Repository -diff --git a/src/main/java/com/iteratec/teamdojo/repository/ImageRepository.java b/src/main/java/com/iteratec/teamdojo/repository/ImageRepository.java -index d1dd0546..92d4e2a0 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/ImageRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/ImageRepository.java -@@ -6,7 +6,7 @@ import org.springframework.data.jpa.repository.*; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the Image entity. -+ * Spring Data JPA repository for the Image entity. - */ - @SuppressWarnings("unused") - @Repository -diff --git a/src/main/java/com/iteratec/teamdojo/repository/LevelRepository.java b/src/main/java/com/iteratec/teamdojo/repository/LevelRepository.java -index 81eaaf19..c79e0e38 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/LevelRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/LevelRepository.java -@@ -11,7 +11,7 @@ import org.springframework.data.repository.query.Param; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the Level entity. -+ * Spring Data JPA repository for the Level entity. - */ - @Repository - @GeneratedByJHipster -@@ -29,14 +29,12 @@ public interface LevelRepository extends JpaRepository, JpaSpecific - } - - @Query( -- value = "select distinct level from Level level left join fetch level.dependsOn left join fetch level.image left join fetch level.dimension", -- countQuery = "select count(distinct level) from Level level" -+ value = "select level from Level level left join fetch level.dependsOn left join fetch level.image left join fetch level.dimension", -+ countQuery = "select count(level) from Level level" - ) - Page findAllWithToOneRelationships(Pageable pageable); - -- @Query( -- "select distinct level from Level level left join fetch level.dependsOn left join fetch level.image left join fetch level.dimension" -- ) -+ @Query("select level from Level level left join fetch level.dependsOn left join fetch level.image left join fetch level.dimension") - List findAllWithToOneRelationships(); - - @Query( -diff --git a/src/main/java/com/iteratec/teamdojo/repository/LevelSkillRepository.java b/src/main/java/com/iteratec/teamdojo/repository/LevelSkillRepository.java -index c4aea3f1..ee603205 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/LevelSkillRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/LevelSkillRepository.java -@@ -11,7 +11,7 @@ import org.springframework.data.repository.query.Param; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the LevelSkill entity. -+ * Spring Data JPA repository for the LevelSkill entity. - */ - @Repository - @GeneratedByJHipster -@@ -29,12 +29,12 @@ public interface LevelSkillRepository extends JpaRepository, J - } - - @Query( -- value = "select distinct levelSkill from LevelSkill levelSkill left join fetch levelSkill.skill left join fetch levelSkill.level", -- countQuery = "select count(distinct levelSkill) from LevelSkill levelSkill" -+ value = "select levelSkill from LevelSkill levelSkill left join fetch levelSkill.skill left join fetch levelSkill.level", -+ countQuery = "select count(levelSkill) from LevelSkill levelSkill" - ) - Page findAllWithToOneRelationships(Pageable pageable); - -- @Query("select distinct levelSkill from LevelSkill levelSkill left join fetch levelSkill.skill left join fetch levelSkill.level") -+ @Query("select levelSkill from LevelSkill levelSkill left join fetch levelSkill.skill left join fetch levelSkill.level") - List findAllWithToOneRelationships(); - - @Query( -diff --git a/src/main/java/com/iteratec/teamdojo/repository/PersistentAuditEventDataRepository.java b/src/main/java/com/iteratec/teamdojo/repository/PersistentAuditEventDataRepository.java -index 3b5fb212..2592094b 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/PersistentAuditEventDataRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/PersistentAuditEventDataRepository.java -@@ -11,7 +11,7 @@ import org.springframework.data.repository.query.Param; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the PersistentAuditEventData entity. -+ * Spring Data JPA repository for the PersistentAuditEventData entity. - */ - @Repository - @GeneratedByJHipster -@@ -29,13 +29,13 @@ public interface PersistentAuditEventDataRepository extends JpaRepository findAllWithToOneRelationships(Pageable pageable); - - @Query( -- "select distinct persistentAuditEventData from PersistentAuditEventData persistentAuditEventData left join fetch persistentAuditEventData.event" -+ "select persistentAuditEventData from PersistentAuditEventData persistentAuditEventData left join fetch persistentAuditEventData.event" - ) - List findAllWithToOneRelationships(); - -diff --git a/src/main/java/com/iteratec/teamdojo/repository/PersistentAuditEventRepository.java b/src/main/java/com/iteratec/teamdojo/repository/PersistentAuditEventRepository.java -index a76abec4..70961157 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/PersistentAuditEventRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/PersistentAuditEventRepository.java -@@ -6,7 +6,7 @@ import org.springframework.data.jpa.repository.*; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the PersistentAuditEvent entity. -+ * Spring Data JPA repository for the PersistentAuditEvent entity. - */ - @SuppressWarnings("unused") - @Repository -diff --git a/src/main/java/com/iteratec/teamdojo/repository/ReportRepository.java b/src/main/java/com/iteratec/teamdojo/repository/ReportRepository.java -index ae693a0c..70c7cd64 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/ReportRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/ReportRepository.java -@@ -6,7 +6,7 @@ import org.springframework.data.jpa.repository.*; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the Report entity. -+ * Spring Data JPA repository for the Report entity. - */ - @SuppressWarnings("unused") - @Repository -diff --git a/src/main/java/com/iteratec/teamdojo/repository/SkillRepository.java b/src/main/java/com/iteratec/teamdojo/repository/SkillRepository.java -index 599712ad..2a9a8b1d 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/SkillRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/SkillRepository.java -@@ -6,7 +6,7 @@ import org.springframework.data.jpa.repository.*; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the Skill entity. -+ * Spring Data JPA repository for the Skill entity. - */ - @SuppressWarnings("unused") - @Repository -diff --git a/src/main/java/com/iteratec/teamdojo/repository/TeamGroupRepository.java b/src/main/java/com/iteratec/teamdojo/repository/TeamGroupRepository.java -index a19179c7..cb8a3ab2 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/TeamGroupRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/TeamGroupRepository.java -@@ -11,7 +11,7 @@ import org.springframework.data.repository.query.Param; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the TeamGroup entity. -+ * Spring Data JPA repository for the TeamGroup entity. - */ - @Repository - @GeneratedByJHipster -@@ -29,12 +29,12 @@ public interface TeamGroupRepository extends JpaRepository, Jpa - } - - @Query( -- value = "select distinct teamGroup from TeamGroup teamGroup left join fetch teamGroup.parent", -- countQuery = "select count(distinct teamGroup) from TeamGroup teamGroup" -+ value = "select teamGroup from TeamGroup teamGroup left join fetch teamGroup.parent", -+ countQuery = "select count(teamGroup) from TeamGroup teamGroup" - ) - Page findAllWithToOneRelationships(Pageable pageable); - -- @Query("select distinct teamGroup from TeamGroup teamGroup left join fetch teamGroup.parent") -+ @Query("select teamGroup from TeamGroup teamGroup left join fetch teamGroup.parent") - List findAllWithToOneRelationships(); - - @Query("select teamGroup from TeamGroup teamGroup left join fetch teamGroup.parent where teamGroup.id =:id") -diff --git a/src/main/java/com/iteratec/teamdojo/repository/TeamRepository.java b/src/main/java/com/iteratec/teamdojo/repository/TeamRepository.java -index 9fdce996..4f08eac2 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/TeamRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/TeamRepository.java -@@ -11,7 +11,10 @@ import org.springframework.data.repository.query.Param; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the Team entity. -+ * Spring Data JPA repository for the Team entity. -+ * -+ * When extending this class, extend TeamRepositoryWithBagRelationships too. -+ * For more information refer to https://github.com/jhipster/generator-jhipster/issues/17990. - */ - @Repository - @GeneratedByJHipster -@@ -29,12 +32,12 @@ public interface TeamRepository extends TeamRepositoryWithBagRelationships, JpaR - } - - @Query( -- value = "select distinct team from Team team left join fetch team.image left join fetch team.group", -- countQuery = "select count(distinct team) from Team team" -+ value = "select team from Team team left join fetch team.image left join fetch team.group", -+ countQuery = "select count(team) from Team team" - ) - Page findAllWithToOneRelationships(Pageable pageable); - -- @Query("select distinct team from Team team left join fetch team.image left join fetch team.group") -+ @Query("select team from Team team left join fetch team.image left join fetch team.group") - List findAllWithToOneRelationships(); - - @Query("select team from Team team left join fetch team.image left join fetch team.group where team.id =:id") -diff --git a/src/main/java/com/iteratec/teamdojo/repository/TeamRepositoryWithBagRelationshipsImpl.java b/src/main/java/com/iteratec/teamdojo/repository/TeamRepositoryWithBagRelationshipsImpl.java -index 0336cd96..fdccf819 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/TeamRepositoryWithBagRelationshipsImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/TeamRepositoryWithBagRelationshipsImpl.java -@@ -2,12 +2,13 @@ package com.iteratec.teamdojo.repository; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.Team; -+import jakarta.persistence.EntityManager; -+import jakarta.persistence.PersistenceContext; - import java.util.Collections; -+import java.util.HashMap; - import java.util.List; - import java.util.Optional; --import javax.persistence.EntityManager; --import javax.persistence.PersistenceContext; --import org.hibernate.annotations.QueryHints; -+import java.util.stream.IntStream; - import org.springframework.data.domain.Page; - import org.springframework.data.domain.PageImpl; - -@@ -37,17 +38,19 @@ public class TeamRepositoryWithBagRelationshipsImpl implements TeamRepositoryWit - - Team fetchParticipations(Team result) { - return entityManager -- .createQuery("select team from Team team left join fetch team.participations where team is :team", Team.class) -- .setParameter("team", result) -- .setHint(QueryHints.PASS_DISTINCT_THROUGH, false) -+ .createQuery("select team from Team team left join fetch team.participations where team.id = :id", Team.class) -+ .setParameter("id", result.getId()) - .getSingleResult(); - } - - List fetchParticipations(List teams) { -- return entityManager -- .createQuery("select distinct team from Team team left join fetch team.participations where team in :teams", Team.class) -+ HashMap order = new HashMap<>(); -+ IntStream.range(0, teams.size()).forEach(index -> order.put(teams.get(index).getId(), index)); -+ List result = entityManager -+ .createQuery("select team from Team team left join fetch team.participations where team in :teams", Team.class) - .setParameter("teams", teams) -- .setHint(QueryHints.PASS_DISTINCT_THROUGH, false) - .getResultList(); -+ Collections.sort(result, (o1, o2) -> Integer.compare(order.get(o1.getId()), order.get(o2.getId()))); -+ return result; - } - } -diff --git a/src/main/java/com/iteratec/teamdojo/repository/TeamSkillRepository.java b/src/main/java/com/iteratec/teamdojo/repository/TeamSkillRepository.java -index 78616439..e68f1564 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/TeamSkillRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/TeamSkillRepository.java -@@ -11,7 +11,7 @@ import org.springframework.data.repository.query.Param; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the TeamSkill entity. -+ * Spring Data JPA repository for the TeamSkill entity. - */ - @Repository - @GeneratedByJHipster -@@ -29,12 +29,12 @@ public interface TeamSkillRepository extends JpaRepository, Jpa - } - - @Query( -- value = "select distinct teamSkill from TeamSkill teamSkill left join fetch teamSkill.skill left join fetch teamSkill.team", -- countQuery = "select count(distinct teamSkill) from TeamSkill teamSkill" -+ value = "select teamSkill from TeamSkill teamSkill left join fetch teamSkill.skill left join fetch teamSkill.team", -+ countQuery = "select count(teamSkill) from TeamSkill teamSkill" - ) - Page findAllWithToOneRelationships(Pageable pageable); - -- @Query("select distinct teamSkill from TeamSkill teamSkill left join fetch teamSkill.skill left join fetch teamSkill.team") -+ @Query("select teamSkill from TeamSkill teamSkill left join fetch teamSkill.skill left join fetch teamSkill.team") - List findAllWithToOneRelationships(); - - @Query( -diff --git a/src/main/java/com/iteratec/teamdojo/repository/TrainingRepository.java b/src/main/java/com/iteratec/teamdojo/repository/TrainingRepository.java -index de2312a4..5b2adcf8 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/TrainingRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/TrainingRepository.java -@@ -7,11 +7,13 @@ import java.util.Optional; - import org.springframework.data.domain.Page; - import org.springframework.data.domain.Pageable; - import org.springframework.data.jpa.repository.*; --import org.springframework.data.repository.query.Param; - import org.springframework.stereotype.Repository; - - /** -- * Spring Data SQL repository for the Training entity. -+ * Spring Data JPA repository for the Training entity. -+ * -+ * When extending this class, extend TrainingRepositoryWithBagRelationships too. -+ * For more information refer to https://github.com/jhipster/generator-jhipster/issues/17990. - */ - @Repository - @GeneratedByJHipster -diff --git a/src/main/java/com/iteratec/teamdojo/repository/TrainingRepositoryWithBagRelationshipsImpl.java b/src/main/java/com/iteratec/teamdojo/repository/TrainingRepositoryWithBagRelationshipsImpl.java -index 672d89b0..11aabfd9 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/TrainingRepositoryWithBagRelationshipsImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/TrainingRepositoryWithBagRelationshipsImpl.java -@@ -2,12 +2,13 @@ package com.iteratec.teamdojo.repository; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.Training; -+import jakarta.persistence.EntityManager; -+import jakarta.persistence.PersistenceContext; - import java.util.Collections; -+import java.util.HashMap; - import java.util.List; - import java.util.Optional; --import javax.persistence.EntityManager; --import javax.persistence.PersistenceContext; --import org.hibernate.annotations.QueryHints; -+import java.util.stream.IntStream; - import org.springframework.data.domain.Page; - import org.springframework.data.domain.PageImpl; - -@@ -37,23 +38,22 @@ public class TrainingRepositoryWithBagRelationshipsImpl implements TrainingRepos - - Training fetchSkills(Training result) { - return entityManager -- .createQuery( -- "select training from Training training left join fetch training.skills where training is :training", -- Training.class -- ) -- .setParameter("training", result) -- .setHint(QueryHints.PASS_DISTINCT_THROUGH, false) -+ .createQuery("select training from Training training left join fetch training.skills where training.id = :id", Training.class) -+ .setParameter("id", result.getId()) - .getSingleResult(); - } - - List fetchSkills(List trainings) { -- return entityManager -+ HashMap order = new HashMap<>(); -+ IntStream.range(0, trainings.size()).forEach(index -> order.put(trainings.get(index).getId(), index)); -+ List result = entityManager - .createQuery( -- "select distinct training from Training training left join fetch training.skills where training in :trainings", -+ "select training from Training training left join fetch training.skills where training in :trainings", - Training.class - ) - .setParameter("trainings", trainings) -- .setHint(QueryHints.PASS_DISTINCT_THROUGH, false) - .getResultList(); -+ Collections.sort(result, (o1, o2) -> Integer.compare(order.get(o1.getId()), order.get(o2.getId()))); -+ return result; - } - } -diff --git a/src/main/java/com/iteratec/teamdojo/repository/UserRepository.java b/src/main/java/com/iteratec/teamdojo/repository/UserRepository.java -index 8ac490a6..037b3a4e 100644 ---- a/src/main/java/com/iteratec/teamdojo/repository/UserRepository.java -+++ b/src/main/java/com/iteratec/teamdojo/repository/UserRepository.java -@@ -2,7 +2,6 @@ package com.iteratec.teamdojo.repository; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.User; --import java.util.List; - import java.util.Optional; - import org.springframework.cache.annotation.Cacheable; - import org.springframework.data.domain.*; -diff --git a/src/main/java/com/iteratec/teamdojo/security/SecurityUtils.java b/src/main/java/com/iteratec/teamdojo/security/SecurityUtils.java -index 2170ade2..d4bf8f1f 100644 ---- a/src/main/java/com/iteratec/teamdojo/security/SecurityUtils.java -+++ b/src/main/java/com/iteratec/teamdojo/security/SecurityUtils.java -@@ -36,8 +36,7 @@ public final class SecurityUtils { - private static String extractPrincipal(Authentication authentication) { - if (authentication == null) { - return null; -- } else if (authentication.getPrincipal() instanceof UserDetails) { -- UserDetails springSecurityUser = (UserDetails) authentication.getPrincipal(); -+ } else if (authentication.getPrincipal() instanceof UserDetails springSecurityUser) { - return springSecurityUser.getUsername(); - } else if (authentication instanceof JwtAuthenticationToken) { - return (String) ((JwtAuthenticationToken) authentication).getToken().getClaims().get("preferred_username"); -@@ -46,8 +45,8 @@ public final class SecurityUtils { - if (attributes.containsKey("preferred_username")) { - return (String) attributes.get("preferred_username"); - } -- } else if (authentication.getPrincipal() instanceof String) { -- return (String) authentication.getPrincipal(); -+ } else if (authentication.getPrincipal() instanceof String s) { -+ return s; - } - return null; - } -diff --git a/src/main/java/com/iteratec/teamdojo/security/oauth2/CustomClaimConverter.java b/src/main/java/com/iteratec/teamdojo/security/oauth2/CustomClaimConverter.java -index 920fe9ae..28faf18d 100644 ---- a/src/main/java/com/iteratec/teamdojo/security/oauth2/CustomClaimConverter.java -+++ b/src/main/java/com/iteratec/teamdojo/security/oauth2/CustomClaimConverter.java -@@ -2,14 +2,15 @@ package com.iteratec.teamdojo.security.oauth2; - - import com.fasterxml.jackson.databind.JsonNode; - import com.fasterxml.jackson.databind.node.ObjectNode; -+import com.github.benmanes.caffeine.cache.Cache; -+import com.github.benmanes.caffeine.cache.Caffeine; - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.security.SecurityUtils; -+import java.time.Duration; - import java.util.Arrays; - import java.util.Collections; - import java.util.List; - import java.util.Map; --import java.util.concurrent.ConcurrentHashMap; --import java.util.stream.Collectors; - import java.util.stream.StreamSupport; - import org.springframework.core.convert.converter.Converter; - import org.springframework.http.HttpEntity; -@@ -21,6 +22,7 @@ import org.springframework.security.oauth2.jwt.MappedJwtClaimSetConverter; - import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver; - import org.springframework.security.oauth2.server.resource.web.DefaultBearerTokenResolver; - import org.springframework.web.client.RestTemplate; -+import org.springframework.web.context.request.RequestAttributes; - import org.springframework.web.context.request.RequestContextHolder; - import org.springframework.web.context.request.ServletRequestAttributes; - -@@ -38,7 +40,14 @@ public class CustomClaimConverter implements Converter, Map< - - private final ClientRegistration registration; - -- private final Map users = new ConcurrentHashMap<>(); -+ // See https://github.com/jhipster/generator-jhipster/issues/18868 -+ // We don't use a distributed cache or the user selected cache implementation here on purpose -+ private final Cache users = Caffeine -+ .newBuilder() -+ .maximumSize(10_000) -+ .expireAfterWrite(Duration.ofHours(1)) -+ .recordStats() -+ .build(); - - public CustomClaimConverter(ClientRegistration registration, RestTemplate restTemplate) { - this.registration = registration; -@@ -47,19 +56,19 @@ public class CustomClaimConverter implements Converter, Map< - - public Map convert(Map claims) { - Map convertedClaims = this.delegate.convert(claims); -- if ( -- RequestContextHolder.getRequestAttributes() != null && -- ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) != null -- ) { -+ // Only look up user information if identity claims are missing -+ if (claims.containsKey("given_name") && claims.containsKey("family_name")) { -+ return convertedClaims; -+ } -+ RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); -+ if (attributes instanceof ServletRequestAttributes) { - // Retrieve and set the token -- String token = bearerTokenResolver.resolve( -- ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest() -- ); -+ String token = bearerTokenResolver.resolve(((ServletRequestAttributes) attributes).getRequest()); - HttpHeaders headers = new HttpHeaders(); - headers.set("Authorization", buildBearer(token)); - -- // Retrieve user infos from OAuth provider if not already loaded -- ObjectNode user = users.computeIfAbsent( -+ // Retrieve user info from OAuth provider if not already loaded -+ ObjectNode user = users.get( - claims.get("sub").toString(), - s -> { - ResponseEntity userInfo = restTemplate.exchange( -@@ -93,17 +102,14 @@ public class CustomClaimConverter implements Converter, Map< - } - } - if (user.has("groups")) { -- List groups = StreamSupport -- .stream(user.get("groups").spliterator(), false) -- .map(JsonNode::asText) -- .collect(Collectors.toList()); -+ List groups = StreamSupport.stream(user.get("groups").spliterator(), false).map(JsonNode::asText).toList(); - convertedClaims.put("groups", groups); - } - if (user.has(SecurityUtils.CLAIMS_NAMESPACE + "roles")) { - List roles = StreamSupport - .stream(user.get(SecurityUtils.CLAIMS_NAMESPACE + "roles").spliterator(), false) - .map(JsonNode::asText) -- .collect(Collectors.toList()); -+ .toList(); - convertedClaims.put("roles", roles); - } - } -diff --git a/src/main/java/com/iteratec/teamdojo/service/ActivityQueryService.java b/src/main/java/com/iteratec/teamdojo/service/ActivityQueryService.java -index ef1c4537..9bb74bad 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/ActivityQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/ActivityQueryService.java -@@ -8,7 +8,6 @@ import com.iteratec.teamdojo.service.criteria.ActivityCriteria; - import com.iteratec.teamdojo.service.dto.ActivityDTO; - import com.iteratec.teamdojo.service.mapper.ActivityMapper; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/BadgeQueryService.java b/src/main/java/com/iteratec/teamdojo/service/BadgeQueryService.java -index 3ff8bec4..351005b0 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/BadgeQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/BadgeQueryService.java -@@ -7,8 +7,8 @@ import com.iteratec.teamdojo.repository.BadgeRepository; - import com.iteratec.teamdojo.service.criteria.BadgeCriteria; - import com.iteratec.teamdojo.service.dto.BadgeDTO; - import com.iteratec.teamdojo.service.mapper.BadgeMapper; -+import jakarta.persistence.criteria.JoinType; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/BadgeSkillQueryService.java b/src/main/java/com/iteratec/teamdojo/service/BadgeSkillQueryService.java -index 399040e4..a0217957 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/BadgeSkillQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/BadgeSkillQueryService.java -@@ -7,8 +7,8 @@ import com.iteratec.teamdojo.repository.BadgeSkillRepository; - import com.iteratec.teamdojo.service.criteria.BadgeSkillCriteria; - import com.iteratec.teamdojo.service.dto.BadgeSkillDTO; - import com.iteratec.teamdojo.service.mapper.BadgeSkillMapper; -+import jakarta.persistence.criteria.JoinType; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/CommentQueryService.java b/src/main/java/com/iteratec/teamdojo/service/CommentQueryService.java -index 8988821d..1722f3ba 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/CommentQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/CommentQueryService.java -@@ -7,8 +7,8 @@ import com.iteratec.teamdojo.repository.CommentRepository; - import com.iteratec.teamdojo.service.criteria.CommentCriteria; - import com.iteratec.teamdojo.service.dto.CommentDTO; - import com.iteratec.teamdojo.service.mapper.CommentMapper; -+import jakarta.persistence.criteria.JoinType; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/DimensionQueryService.java b/src/main/java/com/iteratec/teamdojo/service/DimensionQueryService.java -index a5784ef3..1f432e5d 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/DimensionQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/DimensionQueryService.java -@@ -7,8 +7,8 @@ import com.iteratec.teamdojo.repository.DimensionRepository; - import com.iteratec.teamdojo.service.criteria.DimensionCriteria; - import com.iteratec.teamdojo.service.dto.DimensionDTO; - import com.iteratec.teamdojo.service.mapper.DimensionMapper; -+import jakarta.persistence.criteria.JoinType; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/ImageQueryService.java b/src/main/java/com/iteratec/teamdojo/service/ImageQueryService.java -index 3c0bc635..1ac5d59d 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/ImageQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/ImageQueryService.java -@@ -8,7 +8,6 @@ import com.iteratec.teamdojo.service.criteria.ImageCriteria; - import com.iteratec.teamdojo.service.dto.ImageDTO; - import com.iteratec.teamdojo.service.mapper.ImageMapper; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/LevelQueryService.java b/src/main/java/com/iteratec/teamdojo/service/LevelQueryService.java -index 938b8b35..7339bd4f 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/LevelQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/LevelQueryService.java -@@ -7,8 +7,8 @@ import com.iteratec.teamdojo.repository.LevelRepository; - import com.iteratec.teamdojo.service.criteria.LevelCriteria; - import com.iteratec.teamdojo.service.dto.LevelDTO; - import com.iteratec.teamdojo.service.mapper.LevelMapper; -+import jakarta.persistence.criteria.JoinType; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -@@ -143,6 +143,12 @@ public class LevelQueryService extends QueryService { - buildSpecification(criteria.getDimensionId(), root -> root.join(Level_.dimension, JoinType.LEFT).get(Dimension_.id)) - ); - } -+ if (criteria.getLevelId() != null) { -+ specification = -+ specification.and( -+ buildSpecification(criteria.getLevelId(), root -> root.join(Level_.level, JoinType.LEFT).get(Level_.id)) -+ ); -+ } - } - return specification; - } -diff --git a/src/main/java/com/iteratec/teamdojo/service/LevelService.java b/src/main/java/com/iteratec/teamdojo/service/LevelService.java -index c6714303..7334a2a1 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/LevelService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/LevelService.java -@@ -2,6 +2,7 @@ package com.iteratec.teamdojo.service; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.service.dto.LevelDTO; -+import java.util.List; - import java.util.Optional; - import org.springframework.data.domain.Page; - import org.springframework.data.domain.Pageable; -@@ -43,6 +44,13 @@ public interface LevelService { - */ - Page findAll(Pageable pageable); - -+ /** -+ * Get all the LevelDTO where Level is {@code null}. -+ * -+ * @return the {@link List} of entities. -+ */ -+ List findAllWhereLevelIsNull(); -+ - /** - * Get all the levels with eager load of many-to-many relationships. - * -diff --git a/src/main/java/com/iteratec/teamdojo/service/LevelSkillQueryService.java b/src/main/java/com/iteratec/teamdojo/service/LevelSkillQueryService.java -index 72e7ceb6..a8ffcd93 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/LevelSkillQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/LevelSkillQueryService.java -@@ -7,8 +7,8 @@ import com.iteratec.teamdojo.repository.LevelSkillRepository; - import com.iteratec.teamdojo.service.criteria.LevelSkillCriteria; - import com.iteratec.teamdojo.service.dto.LevelSkillDTO; - import com.iteratec.teamdojo.service.mapper.LevelSkillMapper; -+import jakarta.persistence.criteria.JoinType; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/ReportQueryService.java b/src/main/java/com/iteratec/teamdojo/service/ReportQueryService.java -index 2e3d20bf..08778e90 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/ReportQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/ReportQueryService.java -@@ -8,7 +8,6 @@ import com.iteratec.teamdojo.service.criteria.ReportCriteria; - import com.iteratec.teamdojo.service.dto.ReportDTO; - import com.iteratec.teamdojo.service.mapper.ReportMapper; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/SkillQueryService.java b/src/main/java/com/iteratec/teamdojo/service/SkillQueryService.java -index a3985f13..a0b40308 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/SkillQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/SkillQueryService.java -@@ -7,8 +7,8 @@ import com.iteratec.teamdojo.repository.SkillRepository; - import com.iteratec.teamdojo.service.criteria.SkillCriteria; - import com.iteratec.teamdojo.service.dto.SkillDTO; - import com.iteratec.teamdojo.service.mapper.SkillMapper; -+import jakarta.persistence.criteria.JoinType; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/TeamGroupQueryService.java b/src/main/java/com/iteratec/teamdojo/service/TeamGroupQueryService.java -index 35d759d3..3c412ae2 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/TeamGroupQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/TeamGroupQueryService.java -@@ -7,8 +7,8 @@ import com.iteratec.teamdojo.repository.TeamGroupRepository; - import com.iteratec.teamdojo.service.criteria.TeamGroupCriteria; - import com.iteratec.teamdojo.service.dto.TeamGroupDTO; - import com.iteratec.teamdojo.service.mapper.TeamGroupMapper; -+import jakarta.persistence.criteria.JoinType; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/TeamQueryService.java b/src/main/java/com/iteratec/teamdojo/service/TeamQueryService.java -index 1bea14bd..a9c35c1d 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/TeamQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/TeamQueryService.java -@@ -7,8 +7,8 @@ import com.iteratec.teamdojo.repository.TeamRepository; - import com.iteratec.teamdojo.service.criteria.TeamCriteria; - import com.iteratec.teamdojo.service.dto.TeamDTO; - import com.iteratec.teamdojo.service.mapper.TeamMapper; -+import jakarta.persistence.criteria.JoinType; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/TeamSkillQueryService.java b/src/main/java/com/iteratec/teamdojo/service/TeamSkillQueryService.java -index a3bf9985..3e3f1fa0 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/TeamSkillQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/TeamSkillQueryService.java -@@ -7,8 +7,8 @@ import com.iteratec.teamdojo.repository.TeamSkillRepository; - import com.iteratec.teamdojo.service.criteria.TeamSkillCriteria; - import com.iteratec.teamdojo.service.dto.TeamSkillDTO; - import com.iteratec.teamdojo.service.mapper.TeamSkillMapper; -+import jakarta.persistence.criteria.JoinType; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/TrainingQueryService.java b/src/main/java/com/iteratec/teamdojo/service/TrainingQueryService.java -index 0a485fff..95704a06 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/TrainingQueryService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/TrainingQueryService.java -@@ -7,8 +7,8 @@ import com.iteratec.teamdojo.repository.TrainingRepository; - import com.iteratec.teamdojo.service.criteria.TrainingCriteria; - import com.iteratec.teamdojo.service.dto.TrainingDTO; - import com.iteratec.teamdojo.service.mapper.TrainingMapper; -+import jakarta.persistence.criteria.JoinType; - import java.util.List; --import javax.persistence.criteria.JoinType; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -diff --git a/src/main/java/com/iteratec/teamdojo/service/UserService.java b/src/main/java/com/iteratec/teamdojo/service/UserService.java -index 03ebfa75..8c6dd09c 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/UserService.java -+++ b/src/main/java/com/iteratec/teamdojo/service/UserService.java -@@ -67,6 +67,7 @@ public class UserService { - } - user.setLangKey(langKey); - user.setImageUrl(imageUrl); -+ userRepository.save(user); - this.clearUserCaches(user); - log.debug("Changed Information for User: {}", user); - }); -@@ -93,13 +94,13 @@ public class UserService { - */ - @Transactional(readOnly = true) - public List getAuthorities() { -- return authorityRepository.findAll().stream().map(Authority::getName).collect(Collectors.toList()); -+ return authorityRepository.findAll().stream().map(Authority::getName).toList(); - } - - private User syncUserWithIdP(Map details, User user) { - // save authorities in to sync user roles/groups between IdP and JHipster's local database - Collection dbAuthorities = getAuthorities(); -- Collection userAuthorities = user.getAuthorities().stream().map(Authority::getName).collect(Collectors.toList()); -+ Collection userAuthorities = user.getAuthorities().stream().map(Authority::getName).toList(); - for (String authority : userAuthorities) { - if (!dbAuthorities.contains(authority)) { - log.debug("Saving authority '{}' in local database", authority); -@@ -113,8 +114,13 @@ public class UserService { - if (existingUser.isPresent()) { - // if IdP sends last updated information, use it to determine if an update should happen - if (details.get("updated_at") != null) { -- Instant dbModifiedDate = existingUser.get().getLastModifiedDate(); -- Instant idpModifiedDate = (Instant) details.get("updated_at"); -+ Instant dbModifiedDate = existingUser.orElseThrow().getLastModifiedDate(); -+ Instant idpModifiedDate; -+ if (details.get("updated_at") instanceof Instant) { -+ idpModifiedDate = (Instant) details.get("updated_at"); -+ } else { -+ idpModifiedDate = Instant.ofEpochSecond((Integer) details.get("updated_at")); -+ } - if (idpModifiedDate.isAfter(dbModifiedDate)) { - log.debug("Updating user '{}' in local database", user.getLogin()); - updateUser(user.getFirstName(), user.getLastName(), user.getEmail(), user.getLangKey(), user.getImageUrl()); -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/ActivityCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/ActivityCriteria.java -index 92a935ef..1aa66421 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/ActivityCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/ActivityCriteria.java -@@ -4,16 +4,9 @@ import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.enumeration.ActivityType; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.Activity} entity. This class is used -@@ -25,6 +18,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class ActivityCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/BadgeCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/BadgeCriteria.java -index 58a94212..ca200fe4 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/BadgeCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/BadgeCriteria.java -@@ -3,16 +3,9 @@ package com.iteratec.teamdojo.service.criteria; - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.Badge} entity. This class is used -@@ -24,6 +17,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class BadgeCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/BadgeSkillCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/BadgeSkillCriteria.java -index e3710ae7..a303fb1a 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/BadgeSkillCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/BadgeSkillCriteria.java -@@ -3,15 +3,9 @@ package com.iteratec.teamdojo.service.criteria; - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.BadgeSkill} entity. This class is used -@@ -23,6 +17,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class BadgeSkillCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/CommentCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/CommentCriteria.java -index b4a11dd6..28142510 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/CommentCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/CommentCriteria.java -@@ -3,16 +3,9 @@ package com.iteratec.teamdojo.service.criteria; - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.Comment} entity. This class is used -@@ -24,6 +17,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class CommentCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/DimensionCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/DimensionCriteria.java -index 3406999b..791501ca 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/DimensionCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/DimensionCriteria.java -@@ -3,16 +3,9 @@ package com.iteratec.teamdojo.service.criteria; - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.Dimension} entity. This class is used -@@ -24,6 +17,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class DimensionCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/ImageCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/ImageCriteria.java -index 74bd6097..efbaac21 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/ImageCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/ImageCriteria.java -@@ -3,16 +3,9 @@ package com.iteratec.teamdojo.service.criteria; - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.Image} entity. This class is used -@@ -24,6 +17,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class ImageCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/LevelCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/LevelCriteria.java -index 3fae3d13..0cb0bf92 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/LevelCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/LevelCriteria.java -@@ -3,16 +3,9 @@ package com.iteratec.teamdojo.service.criteria; - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.Level} entity. This class is used -@@ -24,6 +17,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class LevelCriteria implements Serializable, Criteria { - -@@ -57,6 +51,8 @@ public class LevelCriteria implements Serializable, Criteria { - - private LongFilter dimensionId; - -+ private LongFilter levelId; -+ - private Boolean distinct; - - public LevelCriteria() {} -@@ -76,6 +72,7 @@ public class LevelCriteria implements Serializable, Criteria { - this.skillsId = other.skillsId == null ? null : other.skillsId.copy(); - this.imageId = other.imageId == null ? null : other.imageId.copy(); - this.dimensionId = other.dimensionId == null ? null : other.dimensionId.copy(); -+ this.levelId = other.levelId == null ? null : other.levelId.copy(); - this.distinct = other.distinct; - } - -@@ -294,6 +291,21 @@ public class LevelCriteria implements Serializable, Criteria { - this.dimensionId = dimensionId; - } - -+ public LongFilter getLevelId() { -+ return levelId; -+ } -+ -+ public LongFilter levelId() { -+ if (levelId == null) { -+ levelId = new LongFilter(); -+ } -+ return levelId; -+ } -+ -+ public void setLevelId(LongFilter levelId) { -+ this.levelId = levelId; -+ } -+ - public Boolean getDistinct() { - return distinct; - } -@@ -326,6 +338,7 @@ public class LevelCriteria implements Serializable, Criteria { - Objects.equals(skillsId, that.skillsId) && - Objects.equals(imageId, that.imageId) && - Objects.equals(dimensionId, that.dimensionId) && -+ Objects.equals(levelId, that.levelId) && - Objects.equals(distinct, that.distinct) - ); - } -@@ -347,6 +360,7 @@ public class LevelCriteria implements Serializable, Criteria { - skillsId, - imageId, - dimensionId, -+ levelId, - distinct - ); - } -@@ -369,6 +383,7 @@ public class LevelCriteria implements Serializable, Criteria { - (skillsId != null ? "skillsId=" + skillsId + ", " : "") + - (imageId != null ? "imageId=" + imageId + ", " : "") + - (dimensionId != null ? "dimensionId=" + dimensionId + ", " : "") + -+ (levelId != null ? "levelId=" + levelId + ", " : "") + - (distinct != null ? "distinct=" + distinct + ", " : "") + - "}"; - } -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/LevelSkillCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/LevelSkillCriteria.java -index 33c14511..9225734c 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/LevelSkillCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/LevelSkillCriteria.java -@@ -3,15 +3,9 @@ package com.iteratec.teamdojo.service.criteria; - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.LevelSkill} entity. This class is used -@@ -23,6 +17,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class LevelSkillCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/ReportCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/ReportCriteria.java -index 35079ced..cef231ee 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/ReportCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/ReportCriteria.java -@@ -4,16 +4,9 @@ import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.enumeration.ReportType; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.Report} entity. This class is used -@@ -25,6 +18,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class ReportCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/SkillCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/SkillCriteria.java -index f806b68f..9bf6d345 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/SkillCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/SkillCriteria.java -@@ -3,16 +3,9 @@ package com.iteratec.teamdojo.service.criteria; - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.Skill} entity. This class is used -@@ -24,6 +17,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class SkillCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/TeamCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/TeamCriteria.java -index 21d2ba1d..194f5e32 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/TeamCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/TeamCriteria.java -@@ -3,16 +3,9 @@ package com.iteratec.teamdojo.service.criteria; - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.Team} entity. This class is used -@@ -24,6 +17,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class TeamCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/TeamGroupCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/TeamGroupCriteria.java -index 89f09055..1007b349 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/TeamGroupCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/TeamGroupCriteria.java -@@ -3,16 +3,9 @@ package com.iteratec.teamdojo.service.criteria; - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.TeamGroup} entity. This class is used -@@ -24,6 +17,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class TeamGroupCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/TeamSkillCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/TeamSkillCriteria.java -index 9becb697..2643ac82 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/TeamSkillCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/TeamSkillCriteria.java -@@ -4,16 +4,9 @@ import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.enumeration.SkillStatus; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.TeamSkill} entity. This class is used -@@ -25,6 +18,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class TeamSkillCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/criteria/TrainingCriteria.java b/src/main/java/com/iteratec/teamdojo/service/criteria/TrainingCriteria.java -index f4b6aff0..db4b2db4 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/criteria/TrainingCriteria.java -+++ b/src/main/java/com/iteratec/teamdojo/service/criteria/TrainingCriteria.java -@@ -3,16 +3,9 @@ package com.iteratec.teamdojo.service.criteria; - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.io.Serializable; - import java.util.Objects; --import org.springdoc.api.annotations.ParameterObject; -+import org.springdoc.core.annotations.ParameterObject; - import tech.jhipster.service.Criteria; --import tech.jhipster.service.filter.BooleanFilter; --import tech.jhipster.service.filter.DoubleFilter; --import tech.jhipster.service.filter.Filter; --import tech.jhipster.service.filter.FloatFilter; --import tech.jhipster.service.filter.InstantFilter; --import tech.jhipster.service.filter.IntegerFilter; --import tech.jhipster.service.filter.LongFilter; --import tech.jhipster.service.filter.StringFilter; -+import tech.jhipster.service.filter.*; - - /** - * Criteria class for the {@link com.iteratec.teamdojo.domain.Training} entity. This class is used -@@ -24,6 +17,7 @@ import tech.jhipster.service.filter.StringFilter; - * fix type specific filters. - */ - @ParameterObject -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class TrainingCriteria implements Serializable, Criteria { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/ActivityDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/ActivityDTO.java -index 7ebebdfa..dcfe5639 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/ActivityDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/ActivityDTO.java -@@ -12,7 +12,10 @@ import java.util.Objects; - */ - @SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster --public class ActivityDTO implements Serializable { -+// ### MODIFICATION-START ### -+public class ActivityDTO implements Serializable, com.iteratec.teamdojo.service.dto.custom.AuditableData { -+ -+ // ### MODIFICATION-END ### - - private Long id; - -@@ -21,12 +24,15 @@ public class ActivityDTO implements Serializable { - @Size(max = 255) - private String data; - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant createdAt; -+// ### MODIFICATION-END ### - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant updatedAt; - -+ // ### MODIFICATION-END ### -+ - public Long getId() { - return id; - } -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/AdminUserDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/AdminUserDTO.java -index c78ed03d..1ca77f75 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/AdminUserDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/AdminUserDTO.java -@@ -4,16 +4,19 @@ import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.config.Constants; - import com.iteratec.teamdojo.domain.Authority; - import com.iteratec.teamdojo.domain.User; -+import jakarta.validation.constraints.*; -+import java.io.Serializable; - import java.time.Instant; - import java.util.Set; - import java.util.stream.Collectors; --import javax.validation.constraints.*; - - /** - * A DTO representing a user, with his authorities. - */ - @GeneratedByJHipster --public class AdminUserDTO { -+public class AdminUserDTO implements Serializable { -+ -+ private static final long serialVersionUID = 1L; - - private String id; - -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/BadgeDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/BadgeDTO.java -index 451f6eae..dce8f824 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/BadgeDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/BadgeDTO.java -@@ -13,7 +13,10 @@ import java.util.Set; - */ - @SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster --public class BadgeDTO implements Serializable { -+// ### MODIFICATION-START ### -+public class BadgeDTO implements Serializable, com.iteratec.teamdojo.service.dto.custom.AuditableData { -+ -+ // ### MODIFICATION-END ### - - private Long id; - -@@ -47,11 +50,13 @@ public class BadgeDTO implements Serializable { - @Min(value = 0) - private Integer completionBonus; - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant createdAt; -+// ### MODIFICATION-END ### - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant updatedAt; -+// ### MODIFICATION-END ### - - private ImageDTO image; - -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/BadgeSkillDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/BadgeSkillDTO.java -index d4dcf192..967950b6 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/BadgeSkillDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/BadgeSkillDTO.java -@@ -2,14 +2,15 @@ package com.iteratec.teamdojo.service.dto; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import io.swagger.v3.oas.annotations.media.Schema; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.util.Objects; --import javax.validation.constraints.*; - - /** - * A DTO for the {@link com.iteratec.teamdojo.domain.BadgeSkill} entity. - */ - @Schema(description = "Lookup table entity for N-to-M relationships") -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class BadgeSkillDTO implements Serializable { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/CommentDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/CommentDTO.java -index 9c98f7a5..2e10b054 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/CommentDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/CommentDTO.java -@@ -1,14 +1,15 @@ - package com.iteratec.teamdojo.service.dto; - - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.time.Instant; - import java.util.Objects; --import javax.validation.constraints.*; - - /** - * A DTO for the {@link com.iteratec.teamdojo.domain.Comment} entity. - */ -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - // ### MODIFICATION-START ### - public class CommentDTO implements Serializable, com.iteratec.teamdojo.service.dto.custom.AuditableData { -@@ -23,11 +24,11 @@ public class CommentDTO implements Serializable, com.iteratec.teamdojo.service.d - - // ### MODIFICATION-START ### - private Instant createdAt; -- // ### MODIFICATION-END ### -+// ### MODIFICATION-END ### - - // ### MODIFICATION-START ### - private Instant updatedAt; -- // ### MODIFICATION-END ### -+// ### MODIFICATION-END ### - - private TeamDTO team; - -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/DimensionDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/DimensionDTO.java -index 471ec3f7..782e078e 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/DimensionDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/DimensionDTO.java -@@ -11,7 +11,10 @@ import java.util.Objects; - */ - @SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster --public class DimensionDTO implements Serializable { -+// ### MODIFICATION-START ### -+public class DimensionDTO implements Serializable, com.iteratec.teamdojo.service.dto.custom.AuditableData { -+ -+ // ### MODIFICATION-END ### - - private Long id; - -@@ -28,12 +31,15 @@ public class DimensionDTO implements Serializable { - @Size(max = 4096) - private String descriptionDE; - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant createdAt; -+// ### MODIFICATION-END ### - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant updatedAt; - -+ // ### MODIFICATION-END ### -+ - public Long getId() { - return id; - } -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/ImageDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/ImageDTO.java -index 632fd657..010fd729 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/ImageDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/ImageDTO.java -@@ -12,8 +12,10 @@ import java.util.Objects; - */ - @SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster --public class ImageDTO implements Serializable { -+// ### MODIFICATION-START ### -+public class ImageDTO implements Serializable, com.iteratec.teamdojo.service.dto.custom.AuditableData { - -+// ### MODIFICATION-END ### - private Long id; - - @NotNull -@@ -38,12 +40,15 @@ public class ImageDTO implements Serializable { - @Size(max = 32) - private String hash; - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant createdAt; -+// ### MODIFICATION-END ### - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant updatedAt; - -+ // ### MODIFICATION-END ### -+ - public Long getId() { - return id; - } -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/LevelSkillDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/LevelSkillDTO.java -index f31e6184..4e0ef992 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/LevelSkillDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/LevelSkillDTO.java -@@ -2,14 +2,15 @@ package com.iteratec.teamdojo.service.dto; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import io.swagger.v3.oas.annotations.media.Schema; -+import jakarta.validation.constraints.*; - import java.io.Serializable; - import java.util.Objects; --import javax.validation.constraints.*; - - /** - * A DTO for the {@link com.iteratec.teamdojo.domain.LevelSkill} entity. - */ - @Schema(description = "Lookup table entity for N-to-M relationships.") -+@SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster - public class LevelSkillDTO implements Serializable { - -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/ReportDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/ReportDTO.java -index 5a916e29..9cb2314f 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/ReportDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/ReportDTO.java -@@ -12,7 +12,10 @@ import java.util.Objects; - */ - @SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster --public class ReportDTO implements Serializable { -+// ### MODIFICATION-START ### -+public class ReportDTO implements Serializable, com.iteratec.teamdojo.service.dto.custom.AuditableData { -+ -+ // ### MODIFICATION-END ### - - private Long id; - -@@ -27,12 +30,15 @@ public class ReportDTO implements Serializable { - @NotNull - private ReportType type; - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant createdAt; -+// ### MODIFICATION-END ### - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant updatedAt; - -+ // ### MODIFICATION-END ### -+ - public Long getId() { - return id; - } -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/SkillDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/SkillDTO.java -index 034b3348..23dca37a 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/SkillDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/SkillDTO.java -@@ -9,9 +9,11 @@ import java.util.Objects; - /** - * A DTO for the {@link com.iteratec.teamdojo.domain.Skill} entity. - */ --@SuppressWarnings("common-java:DuplicatedBlocks") -+// ### MODIFICATION-START ### - @GeneratedByJHipster --public class SkillDTO implements Serializable { -+public class SkillDTO implements Serializable, com.iteratec.teamdojo.service.dto.custom.AuditableData { -+ -+ // ### MODIFICATION-END ### - - private Long id; - -@@ -58,12 +60,15 @@ public class SkillDTO implements Serializable { - @Min(value = 0) - private Integer rateCount; - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant createdAt; -+// ### MODIFICATION-END ### - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant updatedAt; - -+ // ### MODIFICATION-END ### -+ - public Long getId() { - return id; - } -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/TeamGroupDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/TeamGroupDTO.java -index f72c6f18..a4436915 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/TeamGroupDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/TeamGroupDTO.java -@@ -15,8 +15,10 @@ import java.util.Objects; - ) - @SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster --public class TeamGroupDTO implements Serializable { -+// ### MODIFICATION-START ### -+public class TeamGroupDTO implements Serializable, com.iteratec.teamdojo.service.dto.custom.AuditableData { - -+// ### MODIFICATION-END ### - private Long id; - - @NotNull -@@ -26,12 +28,15 @@ public class TeamGroupDTO implements Serializable { - @Size(max = 4096) - private String description; - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant createdAt; -+// ### MODIFICATION-END ### - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant updatedAt; - -+ // ### MODIFICATION-END ### -+ - private TeamGroupDTO parent; - - public Long getId() { -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/TrainingDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/TrainingDTO.java -index ad965f8f..ae3fdf91 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/TrainingDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/TrainingDTO.java -@@ -13,7 +13,10 @@ import java.util.Set; - */ - @SuppressWarnings("common-java:DuplicatedBlocks") - @GeneratedByJHipster --public class TrainingDTO implements Serializable { -+// ### MODIFICATION-START ### -+public class TrainingDTO implements Serializable, com.iteratec.teamdojo.service.dto.custom.AuditableData { -+ -+ // ### MODIFICATION-END ### - - private Long id; - -@@ -44,11 +47,13 @@ public class TrainingDTO implements Serializable { - @Size(max = 255) - private String suggestedBy; - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant createdAt; -+// ### MODIFICATION-END ### - -- @NotNull -+ // ### MODIFICATION-START ### - private Instant updatedAt; -+// ### MODIFICATION-END ### - - private Set skills = new HashSet<>(); - -diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/UserDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/UserDTO.java -index 92815bc4..64b893ea 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/dto/UserDTO.java -+++ b/src/main/java/com/iteratec/teamdojo/service/dto/UserDTO.java -@@ -2,12 +2,15 @@ package com.iteratec.teamdojo.service.dto; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.User; -+import java.io.Serializable; - - /** - * A DTO representing a user, with only the public attributes. - */ - @GeneratedByJHipster --public class UserDTO { -+public class UserDTO implements Serializable { -+ -+ private static final long serialVersionUID = 1L; - - private String id; - -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/ActivityServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/ActivityServiceImpl.java -index 2c41ecae..2500ea5f 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/ActivityServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/ActivityServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link Activity}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.Activity}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class ActivityServiceImpl implements ActivityService { - - @Override - public ActivityDTO update(ActivityDTO activityDTO) { -- log.debug("Request to save Activity : {}", activityDTO); -+ log.debug("Request to update Activity : {}", activityDTO); - Activity activity = activityMapper.toEntity(activityDTO); - activity = activityRepository.save(activity); - return activityMapper.toDto(activity); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/BadgeServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/BadgeServiceImpl.java -index 462498c5..21582567 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/BadgeServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/BadgeServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link Badge}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.Badge}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class BadgeServiceImpl implements BadgeService { - - @Override - public BadgeDTO update(BadgeDTO badgeDTO) { -- log.debug("Request to save Badge : {}", badgeDTO); -+ log.debug("Request to update Badge : {}", badgeDTO); - Badge badge = badgeMapper.toEntity(badgeDTO); - badge = badgeRepository.save(badge); - return badgeMapper.toDto(badge); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/BadgeSkillServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/BadgeSkillServiceImpl.java -index ae9536bd..0bf3a234 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/BadgeSkillServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/BadgeSkillServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link BadgeSkill}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.BadgeSkill}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class BadgeSkillServiceImpl implements BadgeSkillService { - - @Override - public BadgeSkillDTO update(BadgeSkillDTO badgeSkillDTO) { -- log.debug("Request to save BadgeSkill : {}", badgeSkillDTO); -+ log.debug("Request to update BadgeSkill : {}", badgeSkillDTO); - BadgeSkill badgeSkill = badgeSkillMapper.toEntity(badgeSkillDTO); - badgeSkill = badgeSkillRepository.save(badgeSkill); - return badgeSkillMapper.toDto(badgeSkill); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/CommentServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/CommentServiceImpl.java -index 2c30e6c9..58527af3 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/CommentServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/CommentServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link Comment}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.Comment}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class CommentServiceImpl implements CommentService { - - @Override - public CommentDTO update(CommentDTO commentDTO) { -- log.debug("Request to save Comment : {}", commentDTO); -+ log.debug("Request to update Comment : {}", commentDTO); - Comment comment = commentMapper.toEntity(commentDTO); - comment = commentRepository.save(comment); - return commentMapper.toDto(comment); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/DimensionServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/DimensionServiceImpl.java -index cc1e8e45..668e508e 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/DimensionServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/DimensionServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link Dimension}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.Dimension}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class DimensionServiceImpl implements DimensionService { - - @Override - public DimensionDTO update(DimensionDTO dimensionDTO) { -- log.debug("Request to save Dimension : {}", dimensionDTO); -+ log.debug("Request to update Dimension : {}", dimensionDTO); - Dimension dimension = dimensionMapper.toEntity(dimensionDTO); - dimension = dimensionRepository.save(dimension); - return dimensionMapper.toDto(dimension); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/ImageServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/ImageServiceImpl.java -index 4294487a..c2b36591 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/ImageServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/ImageServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link Image}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.Image}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class ImageServiceImpl implements ImageService { - - @Override - public ImageDTO update(ImageDTO imageDTO) { -- log.debug("Request to save Image : {}", imageDTO); -+ log.debug("Request to update Image : {}", imageDTO); - Image image = imageMapper.toEntity(imageDTO); - image = imageRepository.save(image); - return imageMapper.toDto(image); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/LevelServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/LevelServiceImpl.java -index 6d7cc910..794ef55a 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/LevelServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/LevelServiceImpl.java -@@ -6,7 +6,11 @@ import com.iteratec.teamdojo.repository.LevelRepository; - import com.iteratec.teamdojo.service.LevelService; - import com.iteratec.teamdojo.service.dto.LevelDTO; - import com.iteratec.teamdojo.service.mapper.LevelMapper; -+import java.util.LinkedList; -+import java.util.List; - import java.util.Optional; -+import java.util.stream.Collectors; -+import java.util.stream.StreamSupport; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.data.domain.Page; -@@ -15,7 +19,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link Level}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.Level}. - */ - @Service - @Transactional -@@ -43,7 +47,7 @@ public class LevelServiceImpl implements LevelService { - - @Override - public LevelDTO update(LevelDTO levelDTO) { -- log.debug("Request to save Level : {}", levelDTO); -+ log.debug("Request to update Level : {}", levelDTO); - Level level = levelMapper.toEntity(levelDTO); - level = levelRepository.save(level); - return levelMapper.toDto(level); -@@ -75,6 +79,20 @@ public class LevelServiceImpl implements LevelService { - return levelRepository.findAllWithEagerRelationships(pageable).map(levelMapper::toDto); - } - -+ /** -+ * Get all the levels where Level is {@code null}. -+ * @return the list of entities. -+ */ -+ @Transactional(readOnly = true) -+ public List findAllWhereLevelIsNull() { -+ log.debug("Request to get all levels where Level is null"); -+ return StreamSupport -+ .stream(levelRepository.findAll().spliterator(), false) -+ .filter(level -> level.getLevel() == null) -+ .map(levelMapper::toDto) -+ .collect(Collectors.toCollection(LinkedList::new)); -+ } -+ - @Override - @Transactional(readOnly = true) - public Optional findOne(Long id) { -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/LevelSkillServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/LevelSkillServiceImpl.java -index bc37ee89..4db823c2 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/LevelSkillServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/LevelSkillServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link LevelSkill}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.LevelSkill}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class LevelSkillServiceImpl implements LevelSkillService { - - @Override - public LevelSkillDTO update(LevelSkillDTO levelSkillDTO) { -- log.debug("Request to save LevelSkill : {}", levelSkillDTO); -+ log.debug("Request to update LevelSkill : {}", levelSkillDTO); - LevelSkill levelSkill = levelSkillMapper.toEntity(levelSkillDTO); - levelSkill = levelSkillRepository.save(levelSkill); - return levelSkillMapper.toDto(levelSkill); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/ReportServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/ReportServiceImpl.java -index 71ffbf2c..028dc164 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/ReportServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/ReportServiceImpl.java -@@ -16,7 +16,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link Report}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.Report}. - */ - @Service - @Transactional -@@ -44,7 +44,7 @@ public class ReportServiceImpl implements ReportService { - - @Override - public ReportDTO update(ReportDTO reportDTO) { -- log.debug("Request to save Report : {}", reportDTO); -+ log.debug("Request to update Report : {}", reportDTO); - Report report = reportMapper.toEntity(reportDTO); - report = reportRepository.save(report); - return reportMapper.toDto(report); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/SkillServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/SkillServiceImpl.java -index 355860c5..68864886 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/SkillServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/SkillServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link Skill}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.Skill}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class SkillServiceImpl implements SkillService { - - @Override - public SkillDTO update(SkillDTO skillDTO) { -- log.debug("Request to save Skill : {}", skillDTO); -+ log.debug("Request to update Skill : {}", skillDTO); - Skill skill = skillMapper.toEntity(skillDTO); - skill = skillRepository.save(skill); - return skillMapper.toDto(skill); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/TeamGroupServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/TeamGroupServiceImpl.java -index a04b499d..6cd089b8 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/TeamGroupServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/TeamGroupServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link TeamGroup}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.TeamGroup}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class TeamGroupServiceImpl implements TeamGroupService { - - @Override - public TeamGroupDTO update(TeamGroupDTO teamGroupDTO) { -- log.debug("Request to save TeamGroup : {}", teamGroupDTO); -+ log.debug("Request to update TeamGroup : {}", teamGroupDTO); - TeamGroup teamGroup = teamGroupMapper.toEntity(teamGroupDTO); - teamGroup = teamGroupRepository.save(teamGroup); - return teamGroupMapper.toDto(teamGroup); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/TeamServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/TeamServiceImpl.java -index f3e6b90e..39378f81 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/TeamServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/TeamServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link Team}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.Team}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class TeamServiceImpl implements TeamService { - - @Override - public TeamDTO update(TeamDTO teamDTO) { -- log.debug("Request to save Team : {}", teamDTO); -+ log.debug("Request to update Team : {}", teamDTO); - Team team = teamMapper.toEntity(teamDTO); - team = teamRepository.save(team); - return teamMapper.toDto(team); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/TeamSkillServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/TeamSkillServiceImpl.java -index 2a84df70..bf58188d 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/TeamSkillServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/TeamSkillServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link TeamSkill}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.TeamSkill}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class TeamSkillServiceImpl implements TeamSkillService { - - @Override - public TeamSkillDTO update(TeamSkillDTO teamSkillDTO) { -- log.debug("Request to save TeamSkill : {}", teamSkillDTO); -+ log.debug("Request to update TeamSkill : {}", teamSkillDTO); - TeamSkill teamSkill = teamSkillMapper.toEntity(teamSkillDTO); - teamSkill = teamSkillRepository.save(teamSkill); - return teamSkillMapper.toDto(teamSkill); -diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/TrainingServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/TrainingServiceImpl.java -index ff4c0c17..298ab31c 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/impl/TrainingServiceImpl.java -+++ b/src/main/java/com/iteratec/teamdojo/service/impl/TrainingServiceImpl.java -@@ -15,7 +15,7 @@ import org.springframework.stereotype.Service; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Service Implementation for managing {@link Training}. -+ * Service Implementation for managing {@link com.iteratec.teamdojo.domain.Training}. - */ - @Service - @Transactional -@@ -43,7 +43,7 @@ public class TrainingServiceImpl implements TrainingService { - - @Override - public TrainingDTO update(TrainingDTO trainingDTO) { -- log.debug("Request to save Training : {}", trainingDTO); -+ log.debug("Request to update Training : {}", trainingDTO); - Training training = trainingMapper.toEntity(trainingDTO); - training = trainingRepository.save(training); - return trainingMapper.toDto(training); -diff --git a/src/main/java/com/iteratec/teamdojo/service/mapper/BadgeMapper.java b/src/main/java/com/iteratec/teamdojo/service/mapper/BadgeMapper.java -index e83498e9..19d2a129 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/mapper/BadgeMapper.java -+++ b/src/main/java/com/iteratec/teamdojo/service/mapper/BadgeMapper.java -@@ -2,26 +2,42 @@ package com.iteratec.teamdojo.service.mapper; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.Badge; -+import com.iteratec.teamdojo.domain.Dimension; -+import com.iteratec.teamdojo.domain.Image; - import com.iteratec.teamdojo.service.dto.BadgeDTO; -+import com.iteratec.teamdojo.service.dto.DimensionDTO; -+import com.iteratec.teamdojo.service.dto.ImageDTO; - import java.util.Set; -+import java.util.stream.Collectors; - import org.mapstruct.*; - - /** - * Mapper for the entity {@link Badge} and its DTO {@link BadgeDTO}. - */ --@Mapper(componentModel = "spring", uses = { ImageMapper.class, DimensionMapper.class }) -+@Mapper(componentModel = "spring") - @GeneratedByJHipster - public interface BadgeMapper extends EntityMapper { -- @Mapping(target = "image", source = "image", qualifiedByName = "title") -- @Mapping(target = "dimensions", source = "dimensions", qualifiedByName = "titleENSet") -+ @Mapping(target = "image", source = "image", qualifiedByName = "imageTitle") -+ @Mapping(target = "dimensions", source = "dimensions", qualifiedByName = "dimensionTitleENSet") - BadgeDTO toDto(Badge s); - - @Mapping(target = "removeDimensions", ignore = true) - Badge toEntity(BadgeDTO badgeDTO); - -- @Named("titleEN") -+ @Named("imageTitle") -+ @BeanMapping(ignoreByDefault = true) -+ @Mapping(target = "id", source = "id") -+ @Mapping(target = "title", source = "title") -+ ImageDTO toDtoImageTitle(Image image); -+ -+ @Named("dimensionTitleEN") - @BeanMapping(ignoreByDefault = true) - @Mapping(target = "id", source = "id") - @Mapping(target = "titleEN", source = "titleEN") -- BadgeDTO toDtoTitleEN(Badge badge); -+ DimensionDTO toDtoDimensionTitleEN(Dimension dimension); -+ -+ @Named("dimensionTitleENSet") -+ default Set toDtoDimensionTitleENSet(Set dimension) { -+ return dimension.stream().map(this::toDtoDimensionTitleEN).collect(Collectors.toSet()); -+ } - } -diff --git a/src/main/java/com/iteratec/teamdojo/service/mapper/DimensionMapper.java b/src/main/java/com/iteratec/teamdojo/service/mapper/DimensionMapper.java -index b544cc89..2eec4677 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/mapper/DimensionMapper.java -+++ b/src/main/java/com/iteratec/teamdojo/service/mapper/DimensionMapper.java -@@ -3,7 +3,6 @@ package com.iteratec.teamdojo.service.mapper; - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.Dimension; - import com.iteratec.teamdojo.service.dto.DimensionDTO; --import java.util.Set; - import org.mapstruct.*; - - /** -@@ -11,16 +10,4 @@ import org.mapstruct.*; - */ - @Mapper(componentModel = "spring") - @GeneratedByJHipster --public interface DimensionMapper extends EntityMapper { -- @Named("titleENSet") -- @BeanMapping(ignoreByDefault = true) -- @Mapping(target = "id", source = "id") -- @Mapping(target = "titleEN", source = "titleEN") -- Set toDtoTitleENSet(Set dimension); -- -- @Named("titleEN") -- @BeanMapping(ignoreByDefault = true) -- @Mapping(target = "id", source = "id") -- @Mapping(target = "titleEN", source = "titleEN") -- DimensionDTO toDtoTitleEN(Dimension dimension); --} -+public interface DimensionMapper extends EntityMapper {} -diff --git a/src/main/java/com/iteratec/teamdojo/service/mapper/ImageMapper.java b/src/main/java/com/iteratec/teamdojo/service/mapper/ImageMapper.java -index 6300b890..d6ff5dca 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/mapper/ImageMapper.java -+++ b/src/main/java/com/iteratec/teamdojo/service/mapper/ImageMapper.java -@@ -10,10 +10,4 @@ import org.mapstruct.*; - */ - @Mapper(componentModel = "spring") - @GeneratedByJHipster --public interface ImageMapper extends EntityMapper { -- @Named("title") -- @BeanMapping(ignoreByDefault = true) -- @Mapping(target = "id", source = "id") -- @Mapping(target = "title", source = "title") -- ImageDTO toDtoTitle(Image image); --} -+public interface ImageMapper extends EntityMapper {} -diff --git a/src/main/java/com/iteratec/teamdojo/service/mapper/SkillMapper.java b/src/main/java/com/iteratec/teamdojo/service/mapper/SkillMapper.java -index 77e014e3..7586f875 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/mapper/SkillMapper.java -+++ b/src/main/java/com/iteratec/teamdojo/service/mapper/SkillMapper.java -@@ -3,7 +3,6 @@ package com.iteratec.teamdojo.service.mapper; - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.domain.Skill; - import com.iteratec.teamdojo.service.dto.SkillDTO; --import java.util.Set; - import org.mapstruct.*; - - /** -@@ -11,16 +10,4 @@ import org.mapstruct.*; - */ - @Mapper(componentModel = "spring") - @GeneratedByJHipster --public interface SkillMapper extends EntityMapper { -- @Named("titleEN") -- @BeanMapping(ignoreByDefault = true) -- @Mapping(target = "id", source = "id") -- @Mapping(target = "titleEN", source = "titleEN") -- SkillDTO toDtoTitleEN(Skill skill); -- -- @Named("titleENSet") -- @BeanMapping(ignoreByDefault = true) -- @Mapping(target = "id", source = "id") -- @Mapping(target = "titleEN", source = "titleEN") -- Set toDtoTitleENSet(Set skill); --} -+public interface SkillMapper extends EntityMapper {} -diff --git a/src/main/java/com/iteratec/teamdojo/service/mapper/TeamGroupMapper.java b/src/main/java/com/iteratec/teamdojo/service/mapper/TeamGroupMapper.java -index 1ad634bf..06a1a251 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/mapper/TeamGroupMapper.java -+++ b/src/main/java/com/iteratec/teamdojo/service/mapper/TeamGroupMapper.java -@@ -11,20 +11,12 @@ import org.mapstruct.*; - @Mapper(componentModel = "spring") - @GeneratedByJHipster - public interface TeamGroupMapper extends EntityMapper { -- @Mapping(target = "parent", source = "parent", qualifiedByName = "teamGroupId") -+ @Mapping(target = "parent", source = "parent", qualifiedByName = "teamGroupTitle") - TeamGroupDTO toDto(TeamGroup s); - -- @Named("teamGroupId") -+ @Named("teamGroupTitle") - @BeanMapping(ignoreByDefault = true) - @Mapping(target = "id", source = "id") -- // ### MODIFICATION-START ### - @Mapping(target = "title", source = "title") -- // ### MODIFICATION-END ### -- TeamGroupDTO toDtoTeamGroupId(TeamGroup teamGroup); -- -- @Named("title") -- @BeanMapping(ignoreByDefault = true) -- @Mapping(target = "id", source = "id") -- @Mapping(target = "title", source = "title") -- TeamGroupDTO toDtoTitle(TeamGroup teamGroup); -+ TeamGroupDTO toDtoTeamGroupTitle(TeamGroup teamGroup); - } -diff --git a/src/main/java/com/iteratec/teamdojo/service/mapper/TeamMapper.java b/src/main/java/com/iteratec/teamdojo/service/mapper/TeamMapper.java -index 5a69b603..f0965217 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/mapper/TeamMapper.java -+++ b/src/main/java/com/iteratec/teamdojo/service/mapper/TeamMapper.java -@@ -27,12 +27,6 @@ public interface TeamMapper extends EntityMapper { - @Mapping(target = "removeParticipations", ignore = true) - Team toEntity(TeamDTO teamDTO); - -- @Named("shortTitle") -- @BeanMapping(ignoreByDefault = true) -- @Mapping(target = "id", source = "id") -- @Mapping(target = "shortTitle", source = "shortTitle") -- TeamDTO toDtoShortTitle(Team team); -- - @Named("imageTitle") - @BeanMapping(ignoreByDefault = true) - @Mapping(target = "id", source = "id") -@@ -50,10 +44,10 @@ public interface TeamMapper extends EntityMapper { - return dimension.stream().map(this::toDtoDimensionTitleEN).collect(Collectors.toSet()); - } - -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @Named("teamGroupTitle") - @Mapping(target = "id", source = "id") - @Mapping(target = "title", source = "title") - TeamGroupDTO toDtoTeamGroupTitle(TeamGroup teamGroup); -- // ### MODIFICATION-END ### -+// ### MODIFICATION-END ### - } -diff --git a/src/main/java/com/iteratec/teamdojo/service/mapper/UserMapper.java b/src/main/java/com/iteratec/teamdojo/service/mapper/UserMapper.java -index 52961e0d..b1e0732c 100644 ---- a/src/main/java/com/iteratec/teamdojo/service/mapper/UserMapper.java -+++ b/src/main/java/com/iteratec/teamdojo/service/mapper/UserMapper.java -@@ -23,7 +23,7 @@ import org.springframework.stereotype.Service; - public class UserMapper { - - public List usersToUserDTOs(List users) { -- return users.stream().filter(Objects::nonNull).map(this::userToUserDTO).collect(Collectors.toList()); -+ return users.stream().filter(Objects::nonNull).map(this::userToUserDTO).toList(); - } - - public UserDTO userToUserDTO(User user) { -@@ -31,7 +31,7 @@ public class UserMapper { - } - - public List usersToAdminUserDTOs(List users) { -- return users.stream().filter(Objects::nonNull).map(this::userToAdminUserDTO).collect(Collectors.toList()); -+ return users.stream().filter(Objects::nonNull).map(this::userToAdminUserDTO).toList(); - } - - public AdminUserDTO userToAdminUserDTO(User user) { -@@ -39,7 +39,7 @@ public class UserMapper { - } - - public List userDTOsToUsers(List userDTOs) { -- return userDTOs.stream().filter(Objects::nonNull).map(this::userDTOToUser).collect(Collectors.toList()); -+ return userDTOs.stream().filter(Objects::nonNull).map(this::userDTOToUser).toList(); - } - - public User userDTOToUser(AdminUserDTO userDTO) { -diff --git a/src/main/java/com/iteratec/teamdojo/web/filter/OAuth2RefreshTokensWebFilter.java b/src/main/java/com/iteratec/teamdojo/web/filter/OAuth2RefreshTokensWebFilter.java -index 42e8501c..9418750d 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/filter/OAuth2RefreshTokensWebFilter.java -+++ b/src/main/java/com/iteratec/teamdojo/web/filter/OAuth2RefreshTokensWebFilter.java -@@ -1,11 +1,11 @@ - package com.iteratec.teamdojo.web.filter; - - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.servlet.FilterChain; -+import jakarta.servlet.ServletException; -+import jakarta.servlet.http.HttpServletRequest; -+import jakarta.servlet.http.HttpServletResponse; - import java.io.IOException; --import javax.servlet.FilterChain; --import javax.servlet.ServletException; --import javax.servlet.http.HttpServletRequest; --import javax.servlet.http.HttpServletResponse; - import org.springframework.security.core.Authentication; - import org.springframework.security.core.context.SecurityContextHolder; - import org.springframework.security.oauth2.client.OAuth2AuthorizeRequest; -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/AccountResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/AccountResource.java -index 12b1d5b6..2d957950 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/AccountResource.java -+++ b/src/main/java/com/iteratec/teamdojo/web/rest/AccountResource.java -@@ -3,8 +3,8 @@ package com.iteratec.teamdojo.web.rest; - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.service.UserService; - import com.iteratec.teamdojo.service.dto.AdminUserDTO; -+import jakarta.servlet.http.HttpServletRequest; - import java.security.Principal; --import javax.servlet.http.HttpServletRequest; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.security.authentication.AbstractAuthenticationToken; -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/BadgeSkillResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/BadgeSkillResource.java -index 6208f7fd..ade429b0 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/BadgeSkillResource.java -+++ b/src/main/java/com/iteratec/teamdojo/web/rest/BadgeSkillResource.java -@@ -7,13 +7,13 @@ import com.iteratec.teamdojo.service.BadgeSkillService; - import com.iteratec.teamdojo.service.criteria.BadgeSkillCriteria; - import com.iteratec.teamdojo.service.dto.BadgeSkillDTO; - import com.iteratec.teamdojo.web.rest.errors.BadRequestAlertException; -+import jakarta.validation.Valid; -+import jakarta.validation.constraints.NotNull; - import java.net.URI; - import java.net.URISyntaxException; - import java.util.List; - import java.util.Objects; - import java.util.Optional; --import javax.validation.Valid; --import javax.validation.constraints.NotNull; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.beans.factory.annotation.Value; -@@ -158,9 +158,10 @@ public class BadgeSkillResource { - @GetMapping("/badge-skills") - public ResponseEntity> getAllBadgeSkills( - BadgeSkillCriteria criteria, -- @org.springdoc.api.annotations.ParameterObject Pageable pageable -+ @org.springdoc.core.annotations.ParameterObject Pageable pageable - ) { - log.debug("REST request to get BadgeSkills by criteria: {}", criteria); -+ - Page page = badgeSkillQueryService.findByCriteria(criteria, pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page); - return ResponseEntity.ok().headers(headers).body(page.getContent()); -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/ClientForwardController.java b/src/main/java/com/iteratec/teamdojo/web/rest/ClientForwardController.java -deleted file mode 100644 -index 0cc24c1e..00000000 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/ClientForwardController.java -+++ /dev/null -@@ -1,19 +0,0 @@ --package com.iteratec.teamdojo.web.rest; -- --import com.iteratec.teamdojo.GeneratedByJHipster; --import org.springframework.stereotype.Controller; --import org.springframework.web.bind.annotation.GetMapping; -- --@Controller --@GeneratedByJHipster --public class ClientForwardController { -- -- /** -- * Forwards any unmapped paths (except those containing a period) to the client {@code index.html}. -- * @return forward to client {@code index.html}. -- */ -- @GetMapping(value = "/**/{path:[^\\.]*}") -- public String forward() { -- return "forward:/"; -- } --} -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/ImageResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/ImageResource.java -index 52c3df78..b0b19ff8 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/ImageResource.java -+++ b/src/main/java/com/iteratec/teamdojo/web/rest/ImageResource.java -@@ -7,13 +7,13 @@ import com.iteratec.teamdojo.service.ImageService; - import com.iteratec.teamdojo.service.criteria.ImageCriteria; - import com.iteratec.teamdojo.service.dto.ImageDTO; - import com.iteratec.teamdojo.web.rest.errors.BadRequestAlertException; -+import jakarta.validation.Valid; -+import jakarta.validation.constraints.NotNull; - import java.net.URI; - import java.net.URISyntaxException; - import java.util.List; - import java.util.Objects; - import java.util.Optional; --import javax.validation.Valid; --import javax.validation.constraints.NotNull; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.beans.factory.annotation.Value; -@@ -154,9 +154,10 @@ public class ImageResource { - @GetMapping("/images") - public ResponseEntity> getAllImages( - ImageCriteria criteria, -- @org.springdoc.api.annotations.ParameterObject Pageable pageable -+ @org.springdoc.core.annotations.ParameterObject Pageable pageable - ) { - log.debug("REST request to get Images by criteria: {}", criteria); -+ - Page page = imageQueryService.findByCriteria(criteria, pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page); - return ResponseEntity.ok().headers(headers).body(page.getContent()); -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/LevelSkillResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/LevelSkillResource.java -index 21833111..c5ab897c 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/LevelSkillResource.java -+++ b/src/main/java/com/iteratec/teamdojo/web/rest/LevelSkillResource.java -@@ -7,13 +7,13 @@ import com.iteratec.teamdojo.service.LevelSkillService; - import com.iteratec.teamdojo.service.criteria.LevelSkillCriteria; - import com.iteratec.teamdojo.service.dto.LevelSkillDTO; - import com.iteratec.teamdojo.web.rest.errors.BadRequestAlertException; -+import jakarta.validation.Valid; -+import jakarta.validation.constraints.NotNull; - import java.net.URI; - import java.net.URISyntaxException; - import java.util.List; - import java.util.Objects; - import java.util.Optional; --import javax.validation.Valid; --import javax.validation.constraints.NotNull; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.beans.factory.annotation.Value; -@@ -158,9 +158,10 @@ public class LevelSkillResource { - @GetMapping("/level-skills") - public ResponseEntity> getAllLevelSkills( - LevelSkillCriteria criteria, -- @org.springdoc.api.annotations.ParameterObject Pageable pageable -+ @org.springdoc.core.annotations.ParameterObject Pageable pageable - ) { - log.debug("REST request to get LevelSkills by criteria: {}", criteria); -+ - Page page = levelSkillQueryService.findByCriteria(criteria, pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page); - return ResponseEntity.ok().headers(headers).body(page.getContent()); -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/LogoutResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/LogoutResource.java -index 6ee9f5c9..85a5bd43 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/LogoutResource.java -+++ b/src/main/java/com/iteratec/teamdojo/web/rest/LogoutResource.java -@@ -1,8 +1,8 @@ - package com.iteratec.teamdojo.web.rest; - - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.servlet.http.HttpServletRequest; - import java.util.Map; --import javax.servlet.http.HttpServletRequest; - import org.springframework.http.HttpHeaders; - import org.springframework.http.ResponseEntity; - import org.springframework.security.core.annotation.AuthenticationPrincipal; -@@ -45,13 +45,9 @@ public class LogoutResource { - - String originUrl = request.getHeader(HttpHeaders.ORIGIN); - -- if (logoutUrl.indexOf("/protocol") > -1) { -- logoutUrl.append("?redirect_uri=").append(originUrl); -- } else if (logoutUrl.indexOf("auth0.com") > -1) { -- // Auth0 -+ if (issuerUri.contains("auth0.com")) { - logoutUrl.append("?client_id=").append(this.registration.getClientId()).append("&returnTo=").append(originUrl); - } else { -- // Okta - logoutUrl.append("?id_token_hint=").append(idToken.getTokenValue()).append("&post_logout_redirect_uri=").append(originUrl); - } - -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/PublicUserResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/PublicUserResource.java -index b66aaef4..febb964a 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/PublicUserResource.java -+++ b/src/main/java/com/iteratec/teamdojo/web/rest/PublicUserResource.java -@@ -35,7 +35,7 @@ public class PublicUserResource { - * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body all users. - */ - @GetMapping("/users") -- public ResponseEntity> getAllPublicUsers(@org.springdoc.api.annotations.ParameterObject Pageable pageable) { -+ public ResponseEntity> getAllPublicUsers(@org.springdoc.core.annotations.ParameterObject Pageable pageable) { - log.debug("REST request to get all public User names"); - - final Page page = userService.getAllPublicUsers(pageable); -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/ReportResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/ReportResource.java -index 4f819947..96582c1b 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/ReportResource.java -+++ b/src/main/java/com/iteratec/teamdojo/web/rest/ReportResource.java -@@ -7,13 +7,13 @@ import com.iteratec.teamdojo.service.ReportService; - import com.iteratec.teamdojo.service.criteria.ReportCriteria; - import com.iteratec.teamdojo.service.dto.ReportDTO; - import com.iteratec.teamdojo.web.rest.errors.BadRequestAlertException; -+import jakarta.validation.Valid; -+import jakarta.validation.constraints.NotNull; - import java.net.URI; - import java.net.URISyntaxException; - import java.util.List; - import java.util.Objects; - import java.util.Optional; --import javax.validation.Valid; --import javax.validation.constraints.NotNull; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.beans.factory.annotation.Value; -@@ -148,6 +148,7 @@ public class ReportResource { - @GetMapping("/reports") - public ResponseEntity> getAllReports(ReportCriteria criteria) { - log.debug("REST request to get Reports by criteria: {}", criteria); -+ - List entityList = reportQueryService.findByCriteria(criteria); - return ResponseEntity.ok().body(entityList); - } -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/TeamSkillResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/TeamSkillResource.java -index 934898ad..d61a2de4 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/TeamSkillResource.java -+++ b/src/main/java/com/iteratec/teamdojo/web/rest/TeamSkillResource.java -@@ -7,13 +7,13 @@ import com.iteratec.teamdojo.service.TeamSkillService; - import com.iteratec.teamdojo.service.criteria.TeamSkillCriteria; - import com.iteratec.teamdojo.service.dto.TeamSkillDTO; - import com.iteratec.teamdojo.web.rest.errors.BadRequestAlertException; -+import jakarta.validation.Valid; -+import jakarta.validation.constraints.NotNull; - import java.net.URI; - import java.net.URISyntaxException; - import java.util.List; - import java.util.Objects; - import java.util.Optional; --import javax.validation.Valid; --import javax.validation.constraints.NotNull; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.beans.factory.annotation.Value; -@@ -158,9 +158,10 @@ public class TeamSkillResource { - @GetMapping("/team-skills") - public ResponseEntity> getAllTeamSkills( - TeamSkillCriteria criteria, -- @org.springdoc.api.annotations.ParameterObject Pageable pageable -+ @org.springdoc.core.annotations.ParameterObject Pageable pageable - ) { - log.debug("REST request to get TeamSkills by criteria: {}", criteria); -+ - Page page = teamSkillQueryService.findByCriteria(criteria, pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page); - return ResponseEntity.ok().headers(headers).body(page.getContent()); -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/TrainingResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/TrainingResource.java -index 8a4bdba1..bbc55f41 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/TrainingResource.java -+++ b/src/main/java/com/iteratec/teamdojo/web/rest/TrainingResource.java -@@ -7,13 +7,13 @@ import com.iteratec.teamdojo.service.TrainingService; - import com.iteratec.teamdojo.service.criteria.TrainingCriteria; - import com.iteratec.teamdojo.service.dto.TrainingDTO; - import com.iteratec.teamdojo.web.rest.errors.BadRequestAlertException; -+import jakarta.validation.Valid; -+import jakarta.validation.constraints.NotNull; - import java.net.URI; - import java.net.URISyntaxException; - import java.util.List; - import java.util.Objects; - import java.util.Optional; --import javax.validation.Valid; --import javax.validation.constraints.NotNull; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import org.springframework.beans.factory.annotation.Value; -@@ -158,9 +158,10 @@ public class TrainingResource { - @GetMapping("/trainings") - public ResponseEntity> getAllTrainings( - TrainingCriteria criteria, -- @org.springdoc.api.annotations.ParameterObject Pageable pageable -+ @org.springdoc.core.annotations.ParameterObject Pageable pageable - ) { - log.debug("REST request to get Trainings by criteria: {}", criteria); -+ - Page page = trainingQueryService.findByCriteria(criteria, pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page); - return ResponseEntity.ok().headers(headers).body(page.getContent()); -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/errors/BadRequestAlertException.java b/src/main/java/com/iteratec/teamdojo/web/rest/errors/BadRequestAlertException.java -index eb75cd99..027bd68f 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/errors/BadRequestAlertException.java -+++ b/src/main/java/com/iteratec/teamdojo/web/rest/errors/BadRequestAlertException.java -@@ -2,13 +2,14 @@ package com.iteratec.teamdojo.web.rest.errors; - - import com.iteratec.teamdojo.GeneratedByJHipster; - import java.net.URI; --import java.util.HashMap; --import java.util.Map; --import org.zalando.problem.AbstractThrowableProblem; --import org.zalando.problem.Status; -+import org.springframework.http.HttpStatus; -+import org.springframework.web.ErrorResponseException; -+import tech.jhipster.web.rest.errors.ProblemDetailWithCause; -+import tech.jhipster.web.rest.errors.ProblemDetailWithCause.ProblemDetailWithCauseBuilder; - -+@SuppressWarnings("java:S110") // Inheritance tree of classes should not be too deep - @GeneratedByJHipster --public class BadRequestAlertException extends AbstractThrowableProblem { -+public class BadRequestAlertException extends ErrorResponseException { - - private static final long serialVersionUID = 1L; - -@@ -21,7 +22,18 @@ public class BadRequestAlertException extends AbstractThrowableProblem { - } - - public BadRequestAlertException(URI type, String defaultMessage, String entityName, String errorKey) { -- super(type, defaultMessage, Status.BAD_REQUEST, null, null, null, getAlertParameters(entityName, errorKey)); -+ super( -+ HttpStatus.BAD_REQUEST, -+ ProblemDetailWithCauseBuilder -+ .instance() -+ .withStatus(HttpStatus.BAD_REQUEST.value()) -+ .withType(type) -+ .withTitle(defaultMessage) -+ .withProperty("message", "error." + errorKey) -+ .withProperty("params", entityName) -+ .build(), -+ null -+ ); - this.entityName = entityName; - this.errorKey = errorKey; - } -@@ -34,10 +46,7 @@ public class BadRequestAlertException extends AbstractThrowableProblem { - return errorKey; - } - -- private static Map getAlertParameters(String entityName, String errorKey) { -- Map parameters = new HashMap<>(); -- parameters.put("message", "error." + errorKey); -- parameters.put("params", entityName); -- return parameters; -+ public ProblemDetailWithCause getProblemDetailWithCause() { -+ return (ProblemDetailWithCause) this.getBody(); - } - } -diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslator.java b/src/main/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslator.java -index 496657b3..0df1a24b 100644 ---- a/src/main/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslator.java -+++ b/src/main/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslator.java -@@ -1,36 +1,40 @@ - package com.iteratec.teamdojo.web.rest.errors; - -+import static org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotation; -+ - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.servlet.http.HttpServletRequest; - import java.net.URI; - import java.util.Arrays; - import java.util.Collection; - import java.util.List; -+import java.util.Map; - import java.util.Optional; --import java.util.stream.Collectors; --import javax.annotation.Nonnull; --import javax.annotation.Nullable; --import javax.servlet.http.HttpServletRequest; - import org.apache.commons.lang3.StringUtils; - import org.springframework.beans.factory.annotation.Value; - import org.springframework.core.env.Environment; - import org.springframework.dao.ConcurrencyFailureException; - import org.springframework.dao.DataAccessException; -+import org.springframework.http.HttpHeaders; -+import org.springframework.http.HttpStatus; -+import org.springframework.http.HttpStatusCode; - import org.springframework.http.ResponseEntity; - import org.springframework.http.converter.HttpMessageConversionException; --import org.springframework.validation.BindingResult; -+import org.springframework.lang.Nullable; -+import org.springframework.security.access.AccessDeniedException; -+import org.springframework.security.authentication.BadCredentialsException; -+import org.springframework.web.ErrorResponse; -+import org.springframework.web.ErrorResponseException; - import org.springframework.web.bind.MethodArgumentNotValidException; - import org.springframework.web.bind.annotation.ControllerAdvice; - import org.springframework.web.bind.annotation.ExceptionHandler; -+import org.springframework.web.bind.annotation.ResponseStatus; - import org.springframework.web.context.request.NativeWebRequest; --import org.zalando.problem.DefaultProblem; --import org.zalando.problem.Problem; --import org.zalando.problem.ProblemBuilder; --import org.zalando.problem.Status; --import org.zalando.problem.StatusType; --import org.zalando.problem.spring.web.advice.ProblemHandling; --import org.zalando.problem.spring.web.advice.security.SecurityAdviceTrait; --import org.zalando.problem.violations.ConstraintViolationProblem; -+import org.springframework.web.context.request.WebRequest; -+import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - import tech.jhipster.config.JHipsterConstants; -+import tech.jhipster.web.rest.errors.ProblemDetailWithCause; -+import tech.jhipster.web.rest.errors.ProblemDetailWithCause.ProblemDetailWithCauseBuilder; - import tech.jhipster.web.util.HeaderUtil; - - /** -@@ -39,12 +43,12 @@ import tech.jhipster.web.util.HeaderUtil; - */ - @ControllerAdvice - @GeneratedByJHipster --public class ExceptionTranslator implements ProblemHandling, SecurityAdviceTrait { -+public class ExceptionTranslator extends ResponseEntityExceptionHandler { - - private static final String FIELD_ERRORS_KEY = "fieldErrors"; - private static final String MESSAGE_KEY = "message"; - private static final String PATH_KEY = "path"; -- private static final String VIOLATIONS_KEY = "violations"; -+ private static final boolean CASUAL_CHAIN_ENABLED = false; - - @Value("${jhipster.clientApp.name}") - private String applicationName; -@@ -55,46 +59,78 @@ public class ExceptionTranslator implements ProblemHandling, SecurityAdviceTrait - this.env = env; - } - -- /** -- * Post-process the Problem payload to add the message key for the front-end if needed. -- */ -+ @ExceptionHandler -+ public ResponseEntity handleAnyException(Throwable ex, NativeWebRequest request) { -+ ProblemDetailWithCause pdCause = wrapAndCustomizeProblem(ex, request); -+ return handleExceptionInternal((Exception) ex, pdCause, buildHeaders(ex), HttpStatusCode.valueOf(pdCause.getStatus()), request); -+ } -+ -+ @Nullable - @Override -- public ResponseEntity process(@Nullable ResponseEntity entity, NativeWebRequest request) { -- if (entity == null) { -- return null; -- } -- Problem problem = entity.getBody(); -- if (!(problem instanceof ConstraintViolationProblem || problem instanceof DefaultProblem)) { -- return entity; -+ protected ResponseEntity handleExceptionInternal( -+ Exception ex, -+ @Nullable Object body, -+ HttpHeaders headers, -+ HttpStatusCode statusCode, -+ WebRequest request -+ ) { -+ body = body == null ? wrapAndCustomizeProblem((Throwable) ex, (NativeWebRequest) request) : body; -+ return super.handleExceptionInternal(ex, body, headers, statusCode, request); -+ } -+ -+ protected ProblemDetailWithCause wrapAndCustomizeProblem(Throwable ex, NativeWebRequest request) { -+ return customizeProblem(getProblemDetailWithCause(ex), ex, request); -+ } -+ -+ private ProblemDetailWithCause getProblemDetailWithCause(Throwable ex) { -+ if ( -+ ex instanceof ErrorResponseException exp && exp.getBody() instanceof ProblemDetailWithCause problemDetailWithCause -+ ) return problemDetailWithCause; -+ return ProblemDetailWithCauseBuilder.instance().withStatus(toStatus(ex).value()).build(); -+ } -+ -+ protected ProblemDetailWithCause customizeProblem(ProblemDetailWithCause problem, Throwable err, NativeWebRequest request) { -+ if (problem.getStatus() <= 0) problem.setStatus(toStatus(err)); -+ -+ if (problem.getType() == null || problem.getType().equals(URI.create("about:blank"))) problem.setType(getMappedType(err)); -+ -+ // higher precedence to Custom/ResponseStatus types -+ String title = extractTitle(err, problem.getStatus()); -+ String problemTitle = problem.getTitle(); -+ if (problemTitle == null || !problemTitle.equals(title)) { -+ problem.setTitle(title); - } - -- HttpServletRequest nativeRequest = request.getNativeRequest(HttpServletRequest.class); -- String requestUri = nativeRequest != null ? nativeRequest.getRequestURI() : StringUtils.EMPTY; -- ProblemBuilder builder = Problem -- .builder() -- .withType(Problem.DEFAULT_TYPE.equals(problem.getType()) ? ErrorConstants.DEFAULT_TYPE : problem.getType()) -- .withStatus(problem.getStatus()) -- .withTitle(problem.getTitle()) -- .with(PATH_KEY, requestUri); -- -- if (problem instanceof ConstraintViolationProblem) { -- builder -- .with(VIOLATIONS_KEY, ((ConstraintViolationProblem) problem).getViolations()) -- .with(MESSAGE_KEY, ErrorConstants.ERR_VALIDATION); -- } else { -- builder.withCause(((DefaultProblem) problem).getCause()).withDetail(problem.getDetail()).withInstance(problem.getInstance()); -- problem.getParameters().forEach(builder::with); -- if (!problem.getParameters().containsKey(MESSAGE_KEY) && problem.getStatus() != null) { -- builder.with(MESSAGE_KEY, "error.http." + problem.getStatus().getStatusCode()); -- } -+ if (problem.getDetail() == null) { -+ // higher precedence to cause -+ problem.setDetail(getCustomizedErrorDetails(err)); - } -- return new ResponseEntity<>(builder.build(), entity.getHeaders(), entity.getStatusCode()); -+ -+ Map problemProperties = problem.getProperties(); -+ if (problemProperties == null || !problemProperties.containsKey(MESSAGE_KEY)) problem.setProperty( -+ MESSAGE_KEY, -+ getMappedMessageKey(err) != null ? getMappedMessageKey(err) : "error.http." + problem.getStatus() -+ ); -+ -+ if (problemProperties == null || !problemProperties.containsKey(PATH_KEY)) problem.setProperty(PATH_KEY, getPathValue(request)); -+ -+ if ( -+ (err instanceof MethodArgumentNotValidException fieldException) && -+ (problemProperties == null || !problemProperties.containsKey(FIELD_ERRORS_KEY)) -+ ) problem.setProperty(FIELD_ERRORS_KEY, getFieldErrors(fieldException)); -+ -+ problem.setCause(buildCause(err.getCause(), request).orElse(null)); -+ -+ return problem; - } - -- @Override -- public ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, @Nonnull NativeWebRequest request) { -- BindingResult result = ex.getBindingResult(); -- List fieldErrors = result -+ private String extractTitle(Throwable err, int statusCode) { -+ return getCustomizedTitle(err) != null ? getCustomizedTitle(err) : extractTitleForResponseStatus(err, statusCode); -+ } -+ -+ private List getFieldErrors(MethodArgumentNotValidException ex) { -+ return ex -+ .getBindingResult() - .getFieldErrors() - .stream() - .map(f -> -@@ -104,87 +140,118 @@ public class ExceptionTranslator implements ProblemHandling, SecurityAdviceTrait - StringUtils.isNotBlank(f.getDefaultMessage()) ? f.getDefaultMessage() : f.getCode() - ) - ) -- .collect(Collectors.toList()); -+ .toList(); -+ } - -- Problem problem = Problem -- .builder() -- .withType(ErrorConstants.CONSTRAINT_VIOLATION_TYPE) -- .withTitle("Method argument not valid") -- .withStatus(defaultConstraintViolationStatus()) -- .with(MESSAGE_KEY, ErrorConstants.ERR_VALIDATION) -- .with(FIELD_ERRORS_KEY, fieldErrors) -- .build(); -- return create(ex, problem, request); -+ private String extractTitleForResponseStatus(Throwable err, int statusCode) { -+ ResponseStatus specialStatus = extractResponseStatus(err); -+ return specialStatus == null ? HttpStatus.valueOf(statusCode).getReasonPhrase() : specialStatus.reason(); - } - -- @ExceptionHandler -- public ResponseEntity handleBadRequestAlertException(BadRequestAlertException ex, NativeWebRequest request) { -- return create( -- ex, -- request, -- HeaderUtil.createFailureAlert(applicationName, true, ex.getEntityName(), ex.getErrorKey(), ex.getMessage()) -- ); -+ private String extractURI(NativeWebRequest request) { -+ HttpServletRequest nativeRequest = request.getNativeRequest(HttpServletRequest.class); -+ return nativeRequest != null ? nativeRequest.getRequestURI() : StringUtils.EMPTY; - } - -- @ExceptionHandler -- public ResponseEntity handleConcurrencyFailure(ConcurrencyFailureException ex, NativeWebRequest request) { -- Problem problem = Problem.builder().withStatus(Status.CONFLICT).with(MESSAGE_KEY, ErrorConstants.ERR_CONCURRENCY_FAILURE).build(); -- return create(ex, problem, request); -+ private HttpStatus toStatus(final Throwable throwable) { -+ // Let the ErrorResponse take this responsibility -+ if (throwable instanceof ErrorResponse err) return HttpStatus.valueOf(err.getBody().getStatus()); -+ -+ return Optional -+ .ofNullable(getMappedStatus(throwable)) -+ .orElse( -+ Optional.ofNullable(resolveResponseStatus(throwable)).map(ResponseStatus::value).orElse(HttpStatus.INTERNAL_SERVER_ERROR) -+ ); - } - -- @Override -- public ProblemBuilder prepare(final Throwable throwable, final StatusType status, final URI type) { -- Collection activeProfiles = Arrays.asList(env.getActiveProfiles()); -+ private ResponseStatus extractResponseStatus(final Throwable throwable) { -+ return Optional.ofNullable(resolveResponseStatus(throwable)).orElse(null); -+ } -+ -+ private ResponseStatus resolveResponseStatus(final Throwable type) { -+ final ResponseStatus candidate = findMergedAnnotation(type.getClass(), ResponseStatus.class); -+ return candidate == null && type.getCause() != null ? resolveResponseStatus(type.getCause()) : candidate; -+ } -+ -+ private URI getMappedType(Throwable err) { -+ if (err instanceof MethodArgumentNotValidException) return ErrorConstants.CONSTRAINT_VIOLATION_TYPE; -+ return ErrorConstants.DEFAULT_TYPE; -+ } -+ -+ private String getMappedMessageKey(Throwable err) { -+ if (err instanceof MethodArgumentNotValidException) { -+ return ErrorConstants.ERR_VALIDATION; -+ } else if (err instanceof ConcurrencyFailureException || err.getCause() instanceof ConcurrencyFailureException) { -+ return ErrorConstants.ERR_CONCURRENCY_FAILURE; -+ } -+ return null; -+ } -+ -+ private String getCustomizedTitle(Throwable err) { -+ if (err instanceof MethodArgumentNotValidException) return "Method argument not valid"; -+ return null; -+ } - -+ private String getCustomizedErrorDetails(Throwable err) { -+ Collection activeProfiles = Arrays.asList(env.getActiveProfiles()); - if (activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_PRODUCTION)) { -- if (throwable instanceof HttpMessageConversionException) { -- return Problem -- .builder() -- .withType(type) -- .withTitle(status.getReasonPhrase()) -- .withStatus(status) -- .withDetail("Unable to convert http message") -- .withCause( -- Optional.ofNullable(throwable.getCause()).filter(cause -> isCausalChainsEnabled()).map(this::toProblem).orElse(null) -- ); -- } -- if (throwable instanceof DataAccessException) { -- return Problem -- .builder() -- .withType(type) -- .withTitle(status.getReasonPhrase()) -- .withStatus(status) -- .withDetail("Failure during data access") -- .withCause( -- Optional.ofNullable(throwable.getCause()).filter(cause -> isCausalChainsEnabled()).map(this::toProblem).orElse(null) -- ); -- } -- if (containsPackageName(throwable.getMessage())) { -- return Problem -- .builder() -- .withType(type) -- .withTitle(status.getReasonPhrase()) -- .withStatus(status) -- .withDetail("Unexpected runtime exception") -- .withCause( -- Optional.ofNullable(throwable.getCause()).filter(cause -> isCausalChainsEnabled()).map(this::toProblem).orElse(null) -- ); -- } -+ if (err instanceof HttpMessageConversionException) return "Unable to convert http message"; -+ if (err instanceof DataAccessException) return "Failure during data access"; -+ if (containsPackageName(err.getMessage())) return "Unexpected runtime exception"; - } -+ return err.getCause() != null ? err.getCause().getMessage() : err.getMessage(); -+ } - -- return Problem -- .builder() -- .withType(type) -- .withTitle(status.getReasonPhrase()) -- .withStatus(status) -- .withDetail(throwable.getMessage()) -- .withCause( -- Optional.ofNullable(throwable.getCause()).filter(cause -> isCausalChainsEnabled()).map(this::toProblem).orElse(null) -- ); -+ private HttpStatus getMappedStatus(Throwable err) { -+ // Where we disagree with Spring defaults -+ if (err instanceof AccessDeniedException) return HttpStatus.FORBIDDEN; -+ if (err instanceof ConcurrencyFailureException) return HttpStatus.CONFLICT; -+ if (err instanceof BadCredentialsException) return HttpStatus.UNAUTHORIZED; -+ return null; -+ } -+ -+ private URI getPathValue(NativeWebRequest request) { -+ if (request == null) return URI.create("about:blank"); -+ return URI.create(extractURI(request)); -+ } -+ -+ private HttpHeaders buildHeaders(Throwable err) { -+ return err instanceof BadRequestAlertException badRequestAlertException -+ ? HeaderUtil.createFailureAlert( -+ applicationName, -+ true, -+ badRequestAlertException.getEntityName(), -+ badRequestAlertException.getErrorKey(), -+ badRequestAlertException.getMessage() -+ ) -+ : null; -+ } -+ -+ public Optional buildCause(final Throwable throwable, NativeWebRequest request) { -+ if (throwable != null && isCasualChainEnabled()) { -+ return Optional.of(customizeProblem(getProblemDetailWithCause(throwable), throwable, request)); -+ } -+ return Optional.ofNullable(null); -+ } -+ -+ private boolean isCasualChainEnabled() { -+ // Customize as per the needs -+ return CASUAL_CHAIN_ENABLED; - } - - private boolean containsPackageName(String message) { - // This list is for sure not complete -- return StringUtils.containsAny(message, "org.", "java.", "net.", "javax.", "com.", "io.", "de.", "com.iteratec.teamdojo"); -+ return StringUtils.containsAny( -+ message, -+ "org.", -+ "java.", -+ "net.", -+ "jakarta.", -+ "javax.", -+ "com.", -+ "io.", -+ "de.", -+ "com.iteratec.teamdojo" -+ ); - } - } -diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt -index 66842567..5be7dbe6 100644 ---- a/src/main/resources/banner.txt -+++ b/src/main/resources/banner.txt -@@ -1,15 +1,10 @@ --${AnsiColor.WHITE}█████████████████████████████████████████████████████████████████████████████████████████████████████ - -- ${AnsiColor.GREEN} _____ ${AnsiColor.RED} ____ _ -- ${AnsiColor.GREEN} |_ _| ___ __ _ _ __ ___ ${AnsiColor.RED}| _ \ ___ (_) ___ -- ${AnsiColor.GREEN} | | / _ \ / _` | | '_ ` _ \ ${AnsiColor.RED}| | | | / _ \ | | / _ \ -- ${AnsiColor.GREEN} | | | __/ | (_| | | | | | | | ${AnsiColor.RED}| |_| | | (_) | | | | (_) | -- ${AnsiColor.GREEN} |_| \___| \__,_| |_| |_| |_| ${AnsiColor.RED}|____/ \___/ _/ | \___/ -- ${AnsiColor.GREEN} ${AnsiColor.RED} |__/ -+ ${AnsiColor.GREEN} ██╗${AnsiColor.RED} ██╗ ██╗ ████████╗ ███████╗ ██████╗ ████████╗ ████████╗ ███████╗ -+ ${AnsiColor.GREEN} ██║${AnsiColor.RED} ██║ ██║ ╚══██╔══╝ ██╔═══██╗ ██╔════╝ ╚══██╔══╝ ██╔═════╝ ██╔═══██╗ -+ ${AnsiColor.GREEN} ██║${AnsiColor.RED} ████████║ ██║ ███████╔╝ ╚█████╗ ██║ ██████╗ ███████╔╝ -+ ${AnsiColor.GREEN}██╗ ██║${AnsiColor.RED} ██╔═══██║ ██║ ██╔════╝ ╚═══██╗ ██║ ██╔═══╝ ██╔══██║ -+ ${AnsiColor.GREEN}╚██████╔╝${AnsiColor.RED} ██║ ██║ ████████╗ ██║ ██████╔╝ ██║ ████████╗ ██║ ╚██╗ -+ ${AnsiColor.GREEN} ╚═════╝ ${AnsiColor.RED} ╚═╝ ╚═╝ ╚═══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══════╝ ╚═╝ ╚═╝ - --${AnsiColor.BLUE}::Release Version: 2.1.0-alpha1 --${AnsiColor.BLUE} Powered by Spring Boot ${spring-boot.version} and JHipster v7.8.1 -- --${AnsiColor.BLUE}TeamDojo is an open source project provided by iteratec GmbH. Made with ❤️ -- --${AnsiColor.WHITE}█████████████████████████████████████████████████████████████████████████████████████████████████████ -+${AnsiColor.BRIGHT_BLUE}:: JHipster 🤓 :: Running Spring Boot ${spring-boot.version} :: Startup profile(s) ${spring.profiles.active} :: -+:: https://www.jhipster.tech ::${AnsiColor.DEFAULT} -diff --git a/src/main/resources/config/application-prod.yml b/src/main/resources/config/application-prod.yml -index a9856800..3367a976 100644 ---- a/src/main/resources/config/application-prod.yml -+++ b/src/main/resources/config/application-prod.yml -@@ -20,9 +20,9 @@ logging: - com.iteratec.teamdojo: INFO - - management: -- metrics: -- export: -- prometheus: -+ prometheus: -+ metrics: -+ export: - enabled: false - - spring: -@@ -39,11 +39,9 @@ spring: - hikari: - poolName: Hikari - auto-commit: false -- jpa: -- database-platform: tech.jhipster.domain.util.FixedPostgreSQL10Dialect - # Replace by 'prod, faker' to add the faker context and have sample data loaded in production - liquibase: -- contexts: prod,demo -+ contexts: prod - thymeleaf: - cache: true - -@@ -52,7 +50,7 @@ spring: - # keytool -genkey -alias teamdojo -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650 - # - # You can also use Let's Encrypt: --# https://maximilian-boehm.com/hp2121/Create-a-Java-Keystore-JKS-from-Let-s-Encrypt-Certificates.htm -+# See details in topic "Create a Java Keystore (.JKS) from Let's Encrypt Certificates" on https://maximilian-boehm.com/en-gb/blog - # - # Then, modify the server.ssl properties so your "server" configuration looks like: - # -@@ -94,7 +92,7 @@ jhipster: - enabled: false - host: localhost - port: 5000 -- queue-size: 512 -+ ring-buffer-size: 512 - # =================================================================== - # Application specific properties - # Add your own application properties here, see the ApplicationProperties class -diff --git a/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml b/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml -index 5601408b..62b362d8 100644 ---- a/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml -+++ b/src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml -@@ -3,7 +3,7 @@ - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd -+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd - http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> - - -@@ -69,16 +69,6 @@ - referencedColumnNames="id" - referencedTableName="jhi_user"/> - -- -- -- -- -- -- - - - -- -- -- -+ - - - -diff --git a/src/main/resources/config/liquibase/changelog/20210510110903_added_entity_Activity.xml b/src/main/resources/config/liquibase/changelog/20210510110903_added_entity_Activity.xml -index 7a109eba..0ec636e7 100644 ---- a/src/main/resources/config/liquibase/changelog/20210510110903_added_entity_Activity.xml -+++ b/src/main/resources/config/liquibase/changelog/20210510110903_added_entity_Activity.xml -@@ -3,7 +3,7 @@ - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd -+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd - http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> - - -@@ -12,18 +12,21 @@ - baseTableName="badge" - constraintName="fk_badge__image_id" - referencedColumnNames="id" -- referencedTableName="image"/> -+ referencedTableName="image" -+ /> - - -+ referencedTableName="badge" -+ /> - - -+ referencedTableName="dimension" -+ /> - - -diff --git a/src/main/resources/config/liquibase/changelog/20210510110905_added_entity_BadgeSkill.xml b/src/main/resources/config/liquibase/changelog/20210510110905_added_entity_BadgeSkill.xml -index 02c20bad..78f3d258 100644 ---- a/src/main/resources/config/liquibase/changelog/20210510110905_added_entity_BadgeSkill.xml -+++ b/src/main/resources/config/liquibase/changelog/20210510110905_added_entity_BadgeSkill.xml -@@ -3,7 +3,7 @@ - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd -+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd - http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> - - -@@ -12,12 +12,14 @@ - baseTableName="badge_skill" - constraintName="fk_badge_skill__badge_id" - referencedColumnNames="id" -- referencedTableName="badge"/> -+ referencedTableName="badge" -+ /> - - -+ referencedTableName="skill" -+ /> - - -diff --git a/src/main/resources/config/liquibase/changelog/20210510110906_added_entity_Comment.xml b/src/main/resources/config/liquibase/changelog/20210510110906_added_entity_Comment.xml -index 85be9ccb..58134a5f 100644 ---- a/src/main/resources/config/liquibase/changelog/20210510110906_added_entity_Comment.xml -+++ b/src/main/resources/config/liquibase/changelog/20210510110906_added_entity_Comment.xml -@@ -3,7 +3,7 @@ - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd -+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd - http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> - - -@@ -12,12 +12,14 @@ - baseTableName="comment" - constraintName="fk_comment__team_id" - referencedColumnNames="id" -- referencedTableName="team"/> -+ referencedTableName="team" -+ /> - - -+ referencedTableName="skill" -+ /> - - -diff --git a/src/main/resources/config/liquibase/changelog/20210510110907_added_entity_Dimension.xml b/src/main/resources/config/liquibase/changelog/20210510110907_added_entity_Dimension.xml -index 313659fa..292ba2a6 100644 ---- a/src/main/resources/config/liquibase/changelog/20210510110907_added_entity_Dimension.xml -+++ b/src/main/resources/config/liquibase/changelog/20210510110907_added_entity_Dimension.xml -@@ -3,7 +3,7 @@ - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd -+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd - http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> - - -@@ -12,18 +12,21 @@ - baseTableName="level" - constraintName="fk_level__depends_on_id" - referencedColumnNames="id" -- referencedTableName="level"/> -+ referencedTableName="level" -+ /> - - -+ referencedTableName="image" -+ /> - - -+ referencedTableName="dimension" -+ /> - - -diff --git a/src/main/resources/config/liquibase/changelog/20210510110910_added_entity_LevelSkill.xml b/src/main/resources/config/liquibase/changelog/20210510110910_added_entity_LevelSkill.xml -index 04a536ac..315792f3 100644 ---- a/src/main/resources/config/liquibase/changelog/20210510110910_added_entity_LevelSkill.xml -+++ b/src/main/resources/config/liquibase/changelog/20210510110910_added_entity_LevelSkill.xml -@@ -3,7 +3,7 @@ - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd -+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd - http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> - - -@@ -12,12 +12,14 @@ - baseTableName="level_skill" - constraintName="fk_level_skill__skill_id" - referencedColumnNames="id" -- referencedTableName="skill"/> -+ referencedTableName="skill" -+ /> - - -+ referencedTableName="level" -+ /> - - -diff --git a/src/main/resources/config/liquibase/changelog/20210510110912_added_entity_Report.xml b/src/main/resources/config/liquibase/changelog/20210510110912_added_entity_Report.xml -index 65cef7fa..25fd1188 100644 ---- a/src/main/resources/config/liquibase/changelog/20210510110912_added_entity_Report.xml -+++ b/src/main/resources/config/liquibase/changelog/20210510110912_added_entity_Report.xml -@@ -3,7 +3,7 @@ - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd -+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd - http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> - - -@@ -12,24 +12,28 @@ - baseTableName="team" - constraintName="fk_team__image_id" - referencedColumnNames="id" -- referencedTableName="image"/> -+ referencedTableName="image" -+ /> - - -+ referencedTableName="team" -+ /> - - -+ referencedTableName="dimension" -+ /> - - -+ referencedTableName="team_group" -+ /> - - -diff --git a/src/main/resources/config/liquibase/changelog/20210510110915_added_entity_TeamSkill.xml b/src/main/resources/config/liquibase/changelog/20210510110915_added_entity_TeamSkill.xml -index 18d921f1..a9e576d8 100644 ---- a/src/main/resources/config/liquibase/changelog/20210510110915_added_entity_TeamSkill.xml -+++ b/src/main/resources/config/liquibase/changelog/20210510110915_added_entity_TeamSkill.xml -@@ -3,7 +3,7 @@ - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd -+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd - http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> - - -@@ -12,12 +12,14 @@ - baseTableName="team_skill" - constraintName="fk_team_skill__skill_id" - referencedColumnNames="id" -- referencedTableName="skill"/> -+ referencedTableName="skill" -+ /> - - -+ referencedTableName="team" -+ /> - - -diff --git a/src/main/resources/config/liquibase/changelog/20210510110916_added_entity_Training.xml b/src/main/resources/config/liquibase/changelog/20210510110916_added_entity_Training.xml -index 037338c2..43c6f6bb 100644 ---- a/src/main/resources/config/liquibase/changelog/20210510110916_added_entity_Training.xml -+++ b/src/main/resources/config/liquibase/changelog/20210510110916_added_entity_Training.xml -@@ -3,7 +3,7 @@ - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd -+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd - http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> - - -@@ -12,12 +12,14 @@ - baseTableName="rel_training__skill" - constraintName="fk_rel_training__skill__training_id" - referencedColumnNames="id" -- referencedTableName="training"/> -+ referencedTableName="training" -+ /> - - -+ referencedTableName="skill" -+ /> - - -diff --git a/src/main/resources/config/liquibase/changelog/20210618214951_added_entity_PersistentAuditEvent.xml b/src/main/resources/config/liquibase/changelog/20210618214951_added_entity_PersistentAuditEvent.xml -index 4bc4e4c2..4879a426 100644 ---- a/src/main/resources/config/liquibase/changelog/20210618214951_added_entity_PersistentAuditEvent.xml -+++ b/src/main/resources/config/liquibase/changelog/20210618214951_added_entity_PersistentAuditEvent.xml -@@ -3,7 +3,7 @@ - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd -+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd - http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> - - -@@ -12,6 +12,7 @@ - baseTableName="persistent_audit_event_data" - constraintName="fk_persistent_audit_event_data__event_id" - referencedColumnNames="id" -- referencedTableName="persistent_audit_event"/> -+ referencedTableName="persistent_audit_event" -+ /> - - -diff --git a/src/main/resources/config/liquibase/changelog/20220407162042_added_entity_TeamGroup.xml b/src/main/resources/config/liquibase/changelog/20220407162042_added_entity_TeamGroup.xml -index 32ce3141..d91fad66 100644 ---- a/src/main/resources/config/liquibase/changelog/20220407162042_added_entity_TeamGroup.xml -+++ b/src/main/resources/config/liquibase/changelog/20220407162042_added_entity_TeamGroup.xml -@@ -3,7 +3,7 @@ - xmlns="http://www.liquibase.org/xml/ns/dbchangelog" - xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd -+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd - http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> - - -@@ -12,6 +12,7 @@ - baseTableName="team_group" - constraintName="fk_team_group__parent_id" - referencedColumnNames="id" -- referencedTableName="team_group"/> -+ referencedTableName="team_group" -+ /> - - -diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml -index e421f9a7..62bbbf51 100644 ---- a/src/main/resources/logback-spring.xml -+++ b/src/main/resources/logback-spring.xml -@@ -2,20 +2,20 @@ - - - -- -+ -+ -+ -+ -+ - -- -- -+ -+ --> - -- -- -- -- -- -+ -+ -+ -+ -+ -+ - - - -@@ -48,22 +49,25 @@ - - - -+ - - - - - -- -- - - - - - -+ -+ - - -- -- -+ -+ -+ -+ - - - true -diff --git a/src/main/resources/swagger/api.yml b/src/main/resources/swagger/api.yml -index 9d3a6db3..297fd539 100644 ---- a/src/main/resources/swagger/api.yml -+++ b/src/main/resources/swagger/api.yml -@@ -15,9 +15,47 @@ components: - Problem: - description: error occurred - see status code and problem object for more information. - content: -- 'application/problem+json': -+ application/problem+json: - schema: -- $ref: 'https://opensource.zalando.com/problem/schema.yaml#/Problem' -+ type: object -+ properties: -+ type: -+ type: string -+ format: uri -+ description: | -+ An absolute URI that identifies the problem type. When dereferenced, -+ it SHOULD provide human-readable documentation for the problem type -+ (e.g., using HTML). -+ default: 'about:blank' -+ example: 'https://www.jhipster.tech/problem/constraint-violation' -+ title: -+ type: string -+ description: | -+ A short, summary of the problem type. Written in english and readable -+ for engineers (usually not suited for non technical stakeholders and -+ not localized); example: Service Unavailable -+ status: -+ type: integer -+ format: int32 -+ description: | -+ The HTTP status code generated by the origin server for this occurrence -+ of the problem. -+ minimum: 100 -+ maximum: 600 -+ exclusiveMaximum: true -+ example: 503 -+ detail: -+ type: string -+ description: | -+ A human readable explanation specific to this occurrence of the -+ problem. -+ example: Connection to database timed out -+ instance: -+ type: string -+ format: uri -+ description: | -+ An absolute URI that identifies the specific occurrence of the problem. -+ It may or may not yield further information if dereferenced. - - securitySchemes: - oauth: -@@ -25,8 +63,8 @@ components: - description: OAuth2 authentication with KeyCloak - flows: - authorizationCode: -- authorizationUrl: http://localhost:9080/auth/realms/jhipster/protocol/openid-connect/auth -- tokenUrl: http://localhost:9080/auth/realms/jhipster/protocol/openid-connect/token -+ authorizationUrl: http://localhost:9080/realms/jhipster/protocol/openid-connect/auth -+ tokenUrl: http://localhost:9080/realms/jhipster/protocol/openid-connect/token - scopes: - jhipster: Jhipster specific claims - email: Email claims -@@ -34,7 +72,7 @@ components: - openId: - type: openIdConnect - description: OpenID Connect authentication with KeyCloak -- openIdConnectUrl: http://localhost:9080/auth/realms/jhipster/.well-known/openid-configuration -+ openIdConnectUrl: http://localhost:9080/realms/jhipster/.well-known/openid-configuration - security: - - oauth: [jhipster, email, profile] - - openId: [jhipster, email, profile] -diff --git a/src/main/resources/templates/error.html b/src/main/resources/templates/error.html -index 690e8560..31ee9d7d 100644 ---- a/src/main/resources/templates/error.html -+++ b/src/main/resources/templates/error.html -@@ -1,4 +1,4 @@ -- -+ - -+ - - - -diff --git a/src/main/webapp/app/admin/admin-routing.module.ts b/src/main/webapp/app/admin/admin-routing.module.ts -index 40a775d2..dc8eaa68 100644 ---- a/src/main/webapp/app/admin/admin-routing.module.ts -+++ b/src/main/webapp/app/admin/admin-routing.module.ts -@@ -8,26 +8,31 @@ import { RouterModule } from '@angular/router'; - RouterModule.forChild([ - { - path: 'docs', -- loadChildren: () => import('./docs/docs.module').then(m => m.DocsModule), -+ loadComponent: () => import('./docs/docs.component'), -+ title: 'global.menu.admin.apidocs', - }, - { - path: 'configuration', -- loadChildren: () => import('./configuration/configuration.module').then(m => m.ConfigurationModule), -+ loadComponent: () => import('./configuration/configuration.component'), -+ title: 'configuration.title', - }, - { - path: 'health', -- loadChildren: () => import('./health/health.module').then(m => m.HealthModule), -+ loadComponent: () => import('./health/health.component'), -+ title: 'health.title', - }, - { - path: 'logs', -- loadChildren: () => import('./logs/logs.module').then(m => m.LogsModule), -+ loadComponent: () => import('./logs/logs.component'), -+ title: 'logs.title', - }, - { - path: 'metrics', -- loadChildren: () => import('./metrics/metrics.module').then(m => m.MetricsModule), -+ loadComponent: () => import('./metrics/metrics.component'), -+ title: 'metrics.title', - }, - /* jhipster-needle-add-admin-route - JHipster will add admin routes here */ - ]), - ], - }) --export class AdminRoutingModule {} -+export default class AdminRoutingModule {} -diff --git a/src/main/webapp/app/admin/configuration/configuration.component.spec.ts b/src/main/webapp/app/admin/configuration/configuration.component.spec.ts -index 12df2b28..cebc2793 100644 ---- a/src/main/webapp/app/admin/configuration/configuration.component.spec.ts -+++ b/src/main/webapp/app/admin/configuration/configuration.component.spec.ts -@@ -2,7 +2,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; - import { of } from 'rxjs'; - --import { ConfigurationComponent } from './configuration.component'; -+import ConfigurationComponent from './configuration.component'; - import { ConfigurationService } from './configuration.service'; - import { Bean, PropertySource } from './configuration.model'; - -@@ -13,8 +13,7 @@ describe('ConfigurationComponent', () => { - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [ConfigurationComponent], -+ imports: [HttpClientTestingModule, ConfigurationComponent], - providers: [ConfigurationService], - }) - .overrideTemplate(ConfigurationComponent, '') -diff --git a/src/main/webapp/app/admin/configuration/configuration.component.ts b/src/main/webapp/app/admin/configuration/configuration.component.ts -index 939d1aec..ee97f6bc 100644 ---- a/src/main/webapp/app/admin/configuration/configuration.component.ts -+++ b/src/main/webapp/app/admin/configuration/configuration.component.ts -@@ -1,13 +1,18 @@ - import { Component, OnInit } from '@angular/core'; - -+import SharedModule from 'app/shared/shared.module'; -+import { FormsModule } from '@angular/forms'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; - import { ConfigurationService } from './configuration.service'; - import { Bean, PropertySource } from './configuration.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-configuration', - templateUrl: './configuration.component.html', -+ imports: [SharedModule, FormsModule, SortDirective, SortByDirective], - }) --export class ConfigurationComponent implements OnInit { -+export default class ConfigurationComponent implements OnInit { - allBeans!: Bean[]; - beans: Bean[] = []; - beansFilter = ''; -diff --git a/src/main/webapp/app/admin/configuration/configuration.module.ts b/src/main/webapp/app/admin/configuration/configuration.module.ts -deleted file mode 100644 -index 43ade13c..00000000 ---- a/src/main/webapp/app/admin/configuration/configuration.module.ts -+++ /dev/null -@@ -1,12 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule } from '@angular/router'; --import { SharedModule } from 'app/shared/shared.module'; -- --import { ConfigurationComponent } from './configuration.component'; --import { configurationRoute } from './configuration.route'; -- --@NgModule({ -- imports: [SharedModule, RouterModule.forChild([configurationRoute])], -- declarations: [ConfigurationComponent], --}) --export class ConfigurationModule {} -diff --git a/src/main/webapp/app/admin/configuration/configuration.route.ts b/src/main/webapp/app/admin/configuration/configuration.route.ts -deleted file mode 100644 -index 119e4335..00000000 ---- a/src/main/webapp/app/admin/configuration/configuration.route.ts -+++ /dev/null -@@ -1,11 +0,0 @@ --import { Route } from '@angular/router'; -- --import { ConfigurationComponent } from './configuration.component'; -- --export const configurationRoute: Route = { -- path: '', -- component: ConfigurationComponent, -- data: { -- pageTitle: 'configuration.title', -- }, --}; -diff --git a/src/main/webapp/app/admin/configuration/configuration.service.ts b/src/main/webapp/app/admin/configuration/configuration.service.ts -index d8d30518..f03a0cce 100644 ---- a/src/main/webapp/app/admin/configuration/configuration.service.ts -+++ b/src/main/webapp/app/admin/configuration/configuration.service.ts -@@ -8,7 +8,10 @@ import { Bean, Beans, ConfigProps, Env, PropertySource } from './configuration.m - - @Injectable({ providedIn: 'root' }) - export class ConfigurationService { -- constructor(private http: HttpClient, private applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ private http: HttpClient, -+ private applicationConfigService: ApplicationConfigService, -+ ) {} - - getBeans(): Observable { - return this.http.get(this.applicationConfigService.getEndpointFor('management/configprops')).pipe( -@@ -16,9 +19,9 @@ export class ConfigurationService { - Object.values( - Object.values(configProps.contexts) - .map(context => context.beans) -- .reduce((allBeans: Beans, contextBeans: Beans) => ({ ...allBeans, ...contextBeans })) -- ) -- ) -+ .reduce((allBeans: Beans, contextBeans: Beans) => ({ ...allBeans, ...contextBeans })), -+ ), -+ ), - ); - } - -diff --git a/src/main/webapp/app/admin/docs/docs.component.scss b/src/main/webapp/app/admin/docs/docs.component.scss -index 541c3d79..bb9a6cc8 100644 ---- a/src/main/webapp/app/admin/docs/docs.component.scss -+++ b/src/main/webapp/app/admin/docs/docs.component.scss -@@ -1,5 +1,5 @@ --@import '~bootstrap/scss/functions'; --@import '~bootstrap/scss/variables'; -+@import 'bootstrap/scss/functions'; -+@import 'bootstrap/scss/variables'; - - iframe { - background: white; -diff --git a/src/main/webapp/app/admin/docs/docs.component.ts b/src/main/webapp/app/admin/docs/docs.component.ts -index 53b4b14c..ea418835 100644 ---- a/src/main/webapp/app/admin/docs/docs.component.ts -+++ b/src/main/webapp/app/admin/docs/docs.component.ts -@@ -1,8 +1,9 @@ - import { Component } from '@angular/core'; - - @Component({ -+ standalone: true, - selector: 'jhi-docs', - templateUrl: './docs.component.html', - styleUrls: ['./docs.component.scss'], - }) --export class DocsComponent {} -+export default class DocsComponent {} -diff --git a/src/main/webapp/app/admin/docs/docs.module.ts b/src/main/webapp/app/admin/docs/docs.module.ts -deleted file mode 100644 -index 7b9bbb66..00000000 ---- a/src/main/webapp/app/admin/docs/docs.module.ts -+++ /dev/null -@@ -1,12 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule } from '@angular/router'; --import { SharedModule } from 'app/shared/shared.module'; -- --import { DocsComponent } from './docs.component'; --import { docsRoute } from './docs.route'; -- --@NgModule({ -- imports: [SharedModule, RouterModule.forChild([docsRoute])], -- declarations: [DocsComponent], --}) --export class DocsModule {} -diff --git a/src/main/webapp/app/admin/docs/docs.route.ts b/src/main/webapp/app/admin/docs/docs.route.ts -deleted file mode 100644 -index e51770df..00000000 ---- a/src/main/webapp/app/admin/docs/docs.route.ts -+++ /dev/null -@@ -1,11 +0,0 @@ --import { Route } from '@angular/router'; -- --import { DocsComponent } from './docs.component'; -- --export const docsRoute: Route = { -- path: '', -- component: DocsComponent, -- data: { -- pageTitle: 'global.menu.admin.apidocs', -- }, --}; -diff --git a/src/main/webapp/app/admin/health/health.component.html b/src/main/webapp/app/admin/health/health.component.html -index 5c8f7168..08e62ac3 100644 ---- a/src/main/webapp/app/admin/health/health.component.html -+++ b/src/main/webapp/app/admin/health/health.component.html -@@ -11,7 +11,7 @@ - - - -- -+ - - - -@@ -27,7 +27,9 @@ - [ngClass]="getBadgeClass(componentHealth.value!.status)" - jhiTranslate="{{ 'health.status.' + componentHealth.value!.status }}" - > -- {{ componentHealth.value!.status }} -+ {{ -+ { UNKNOWN: 'UNKNOWN', UP: 'UP', OUT_OF_SERVICE: 'OUT_OF_SERVICE', DOWN: 'DOWN' }[componentHealth.value!.status || 'UNKNOWN'] -+ }} - - - - - - - - -- -+ - - - -diff --git a/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.ts b/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.ts -index f6dd2816..72c05cc7 100644 ---- a/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.ts -+++ b/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.ts -@@ -1,12 +1,15 @@ - import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; - import { Thread, ThreadState } from 'app/admin/metrics/metrics.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-thread-modal', - templateUrl: './metrics-modal-threads.component.html', - changeDetection: ChangeDetectionStrategy.OnPush, -+ imports: [SharedModule], - }) - export class MetricsModalThreadsComponent implements OnInit { - ThreadState = ThreadState; -diff --git a/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.ts b/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.ts -index 6a7cbc7d..d19bb059 100644 ---- a/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.ts -+++ b/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.ts -@@ -1,12 +1,15 @@ - import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; - -+import SharedModule from 'app/shared/shared.module'; - import { HttpServerRequests } from 'app/admin/metrics/metrics.model'; - import { filterNaN } from 'app/core/util/operators'; - - @Component({ -+ standalone: true, - selector: 'jhi-metrics-request', - templateUrl: './metrics-request.component.html', - changeDetection: ChangeDetectionStrategy.OnPush, -+ imports: [SharedModule], - }) - export class MetricsRequestComponent { - /** -diff --git a/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.ts b/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.ts -index f078ada4..14329897 100644 ---- a/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.ts -+++ b/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.ts -@@ -1,11 +1,14 @@ - import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; - -+import SharedModule from 'app/shared/shared.module'; - import { ProcessMetrics } from 'app/admin/metrics/metrics.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-metrics-system', - templateUrl: './metrics-system.component.html', - changeDetection: ChangeDetectionStrategy.OnPush, -+ imports: [SharedModule], - }) - export class MetricsSystemComponent { - /** -diff --git a/src/main/webapp/app/admin/metrics/metrics.component.spec.ts b/src/main/webapp/app/admin/metrics/metrics.component.spec.ts -index 4bd32586..8160dfae 100644 ---- a/src/main/webapp/app/admin/metrics/metrics.component.spec.ts -+++ b/src/main/webapp/app/admin/metrics/metrics.component.spec.ts -@@ -1,20 +1,21 @@ -+import { ChangeDetectorRef } from '@angular/core'; - import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; - import { of } from 'rxjs'; - --import { MetricsComponent } from './metrics.component'; -+import MetricsComponent from './metrics.component'; - import { MetricsService } from './metrics.service'; --import { Metrics } from './metrics.model'; -+import { Metrics, Thread, ThreadDump } from './metrics.model'; - - describe('MetricsComponent', () => { - let comp: MetricsComponent; - let fixture: ComponentFixture; - let service: MetricsService; -+ let changeDetector: ChangeDetectorRef; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [MetricsComponent], -+ imports: [HttpClientTestingModule, MetricsComponent], - }) - .overrideTemplate(MetricsComponent, '') - .compileComponents(); -@@ -24,18 +25,122 @@ describe('MetricsComponent', () => { - fixture = TestBed.createComponent(MetricsComponent); - comp = fixture.componentInstance; - service = TestBed.inject(MetricsService); -+ changeDetector = fixture.debugElement.injector.get(ChangeDetectorRef); - }); - - describe('refresh', () => { - it('should call refresh on init', () => { - // GIVEN -- jest.spyOn(service, 'getMetrics').mockReturnValue(of({} as Metrics)); -+ const metrics = { -+ garbageCollector: { -+ 'PS Scavenge': { -+ collectionCount: 0, -+ collectionTime: 0, -+ }, -+ 'PS MarkSweep': { -+ collectionCount: 0, -+ collectionTime: 0, -+ }, -+ }, -+ } as unknown as Metrics; -+ const threadDump = { threads: [{ threadName: 'thread 1' } as Thread] } as ThreadDump; -+ -+ jest.spyOn(service, 'getMetrics').mockReturnValue(of(metrics)); -+ jest.spyOn(service, 'threadDump').mockReturnValue(of(threadDump)); -+ jest.spyOn(changeDetector.constructor.prototype, 'markForCheck'); - - // WHEN - comp.ngOnInit(); - - // THEN - expect(service.getMetrics).toHaveBeenCalled(); -+ expect(comp.metrics).toEqual(metrics); -+ expect(comp.threads).toEqual(threadDump.threads); -+ expect(comp.updatingMetrics).toBeFalsy(); -+ expect(changeDetector.constructor.prototype.markForCheck).toHaveBeenCalled(); -+ }); -+ }); -+ -+ describe('metricsKeyExists', () => { -+ it('should check that metrics key exists', () => { -+ // GIVEN -+ comp.metrics = { -+ garbageCollector: { -+ 'PS Scavenge': { -+ collectionCount: 0, -+ collectionTime: 0, -+ }, -+ 'PS MarkSweep': { -+ collectionCount: 0, -+ collectionTime: 0, -+ }, -+ }, -+ } as unknown as Metrics; -+ -+ // WHEN -+ const garbageCollectorKeyExists = comp.metricsKeyExists('garbageCollector'); -+ -+ // THEN -+ expect(garbageCollectorKeyExists).toBeTruthy(); -+ }); -+ -+ it('should check that metrics key does not exist', () => { -+ // GIVEN -+ comp.metrics = { -+ garbageCollector: { -+ 'PS Scavenge': { -+ collectionCount: 0, -+ collectionTime: 0, -+ }, -+ 'PS MarkSweep': { -+ collectionCount: 0, -+ collectionTime: 0, -+ }, -+ }, -+ } as unknown as Metrics; -+ -+ // WHEN -+ const databasesCollectorKeyExists = comp.metricsKeyExists('databases'); -+ -+ // THEN -+ expect(databasesCollectorKeyExists).toBeFalsy(); -+ }); -+ }); -+ -+ describe('metricsKeyExistsAndObjectNotEmpty', () => { -+ it('should check that metrics key exists and is not empty', () => { -+ // GIVEN -+ comp.metrics = { -+ garbageCollector: { -+ 'PS Scavenge': { -+ collectionCount: 0, -+ collectionTime: 0, -+ }, -+ 'PS MarkSweep': { -+ collectionCount: 0, -+ collectionTime: 0, -+ }, -+ }, -+ } as unknown as Metrics; -+ -+ // WHEN -+ const garbageCollectorKeyExistsAndNotEmpty = comp.metricsKeyExistsAndObjectNotEmpty('garbageCollector'); -+ -+ // THEN -+ expect(garbageCollectorKeyExistsAndNotEmpty).toBeTruthy(); -+ }); -+ -+ it('should check that metrics key is empty', () => { -+ // GIVEN -+ comp.metrics = { -+ garbageCollector: {}, -+ } as Metrics; -+ -+ // WHEN -+ const garbageCollectorKeyEmpty = comp.metricsKeyExistsAndObjectNotEmpty('garbageCollector'); -+ -+ // THEN -+ expect(garbageCollectorKeyEmpty).toBeFalsy(); - }); - }); - }); -diff --git a/src/main/webapp/app/admin/metrics/metrics.component.ts b/src/main/webapp/app/admin/metrics/metrics.component.ts -index f633ee1f..93f7a3fe 100644 ---- a/src/main/webapp/app/admin/metrics/metrics.component.ts -+++ b/src/main/webapp/app/admin/metrics/metrics.component.ts -@@ -1,20 +1,46 @@ - import { Component, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'; - import { combineLatest } from 'rxjs'; - -+import SharedModule from 'app/shared/shared.module'; - import { MetricsService } from './metrics.service'; - import { Metrics, Thread } from './metrics.model'; -+import { JvmMemoryComponent } from './blocks/jvm-memory/jvm-memory.component'; -+import { JvmThreadsComponent } from './blocks/jvm-threads/jvm-threads.component'; -+import { MetricsCacheComponent } from './blocks/metrics-cache/metrics-cache.component'; -+import { MetricsDatasourceComponent } from './blocks/metrics-datasource/metrics-datasource.component'; -+import { MetricsEndpointsRequestsComponent } from './blocks/metrics-endpoints-requests/metrics-endpoints-requests.component'; -+import { MetricsGarbageCollectorComponent } from './blocks/metrics-garbagecollector/metrics-garbagecollector.component'; -+import { MetricsModalThreadsComponent } from './blocks/metrics-modal-threads/metrics-modal-threads.component'; -+import { MetricsRequestComponent } from './blocks/metrics-request/metrics-request.component'; -+import { MetricsSystemComponent } from './blocks/metrics-system/metrics-system.component'; - - @Component({ -+ standalone: true, - selector: 'jhi-metrics', - templateUrl: './metrics.component.html', - changeDetection: ChangeDetectionStrategy.OnPush, -+ imports: [ -+ SharedModule, -+ JvmMemoryComponent, -+ JvmThreadsComponent, -+ MetricsCacheComponent, -+ MetricsDatasourceComponent, -+ MetricsEndpointsRequestsComponent, -+ MetricsGarbageCollectorComponent, -+ MetricsModalThreadsComponent, -+ MetricsRequestComponent, -+ MetricsSystemComponent, -+ ], - }) --export class MetricsComponent implements OnInit { -+export default class MetricsComponent implements OnInit { - metrics?: Metrics; - threads?: Thread[]; - updatingMetrics = true; - -- constructor(private metricsService: MetricsService, private changeDetector: ChangeDetectorRef) {} -+ constructor( -+ private metricsService: MetricsService, -+ private changeDetector: ChangeDetectorRef, -+ ) {} - - ngOnInit(): void { - this.refresh(); -diff --git a/src/main/webapp/app/admin/metrics/metrics.module.ts b/src/main/webapp/app/admin/metrics/metrics.module.ts -deleted file mode 100644 -index e96c87b8..00000000 ---- a/src/main/webapp/app/admin/metrics/metrics.module.ts -+++ /dev/null -@@ -1,32 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule } from '@angular/router'; -- --import { SharedModule } from 'app/shared/shared.module'; --import { MetricsComponent } from './metrics.component'; --import { metricsRoute } from './metrics.route'; --import { JvmMemoryComponent } from './blocks/jvm-memory/jvm-memory.component'; --import { JvmThreadsComponent } from './blocks/jvm-threads/jvm-threads.component'; --import { MetricsCacheComponent } from './blocks/metrics-cache/metrics-cache.component'; --import { MetricsDatasourceComponent } from './blocks/metrics-datasource/metrics-datasource.component'; --import { MetricsEndpointsRequestsComponent } from './blocks/metrics-endpoints-requests/metrics-endpoints-requests.component'; --import { MetricsGarbageCollectorComponent } from './blocks/metrics-garbagecollector/metrics-garbagecollector.component'; --import { MetricsModalThreadsComponent } from './blocks/metrics-modal-threads/metrics-modal-threads.component'; --import { MetricsRequestComponent } from './blocks/metrics-request/metrics-request.component'; --import { MetricsSystemComponent } from './blocks/metrics-system/metrics-system.component'; -- --@NgModule({ -- imports: [SharedModule, RouterModule.forChild([metricsRoute])], -- declarations: [ -- MetricsComponent, -- JvmMemoryComponent, -- JvmThreadsComponent, -- MetricsCacheComponent, -- MetricsDatasourceComponent, -- MetricsEndpointsRequestsComponent, -- MetricsGarbageCollectorComponent, -- MetricsModalThreadsComponent, -- MetricsRequestComponent, -- MetricsSystemComponent, -- ], --}) --export class MetricsModule {} -diff --git a/src/main/webapp/app/admin/metrics/metrics.route.ts b/src/main/webapp/app/admin/metrics/metrics.route.ts -deleted file mode 100644 -index c090cf6e..00000000 ---- a/src/main/webapp/app/admin/metrics/metrics.route.ts -+++ /dev/null -@@ -1,11 +0,0 @@ --import { Route } from '@angular/router'; -- --import { MetricsComponent } from './metrics.component'; -- --export const metricsRoute: Route = { -- path: '', -- component: MetricsComponent, -- data: { -- pageTitle: 'metrics.title', -- }, --}; -diff --git a/src/main/webapp/app/admin/metrics/metrics.service.ts b/src/main/webapp/app/admin/metrics/metrics.service.ts -index 1d27f2b1..5adb05c0 100644 ---- a/src/main/webapp/app/admin/metrics/metrics.service.ts -+++ b/src/main/webapp/app/admin/metrics/metrics.service.ts -@@ -7,7 +7,10 @@ import { Metrics, ThreadDump } from './metrics.model'; - - @Injectable({ providedIn: 'root' }) - export class MetricsService { -- constructor(private http: HttpClient, private applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ private http: HttpClient, -+ private applicationConfigService: ApplicationConfigService, -+ ) {} - - getMetrics(): Observable { - return this.http.get(this.applicationConfigService.getEndpointFor('management/jhimetrics')); -diff --git a/src/main/webapp/app/app-routing.module.ts b/src/main/webapp/app/app-routing.module.ts -index a03d4979..21cba2d7 100644 ---- a/src/main/webapp/app/app-routing.module.ts -+++ b/src/main/webapp/app/app-routing.module.ts -@@ -1,33 +1,43 @@ - import { NgModule } from '@angular/core'; - import { RouterModule } from '@angular/router'; - --import { errorRoute } from './layouts/error/error.route'; --import { navbarRoute } from './layouts/navbar/navbar.route'; - import { DEBUG_INFO_ENABLED } from 'app/app.constants'; - import { Authority } from 'app/config/authority.constants'; -- - import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; -+import { errorRoute } from './layouts/error/error.route'; -+ -+import HomeComponent from './home/home.component'; -+import NavbarComponent from './layouts/navbar/navbar.component'; - - @NgModule({ - imports: [ - RouterModule.forRoot( - [ -+ { -+ path: '', -+ component: HomeComponent, -+ title: 'home.title', -+ }, -+ { -+ path: '', -+ component: NavbarComponent, -+ outlet: 'navbar', -+ }, - { - path: 'admin', - data: { - authorities: [Authority.ADMIN], - }, - canActivate: [UserRouteAccessService], -- loadChildren: () => import('./admin/admin-routing.module').then(m => m.AdminRoutingModule), -+ loadChildren: () => import('./admin/admin-routing.module'), - }, - { - path: '', -- loadChildren: () => import(`./entities/entity-routing.module`).then(m => m.EntityRoutingModule), -+ loadChildren: () => import(`./entities/entity-routing.module`).then(({ EntityRoutingModule }) => EntityRoutingModule), - }, -- navbarRoute, - ...errorRoute, - ], -- { enableTracing: DEBUG_INFO_ENABLED } -+ { enableTracing: DEBUG_INFO_ENABLED, bindToComponentInputs: true }, - ), - ], - exports: [RouterModule], -diff --git a/src/main/webapp/app/app.module.ts b/src/main/webapp/app/app.module.ts -index 90eeb6df..ca8b44a7 100644 ---- a/src/main/webapp/app/app.module.ts -+++ b/src/main/webapp/app/app.module.ts -@@ -3,27 +3,23 @@ import { registerLocaleData } from '@angular/common'; - import { HttpClientModule } from '@angular/common/http'; - import locale from '@angular/common/locales/en'; - import { BrowserModule, Title } from '@angular/platform-browser'; -+import { TitleStrategy } from '@angular/router'; - import { ServiceWorkerModule } from '@angular/service-worker'; - import { FaIconLibrary } from '@fortawesome/angular-fontawesome'; --import { NgxWebstorageModule } from 'ngx-webstorage'; - import dayjs from 'dayjs/esm'; - import { NgbDateAdapter, NgbDatepickerConfig } from '@ng-bootstrap/ng-bootstrap'; - - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import './config/dayjs'; --import { SharedModule } from 'app/shared/shared.module'; - import { TranslationModule } from 'app/shared/language/translation.module'; -+import { httpInterceptorProviders } from 'app/core/interceptor/index'; - import { AppRoutingModule } from './app-routing.module'; - // jhipster-needle-angular-add-module-import JHipster will add new module here - import { NgbDateDayjsAdapter } from './config/datepicker-adapter'; - import { fontAwesomeIcons } from './config/font-awesome-icons'; --import { httpInterceptorProviders } from 'app/core/interceptor/index'; --import { MainComponent } from './layouts/main/main.component'; --import { NavbarComponent } from './layouts/navbar/navbar.component'; --import { PageRibbonComponent } from './layouts/profiles/page-ribbon.component'; --import { ActiveMenuDirective } from './layouts/navbar/active-menu.directive'; --import { ErrorComponent } from './layouts/error/error.component'; -- -+import MainComponent from './layouts/main/main.component'; -+import MainModule from './layouts/main/main.module'; -+import { AppPageTitleStrategy } from './app-page-title-strategy'; - // ### Modification-Start ### - import { HomeModule } from './custom/home/home.module'; - import { FooterComponent } from './custom/layouts/footer/footer.component'; -@@ -55,14 +51,12 @@ import { BreadcrumbTrailComponent } from './custom/layouts/navbar/breadcrumb-tra - FeedbackModule, - // ### Modification-End ### - BrowserModule, -- SharedModule, -- HomeModule, - // jhipster-needle-angular-add-module JHipster will add new module here - AppRoutingModule, - // Set this to true to enable service worker (PWA) - ServiceWorkerModule.register('ngsw-worker.js', { enabled: false }), - HttpClientModule, -- NgxWebstorageModule.forRoot({ prefix: 'jhi', separator: '-', caseSensitive: true }), -+ MainModule, - TranslationModule, - ], - providers: [ -@@ -70,14 +64,9 @@ import { BreadcrumbTrailComponent } from './custom/layouts/navbar/breadcrumb-tra - { provide: LOCALE_ID, useValue: 'en' }, - { provide: NgbDateAdapter, useClass: NgbDateDayjsAdapter }, - httpInterceptorProviders, -+ { provide: TitleStrategy, useClass: AppPageTitleStrategy }, - ], - declarations: [ -- MainComponent, -- NavbarComponent, -- ErrorComponent, -- PageRibbonComponent, -- ActiveMenuDirective, -- FooterComponent, - // ### Modification-Start ### - NavbarExtensionComponent, - BreadcrumbTrailComponent, -diff --git a/src/main/webapp/app/core/auth/account.model.ts b/src/main/webapp/app/core/auth/account.model.ts -index 22e083cf..76e67637 100644 ---- a/src/main/webapp/app/core/auth/account.model.ts -+++ b/src/main/webapp/app/core/auth/account.model.ts -@@ -7,6 +7,6 @@ export class Account { - public langKey: string, - public lastName: string | null, - public login: string, -- public imageUrl: string | null -+ public imageUrl: string | null, - ) {} - } -diff --git a/src/main/webapp/app/core/auth/account.service.spec.ts b/src/main/webapp/app/core/auth/account.service.spec.ts -index 3e0a6fbe..99bdc0db 100644 ---- a/src/main/webapp/app/core/auth/account.service.spec.ts -+++ b/src/main/webapp/app/core/auth/account.service.spec.ts -@@ -6,7 +6,6 @@ import { HttpClientTestingModule, HttpTestingController } from '@angular/common/ - import { TestBed } from '@angular/core/testing'; - import { TranslateModule, TranslateService } from '@ngx-translate/core'; - import { of } from 'rxjs'; --import { NgxWebstorageModule, SessionStorageService } from 'ngx-webstorage'; - - import { Account } from 'app/core/auth/account.model'; - import { Authority } from 'app/config/authority.constants'; -@@ -33,11 +32,10 @@ describe('Account Service', () => { - let mockStorageService: StateStorageService; - let mockRouter: Router; - let mockTranslateService: TranslateService; -- let sessionStorageService: SessionStorageService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgxWebstorageModule.forRoot()], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot()], - providers: [StateStorageService], - }); - -@@ -49,7 +47,6 @@ describe('Account Service', () => { - - mockTranslateService = TestBed.inject(TranslateService); - jest.spyOn(mockTranslateService, 'use').mockImplementation(() => of('')); -- sessionStorageService = TestBed.inject(SessionStorageService); - }); - - afterEach(() => { -@@ -118,7 +115,7 @@ describe('Account Service', () => { - describe('should change the language on authentication if necessary', () => { - it('should change language if user has not changed language manually', () => { - // GIVEN -- sessionStorageService.retrieve = jest.fn(key => (key === 'locale' ? undefined : 'otherSessionStorageValue')); -+ mockStorageService.getLocale = jest.fn(() => null); - - // WHEN - service.identity().subscribe(); -@@ -130,7 +127,7 @@ describe('Account Service', () => { - - it('should not change language if user has changed language manually', () => { - // GIVEN -- sessionStorageService.retrieve = jest.fn(key => (key === 'locale' ? 'sessionLang' : undefined)); -+ mockStorageService.getLocale = jest.fn(() => 'sessionLang'); - - // WHEN - service.identity().subscribe(); -diff --git a/src/main/webapp/app/core/auth/account.service.ts b/src/main/webapp/app/core/auth/account.service.ts -index 7c3f5251..8928703d 100644 ---- a/src/main/webapp/app/core/auth/account.service.ts -+++ b/src/main/webapp/app/core/auth/account.service.ts -@@ -2,13 +2,12 @@ import { Injectable } from '@angular/core'; - import { Router } from '@angular/router'; - import { HttpClient } from '@angular/common/http'; - import { TranslateService } from '@ngx-translate/core'; --import { SessionStorageService } from 'ngx-webstorage'; - import { Observable, ReplaySubject, of } from 'rxjs'; - import { shareReplay, tap, catchError } from 'rxjs/operators'; - - import { StateStorageService } from 'app/core/auth/state-storage.service'; --import { ApplicationConfigService } from '../config/application-config.service'; - import { Account } from 'app/core/auth/account.model'; -+import { ApplicationConfigService } from '../config/application-config.service'; - - @Injectable({ providedIn: 'root' }) - export class AccountService { -@@ -18,11 +17,10 @@ export class AccountService { - - constructor( - private translateService: TranslateService, -- private sessionStorageService: SessionStorageService, - private http: HttpClient, - private stateStorageService: StateStorageService, - private router: Router, -- private applicationConfigService: ApplicationConfigService -+ private applicationConfigService: ApplicationConfigService, - ) {} - - authenticate(identity: Account | null): void { -@@ -52,13 +50,13 @@ export class AccountService { - // After retrieve the account info, the language will be changed to - // the user's preferred language configured in the account setting - // unless user have choosed other language in the current session -- if (!this.sessionStorageService.retrieve('locale')) { -+ if (!this.stateStorageService.getLocale()) { - this.translateService.use(account.langKey); - } - - this.navigateToStoredUrl(); - }), -- shareReplay() -+ shareReplay(), - ); - } - return this.accountCache$.pipe(catchError(() => of(null))); -diff --git a/src/main/webapp/app/core/auth/auth-session.service.ts b/src/main/webapp/app/core/auth/auth-session.service.ts -index 73db72b4..329e979e 100644 ---- a/src/main/webapp/app/core/auth/auth-session.service.ts -+++ b/src/main/webapp/app/core/auth/auth-session.service.ts -@@ -2,12 +2,15 @@ import { Injectable } from '@angular/core'; - import { HttpClient } from '@angular/common/http'; - import { Observable } from 'rxjs'; - --import { ApplicationConfigService } from '../config/application-config.service'; - import { Logout } from 'app/login/logout.model'; -+import { ApplicationConfigService } from '../config/application-config.service'; - - @Injectable({ providedIn: 'root' }) - export class AuthServerProvider { -- constructor(private http: HttpClient, private applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ private http: HttpClient, -+ private applicationConfigService: ApplicationConfigService, -+ ) {} - - logout(): Observable { - return this.http.post(this.applicationConfigService.getEndpointFor('api/logout'), {}); -diff --git a/src/main/webapp/app/core/auth/state-storage.service.ts b/src/main/webapp/app/core/auth/state-storage.service.ts -index e058d7d3..14eec1bf 100644 ---- a/src/main/webapp/app/core/auth/state-storage.service.ts -+++ b/src/main/webapp/app/core/auth/state-storage.service.ts -@@ -1,21 +1,53 @@ - import { Injectable } from '@angular/core'; --import { SessionStorageService } from 'ngx-webstorage'; - - @Injectable({ providedIn: 'root' }) - export class StateStorageService { - private previousUrlKey = 'previousUrl'; -- -- constructor(private sessionStorageService: SessionStorageService) {} -+ private authenticationKey = 'jhi-authenticationToken'; -+ private localeKey = 'locale'; - - storeUrl(url: string): void { -- this.sessionStorageService.store(this.previousUrlKey, url); -+ sessionStorage.setItem(this.previousUrlKey, JSON.stringify(url)); - } - - getUrl(): string | null { -- return this.sessionStorageService.retrieve(this.previousUrlKey) as string | null; -+ const previousUrl = sessionStorage.getItem(this.previousUrlKey); -+ return previousUrl ? (JSON.parse(previousUrl) as string | null) : previousUrl; - } - - clearUrl(): void { -- this.sessionStorageService.clear(this.previousUrlKey); -+ sessionStorage.removeItem(this.previousUrlKey); -+ } -+ -+ storeAuthenticationToken(authenticationToken: string, rememberMe: boolean): void { -+ authenticationToken = JSON.stringify(authenticationToken); -+ this.clearAuthenticationToken(); -+ if (rememberMe) { -+ localStorage.setItem(this.authenticationKey, authenticationToken); -+ } else { -+ sessionStorage.setItem(this.authenticationKey, authenticationToken); -+ } -+ } -+ -+ getAuthenticationToken(): string | null { -+ const authenticationToken = localStorage.getItem(this.authenticationKey) ?? sessionStorage.getItem(this.authenticationKey); -+ return authenticationToken ? (JSON.parse(authenticationToken) as string | null) : authenticationToken; -+ } -+ -+ clearAuthenticationToken(): void { -+ sessionStorage.removeItem(this.authenticationKey); -+ localStorage.removeItem(this.authenticationKey); -+ } -+ -+ storeLocale(locale: string): void { -+ sessionStorage.setItem(this.localeKey, locale); -+ } -+ -+ getLocale(): string | null { -+ return sessionStorage.getItem(this.localeKey); -+ } -+ -+ clearLocale(): void { -+ sessionStorage.removeItem(this.localeKey); - } - } -diff --git a/src/main/webapp/app/core/auth/user-route-access.service.ts b/src/main/webapp/app/core/auth/user-route-access.service.ts -index 473f6732..34c72fac 100644 ---- a/src/main/webapp/app/core/auth/user-route-access.service.ts -+++ b/src/main/webapp/app/core/auth/user-route-access.service.ts -@@ -1,42 +1,35 @@ --import { Injectable, isDevMode } from '@angular/core'; --import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; --import { Observable } from 'rxjs'; -+import { inject, isDevMode } from '@angular/core'; -+import { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot } from '@angular/router'; - import { map } from 'rxjs/operators'; - - import { AccountService } from 'app/core/auth/account.service'; - import { LoginService } from 'app/login/login.service'; - import { StateStorageService } from './state-storage.service'; - --@Injectable({ providedIn: 'root' }) --export class UserRouteAccessService implements CanActivate { -- constructor( -- private router: Router, -- private loginService: LoginService, -- private accountService: AccountService, -- private stateStorageService: StateStorageService -- ) {} -+export const UserRouteAccessService: CanActivateFn = (next: ActivatedRouteSnapshot, state: RouterStateSnapshot) => { -+ const accountService = inject(AccountService); -+ const router = inject(Router); -+ const stateStorageService = inject(StateStorageService); -+ const loginService = inject(LoginService); -+ return accountService.identity().pipe( -+ map(account => { -+ if (account) { -+ const authorities = next.data['authorities']; - -- canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { -- return this.accountService.identity().pipe( -- map(account => { -- if (account) { -- const authorities = route.data['authorities']; -- -- if (!authorities || authorities.length === 0 || this.accountService.hasAnyAuthority(authorities)) { -- return true; -- } -- -- if (isDevMode()) { -- console.error('User has not any of required authorities: ', authorities); -- } -- this.router.navigate(['accessdenied']); -- return false; -+ if (!authorities || authorities.length === 0 || accountService.hasAnyAuthority(authorities)) { -+ return true; - } - -- this.stateStorageService.storeUrl(state.url); -- this.loginService.login(); -+ if (isDevMode()) { -+ console.error('User has not any of required authorities: ', authorities); -+ } -+ router.navigate(['accessdenied']); - return false; -- }) -- ); -- } --} -+ } -+ -+ stateStorageService.storeUrl(state.url); -+ loginService.login(); -+ return false; -+ }), -+ ); -+}; -diff --git a/src/main/webapp/app/core/interceptor/auth-expired.interceptor.ts b/src/main/webapp/app/core/interceptor/auth-expired.interceptor.ts -index b63d540f..ec477dd5 100644 ---- a/src/main/webapp/app/core/interceptor/auth-expired.interceptor.ts -+++ b/src/main/webapp/app/core/interceptor/auth-expired.interceptor.ts -@@ -14,7 +14,7 @@ export class AuthExpiredInterceptor implements HttpInterceptor { - private loginService: LoginService, - private stateStorageService: StateStorageService, - private router: Router, -- private accountService: AccountService -+ private accountService: AccountService, - ) {} - - intercept(request: HttpRequest, next: HttpHandler): Observable> { -@@ -26,7 +26,7 @@ export class AuthExpiredInterceptor implements HttpInterceptor { - this.loginService.login(); - } - }, -- }) -+ }), - ); - } - } -diff --git a/src/main/webapp/app/core/interceptor/error-handler.interceptor.ts b/src/main/webapp/app/core/interceptor/error-handler.interceptor.ts -index 580739b7..f5d91925 100644 ---- a/src/main/webapp/app/core/interceptor/error-handler.interceptor.ts -+++ b/src/main/webapp/app/core/interceptor/error-handler.interceptor.ts -@@ -17,7 +17,7 @@ export class ErrorHandlerInterceptor implements HttpInterceptor { - this.eventManager.broadcast(new EventWithContent('teamDojoApp.httpError', err)); - } - }, -- }) -+ }), - ); - } - } -diff --git a/src/main/webapp/app/core/interceptor/notification.interceptor.ts b/src/main/webapp/app/core/interceptor/notification.interceptor.ts -index 513132f9..6812e244 100644 ---- a/src/main/webapp/app/core/interceptor/notification.interceptor.ts -+++ b/src/main/webapp/app/core/interceptor/notification.interceptor.ts -@@ -32,7 +32,7 @@ export class NotificationInterceptor implements HttpInterceptor { - }); - } - } -- }) -+ }), - ); - } - } -diff --git a/src/main/webapp/app/core/request/request-util.ts b/src/main/webapp/app/core/request/request-util.ts -index 7df81be0..694a238a 100644 ---- a/src/main/webapp/app/core/request/request-util.ts -+++ b/src/main/webapp/app/core/request/request-util.ts -@@ -5,8 +5,10 @@ export const createRequestOption = (req?: any): HttpParams => { - - if (req) { - Object.keys(req).forEach(key => { -- if (key !== 'sort') { -- options = options.set(key, req[key]); -+ if (key !== 'sort' && req[key] !== undefined) { -+ for (const value of [].concat(req[key]).filter(v => v !== '')) { -+ options = options.append(key, value); -+ } - } - }); - -diff --git a/src/main/webapp/app/core/util/alert.service.spec.ts b/src/main/webapp/app/core/util/alert.service.spec.ts -index 934188c7..72441201 100644 ---- a/src/main/webapp/app/core/util/alert.service.spec.ts -+++ b/src/main/webapp/app/core/util/alert.service.spec.ts -@@ -33,7 +33,7 @@ describe('Alert service test', () => { - timeout: 3000, - toast: true, - position: 'top left', -- }) -+ }), - ).toEqual( - expect.objectContaining({ - type: 'success', -@@ -42,7 +42,7 @@ describe('Alert service test', () => { - timeout: 3000, - toast: true, - position: 'top left', -- } as Alert) -+ } as Alert), - ); - - expect(service.get().length).toBe(1); -@@ -54,7 +54,7 @@ describe('Alert service test', () => { - timeout: 3000, - toast: true, - position: 'top left', -- } as Alert) -+ } as Alert), - ); - })); - -@@ -70,8 +70,8 @@ describe('Alert service test', () => { - toast: true, - position: 'top left', - }, -- extAlerts -- ) -+ extAlerts, -+ ), - ).toEqual( - expect.objectContaining({ - type: 'success', -@@ -80,7 +80,7 @@ describe('Alert service test', () => { - timeout: 3000, - toast: true, - position: 'top left', -- } as Alert) -+ } as Alert), - ); - - expect(extAlerts.length).toBe(1); -@@ -92,9 +92,9 @@ describe('Alert service test', () => { - timeout: 3000, - toast: true, - position: 'top left', -- } as Alert) -+ } as Alert), - ); -- } -+ }, - )); - - it('should produce an alert object with correct id', inject([AlertService], (service: AlertService) => { -@@ -104,7 +104,7 @@ describe('Alert service test', () => { - type: 'success', - message: 'Hello Jhipster success', - id: 1, -- } as Alert) -+ } as Alert), - ); - - expect(service.get().length).toBe(2); -@@ -113,7 +113,7 @@ describe('Alert service test', () => { - type: 'success', - message: 'Hello Jhipster success', - id: 1, -- } as Alert) -+ } as Alert), - ); - })); - -@@ -126,7 +126,7 @@ describe('Alert service test', () => { - type: 'success', - message: 'Hello Jhipster success', - id: 2, -- } as Alert) -+ } as Alert), - ); - - expect(service.get().length).toBe(3); -@@ -137,7 +137,7 @@ describe('Alert service test', () => { - type: 'info', - message: 'Hello Jhipster info 2', - id: 1, -- } as Alert) -+ } as Alert), - ); - alert2.close?.(service.get()); - expect(service.get().length).toBe(1); -@@ -146,7 +146,7 @@ describe('Alert service test', () => { - type: 'success', - message: 'Hello Jhipster success', - id: 2, -- } as Alert) -+ } as Alert), - ); - alert0.close?.(service.get()); - expect(service.get().length).toBe(0); -@@ -181,8 +181,8 @@ describe('Alert service test', () => { - toast: true, - position: 'top left', - }, -- [] -- ) -+ [], -+ ), - ).toEqual( - expect.objectContaining({ - type: 'success', -@@ -191,7 +191,7 @@ describe('Alert service test', () => { - timeout: 3000, - toast: true, - position: 'top left', -- } as Alert) -+ } as Alert), - ); - - expect(service.get().length).toBe(0); -@@ -202,7 +202,7 @@ describe('Alert service test', () => { - expect.objectContaining({ - type: 'success', - message: 'Hello Jhipster', -- } as Alert) -+ } as Alert), - ); - })); - -@@ -212,7 +212,7 @@ describe('Alert service test', () => { - type: 'success', - message: 'Hello Jhipster', - position: 'bottom left', -- } as Alert) -+ } as Alert), - ); - })); - -@@ -221,7 +221,7 @@ describe('Alert service test', () => { - expect.objectContaining({ - type: 'danger', - message: 'Hello Jhipster', -- } as Alert) -+ } as Alert), - ); - })); - -@@ -230,7 +230,7 @@ describe('Alert service test', () => { - expect.objectContaining({ - type: 'warning', - message: 'Hello Jhipster', -- } as Alert) -+ } as Alert), - ); - })); - -@@ -239,7 +239,7 @@ describe('Alert service test', () => { - expect.objectContaining({ - type: 'info', - message: 'Hello Jhipster', -- } as Alert) -+ } as Alert), - ); - })); - -@@ -253,9 +253,9 @@ describe('Alert service test', () => { - expect.objectContaining({ - type: 'info', - message: 'Translated message', -- } as Alert) -+ } as Alert), - ); -- } -+ }, - )); - - it('should produce a info message with provided message if key does not exists', inject( -@@ -265,9 +265,9 @@ describe('Alert service test', () => { - expect.objectContaining({ - type: 'info', - message: 'Hello Jhipster', -- } as Alert) -+ } as Alert), - ); -- } -+ }, - )); - - it('should produce a info message with provided key if transltion key does not exist in translations and message is not provided', inject( -@@ -277,9 +277,9 @@ describe('Alert service test', () => { - expect.objectContaining({ - type: 'info', - message: 'hello.jhipster', -- } as Alert) -+ } as Alert), - ); -- } -+ }, - )); - }); - }); -diff --git a/src/main/webapp/app/core/util/alert.service.ts b/src/main/webapp/app/core/util/alert.service.ts -index 4469bd6c..202eb36a 100644 ---- a/src/main/webapp/app/core/util/alert.service.ts -+++ b/src/main/webapp/app/core/util/alert.service.ts -@@ -30,7 +30,11 @@ export class AlertService { - private alertId = 0; - private alerts: Alert[] = []; - -- constructor(private sanitizer: DomSanitizer, private ngZone: NgZone, private translateService: TranslateService) {} -+ constructor( -+ private sanitizer: DomSanitizer, -+ private ngZone: NgZone, -+ private translateService: TranslateService, -+ ) {} - - clear(): void { - this.alerts = []; -@@ -70,15 +74,9 @@ export class AlertService { - (extAlerts ?? this.alerts).push(alert); - - if (alert.timeout > 0) { -- // Workaround protractor waiting for setTimeout. -- // Reference https://www.protractortest.org/#/timeouts -- this.ngZone.runOutsideAngular(() => { -- setTimeout(() => { -- this.ngZone.run(() => { -- this.closeAlert(alert.id!, extAlerts ?? this.alerts); -- }); -- }, alert.timeout); -- }); -+ setTimeout(() => { -+ this.closeAlert(alert.id!, extAlerts ?? this.alerts); -+ }, alert.timeout); - } - - return alert; -diff --git a/src/main/webapp/app/core/util/data-util.service.ts b/src/main/webapp/app/core/util/data-util.service.ts -index 80f354d3..8ac137e0 100644 ---- a/src/main/webapp/app/core/util/data-util.service.ts -+++ b/src/main/webapp/app/core/util/data-util.service.ts -@@ -1,3 +1,4 @@ -+import { Buffer } from 'buffer'; - import { Injectable } from '@angular/core'; - import { FormGroup } from '@angular/forms'; - import { Observable, Observer } from 'rxjs'; -@@ -30,7 +31,7 @@ export class DataUtils { - openFile(data: string, contentType: string | null | undefined): void { - contentType = contentType ?? ''; - -- const byteCharacters = atob(data); -+ const byteCharacters = Buffer.from(data, 'base64').toString('binary'); - const byteNumbers = new Array(byteCharacters.length); - for (let i = 0; i < byteCharacters.length; i++) { - byteNumbers[i] = byteCharacters.charCodeAt(i); -@@ -124,6 +125,6 @@ export class DataUtils { - } - - private formatAsBytes(size: number): string { -- return size.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ') + ' bytes'; -+ return size.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ') + ' bytes'; // NOSONAR - } - } -diff --git a/src/main/webapp/app/core/util/event-manager.service.spec.ts b/src/main/webapp/app/core/util/event-manager.service.spec.ts -index 910009c9..48d4e193 100644 ---- a/src/main/webapp/app/core/util/event-manager.service.spec.ts -+++ b/src/main/webapp/app/core/util/event-manager.service.spec.ts -@@ -35,7 +35,7 @@ describe('Event Manager tests', () => { - eventManager.subscribe('modifier', (event: EventWithContent | string) => (recievedEvent = event)); - - // WHEN -- eventManager.broadcast({ name: 'unrelatedModifier', content: 'unreleated modification' }); -+ eventManager.broadcast({ name: 'unrelatedModifier', content: 'unrelated modification' }); - // THEN - expect(recievedEvent).toBeNull(); - -@@ -43,7 +43,7 @@ describe('Event Manager tests', () => { - eventManager.broadcast({ name: 'modifier', content: 'modified something' }); - // THEN - expect(recievedEvent).toEqual({ name: 'modifier', content: 'modified something' }); -- } -+ }, - )); - - it('should create an observable and callback when broadcasted string', inject([EventManager], (eventManager: EventManager) => { -diff --git a/src/main/webapp/app/core/util/event-manager.service.ts b/src/main/webapp/app/core/util/event-manager.service.ts -index 1730369b..a73d2129 100644 ---- a/src/main/webapp/app/core/util/event-manager.service.ts -+++ b/src/main/webapp/app/core/util/event-manager.service.ts -@@ -3,7 +3,10 @@ import { Observable, Observer, Subscription } from 'rxjs'; - import { filter, share } from 'rxjs/operators'; - - export class EventWithContent { -- constructor(public name: string, public content: T) {} -+ constructor( -+ public name: string, -+ public content: T, -+ ) {} - } - - /** -@@ -49,7 +52,7 @@ export class EventManager { - } - } - return false; -- }) -+ }), - ) - .subscribe(callback); - } -diff --git a/src/main/webapp/app/core/util/parse-links.service.ts b/src/main/webapp/app/core/util/parse-links.service.ts -index 6b372b2b..dc1eb0e9 100644 ---- a/src/main/webapp/app/core/util/parse-links.service.ts -+++ b/src/main/webapp/app/core/util/parse-links.service.ts -@@ -27,7 +27,7 @@ export class ParseLinks { - throw new Error('section could not be split on ";"'); - } - -- const url: string = section[0].replace(/<(.*)>/, '$1').trim(); -+ const url: string = section[0].replace(/<(.*)>/, '$1').trim(); // NOSONAR - const queryString: { [key: string]: string | undefined } = {}; - - url.replace(/([^?=&]+)(=([^&]*))?/g, (_$0: string, $1: string | undefined, _$2: string | undefined, $3: string | undefined) => { -diff --git a/src/main/webapp/app/entities/activity/activity.model.ts b/src/main/webapp/app/entities/activity/activity.model.ts -index 30482120..7b24ca30 100644 ---- a/src/main/webapp/app/entities/activity/activity.model.ts -+++ b/src/main/webapp/app/entities/activity/activity.model.ts -@@ -2,23 +2,11 @@ import dayjs from 'dayjs/esm'; - import { ActivityType } from 'app/entities/enumerations/activity-type.model'; - - export interface IActivity { -- id?: number; -- type?: ActivityType | null; -+ id: number; -+ type?: keyof typeof ActivityType | null; - data?: string | null; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; - } - --export class Activity implements IActivity { -- constructor( -- public id?: number, -- public type?: ActivityType | null, -- public data?: string | null, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs -- ) {} --} -- --export function getActivityIdentifier(activity: IActivity): number | undefined { -- return activity.id; --} -+export type NewActivity = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/activity/activity.module.ts b/src/main/webapp/app/entities/activity/activity.module.ts -deleted file mode 100644 -index a4f70378..00000000 ---- a/src/main/webapp/app/entities/activity/activity.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { ActivityComponent } from './list/activity.component'; --import { ActivityDetailComponent } from './detail/activity-detail.component'; --import { ActivityUpdateComponent } from './update/activity-update.component'; --import { ActivityDeleteDialogComponent } from './delete/activity-delete-dialog.component'; --import { ActivityRoutingModule } from './route/activity-routing.module'; -- --@NgModule({ -- imports: [SharedModule, ActivityRoutingModule], -- declarations: [ActivityComponent, ActivityDetailComponent, ActivityUpdateComponent, ActivityDeleteDialogComponent], -- entryComponents: [ActivityDeleteDialogComponent], --}) --export class ActivityModule {} -diff --git a/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.html b/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.html -index a1ba569c..b6654cd8 100644 ---- a/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.spec.ts -index 7b5120a1..d3341ab1 100644 ---- a/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('Activity Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [ActivityDeleteDialogComponent], -+ imports: [HttpClientTestingModule, ActivityDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(ActivityDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('Activity Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.ts b/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.ts -index 808cf07f..90325dc6 100644 ---- a/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/activity/delete/activity-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { IActivity } from '../activity.model'; - import { ActivityService } from '../service/activity.service'; - - @Component({ -+ standalone: true, - templateUrl: './activity-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class ActivityDeleteDialogComponent { - activity?: IActivity; - -- constructor(protected activityService: ActivityService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected activityService: ActivityService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class ActivityDeleteDialogComponent { - - confirmDelete(id: number): void { - this.activityService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/activity/detail/activity-detail.component.spec.ts b/src/main/webapp/app/entities/activity/detail/activity-detail.component.spec.ts -index 6692c312..f74a7e2a 100644 ---- a/src/main/webapp/app/entities/activity/detail/activity-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/activity/detail/activity-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { ActivityDetailComponent } from './activity-detail.component'; - - describe('Activity Management Detail Component', () => { -- let comp: ActivityDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [ActivityDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [ActivityDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ activity: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: ActivityDetailComponent, -+ resolve: { activity: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(ActivityDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(ActivityDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load activity on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load activity on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', ActivityDetailComponent); - - // THEN -- expect(comp.activity).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.activity).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/activity/detail/activity-detail.component.ts b/src/main/webapp/app/entities/activity/detail/activity-detail.component.ts -index b2ce8c80..3724b43b 100644 ---- a/src/main/webapp/app/entities/activity/detail/activity-detail.component.ts -+++ b/src/main/webapp/app/entities/activity/detail/activity-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { IActivity } from '../activity.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-activity-detail', - templateUrl: './activity-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class ActivityDetailComponent implements OnInit { -- activity: IActivity | null = null; -+export class ActivityDetailComponent { -+ @Input() activity: IActivity | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ activity }) => { -- this.activity = activity; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/activity/list/activity.component.html b/src/main/webapp/app/entities/activity/list/activity.component.html -index 98b6ad1a..f521af41 100644 ---- a/src/main/webapp/app/entities/activity/list/activity.component.html -+++ b/src/main/webapp/app/entities/activity/list/activity.component.html -@@ -3,9 +3,9 @@ - Activities - -
-- - - -
- -@@ -25,26 +25,52 @@ - - -
-- No activities found -+ No Activities found -
- --
-+
-
Service NameService nameStatusDetails
-diff --git a/src/main/webapp/app/admin/health/health.component.spec.ts b/src/main/webapp/app/admin/health/health.component.spec.ts -index 3cfdf9f8..97ce8aba 100644 ---- a/src/main/webapp/app/admin/health/health.component.spec.ts -+++ b/src/main/webapp/app/admin/health/health.component.spec.ts -@@ -3,7 +3,7 @@ import { HttpErrorResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; - import { of, throwError } from 'rxjs'; - --import { HealthComponent } from './health.component'; -+import HealthComponent from './health.component'; - import { HealthService } from './health.service'; - import { Health } from './health.model'; - -@@ -14,8 +14,7 @@ describe('HealthComponent', () => { - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [HealthComponent], -+ imports: [HttpClientTestingModule, HealthComponent], - }) - .overrideTemplate(HealthComponent, '') - .compileComponents(); -diff --git a/src/main/webapp/app/admin/health/health.component.ts b/src/main/webapp/app/admin/health/health.component.ts -index 2d9bc2d0..4e33b9c0 100644 ---- a/src/main/webapp/app/admin/health/health.component.ts -+++ b/src/main/webapp/app/admin/health/health.component.ts -@@ -2,18 +2,24 @@ import { Component, OnInit } from '@angular/core'; - import { HttpErrorResponse } from '@angular/common/http'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; - import { HealthService } from './health.service'; - import { Health, HealthDetails, HealthStatus } from './health.model'; --import { HealthModalComponent } from './modal/health-modal.component'; -+import HealthModalComponent from './modal/health-modal.component'; - - @Component({ -+ standalone: true, - selector: 'jhi-health', - templateUrl: './health.component.html', -+ imports: [SharedModule, HealthModalComponent], - }) --export class HealthComponent implements OnInit { -+export default class HealthComponent implements OnInit { - health?: Health; - -- constructor(private modalService: NgbModal, private healthService: HealthService) {} -+ constructor( -+ private modalService: NgbModal, -+ private healthService: HealthService, -+ ) {} - - ngOnInit(): void { - this.refresh(); -diff --git a/src/main/webapp/app/admin/health/health.module.ts b/src/main/webapp/app/admin/health/health.module.ts -deleted file mode 100644 -index f0cfd8a8..00000000 ---- a/src/main/webapp/app/admin/health/health.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule } from '@angular/router'; --import { SharedModule } from 'app/shared/shared.module'; -- --import { HealthComponent } from './health.component'; --import { HealthModalComponent } from './modal/health-modal.component'; --import { healthRoute } from './health.route'; -- --@NgModule({ -- imports: [SharedModule, RouterModule.forChild([healthRoute])], -- declarations: [HealthComponent, HealthModalComponent], -- entryComponents: [HealthModalComponent], --}) --export class HealthModule {} -diff --git a/src/main/webapp/app/admin/health/health.route.ts b/src/main/webapp/app/admin/health/health.route.ts -deleted file mode 100644 -index bd760272..00000000 ---- a/src/main/webapp/app/admin/health/health.route.ts -+++ /dev/null -@@ -1,11 +0,0 @@ --import { Route } from '@angular/router'; -- --import { HealthComponent } from './health.component'; -- --export const healthRoute: Route = { -- path: '', -- component: HealthComponent, -- data: { -- pageTitle: 'health.title', -- }, --}; -diff --git a/src/main/webapp/app/admin/health/health.service.spec.ts b/src/main/webapp/app/admin/health/health.service.spec.ts -index 850c531f..1e1ff19c 100644 ---- a/src/main/webapp/app/admin/health/health.service.spec.ts -+++ b/src/main/webapp/app/admin/health/health.service.spec.ts -@@ -1,8 +1,8 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - --import { HealthService } from './health.service'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; -+import { HealthService } from './health.service'; - - describe('HealthService Service', () => { - let service: HealthService; -diff --git a/src/main/webapp/app/admin/health/health.service.ts b/src/main/webapp/app/admin/health/health.service.ts -index 4712a978..7a2d420d 100644 ---- a/src/main/webapp/app/admin/health/health.service.ts -+++ b/src/main/webapp/app/admin/health/health.service.ts -@@ -7,7 +7,10 @@ import { Health } from './health.model'; - - @Injectable({ providedIn: 'root' }) - export class HealthService { -- constructor(private http: HttpClient, private applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ private http: HttpClient, -+ private applicationConfigService: ApplicationConfigService, -+ ) {} - - checkHealth(): Observable { - return this.http.get(this.applicationConfigService.getEndpointFor('management/health')); -diff --git a/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts b/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts -index 9eb92d0e..b9aa047b 100644 ---- a/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts -+++ b/src/main/webapp/app/admin/health/modal/health-modal.component.spec.ts -@@ -2,7 +2,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - --import { HealthModalComponent } from './health-modal.component'; -+import HealthModalComponent from './health-modal.component'; - - describe('HealthModalComponent', () => { - let comp: HealthModalComponent; -@@ -11,8 +11,7 @@ describe('HealthModalComponent', () => { - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [HealthModalComponent], -+ imports: [HttpClientTestingModule, HealthModalComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(HealthModalComponent, '') -diff --git a/src/main/webapp/app/admin/health/modal/health-modal.component.ts b/src/main/webapp/app/admin/health/modal/health-modal.component.ts -index 02f7cc94..9eefa8bb 100644 ---- a/src/main/webapp/app/admin/health/modal/health-modal.component.ts -+++ b/src/main/webapp/app/admin/health/modal/health-modal.component.ts -@@ -1,13 +1,16 @@ - import { Component } from '@angular/core'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; - import { HealthKey, HealthDetails } from '../health.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-health-modal', - templateUrl: './health-modal.component.html', -+ imports: [SharedModule], - }) --export class HealthModalComponent { -+export default class HealthModalComponent { - health?: { key: HealthKey; value: HealthDetails }; - - constructor(private activeModal: NgbActiveModal) {} -diff --git a/src/main/webapp/app/admin/logs/log.model.ts b/src/main/webapp/app/admin/logs/log.model.ts -index 83f2e154..2606a885 100644 ---- a/src/main/webapp/app/admin/logs/log.model.ts -+++ b/src/main/webapp/app/admin/logs/log.model.ts -@@ -11,5 +11,8 @@ export interface LoggersResponse { - } - - export class Log { -- constructor(public name: string, public level: Level) {} -+ constructor( -+ public name: string, -+ public level: Level, -+ ) {} - } -diff --git a/src/main/webapp/app/admin/logs/logs.component.html b/src/main/webapp/app/admin/logs/logs.component.html -index 59ada66d..256d2162 100644 ---- a/src/main/webapp/app/admin/logs/logs.component.html -+++ b/src/main/webapp/app/admin/logs/logs.component.html -@@ -1,6 +1,10 @@ -
-

Logs

- -+
-+
-+
-+ -

There are {{ loggers.length }} loggers.

- - Filter -@@ -17,7 +21,7 @@ -
-- {{ logger.name | slice: 0:140 }} -+ {{ logger.name | slice: 0 : 140 }} - - Blocked CountWaited TimeWaited CountLock NameLock name
- -- -- -- -- -+ -+ -+ -+ - - - - - -- -+ - -
ID Type Data
-+
-+ ID -+ -+
-+
-+
-+ Type -+ -+
-+
-+
-+ Data -+ -+
-+
-- Created At -+
-+ Created At -+ -+
-
-- Updated At -+
-+ Updated At -+ -+
-
- {{ activity.id }} -diff --git a/src/main/webapp/app/entities/activity/list/activity.component.spec.ts b/src/main/webapp/app/entities/activity/list/activity.component.spec.ts -index 06e79894..2c6fb993 100644 ---- a/src/main/webapp/app/entities/activity/list/activity.component.spec.ts -+++ b/src/main/webapp/app/entities/activity/list/activity.component.spec.ts -@@ -1,21 +1,47 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { ActivityService } from '../service/activity.service'; - - import { ActivityComponent } from './activity.component'; -+import SpyInstance = jest.SpyInstance; - - describe('Activity Management Component', () => { - let comp: ActivityComponent; - let fixture: ComponentFixture; - let service: ActivityService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [ActivityComponent], -+ imports: [ -+ RouterTestingModule.withRoutes([{ path: 'activity', component: ActivityComponent }]), -+ HttpClientTestingModule, -+ ActivityComponent, -+ ], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(ActivityComponent, '') - .compileComponents(); -@@ -23,6 +49,7 @@ describe('Activity Management Component', () => { - fixture = TestBed.createComponent(ActivityComponent); - comp = fixture.componentInstance; - service = TestBed.inject(ActivityService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +57,8 @@ describe('Activity Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +68,25 @@ describe('Activity Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.activities[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.activities?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to activityService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getActivityIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getActivityIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.activities[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +94,25 @@ describe('Activity Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +121,8 @@ describe('Activity Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.activities[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.activities?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/activity/list/activity.component.ts b/src/main/webapp/app/entities/activity/list/activity.component.ts -index 8dfc1342..4e16d0c8 100644 ---- a/src/main/webapp/app/entities/activity/list/activity.component.ts -+++ b/src/main/webapp/app/entities/activity/list/activity.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { IActivity } from '../activity.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { ActivityService } from '../service/activity.service'; --import { ActivityDeleteDialogComponent } from '../delete/activity-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, ActivityService } from '../service/activity.service'; -+import { ActivityDeleteDialogComponent } from '../delete/activity-delete-dialog.component'; -+import { IActivity } from '../activity.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-activity', - templateUrl: './activity.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class ActivityComponent implements OnInit { -- activities: IActivity[]; -+ activities?: IActivity[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected activityService: ActivityService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.activities = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.activityService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateActivities(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected activityService: ActivityService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.activities = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: IActivity): number => this.activityService.getActivityIdentifier(item); - -- trackId(_index: number, item: IActivity): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(activity: IActivity): void { - const modalRef = this.modalService.open(ActivityDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.activity = activity; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.activities = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: IActivity[] | null): IActivity[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const activitiesNew = this.activities ?? []; -+ if (data) { -+ for (const d of data) { -+ if (activitiesNew.map(op => op.id).indexOf(d.id) === -1) { -+ activitiesNew.push(d); -+ } -+ } -+ } -+ return activitiesNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateActivities(data: IActivity[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,38 @@ export class ActivityComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.activities.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.activityService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/activity/route/activity-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/activity/route/activity-routing-resolve.service.spec.ts -index e80e12a7..b368461f 100644 ---- a/src/main/webapp/app/entities/activity/route/activity-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/activity/route/activity-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { IActivity, Activity } from '../activity.model'; -+import { IActivity } from '../activity.model'; - import { ActivityService } from '../service/activity.service'; - --import { ActivityRoutingResolveService } from './activity-routing-resolve.service'; -+import activityResolve from './activity-routing-resolve.service'; - - describe('Activity routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: ActivityRoutingResolveService; - let service: ActivityService; -- let resultActivity: IActivity | undefined; -+ let resultActivity: IActivity | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('Activity routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(ActivityRoutingResolveService); - service = TestBed.inject(ActivityService); - resultActivity = undefined; - }); -@@ -46,8 +44,12 @@ describe('Activity routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultActivity = result; -+ TestBed.runInInjectionContext(() => { -+ activityResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultActivity = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('Activity routing resolve service', () => { - expect(resultActivity).toEqual({ id: 123 }); - }); - -- it('should return new IActivity if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultActivity = result; -+ TestBed.runInInjectionContext(() => { -+ activityResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultActivity = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultActivity).toEqual(new Activity()); -+ expect(resultActivity).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as Activity }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultActivity = result; -+ TestBed.runInInjectionContext(() => { -+ activityResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultActivity = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/activity/route/activity-routing-resolve.service.ts b/src/main/webapp/app/entities/activity/route/activity-routing-resolve.service.ts -index 6f77a021..73cb60c8 100644 ---- a/src/main/webapp/app/entities/activity/route/activity-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/activity/route/activity-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { IActivity, Activity } from '../activity.model'; -+import { IActivity } from '../activity.model'; - import { ActivityService } from '../service/activity.service'; - --@Injectable({ providedIn: 'root' }) --export class ActivityRoutingResolveService implements Resolve { -- constructor(protected service: ActivityService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((activity: HttpResponse) => { -+export const activityResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(ActivityService) -+ .find(id) -+ .pipe( -+ mergeMap((activity: HttpResponse) => { - if (activity.body) { - return of(activity.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new Activity()); - } --} -+ return of(null); -+}; -+ -+export default activityResolve; -diff --git a/src/main/webapp/app/entities/activity/route/activity-routing.module.ts b/src/main/webapp/app/entities/activity/route/activity-routing.module.ts -deleted file mode 100644 -index 5d09ab6d..00000000 ---- a/src/main/webapp/app/entities/activity/route/activity-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { ActivityComponent } from '../list/activity.component'; --import { ActivityDetailComponent } from '../detail/activity-detail.component'; --import { ActivityUpdateComponent } from '../update/activity-update.component'; --import { ActivityRoutingResolveService } from './activity-routing-resolve.service'; -- --const activityRoute: Routes = [ -- { -- path: '', -- component: ActivityComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: ActivityDetailComponent, -- resolve: { -- activity: ActivityRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: ActivityUpdateComponent, -- resolve: { -- activity: ActivityRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: ActivityUpdateComponent, -- resolve: { -- activity: ActivityRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(activityRoute)], -- exports: [RouterModule], --}) --export class ActivityRoutingModule {} -diff --git a/src/main/webapp/app/entities/activity/service/activity.service.spec.ts b/src/main/webapp/app/entities/activity/service/activity.service.spec.ts -index e8d26107..fe7b5789 100644 ---- a/src/main/webapp/app/entities/activity/service/activity.service.spec.ts -+++ b/src/main/webapp/app/entities/activity/service/activity.service.spec.ts -@@ -1,19 +1,21 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { ActivityType } from 'app/entities/enumerations/activity-type.model'; --import { IActivity, Activity } from '../activity.model'; -+import { IActivity } from '../activity.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../activity.test-samples'; - --import { ActivityService } from './activity.service'; -+import { ActivityService, RestActivity } from './activity.service'; -+ -+const requireRestSample: RestActivity = { -+ ...sampleWithRequiredData, -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('Activity Service', () => { - let service: ActivityService; - let httpMock: HttpTestingController; -- let elemDefault: IActivity; - let expectedResult: IActivity | IActivity[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -22,53 +24,26 @@ describe('Activity Service', () => { - expectedResult = null; - service = TestBed.inject(ActivityService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- type: ActivityType.SKILL_COMPLETED, -- data: 'AAAAAAA', -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a Activity', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new Activity()).subscribe(resp => (expectedResult = resp.body)); -+ const activity = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(activity).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -76,26 +51,11 @@ describe('Activity Service', () => { - }); - - it('should update a Activity', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- type: 'BBBBBB', -- data: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const activity = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(activity).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -103,17 +63,9 @@ describe('Activity Service', () => { - }); - - it('should partial update a Activity', () => { -- const patchObject = Object.assign({}, new Activity()); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -123,79 +75,66 @@ describe('Activity Service', () => { - }); - - it('should return a list of Activity', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- type: 'BBBBBB', -- data: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a Activity', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addActivityToCollectionIfMissing', () => { - it('should add a Activity to an empty array', () => { -- const activity: IActivity = { id: 123 }; -+ const activity: IActivity = sampleWithRequiredData; - expectedResult = service.addActivityToCollectionIfMissing([], activity); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(activity); - }); - - it('should not add a Activity to an array that contains it', () => { -- const activity: IActivity = { id: 123 }; -+ const activity: IActivity = sampleWithRequiredData; - const activityCollection: IActivity[] = [ - { - ...activity, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addActivityToCollectionIfMissing(activityCollection, activity); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a Activity to an array that doesn't contain it", () => { -- const activity: IActivity = { id: 123 }; -- const activityCollection: IActivity[] = [{ id: 456 }]; -+ const activity: IActivity = sampleWithRequiredData; -+ const activityCollection: IActivity[] = [sampleWithPartialData]; - expectedResult = service.addActivityToCollectionIfMissing(activityCollection, activity); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(activity); - }); - - it('should add only unique Activity to an array', () => { -- const activityArray: IActivity[] = [{ id: 123 }, { id: 456 }, { id: 22429 }]; -- const activityCollection: IActivity[] = [{ id: 123 }]; -+ const activityArray: IActivity[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const activityCollection: IActivity[] = [sampleWithRequiredData]; - expectedResult = service.addActivityToCollectionIfMissing(activityCollection, ...activityArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const activity: IActivity = { id: 123 }; -- const activity2: IActivity = { id: 456 }; -+ const activity: IActivity = sampleWithRequiredData; -+ const activity2: IActivity = sampleWithPartialData; - expectedResult = service.addActivityToCollectionIfMissing([], activity, activity2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(activity); -@@ -203,18 +142,62 @@ describe('Activity Service', () => { - }); - - it('should accept null and undefined values', () => { -- const activity: IActivity = { id: 123 }; -+ const activity: IActivity = sampleWithRequiredData; - expectedResult = service.addActivityToCollectionIfMissing([], null, activity, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(activity); - }); - - it('should return initial array if no Activity is added', () => { -- const activityCollection: IActivity[] = [{ id: 123 }]; -+ const activityCollection: IActivity[] = [sampleWithRequiredData]; - expectedResult = service.addActivityToCollectionIfMissing(activityCollection, undefined, null); - expect(expectedResult).toEqual(activityCollection); - }); - }); -+ -+ describe('compareActivity', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareActivity(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareActivity(entity1, entity2); -+ const compareResult2 = service.compareActivity(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareActivity(entity1, entity2); -+ const compareResult2 = service.compareActivity(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareActivity(entity1, entity2); -+ const compareResult2 = service.compareActivity(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/activity/service/activity.service.ts b/src/main/webapp/app/entities/activity/service/activity.service.ts -index 197baad0..edd591d2 100644 ---- a/src/main/webapp/app/entities/activity/service/activity.service.ts -+++ b/src/main/webapp/app/entities/activity/service/activity.service.ts -@@ -1,13 +1,28 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { IActivity, getActivityIdentifier } from '../activity.model'; -+import { IActivity, NewActivity } from '../activity.model'; -+ -+export type PartialUpdateActivity = Partial & Pick; -+ -+type RestOf = Omit & { -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestActivity = RestOf; -+ -+export type NewRestActivity = RestOf; -+ -+export type PartialUpdateRestActivity = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,53 +31,67 @@ export type EntityArrayResponseType = HttpResponse; - export class ActivityService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/activities'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(activity: IActivity): Observable { -+ create(activity: NewActivity): Observable { - const copy = this.convertDateFromClient(activity); - return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .post(this.resourceUrl, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - update(activity: IActivity): Observable { - const copy = this.convertDateFromClient(activity); - return this.http -- .put(`${this.resourceUrl}/${getActivityIdentifier(activity) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getActivityIdentifier(activity)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(activity: IActivity): Observable { -+ partialUpdate(activity: PartialUpdateActivity): Observable { - const copy = this.convertDateFromClient(activity); - return this.http -- .patch(`${this.resourceUrl}/${getActivityIdentifier(activity) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getActivityIdentifier(activity)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addActivityToCollectionIfMissing(activityCollection: IActivity[], ...activitiesToCheck: (IActivity | null | undefined)[]): IActivity[] { -- const activities: IActivity[] = activitiesToCheck.filter(isPresent); -+ getActivityIdentifier(activity: Pick): number { -+ return activity.id; -+ } -+ -+ compareActivity(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getActivityIdentifier(o1) === this.getActivityIdentifier(o2) : o1 === o2; -+ } -+ -+ addActivityToCollectionIfMissing>( -+ activityCollection: Type[], -+ ...activitiesToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const activities: Type[] = activitiesToCheck.filter(isPresent); - if (activities.length > 0) { -- const activityCollectionIdentifiers = activityCollection.map(activityItem => getActivityIdentifier(activityItem)!); -+ const activityCollectionIdentifiers = activityCollection.map(activityItem => this.getActivityIdentifier(activityItem)!); - const activitiesToAdd = activities.filter(activityItem => { -- const activityIdentifier = getActivityIdentifier(activityItem); -- if (activityIdentifier == null || activityCollectionIdentifiers.includes(activityIdentifier)) { -+ const activityIdentifier = this.getActivityIdentifier(activityItem); -+ if (activityCollectionIdentifiers.includes(activityIdentifier)) { - return false; - } - activityCollectionIdentifiers.push(activityIdentifier); -@@ -73,28 +102,31 @@ export class ActivityService { - return activityCollection; - } - -- protected convertDateFromClient(activity: IActivity): IActivity { -- return Object.assign({}, activity, { -- createdAt: activity.createdAt?.isValid() ? activity.createdAt.toJSON() : undefined, -- updatedAt: activity.updatedAt?.isValid() ? activity.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromClient(activity: T): RestOf { -+ return { -+ ...activity, -+ createdAt: activity.createdAt?.toJSON() ?? null, -+ updatedAt: activity.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertDateFromServer(restActivity: RestActivity): IActivity { -+ return { -+ ...restActivity, -+ createdAt: restActivity.createdAt ? dayjs(restActivity.createdAt) : undefined, -+ updatedAt: restActivity.updatedAt ? dayjs(restActivity.updatedAt) : undefined, -+ }; - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((activity: IActivity) => { -- activity.createdAt = activity.createdAt ? dayjs(activity.createdAt) : undefined; -- activity.updatedAt = activity.updatedAt ? dayjs(activity.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); -+ } -+ -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/activity/update/activity-update.component.html b/src/main/webapp/app/entities/activity/update/activity-update.component.html -index da6c38f9..09eb470f 100644 ---- a/src/main/webapp/app/entities/activity/update/activity-update.component.html -+++ b/src/main/webapp/app/entities/activity/update/activity-update.component.html -@@ -8,12 +8,12 @@ -
- - --
-+
- - -
- --
-+
- - -
- --
-+
- - -
-@@ -32,13 +32,12 @@ - *ngIf="editForm.get('data')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 255 }" -+ >This field cannot be longer than 255 characters. -- This field cannot be longer than 255 characters. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
-
-diff --git a/src/main/webapp/app/entities/activity/update/activity-update.component.spec.ts b/src/main/webapp/app/entities/activity/update/activity-update.component.spec.ts -index d40fc8c6..136350e3 100644 ---- a/src/main/webapp/app/entities/activity/update/activity-update.component.spec.ts -+++ b/src/main/webapp/app/entities/activity/update/activity-update.component.spec.ts -@@ -7,7 +7,8 @@ import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - - import { ActivityService } from '../service/activity.service'; --import { IActivity, Activity } from '../activity.model'; -+import { IActivity } from '../activity.model'; -+import { ActivityFormService } from './activity-form.service'; - - import { ActivityUpdateComponent } from './activity-update.component'; - -@@ -15,12 +16,12 @@ describe('Activity Management Update Component', () => { - let comp: ActivityUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let activityFormService: ActivityFormService; - let activityService: ActivityService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [ActivityUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), ActivityUpdateComponent], - providers: [ - FormBuilder, - { -@@ -36,6 +37,7 @@ describe('Activity Management Update Component', () => { - - fixture = TestBed.createComponent(ActivityUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ activityFormService = TestBed.inject(ActivityFormService); - activityService = TestBed.inject(ActivityService); - - comp = fixture.componentInstance; -@@ -48,15 +50,16 @@ describe('Activity Management Update Component', () => { - activatedRoute.data = of({ activity }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(activity)); -+ expect(comp.activity).toEqual(activity); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const activity = { id: 123 }; -+ jest.spyOn(activityFormService, 'getActivity').mockReturnValue(activity); - jest.spyOn(activityService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ activity }); -@@ -69,18 +72,20 @@ describe('Activity Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(activityFormService.getActivity).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(activityService.update).toHaveBeenCalledWith(activity); -+ expect(activityService.update).toHaveBeenCalledWith(expect.objectContaining(activity)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const activity = new Activity(); -+ const saveSubject = new Subject>(); -+ const activity = { id: 123 }; -+ jest.spyOn(activityFormService, 'getActivity').mockReturnValue({ id: null }); - jest.spyOn(activityService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ activity }); -+ activatedRoute.data = of({ activity: null }); - comp.ngOnInit(); - - // WHEN -@@ -90,14 +95,15 @@ describe('Activity Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(activityService.create).toHaveBeenCalledWith(activity); -+ expect(activityFormService.getActivity).toHaveBeenCalled(); -+ expect(activityService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const activity = { id: 123 }; - jest.spyOn(activityService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -110,7 +116,7 @@ describe('Activity Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(activityService.update).toHaveBeenCalledWith(activity); -+ expect(activityService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); -diff --git a/src/main/webapp/app/entities/activity/update/activity-update.component.ts b/src/main/webapp/app/entities/activity/update/activity-update.component.ts -index 143a14d1..d0695671 100644 ---- a/src/main/webapp/app/entities/activity/update/activity-update.component.ts -+++ b/src/main/webapp/app/entities/activity/update/activity-update.component.ts -@@ -1,44 +1,42 @@ - import { Component, OnInit } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { FormBuilder, Validators } from '@angular/forms'; - import { ActivatedRoute } from '@angular/router'; - import { Observable } from 'rxjs'; - import { finalize } from 'rxjs/operators'; - --import dayjs from 'dayjs/esm'; --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; -+import SharedModule from 'app/shared/shared.module'; -+import { FormsModule, ReactiveFormsModule } from '@angular/forms'; - --import { IActivity, Activity } from '../activity.model'; --import { ActivityService } from '../service/activity.service'; - import { ActivityType } from 'app/entities/enumerations/activity-type.model'; -+import { IActivity } from '../activity.model'; -+import { ActivityService } from '../service/activity.service'; -+import { ActivityFormService, ActivityFormGroup } from './activity-form.service'; - - @Component({ -+ standalone: true, - selector: 'jhi-activity-update', - templateUrl: './activity-update.component.html', -+ imports: [SharedModule, FormsModule, ReactiveFormsModule], - }) - export class ActivityUpdateComponent implements OnInit { - isSaving = false; -+ activity: IActivity | null = null; - activityTypeValues = Object.keys(ActivityType); - -- editForm = this.fb.group({ -- id: [], -- type: [], -- data: [null, [Validators.maxLength(255)]], -- createdAt: [null, [Validators.required]], -- updatedAt: [null, [Validators.required]], -- }); -+ editForm: ActivityFormGroup = this.activityFormService.createActivityFormGroup(); - -- constructor(protected activityService: ActivityService, protected activatedRoute: ActivatedRoute, protected fb: FormBuilder) {} -+ constructor( -+ protected activityService: ActivityService, -+ protected activityFormService: ActivityFormService, -+ protected activatedRoute: ActivatedRoute, -+ ) {} - - ngOnInit(): void { - this.activatedRoute.data.subscribe(({ activity }) => { -- if (activity.id === undefined) { -- const today = dayjs().startOf('day'); -- activity.createdAt = today; -- activity.updatedAt = today; -+ this.activity = activity; -+ if (activity) { -+ this.updateForm(activity); - } -- -- this.updateForm(activity); - }); - } - -@@ -48,8 +46,8 @@ export class ActivityUpdateComponent implements OnInit { - - save(): void { - this.isSaving = true; -- const activity = this.createFromForm(); -- if (activity.id !== undefined) { -+ const activity = this.activityFormService.getActivity(this.editForm); -+ if (activity.id !== null) { - this.subscribeToSaveResponse(this.activityService.update(activity)); - } else { - this.subscribeToSaveResponse(this.activityService.create(activity)); -@@ -76,23 +74,7 @@ export class ActivityUpdateComponent implements OnInit { - } - - protected updateForm(activity: IActivity): void { -- this.editForm.patchValue({ -- id: activity.id, -- type: activity.type, -- data: activity.data, -- createdAt: activity.createdAt ? activity.createdAt.format(DATE_TIME_FORMAT) : null, -- updatedAt: activity.updatedAt ? activity.updatedAt.format(DATE_TIME_FORMAT) : null, -- }); -- } -- -- protected createFromForm(): IActivity { -- return { -- ...new Activity(), -- id: this.editForm.get(['id'])!.value, -- type: this.editForm.get(['type'])!.value, -- data: this.editForm.get(['data'])!.value, -- createdAt: this.editForm.get(['createdAt'])!.value ? dayjs(this.editForm.get(['createdAt'])!.value, DATE_TIME_FORMAT) : undefined, -- updatedAt: this.editForm.get(['updatedAt'])!.value ? dayjs(this.editForm.get(['updatedAt'])!.value, DATE_TIME_FORMAT) : undefined, -- }; -+ this.activity = activity; -+ this.activityFormService.resetForm(this.editForm, activity); - } - } -diff --git a/src/main/webapp/app/entities/badge-skill/badge-skill.model.ts b/src/main/webapp/app/entities/badge-skill/badge-skill.model.ts -index 3b9b477f..86f88d91 100644 ---- a/src/main/webapp/app/entities/badge-skill/badge-skill.model.ts -+++ b/src/main/webapp/app/entities/badge-skill/badge-skill.model.ts -@@ -2,15 +2,9 @@ import { IBadge } from 'app/entities/badge/badge.model'; - import { ISkill } from 'app/entities/skill/skill.model'; - - export interface IBadgeSkill { -- id?: number; -- badge?: IBadge; -- skill?: ISkill; -+ id: number; -+ badge?: Pick | null; -+ skill?: Pick | null; - } - --export class BadgeSkill implements IBadgeSkill { -- constructor(public id?: number, public badge?: IBadge, public skill?: ISkill) {} --} -- --export function getBadgeSkillIdentifier(badgeSkill: IBadgeSkill): number | undefined { -- return badgeSkill.id; --} -+export type NewBadgeSkill = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/badge-skill/badge-skill.module.ts b/src/main/webapp/app/entities/badge-skill/badge-skill.module.ts -deleted file mode 100644 -index 545840c3..00000000 ---- a/src/main/webapp/app/entities/badge-skill/badge-skill.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { BadgeSkillComponent } from './list/badge-skill.component'; --import { BadgeSkillDetailComponent } from './detail/badge-skill-detail.component'; --import { BadgeSkillUpdateComponent } from './update/badge-skill-update.component'; --import { BadgeSkillDeleteDialogComponent } from './delete/badge-skill-delete-dialog.component'; --import { BadgeSkillRoutingModule } from './route/badge-skill-routing.module'; -- --@NgModule({ -- imports: [SharedModule, BadgeSkillRoutingModule], -- declarations: [BadgeSkillComponent, BadgeSkillDetailComponent, BadgeSkillUpdateComponent, BadgeSkillDeleteDialogComponent], -- entryComponents: [BadgeSkillDeleteDialogComponent], --}) --export class BadgeSkillModule {} -diff --git a/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.html b/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.html -index fdf7281f..f459548f 100644 ---- a/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.spec.ts -index 8b2e19c9..c650b00f 100644 ---- a/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('BadgeSkill Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [BadgeSkillDeleteDialogComponent], -+ imports: [HttpClientTestingModule, BadgeSkillDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(BadgeSkillDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('BadgeSkill Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.ts b/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.ts -index 8baa9457..17311bbd 100644 ---- a/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/badge-skill/delete/badge-skill-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { IBadgeSkill } from '../badge-skill.model'; - import { BadgeSkillService } from '../service/badge-skill.service'; - - @Component({ -+ standalone: true, - templateUrl: './badge-skill-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class BadgeSkillDeleteDialogComponent { - badgeSkill?: IBadgeSkill; - -- constructor(protected badgeSkillService: BadgeSkillService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected badgeSkillService: BadgeSkillService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class BadgeSkillDeleteDialogComponent { - - confirmDelete(id: number): void { - this.badgeSkillService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.html b/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.html -index 15b957ea..74d6538e 100644 ---- a/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.html -+++ b/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.html -@@ -17,13 +17,13 @@ -
Badge
-
- -
-
Skill
-
- -
- -diff --git a/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.spec.ts b/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.spec.ts -index 564d46d0..a1355e5e 100644 ---- a/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { BadgeSkillDetailComponent } from './badge-skill-detail.component'; - - describe('BadgeSkill Management Detail Component', () => { -- let comp: BadgeSkillDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [BadgeSkillDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [BadgeSkillDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ badgeSkill: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: BadgeSkillDetailComponent, -+ resolve: { badgeSkill: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(BadgeSkillDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(BadgeSkillDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load badgeSkill on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load badgeSkill on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', BadgeSkillDetailComponent); - - // THEN -- expect(comp.badgeSkill).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.badgeSkill).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.ts b/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.ts -index 484558f8..580a6a43 100644 ---- a/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.ts -+++ b/src/main/webapp/app/entities/badge-skill/detail/badge-skill-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { IBadgeSkill } from '../badge-skill.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-badge-skill-detail', - templateUrl: './badge-skill-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class BadgeSkillDetailComponent implements OnInit { -- badgeSkill: IBadgeSkill | null = null; -+export class BadgeSkillDetailComponent { -+ @Input() badgeSkill: IBadgeSkill | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ badgeSkill }) => { -- this.badgeSkill = badgeSkill; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.html b/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.html -index 2b657093..b00ae802 100644 ---- a/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.html -+++ b/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.html -@@ -3,9 +3,9 @@ - Badge Skills - -
-- - - -
- -@@ -25,36 +25,52 @@ - - -
-- No badgeSkills found -+ No Badge Skills found -
- --
-+
- - -- -- -+ -+ - - - - - -- -+ - - - - -
ID
-+
-+ ID -+ -+
-+
-- Badge -+
-+ Badge -+ -+
-
-- Skill -+
-+ Skill -+ -+
-
- {{ badgeSkill.id }} - - - - - -diff --git a/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.spec.ts b/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.spec.ts -index 803701e5..943bcbae 100644 ---- a/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.spec.ts -+++ b/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.spec.ts -@@ -1,21 +1,47 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { BadgeSkillService } from '../service/badge-skill.service'; - - import { BadgeSkillComponent } from './badge-skill.component'; -+import SpyInstance = jest.SpyInstance; - - describe('BadgeSkill Management Component', () => { - let comp: BadgeSkillComponent; - let fixture: ComponentFixture; - let service: BadgeSkillService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [BadgeSkillComponent], -+ imports: [ -+ RouterTestingModule.withRoutes([{ path: 'badge-skill', component: BadgeSkillComponent }]), -+ HttpClientTestingModule, -+ BadgeSkillComponent, -+ ], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(BadgeSkillComponent, '') - .compileComponents(); -@@ -23,6 +49,7 @@ describe('BadgeSkill Management Component', () => { - fixture = TestBed.createComponent(BadgeSkillComponent); - comp = fixture.componentInstance; - service = TestBed.inject(BadgeSkillService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +57,8 @@ describe('BadgeSkill Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +68,25 @@ describe('BadgeSkill Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.badgeSkills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.badgeSkills?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to badgeSkillService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getBadgeSkillIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getBadgeSkillIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.badgeSkills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +94,25 @@ describe('BadgeSkill Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +121,8 @@ describe('BadgeSkill Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.badgeSkills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.badgeSkills?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.ts b/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.ts -index 750a0d30..2e3dd09e 100644 ---- a/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.ts -+++ b/src/main/webapp/app/entities/badge-skill/list/badge-skill.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { IBadgeSkill } from '../badge-skill.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { BadgeSkillService } from '../service/badge-skill.service'; --import { BadgeSkillDeleteDialogComponent } from '../delete/badge-skill-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, BadgeSkillService } from '../service/badge-skill.service'; -+import { BadgeSkillDeleteDialogComponent } from '../delete/badge-skill-delete-dialog.component'; -+import { IBadgeSkill } from '../badge-skill.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-badge-skill', - templateUrl: './badge-skill.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class BadgeSkillComponent implements OnInit { -- badgeSkills: IBadgeSkill[]; -+ badgeSkills?: IBadgeSkill[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected badgeSkillService: BadgeSkillService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.badgeSkills = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.badgeSkillService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateBadgeSkills(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected badgeSkillService: BadgeSkillService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.badgeSkills = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: IBadgeSkill): number => this.badgeSkillService.getBadgeSkillIdentifier(item); - -- trackId(_index: number, item: IBadgeSkill): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(badgeSkill: IBadgeSkill): void { - const modalRef = this.modalService.open(BadgeSkillDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.badgeSkill = badgeSkill; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.badgeSkills = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: IBadgeSkill[] | null): IBadgeSkill[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const badgeSkillsNew = this.badgeSkills ?? []; -+ if (data) { -+ for (const d of data) { -+ if (badgeSkillsNew.map(op => op.id).indexOf(d.id) === -1) { -+ badgeSkillsNew.push(d); -+ } -+ } -+ } -+ return badgeSkillsNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateBadgeSkills(data: IBadgeSkill[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,39 @@ export class BadgeSkillComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.badgeSkills.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ eagerload: true, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.badgeSkillService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/badge-skill/route/badge-skill-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/badge-skill/route/badge-skill-routing-resolve.service.spec.ts -index cfe78c49..92d4bfe7 100644 ---- a/src/main/webapp/app/entities/badge-skill/route/badge-skill-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/badge-skill/route/badge-skill-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { IBadgeSkill, BadgeSkill } from '../badge-skill.model'; -+import { IBadgeSkill } from '../badge-skill.model'; - import { BadgeSkillService } from '../service/badge-skill.service'; - --import { BadgeSkillRoutingResolveService } from './badge-skill-routing-resolve.service'; -+import badgeSkillResolve from './badge-skill-routing-resolve.service'; - - describe('BadgeSkill routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: BadgeSkillRoutingResolveService; - let service: BadgeSkillService; -- let resultBadgeSkill: IBadgeSkill | undefined; -+ let resultBadgeSkill: IBadgeSkill | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('BadgeSkill routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(BadgeSkillRoutingResolveService); - service = TestBed.inject(BadgeSkillService); - resultBadgeSkill = undefined; - }); -@@ -46,8 +44,12 @@ describe('BadgeSkill routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultBadgeSkill = result; -+ TestBed.runInInjectionContext(() => { -+ badgeSkillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultBadgeSkill = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('BadgeSkill routing resolve service', () => { - expect(resultBadgeSkill).toEqual({ id: 123 }); - }); - -- it('should return new IBadgeSkill if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultBadgeSkill = result; -+ TestBed.runInInjectionContext(() => { -+ badgeSkillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultBadgeSkill = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultBadgeSkill).toEqual(new BadgeSkill()); -+ expect(resultBadgeSkill).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as BadgeSkill }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultBadgeSkill = result; -+ TestBed.runInInjectionContext(() => { -+ badgeSkillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultBadgeSkill = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/badge-skill/route/badge-skill-routing-resolve.service.ts b/src/main/webapp/app/entities/badge-skill/route/badge-skill-routing-resolve.service.ts -index b4063143..6276edd6 100644 ---- a/src/main/webapp/app/entities/badge-skill/route/badge-skill-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/badge-skill/route/badge-skill-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { IBadgeSkill, BadgeSkill } from '../badge-skill.model'; -+import { IBadgeSkill } from '../badge-skill.model'; - import { BadgeSkillService } from '../service/badge-skill.service'; - --@Injectable({ providedIn: 'root' }) --export class BadgeSkillRoutingResolveService implements Resolve { -- constructor(protected service: BadgeSkillService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((badgeSkill: HttpResponse) => { -+export const badgeSkillResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(BadgeSkillService) -+ .find(id) -+ .pipe( -+ mergeMap((badgeSkill: HttpResponse) => { - if (badgeSkill.body) { - return of(badgeSkill.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new BadgeSkill()); - } --} -+ return of(null); -+}; -+ -+export default badgeSkillResolve; -diff --git a/src/main/webapp/app/entities/badge-skill/route/badge-skill-routing.module.ts b/src/main/webapp/app/entities/badge-skill/route/badge-skill-routing.module.ts -deleted file mode 100644 -index 4107c1d9..00000000 ---- a/src/main/webapp/app/entities/badge-skill/route/badge-skill-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { BadgeSkillComponent } from '../list/badge-skill.component'; --import { BadgeSkillDetailComponent } from '../detail/badge-skill-detail.component'; --import { BadgeSkillUpdateComponent } from '../update/badge-skill-update.component'; --import { BadgeSkillRoutingResolveService } from './badge-skill-routing-resolve.service'; -- --const badgeSkillRoute: Routes = [ -- { -- path: '', -- component: BadgeSkillComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: BadgeSkillDetailComponent, -- resolve: { -- badgeSkill: BadgeSkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: BadgeSkillUpdateComponent, -- resolve: { -- badgeSkill: BadgeSkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: BadgeSkillUpdateComponent, -- resolve: { -- badgeSkill: BadgeSkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(badgeSkillRoute)], -- exports: [RouterModule], --}) --export class BadgeSkillRoutingModule {} -diff --git a/src/main/webapp/app/entities/badge-skill/service/badge-skill.service.spec.ts b/src/main/webapp/app/entities/badge-skill/service/badge-skill.service.spec.ts -index 8b3c877e..a4d9262d 100644 ---- a/src/main/webapp/app/entities/badge-skill/service/badge-skill.service.spec.ts -+++ b/src/main/webapp/app/entities/badge-skill/service/badge-skill.service.spec.ts -@@ -1,14 +1,18 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - --import { IBadgeSkill, BadgeSkill } from '../badge-skill.model'; -+import { IBadgeSkill } from '../badge-skill.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../badge-skill.test-samples'; - - import { BadgeSkillService } from './badge-skill.service'; - -+const requireRestSample: IBadgeSkill = { -+ ...sampleWithRequiredData, -+}; -+ - describe('BadgeSkill Service', () => { - let service: BadgeSkillService; - let httpMock: HttpTestingController; -- let elemDefault: IBadgeSkill; - let expectedResult: IBadgeSkill | IBadgeSkill[] | boolean | null; - - beforeEach(() => { -@@ -18,34 +22,26 @@ describe('BadgeSkill Service', () => { - expectedResult = null; - service = TestBed.inject(BadgeSkillService); - httpMock = TestBed.inject(HttpTestingController); -- -- elemDefault = { -- id: 0, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign({}, elemDefault); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a BadgeSkill', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- }, -- elemDefault -- ); -- -- const expected = Object.assign({}, returnedFromService); -+ const badgeSkill = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - -- service.create(new BadgeSkill()).subscribe(resp => (expectedResult = resp.body)); -+ service.create(badgeSkill).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -53,16 +49,11 @@ describe('BadgeSkill Service', () => { - }); - - it('should update a BadgeSkill', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- }, -- elemDefault -- ); -+ const badgeSkill = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - -- const expected = Object.assign({}, returnedFromService); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ service.update(badgeSkill).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -70,11 +61,9 @@ describe('BadgeSkill Service', () => { - }); - - it('should partial update a BadgeSkill', () => { -- const patchObject = Object.assign({}, new BadgeSkill()); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign({}, returnedFromService); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -84,69 +73,66 @@ describe('BadgeSkill Service', () => { - }); - - it('should return a list of BadgeSkill', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; - -- const expected = Object.assign({}, returnedFromService); -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a BadgeSkill', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addBadgeSkillToCollectionIfMissing', () => { - it('should add a BadgeSkill to an empty array', () => { -- const badgeSkill: IBadgeSkill = { id: 123 }; -+ const badgeSkill: IBadgeSkill = sampleWithRequiredData; - expectedResult = service.addBadgeSkillToCollectionIfMissing([], badgeSkill); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(badgeSkill); - }); - - it('should not add a BadgeSkill to an array that contains it', () => { -- const badgeSkill: IBadgeSkill = { id: 123 }; -+ const badgeSkill: IBadgeSkill = sampleWithRequiredData; - const badgeSkillCollection: IBadgeSkill[] = [ - { - ...badgeSkill, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addBadgeSkillToCollectionIfMissing(badgeSkillCollection, badgeSkill); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a BadgeSkill to an array that doesn't contain it", () => { -- const badgeSkill: IBadgeSkill = { id: 123 }; -- const badgeSkillCollection: IBadgeSkill[] = [{ id: 456 }]; -+ const badgeSkill: IBadgeSkill = sampleWithRequiredData; -+ const badgeSkillCollection: IBadgeSkill[] = [sampleWithPartialData]; - expectedResult = service.addBadgeSkillToCollectionIfMissing(badgeSkillCollection, badgeSkill); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(badgeSkill); - }); - - it('should add only unique BadgeSkill to an array', () => { -- const badgeSkillArray: IBadgeSkill[] = [{ id: 123 }, { id: 456 }, { id: 19752 }]; -- const badgeSkillCollection: IBadgeSkill[] = [{ id: 123 }]; -+ const badgeSkillArray: IBadgeSkill[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const badgeSkillCollection: IBadgeSkill[] = [sampleWithRequiredData]; - expectedResult = service.addBadgeSkillToCollectionIfMissing(badgeSkillCollection, ...badgeSkillArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const badgeSkill: IBadgeSkill = { id: 123 }; -- const badgeSkill2: IBadgeSkill = { id: 456 }; -+ const badgeSkill: IBadgeSkill = sampleWithRequiredData; -+ const badgeSkill2: IBadgeSkill = sampleWithPartialData; - expectedResult = service.addBadgeSkillToCollectionIfMissing([], badgeSkill, badgeSkill2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(badgeSkill); -@@ -154,18 +140,62 @@ describe('BadgeSkill Service', () => { - }); - - it('should accept null and undefined values', () => { -- const badgeSkill: IBadgeSkill = { id: 123 }; -+ const badgeSkill: IBadgeSkill = sampleWithRequiredData; - expectedResult = service.addBadgeSkillToCollectionIfMissing([], null, badgeSkill, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(badgeSkill); - }); - - it('should return initial array if no BadgeSkill is added', () => { -- const badgeSkillCollection: IBadgeSkill[] = [{ id: 123 }]; -+ const badgeSkillCollection: IBadgeSkill[] = [sampleWithRequiredData]; - expectedResult = service.addBadgeSkillToCollectionIfMissing(badgeSkillCollection, undefined, null); - expect(expectedResult).toEqual(badgeSkillCollection); - }); - }); -+ -+ describe('compareBadgeSkill', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareBadgeSkill(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareBadgeSkill(entity1, entity2); -+ const compareResult2 = service.compareBadgeSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareBadgeSkill(entity1, entity2); -+ const compareResult2 = service.compareBadgeSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareBadgeSkill(entity1, entity2); -+ const compareResult2 = service.compareBadgeSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/badge-skill/service/badge-skill.service.ts b/src/main/webapp/app/entities/badge-skill/service/badge-skill.service.ts -index d79f5ae3..e60cb027 100644 ---- a/src/main/webapp/app/entities/badge-skill/service/badge-skill.service.ts -+++ b/src/main/webapp/app/entities/badge-skill/service/badge-skill.service.ts -@@ -5,7 +5,9 @@ import { Observable } from 'rxjs'; - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { IBadgeSkill, getBadgeSkillIdentifier } from '../badge-skill.model'; -+import { IBadgeSkill, NewBadgeSkill } from '../badge-skill.model'; -+ -+export type PartialUpdateBadgeSkill = Partial & Pick; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -14,20 +16,23 @@ export type EntityArrayResponseType = HttpResponse; - export class BadgeSkillService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/badge-skills'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(badgeSkill: IBadgeSkill): Observable { -+ create(badgeSkill: NewBadgeSkill): Observable { - return this.http.post(this.resourceUrl, badgeSkill, { observe: 'response' }); - } - - update(badgeSkill: IBadgeSkill): Observable { -- return this.http.put(`${this.resourceUrl}/${getBadgeSkillIdentifier(badgeSkill) as number}`, badgeSkill, { -+ return this.http.put(`${this.resourceUrl}/${this.getBadgeSkillIdentifier(badgeSkill)}`, badgeSkill, { - observe: 'response', - }); - } - -- partialUpdate(badgeSkill: IBadgeSkill): Observable { -- return this.http.patch(`${this.resourceUrl}/${getBadgeSkillIdentifier(badgeSkill) as number}`, badgeSkill, { -+ partialUpdate(badgeSkill: PartialUpdateBadgeSkill): Observable { -+ return this.http.patch(`${this.resourceUrl}/${this.getBadgeSkillIdentifier(badgeSkill)}`, badgeSkill, { - observe: 'response', - }); - } -@@ -45,16 +50,24 @@ export class BadgeSkillService { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addBadgeSkillToCollectionIfMissing( -- badgeSkillCollection: IBadgeSkill[], -- ...badgeSkillsToCheck: (IBadgeSkill | null | undefined)[] -- ): IBadgeSkill[] { -- const badgeSkills: IBadgeSkill[] = badgeSkillsToCheck.filter(isPresent); -+ getBadgeSkillIdentifier(badgeSkill: Pick): number { -+ return badgeSkill.id; -+ } -+ -+ compareBadgeSkill(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getBadgeSkillIdentifier(o1) === this.getBadgeSkillIdentifier(o2) : o1 === o2; -+ } -+ -+ addBadgeSkillToCollectionIfMissing>( -+ badgeSkillCollection: Type[], -+ ...badgeSkillsToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const badgeSkills: Type[] = badgeSkillsToCheck.filter(isPresent); - if (badgeSkills.length > 0) { -- const badgeSkillCollectionIdentifiers = badgeSkillCollection.map(badgeSkillItem => getBadgeSkillIdentifier(badgeSkillItem)!); -+ const badgeSkillCollectionIdentifiers = badgeSkillCollection.map(badgeSkillItem => this.getBadgeSkillIdentifier(badgeSkillItem)!); - const badgeSkillsToAdd = badgeSkills.filter(badgeSkillItem => { -- const badgeSkillIdentifier = getBadgeSkillIdentifier(badgeSkillItem); -- if (badgeSkillIdentifier == null || badgeSkillCollectionIdentifiers.includes(badgeSkillIdentifier)) { -+ const badgeSkillIdentifier = this.getBadgeSkillIdentifier(badgeSkillItem); -+ if (badgeSkillCollectionIdentifiers.includes(badgeSkillIdentifier)) { - return false; - } - badgeSkillCollectionIdentifiers.push(badgeSkillIdentifier); -diff --git a/src/main/webapp/app/entities/badge-skill/update/badge-skill-update.component.html b/src/main/webapp/app/entities/badge-skill/update/badge-skill-update.component.html -index 7b329a86..96b62f32 100644 ---- a/src/main/webapp/app/entities/badge-skill/update/badge-skill-update.component.html -+++ b/src/main/webapp/app/entities/badge-skill/update/badge-skill-update.component.html -@@ -8,45 +8,35 @@ -
- - --
-+
- - -
- --
-+
- -- -+ -+ - -
-
-- -- This field is required. -- -+ This field is required. -
- --
-+
- -- -+ -+ - -
-
-- -- This field is required. -- -+ This field is required. -
-
- -diff --git a/src/main/webapp/app/entities/badge-skill/update/badge-skill-update.component.spec.ts b/src/main/webapp/app/entities/badge-skill/update/badge-skill-update.component.spec.ts -index 74c99684..295681d9 100644 ---- a/src/main/webapp/app/entities/badge-skill/update/badge-skill-update.component.spec.ts -+++ b/src/main/webapp/app/entities/badge-skill/update/badge-skill-update.component.spec.ts -@@ -6,12 +6,13 @@ import { ActivatedRoute } from '@angular/router'; - import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - --import { BadgeSkillService } from '../service/badge-skill.service'; --import { IBadgeSkill, BadgeSkill } from '../badge-skill.model'; - import { IBadge } from 'app/entities/badge/badge.model'; - import { BadgeService } from 'app/entities/badge/service/badge.service'; - import { ISkill } from 'app/entities/skill/skill.model'; - import { SkillService } from 'app/entities/skill/service/skill.service'; -+import { IBadgeSkill } from '../badge-skill.model'; -+import { BadgeSkillService } from '../service/badge-skill.service'; -+import { BadgeSkillFormService } from './badge-skill-form.service'; - - import { BadgeSkillUpdateComponent } from './badge-skill-update.component'; - -@@ -19,14 +20,14 @@ describe('BadgeSkill Management Update Component', () => { - let comp: BadgeSkillUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let badgeSkillFormService: BadgeSkillFormService; - let badgeSkillService: BadgeSkillService; - let badgeService: BadgeService; - let skillService: SkillService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [BadgeSkillUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), BadgeSkillUpdateComponent], - providers: [ - FormBuilder, - { -@@ -42,6 +43,7 @@ describe('BadgeSkill Management Update Component', () => { - - fixture = TestBed.createComponent(BadgeSkillUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ badgeSkillFormService = TestBed.inject(BadgeSkillFormService); - badgeSkillService = TestBed.inject(BadgeSkillService); - badgeService = TestBed.inject(BadgeService); - skillService = TestBed.inject(SkillService); -@@ -52,10 +54,10 @@ describe('BadgeSkill Management Update Component', () => { - describe('ngOnInit', () => { - it('Should call Badge query and add missing value', () => { - const badgeSkill: IBadgeSkill = { id: 456 }; -- const badge: IBadge = { id: 82584 }; -+ const badge: IBadge = { id: 6819 }; - badgeSkill.badge = badge; - -- const badgeCollection: IBadge[] = [{ id: 64370 }]; -+ const badgeCollection: IBadge[] = [{ id: 22202 }]; - jest.spyOn(badgeService, 'query').mockReturnValue(of(new HttpResponse({ body: badgeCollection }))); - const additionalBadges = [badge]; - const expectedCollection: IBadge[] = [...additionalBadges, ...badgeCollection]; -@@ -65,16 +67,19 @@ describe('BadgeSkill Management Update Component', () => { - comp.ngOnInit(); - - expect(badgeService.query).toHaveBeenCalled(); -- expect(badgeService.addBadgeToCollectionIfMissing).toHaveBeenCalledWith(badgeCollection, ...additionalBadges); -+ expect(badgeService.addBadgeToCollectionIfMissing).toHaveBeenCalledWith( -+ badgeCollection, -+ ...additionalBadges.map(expect.objectContaining), -+ ); - expect(comp.badgesSharedCollection).toEqual(expectedCollection); - }); - - it('Should call Skill query and add missing value', () => { - const badgeSkill: IBadgeSkill = { id: 456 }; -- const skill: ISkill = { id: 9685 }; -+ const skill: ISkill = { id: 16931 }; - badgeSkill.skill = skill; - -- const skillCollection: ISkill[] = [{ id: 20209 }]; -+ const skillCollection: ISkill[] = [{ id: 9699 }]; - jest.spyOn(skillService, 'query').mockReturnValue(of(new HttpResponse({ body: skillCollection }))); - const additionalSkills = [skill]; - const expectedCollection: ISkill[] = [...additionalSkills, ...skillCollection]; -@@ -84,31 +89,35 @@ describe('BadgeSkill Management Update Component', () => { - comp.ngOnInit(); - - expect(skillService.query).toHaveBeenCalled(); -- expect(skillService.addSkillToCollectionIfMissing).toHaveBeenCalledWith(skillCollection, ...additionalSkills); -+ expect(skillService.addSkillToCollectionIfMissing).toHaveBeenCalledWith( -+ skillCollection, -+ ...additionalSkills.map(expect.objectContaining), -+ ); - expect(comp.skillsSharedCollection).toEqual(expectedCollection); - }); - - it('Should update editForm', () => { - const badgeSkill: IBadgeSkill = { id: 456 }; -- const badge: IBadge = { id: 67692 }; -+ const badge: IBadge = { id: 9467 }; - badgeSkill.badge = badge; -- const skill: ISkill = { id: 27866 }; -+ const skill: ISkill = { id: 23096 }; - badgeSkill.skill = skill; - - activatedRoute.data = of({ badgeSkill }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(badgeSkill)); - expect(comp.badgesSharedCollection).toContain(badge); - expect(comp.skillsSharedCollection).toContain(skill); -+ expect(comp.badgeSkill).toEqual(badgeSkill); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const badgeSkill = { id: 123 }; -+ jest.spyOn(badgeSkillFormService, 'getBadgeSkill').mockReturnValue(badgeSkill); - jest.spyOn(badgeSkillService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ badgeSkill }); -@@ -121,18 +130,20 @@ describe('BadgeSkill Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(badgeSkillFormService.getBadgeSkill).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(badgeSkillService.update).toHaveBeenCalledWith(badgeSkill); -+ expect(badgeSkillService.update).toHaveBeenCalledWith(expect.objectContaining(badgeSkill)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const badgeSkill = new BadgeSkill(); -+ const saveSubject = new Subject>(); -+ const badgeSkill = { id: 123 }; -+ jest.spyOn(badgeSkillFormService, 'getBadgeSkill').mockReturnValue({ id: null }); - jest.spyOn(badgeSkillService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ badgeSkill }); -+ activatedRoute.data = of({ badgeSkill: null }); - comp.ngOnInit(); - - // WHEN -@@ -142,14 +153,15 @@ describe('BadgeSkill Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(badgeSkillService.create).toHaveBeenCalledWith(badgeSkill); -+ expect(badgeSkillFormService.getBadgeSkill).toHaveBeenCalled(); -+ expect(badgeSkillService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const badgeSkill = { id: 123 }; - jest.spyOn(badgeSkillService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -162,26 +174,30 @@ describe('BadgeSkill Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(badgeSkillService.update).toHaveBeenCalledWith(badgeSkill); -+ expect(badgeSkillService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); - }); - -- describe('Tracking relationships identifiers', () => { -- describe('trackBadgeById', () => { -- it('Should return tracked Badge primary key', () => { -+ describe('Compare relationships', () => { -+ describe('compareBadge', () => { -+ it('Should forward to badgeService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackBadgeById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(badgeService, 'compareBadge'); -+ comp.compareBadge(entity, entity2); -+ expect(badgeService.compareBadge).toHaveBeenCalledWith(entity, entity2); - }); - }); - -- describe('trackSkillById', () => { -- it('Should return tracked Skill primary key', () => { -+ describe('compareSkill', () => { -+ it('Should forward to skillService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackSkillById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(skillService, 'compareSkill'); -+ comp.compareSkill(entity, entity2); -+ expect(skillService.compareSkill).toHaveBeenCalledWith(entity, entity2); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/badge/badge.model.ts b/src/main/webapp/app/entities/badge/badge.model.ts -index 3a3c84a4..94e7e85c 100644 ---- a/src/main/webapp/app/entities/badge/badge.model.ts -+++ b/src/main/webapp/app/entities/badge/badge.model.ts -@@ -1,46 +1,22 @@ - import dayjs from 'dayjs/esm'; --import { IBadgeSkill } from 'app/entities/badge-skill/badge-skill.model'; - import { IImage } from 'app/entities/image/image.model'; - import { IDimension } from 'app/entities/dimension/dimension.model'; - - export interface IBadge { -- id?: number; -- titleEN?: string; -+ id: number; -+ titleEN?: string | null; - titleDE?: string | null; - descriptionEN?: string | null; - descriptionDE?: string | null; - availableUntil?: dayjs.Dayjs | null; - availableAmount?: number | null; -- requiredScore?: number; -- instantMultiplier?: number; -+ requiredScore?: number | null; -+ instantMultiplier?: number | null; - completionBonus?: number | null; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; -- skills?: IBadgeSkill[] | null; -- image?: IImage | null; -- dimensions?: IDimension[] | null; -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; -+ image?: Pick | null; -+ dimensions?: Pick[] | null; - } - --export class Badge implements IBadge { -- constructor( -- public id?: number, -- public titleEN?: string, -- public titleDE?: string | null, -- public descriptionEN?: string | null, -- public descriptionDE?: string | null, -- public availableUntil?: dayjs.Dayjs | null, -- public availableAmount?: number | null, -- public requiredScore?: number, -- public instantMultiplier?: number, -- public completionBonus?: number | null, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs, -- public skills?: IBadgeSkill[] | null, -- public image?: IImage | null, -- public dimensions?: IDimension[] | null -- ) {} --} -- --export function getBadgeIdentifier(badge: IBadge): number | undefined { -- return badge.id; --} -+export type NewBadge = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/badge/badge.module.ts b/src/main/webapp/app/entities/badge/badge.module.ts -deleted file mode 100644 -index cf067b81..00000000 ---- a/src/main/webapp/app/entities/badge/badge.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { BadgeComponent } from './list/badge.component'; --import { BadgeDetailComponent } from './detail/badge-detail.component'; --import { BadgeUpdateComponent } from './update/badge-update.component'; --import { BadgeDeleteDialogComponent } from './delete/badge-delete-dialog.component'; --import { BadgeRoutingModule } from './route/badge-routing.module'; -- --@NgModule({ -- imports: [SharedModule, BadgeRoutingModule], -- declarations: [BadgeComponent, BadgeDetailComponent, BadgeUpdateComponent, BadgeDeleteDialogComponent], -- entryComponents: [BadgeDeleteDialogComponent], --}) --export class BadgeModule {} -diff --git a/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.html b/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.html -index 08786cc1..6143aa62 100644 ---- a/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.spec.ts -index 18f4c9c8..b736af64 100644 ---- a/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('Badge Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [BadgeDeleteDialogComponent], -+ imports: [HttpClientTestingModule, BadgeDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(BadgeDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('Badge Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.ts b/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.ts -index 32f14c74..3c083cff 100644 ---- a/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/badge/delete/badge-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { IBadge } from '../badge.model'; - import { BadgeService } from '../service/badge.service'; - - @Component({ -+ standalone: true, - templateUrl: './badge-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class BadgeDeleteDialogComponent { - badge?: IBadge; - -- constructor(protected badgeService: BadgeService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected badgeService: BadgeService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class BadgeDeleteDialogComponent { - - confirmDelete(id: number): void { - this.badgeService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/badge/detail/badge-detail.component.html b/src/main/webapp/app/entities/badge/detail/badge-detail.component.html -index 61c63600..038e3aa1 100644 ---- a/src/main/webapp/app/entities/badge/detail/badge-detail.component.html -+++ b/src/main/webapp/app/entities/badge/detail/badge-detail.component.html -@@ -61,13 +61,13 @@ -
Image
-
- -
-
Dimensions
-
- -- {{ dimensions.titleEN }}{{ dimensions.titleEN }}{{ last ? '' : ', ' }} - -
-diff --git a/src/main/webapp/app/entities/badge/detail/badge-detail.component.spec.ts b/src/main/webapp/app/entities/badge/detail/badge-detail.component.spec.ts -index 458b9561..501300a8 100644 ---- a/src/main/webapp/app/entities/badge/detail/badge-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/badge/detail/badge-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { BadgeDetailComponent } from './badge-detail.component'; - - describe('Badge Management Detail Component', () => { -- let comp: BadgeDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [BadgeDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [BadgeDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ badge: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: BadgeDetailComponent, -+ resolve: { badge: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(BadgeDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(BadgeDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load badge on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load badge on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', BadgeDetailComponent); - - // THEN -- expect(comp.badge).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.badge).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/badge/detail/badge-detail.component.ts b/src/main/webapp/app/entities/badge/detail/badge-detail.component.ts -index cff04a62..4d2f015e 100644 ---- a/src/main/webapp/app/entities/badge/detail/badge-detail.component.ts -+++ b/src/main/webapp/app/entities/badge/detail/badge-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { IBadge } from '../badge.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-badge-detail', - templateUrl: './badge-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class BadgeDetailComponent implements OnInit { -- badge: IBadge | null = null; -+export class BadgeDetailComponent { -+ @Input() badge: IBadge | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ badge }) => { -- this.badge = badge; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/badge/list/badge.component.html b/src/main/webapp/app/entities/badge/list/badge.component.html -index dbdc00d7..5c8e90d3 100644 ---- a/src/main/webapp/app/entities/badge/list/badge.component.html -+++ b/src/main/webapp/app/entities/badge/list/badge.component.html -@@ -3,9 +3,9 @@ - Badges - -
-- - - -
- -@@ -25,54 +25,100 @@ - - -
-- No badges found -+ No Badges found -
- --
-+
- - -- -- -+ -+ - - - - - - - - - - - - - - - -- -+ - - - - - -
ID
-+
-+ ID -+ -+
-+
-- Title EN -+
-+ Title EN -+ -+
-
-- Title DE -+
-+ Title DE -+ -+
-
-- Description EN -+
-+ Description EN -+ -+
-
-- Description DE -+
-+ Description DE -+ -+
-
-- Available Until -+
-+ Available Until -+ -+
-
-- Available Amount -+
-+ Available Amount -+ -+
-
-- Required Score -+
-+ Required Score -+ -+
-
-- Instant Multiplier -+
-+ Instant Multiplier -+ -+
-
-- Completion Bonus -+
-+ Completion Bonus -+ -+
-
-- Created At -+
-+ Created At -+ -+
-
-- Updated At -+
-+ Updated At -+ -+
-
-- Image -+
-+ Image -+ -+
-
- {{ badge.id }} -@@ -90,7 +136,7 @@ - {{ badge.updatedAt | formatMediumDatetime }} - - -diff --git a/src/main/webapp/app/entities/badge/list/badge.component.spec.ts b/src/main/webapp/app/entities/badge/list/badge.component.spec.ts -index 05fa3e11..aba4081c 100644 ---- a/src/main/webapp/app/entities/badge/list/badge.component.spec.ts -+++ b/src/main/webapp/app/entities/badge/list/badge.component.spec.ts -@@ -1,21 +1,43 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { BadgeService } from '../service/badge.service'; - - import { BadgeComponent } from './badge.component'; -+import SpyInstance = jest.SpyInstance; - - describe('Badge Management Component', () => { - let comp: BadgeComponent; - let fixture: ComponentFixture; - let service: BadgeService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [BadgeComponent], -+ imports: [RouterTestingModule.withRoutes([{ path: 'badge', component: BadgeComponent }]), HttpClientTestingModule, BadgeComponent], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(BadgeComponent, '') - .compileComponents(); -@@ -23,6 +45,7 @@ describe('Badge Management Component', () => { - fixture = TestBed.createComponent(BadgeComponent); - comp = fixture.componentInstance; - service = TestBed.inject(BadgeService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +53,8 @@ describe('Badge Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +64,25 @@ describe('Badge Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.badges[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.badges?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to badgeService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getBadgeIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getBadgeIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.badges[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +90,25 @@ describe('Badge Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +117,8 @@ describe('Badge Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.badges[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.badges?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/badge/list/badge.component.ts b/src/main/webapp/app/entities/badge/list/badge.component.ts -index 61a748fa..1fb08bb7 100644 ---- a/src/main/webapp/app/entities/badge/list/badge.component.ts -+++ b/src/main/webapp/app/entities/badge/list/badge.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { IBadge } from '../badge.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { BadgeService } from '../service/badge.service'; --import { BadgeDeleteDialogComponent } from '../delete/badge-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, BadgeService } from '../service/badge.service'; -+import { BadgeDeleteDialogComponent } from '../delete/badge-delete-dialog.component'; -+import { IBadge } from '../badge.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-badge', - templateUrl: './badge.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class BadgeComponent implements OnInit { -- badges: IBadge[]; -+ badges?: IBadge[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected badgeService: BadgeService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.badges = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.badgeService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateBadges(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected badgeService: BadgeService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.badges = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: IBadge): number => this.badgeService.getBadgeIdentifier(item); - -- trackId(_index: number, item: IBadge): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(badge: IBadge): void { - const modalRef = this.modalService.open(BadgeDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.badge = badge; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.badges = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: IBadge[] | null): IBadge[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const badgesNew = this.badges ?? []; -+ if (data) { -+ for (const d of data) { -+ if (badgesNew.map(op => op.id).indexOf(d.id) === -1) { -+ badgesNew.push(d); -+ } -+ } -+ } -+ return badgesNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateBadges(data: IBadge[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,39 @@ export class BadgeComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.badges.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ eagerload: true, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.badgeService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/badge/route/badge-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/badge/route/badge-routing-resolve.service.spec.ts -index 23fc754d..ae8be1ba 100644 ---- a/src/main/webapp/app/entities/badge/route/badge-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/badge/route/badge-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { IBadge, Badge } from '../badge.model'; -+import { IBadge } from '../badge.model'; - import { BadgeService } from '../service/badge.service'; - --import { BadgeRoutingResolveService } from './badge-routing-resolve.service'; -+import badgeResolve from './badge-routing-resolve.service'; - - describe('Badge routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: BadgeRoutingResolveService; - let service: BadgeService; -- let resultBadge: IBadge | undefined; -+ let resultBadge: IBadge | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('Badge routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(BadgeRoutingResolveService); - service = TestBed.inject(BadgeService); - resultBadge = undefined; - }); -@@ -46,8 +44,12 @@ describe('Badge routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultBadge = result; -+ TestBed.runInInjectionContext(() => { -+ badgeResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultBadge = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('Badge routing resolve service', () => { - expect(resultBadge).toEqual({ id: 123 }); - }); - -- it('should return new IBadge if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultBadge = result; -+ TestBed.runInInjectionContext(() => { -+ badgeResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultBadge = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultBadge).toEqual(new Badge()); -+ expect(resultBadge).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as Badge }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultBadge = result; -+ TestBed.runInInjectionContext(() => { -+ badgeResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultBadge = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/badge/route/badge-routing-resolve.service.ts b/src/main/webapp/app/entities/badge/route/badge-routing-resolve.service.ts -index 4fff0bf1..fa91d98f 100644 ---- a/src/main/webapp/app/entities/badge/route/badge-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/badge/route/badge-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { IBadge, Badge } from '../badge.model'; -+import { IBadge } from '../badge.model'; - import { BadgeService } from '../service/badge.service'; - --@Injectable({ providedIn: 'root' }) --export class BadgeRoutingResolveService implements Resolve { -- constructor(protected service: BadgeService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((badge: HttpResponse) => { -+export const badgeResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(BadgeService) -+ .find(id) -+ .pipe( -+ mergeMap((badge: HttpResponse) => { - if (badge.body) { - return of(badge.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new Badge()); - } --} -+ return of(null); -+}; -+ -+export default badgeResolve; -diff --git a/src/main/webapp/app/entities/badge/route/badge-routing.module.ts b/src/main/webapp/app/entities/badge/route/badge-routing.module.ts -deleted file mode 100644 -index 8a8450a5..00000000 ---- a/src/main/webapp/app/entities/badge/route/badge-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { BadgeComponent } from '../list/badge.component'; --import { BadgeDetailComponent } from '../detail/badge-detail.component'; --import { BadgeUpdateComponent } from '../update/badge-update.component'; --import { BadgeRoutingResolveService } from './badge-routing-resolve.service'; -- --const badgeRoute: Routes = [ -- { -- path: '', -- component: BadgeComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: BadgeDetailComponent, -- resolve: { -- badge: BadgeRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: BadgeUpdateComponent, -- resolve: { -- badge: BadgeRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: BadgeUpdateComponent, -- resolve: { -- badge: BadgeRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(badgeRoute)], -- exports: [RouterModule], --}) --export class BadgeRoutingModule {} -diff --git a/src/main/webapp/app/entities/badge/service/badge.service.spec.ts b/src/main/webapp/app/entities/badge/service/badge.service.spec.ts -index 2ee3d8fe..41cc64b5 100644 ---- a/src/main/webapp/app/entities/badge/service/badge.service.spec.ts -+++ b/src/main/webapp/app/entities/badge/service/badge.service.spec.ts -@@ -1,18 +1,22 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { IBadge, Badge } from '../badge.model'; -+import { IBadge } from '../badge.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../badge.test-samples'; - --import { BadgeService } from './badge.service'; -+import { BadgeService, RestBadge } from './badge.service'; -+ -+const requireRestSample: RestBadge = { -+ ...sampleWithRequiredData, -+ availableUntil: sampleWithRequiredData.availableUntil?.toJSON(), -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('Badge Service', () => { - let service: BadgeService; - let httpMock: HttpTestingController; -- let elemDefault: IBadge; - let expectedResult: IBadge | IBadge[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -21,63 +25,26 @@ describe('Badge Service', () => { - expectedResult = null; - service = TestBed.inject(BadgeService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- titleEN: 'AAAAAAA', -- titleDE: 'AAAAAAA', -- descriptionEN: 'AAAAAAA', -- descriptionDE: 'AAAAAAA', -- availableUntil: currentDate, -- availableAmount: 0, -- requiredScore: 0, -- instantMultiplier: 0, -- completionBonus: 0, -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- availableUntil: currentDate.format(DATE_TIME_FORMAT), -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a Badge', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- availableUntil: currentDate.format(DATE_TIME_FORMAT), -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- availableUntil: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new Badge()).subscribe(resp => (expectedResult = resp.body)); -+ const badge = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(badge).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -85,34 +52,11 @@ describe('Badge Service', () => { - }); - - it('should update a Badge', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- titleEN: 'BBBBBB', -- titleDE: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- availableUntil: currentDate.format(DATE_TIME_FORMAT), -- availableAmount: 1, -- requiredScore: 1, -- instantMultiplier: 1, -- completionBonus: 1, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- availableUntil: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const badge = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(badge).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -120,24 +64,9 @@ describe('Badge Service', () => { - }); - - it('should partial update a Badge', () => { -- const patchObject = Object.assign( -- { -- titleDE: 'BBBBBB', -- requiredScore: 1, -- }, -- new Badge() -- ); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- availableUntil: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -147,87 +76,66 @@ describe('Badge Service', () => { - }); - - it('should return a list of Badge', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- titleEN: 'BBBBBB', -- titleDE: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- availableUntil: currentDate.format(DATE_TIME_FORMAT), -- availableAmount: 1, -- requiredScore: 1, -- instantMultiplier: 1, -- completionBonus: 1, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- availableUntil: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a Badge', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addBadgeToCollectionIfMissing', () => { - it('should add a Badge to an empty array', () => { -- const badge: IBadge = { id: 123 }; -+ const badge: IBadge = sampleWithRequiredData; - expectedResult = service.addBadgeToCollectionIfMissing([], badge); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(badge); - }); - - it('should not add a Badge to an array that contains it', () => { -- const badge: IBadge = { id: 123 }; -+ const badge: IBadge = sampleWithRequiredData; - const badgeCollection: IBadge[] = [ - { - ...badge, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addBadgeToCollectionIfMissing(badgeCollection, badge); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a Badge to an array that doesn't contain it", () => { -- const badge: IBadge = { id: 123 }; -- const badgeCollection: IBadge[] = [{ id: 456 }]; -+ const badge: IBadge = sampleWithRequiredData; -+ const badgeCollection: IBadge[] = [sampleWithPartialData]; - expectedResult = service.addBadgeToCollectionIfMissing(badgeCollection, badge); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(badge); - }); - - it('should add only unique Badge to an array', () => { -- const badgeArray: IBadge[] = [{ id: 123 }, { id: 456 }, { id: 5756 }]; -- const badgeCollection: IBadge[] = [{ id: 123 }]; -+ const badgeArray: IBadge[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const badgeCollection: IBadge[] = [sampleWithRequiredData]; - expectedResult = service.addBadgeToCollectionIfMissing(badgeCollection, ...badgeArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const badge: IBadge = { id: 123 }; -- const badge2: IBadge = { id: 456 }; -+ const badge: IBadge = sampleWithRequiredData; -+ const badge2: IBadge = sampleWithPartialData; - expectedResult = service.addBadgeToCollectionIfMissing([], badge, badge2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(badge); -@@ -235,18 +143,62 @@ describe('Badge Service', () => { - }); - - it('should accept null and undefined values', () => { -- const badge: IBadge = { id: 123 }; -+ const badge: IBadge = sampleWithRequiredData; - expectedResult = service.addBadgeToCollectionIfMissing([], null, badge, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(badge); - }); - - it('should return initial array if no Badge is added', () => { -- const badgeCollection: IBadge[] = [{ id: 123 }]; -+ const badgeCollection: IBadge[] = [sampleWithRequiredData]; - expectedResult = service.addBadgeToCollectionIfMissing(badgeCollection, undefined, null); - expect(expectedResult).toEqual(badgeCollection); - }); - }); -+ -+ describe('compareBadge', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareBadge(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareBadge(entity1, entity2); -+ const compareResult2 = service.compareBadge(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareBadge(entity1, entity2); -+ const compareResult2 = service.compareBadge(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareBadge(entity1, entity2); -+ const compareResult2 = service.compareBadge(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/badge/service/badge.service.ts b/src/main/webapp/app/entities/badge/service/badge.service.ts -index c3332195..75994260 100644 ---- a/src/main/webapp/app/entities/badge/service/badge.service.ts -+++ b/src/main/webapp/app/entities/badge/service/badge.service.ts -@@ -1,13 +1,29 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { IBadge, getBadgeIdentifier } from '../badge.model'; -+import { IBadge, NewBadge } from '../badge.model'; -+ -+export type PartialUpdateBadge = Partial & Pick; -+ -+type RestOf = Omit & { -+ availableUntil?: string | null; -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestBadge = RestOf; -+ -+export type NewRestBadge = RestOf; -+ -+export type PartialUpdateRestBadge = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,53 +32,65 @@ export type EntityArrayResponseType = HttpResponse; - export class BadgeService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/badges'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(badge: IBadge): Observable { -+ create(badge: NewBadge): Observable { - const copy = this.convertDateFromClient(badge); -- return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ return this.http.post(this.resourceUrl, copy, { observe: 'response' }).pipe(map(res => this.convertResponseFromServer(res))); - } - - update(badge: IBadge): Observable { - const copy = this.convertDateFromClient(badge); - return this.http -- .put(`${this.resourceUrl}/${getBadgeIdentifier(badge) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getBadgeIdentifier(badge)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(badge: IBadge): Observable { -+ partialUpdate(badge: PartialUpdateBadge): Observable { - const copy = this.convertDateFromClient(badge); - return this.http -- .patch(`${this.resourceUrl}/${getBadgeIdentifier(badge) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getBadgeIdentifier(badge)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addBadgeToCollectionIfMissing(badgeCollection: IBadge[], ...badgesToCheck: (IBadge | null | undefined)[]): IBadge[] { -- const badges: IBadge[] = badgesToCheck.filter(isPresent); -+ getBadgeIdentifier(badge: Pick): number { -+ return badge.id; -+ } -+ -+ compareBadge(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getBadgeIdentifier(o1) === this.getBadgeIdentifier(o2) : o1 === o2; -+ } -+ -+ addBadgeToCollectionIfMissing>( -+ badgeCollection: Type[], -+ ...badgesToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const badges: Type[] = badgesToCheck.filter(isPresent); - if (badges.length > 0) { -- const badgeCollectionIdentifiers = badgeCollection.map(badgeItem => getBadgeIdentifier(badgeItem)!); -+ const badgeCollectionIdentifiers = badgeCollection.map(badgeItem => this.getBadgeIdentifier(badgeItem)!); - const badgesToAdd = badges.filter(badgeItem => { -- const badgeIdentifier = getBadgeIdentifier(badgeItem); -- if (badgeIdentifier == null || badgeCollectionIdentifiers.includes(badgeIdentifier)) { -+ const badgeIdentifier = this.getBadgeIdentifier(badgeItem); -+ if (badgeCollectionIdentifiers.includes(badgeIdentifier)) { - return false; - } - badgeCollectionIdentifiers.push(badgeIdentifier); -@@ -73,31 +101,33 @@ export class BadgeService { - return badgeCollection; - } - -- protected convertDateFromClient(badge: IBadge): IBadge { -- return Object.assign({}, badge, { -- availableUntil: badge.availableUntil?.isValid() ? badge.availableUntil.toJSON() : undefined, -- createdAt: badge.createdAt?.isValid() ? badge.createdAt.toJSON() : undefined, -- updatedAt: badge.updatedAt?.isValid() ? badge.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromClient(badge: T): RestOf { -+ return { -+ ...badge, -+ availableUntil: badge.availableUntil?.toJSON() ?? null, -+ createdAt: badge.createdAt?.toJSON() ?? null, -+ updatedAt: badge.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.availableUntil = res.body.availableUntil ? dayjs(res.body.availableUntil) : undefined; -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertDateFromServer(restBadge: RestBadge): IBadge { -+ return { -+ ...restBadge, -+ availableUntil: restBadge.availableUntil ? dayjs(restBadge.availableUntil) : undefined, -+ createdAt: restBadge.createdAt ? dayjs(restBadge.createdAt) : undefined, -+ updatedAt: restBadge.updatedAt ? dayjs(restBadge.updatedAt) : undefined, -+ }; - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((badge: IBadge) => { -- badge.availableUntil = badge.availableUntil ? dayjs(badge.availableUntil) : undefined; -- badge.createdAt = badge.createdAt ? dayjs(badge.createdAt) : undefined; -- badge.updatedAt = badge.updatedAt ? dayjs(badge.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); -+ } -+ -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/badge/update/badge-update.component.html b/src/main/webapp/app/entities/badge/update/badge-update.component.html -index 1aec1286..e17775ec 100644 ---- a/src/main/webapp/app/entities/badge/update/badge-update.component.html -+++ b/src/main/webapp/app/entities/badge/update/badge-update.component.html -@@ -8,42 +8,36 @@ -
- - --
-+
- - -
- --
-+
- - -
-- This field is required. -- This field is required. -- - This field is required to be at least 2 characters. -- This field is required to be at least 2 characters. -- - This field cannot be longer than 50 characters. -- This field cannot be longer than 50 characters. -- -
-
- --
-+
- - -
-@@ -52,21 +46,19 @@ - *ngIf="editForm.get('titleDE')?.errors?.minlength" - jhiTranslate="entity.validation.minlength" - [translateValues]="{ min: 2 }" -+ >This field is required to be at least 2 characters. -- This field is required to be at least 2 characters. -- - This field cannot be longer than 50 characters. -- This field cannot be longer than 50 characters. -- -
-
- --
-+
- - This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- - This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- -
- -
- --
-+
- - This field should be at least 1. -- This field should be at least 1. -- - This field should be a number. -- This field should be a number. -- -
-
- --
-+
- - This field is required. -- This field is required. -- - This field should be at least 0. -- This field should be at least 0. -- - This field cannot be more than 1. -- This field cannot be more than 1. -- - This field should be a number. -- This field should be a number. -- -
-
- --
-+
- -@@ -237,28 +221,25 @@ - class="form-text text-danger" - *ngIf="editForm.get('instantMultiplier')?.errors?.required" - jhiTranslate="entity.validation.required" -+ >This field is required. -- This field is required. -- - This field should be at least 0. -- This field should be at least 0. -- - This field should be a number. -- This field should be a number. -- -
-
- --
-+
- - This field should be at least 0. -- This field should be at least 0. -- - This field should be a number. -- This field should be a number. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -- - -- -+ - -
- --
-+
- -- -+ - -diff --git a/src/main/webapp/app/entities/badge/update/badge-update.component.spec.ts b/src/main/webapp/app/entities/badge/update/badge-update.component.spec.ts -index e3b5d6b0..3ae6af8e 100644 ---- a/src/main/webapp/app/entities/badge/update/badge-update.component.spec.ts -+++ b/src/main/webapp/app/entities/badge/update/badge-update.component.spec.ts -@@ -6,12 +6,13 @@ import { ActivatedRoute } from '@angular/router'; - import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - --import { BadgeService } from '../service/badge.service'; --import { IBadge, Badge } from '../badge.model'; - import { IImage } from 'app/entities/image/image.model'; - import { ImageService } from 'app/entities/image/service/image.service'; - import { IDimension } from 'app/entities/dimension/dimension.model'; - import { DimensionService } from 'app/entities/dimension/service/dimension.service'; -+import { IBadge } from '../badge.model'; -+import { BadgeService } from '../service/badge.service'; -+import { BadgeFormService } from './badge-form.service'; - - import { BadgeUpdateComponent } from './badge-update.component'; - -@@ -19,14 +20,14 @@ describe('Badge Management Update Component', () => { - let comp: BadgeUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let badgeFormService: BadgeFormService; - let badgeService: BadgeService; - let imageService: ImageService; - let dimensionService: DimensionService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [BadgeUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), BadgeUpdateComponent], - providers: [ - FormBuilder, - { -@@ -42,6 +43,7 @@ describe('Badge Management Update Component', () => { - - fixture = TestBed.createComponent(BadgeUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ badgeFormService = TestBed.inject(BadgeFormService); - badgeService = TestBed.inject(BadgeService); - imageService = TestBed.inject(ImageService); - dimensionService = TestBed.inject(DimensionService); -@@ -52,10 +54,10 @@ describe('Badge Management Update Component', () => { - describe('ngOnInit', () => { - it('Should call Image query and add missing value', () => { - const badge: IBadge = { id: 456 }; -- const image: IImage = { id: 9432 }; -+ const image: IImage = { id: 24263 }; - badge.image = image; - -- const imageCollection: IImage[] = [{ id: 19876 }]; -+ const imageCollection: IImage[] = [{ id: 3240 }]; - jest.spyOn(imageService, 'query').mockReturnValue(of(new HttpResponse({ body: imageCollection }))); - const additionalImages = [image]; - const expectedCollection: IImage[] = [...additionalImages, ...imageCollection]; -@@ -65,16 +67,19 @@ describe('Badge Management Update Component', () => { - comp.ngOnInit(); - - expect(imageService.query).toHaveBeenCalled(); -- expect(imageService.addImageToCollectionIfMissing).toHaveBeenCalledWith(imageCollection, ...additionalImages); -+ expect(imageService.addImageToCollectionIfMissing).toHaveBeenCalledWith( -+ imageCollection, -+ ...additionalImages.map(expect.objectContaining), -+ ); - expect(comp.imagesSharedCollection).toEqual(expectedCollection); - }); - - it('Should call Dimension query and add missing value', () => { - const badge: IBadge = { id: 456 }; -- const dimensions: IDimension[] = [{ id: 28962 }]; -+ const dimensions: IDimension[] = [{ id: 21285 }]; - badge.dimensions = dimensions; - -- const dimensionCollection: IDimension[] = [{ id: 89454 }]; -+ const dimensionCollection: IDimension[] = [{ id: 20559 }]; - jest.spyOn(dimensionService, 'query').mockReturnValue(of(new HttpResponse({ body: dimensionCollection }))); - const additionalDimensions = [...dimensions]; - const expectedCollection: IDimension[] = [...additionalDimensions, ...dimensionCollection]; -@@ -84,31 +89,35 @@ describe('Badge Management Update Component', () => { - comp.ngOnInit(); - - expect(dimensionService.query).toHaveBeenCalled(); -- expect(dimensionService.addDimensionToCollectionIfMissing).toHaveBeenCalledWith(dimensionCollection, ...additionalDimensions); -+ expect(dimensionService.addDimensionToCollectionIfMissing).toHaveBeenCalledWith( -+ dimensionCollection, -+ ...additionalDimensions.map(expect.objectContaining), -+ ); - expect(comp.dimensionsSharedCollection).toEqual(expectedCollection); - }); - - it('Should update editForm', () => { - const badge: IBadge = { id: 456 }; -- const image: IImage = { id: 71042 }; -+ const image: IImage = { id: 10274 }; - badge.image = image; -- const dimensions: IDimension = { id: 69203 }; -+ const dimensions: IDimension = { id: 30537 }; - badge.dimensions = [dimensions]; - - activatedRoute.data = of({ badge }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(badge)); - expect(comp.imagesSharedCollection).toContain(image); - expect(comp.dimensionsSharedCollection).toContain(dimensions); -+ expect(comp.badge).toEqual(badge); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const badge = { id: 123 }; -+ jest.spyOn(badgeFormService, 'getBadge').mockReturnValue(badge); - jest.spyOn(badgeService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ badge }); -@@ -121,18 +130,20 @@ describe('Badge Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(badgeFormService.getBadge).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(badgeService.update).toHaveBeenCalledWith(badge); -+ expect(badgeService.update).toHaveBeenCalledWith(expect.objectContaining(badge)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const badge = new Badge(); -+ const saveSubject = new Subject>(); -+ const badge = { id: 123 }; -+ jest.spyOn(badgeFormService, 'getBadge').mockReturnValue({ id: null }); - jest.spyOn(badgeService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ badge }); -+ activatedRoute.data = of({ badge: null }); - comp.ngOnInit(); - - // WHEN -@@ -142,14 +153,15 @@ describe('Badge Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(badgeService.create).toHaveBeenCalledWith(badge); -+ expect(badgeFormService.getBadge).toHaveBeenCalled(); -+ expect(badgeService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const badge = { id: 123 }; - jest.spyOn(badgeService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -162,54 +174,30 @@ describe('Badge Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(badgeService.update).toHaveBeenCalledWith(badge); -+ expect(badgeService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); - }); - -- describe('Tracking relationships identifiers', () => { -- describe('trackImageById', () => { -- it('Should return tracked Image primary key', () => { -+ describe('Compare relationships', () => { -+ describe('compareImage', () => { -+ it('Should forward to imageService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackImageById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(imageService, 'compareImage'); -+ comp.compareImage(entity, entity2); -+ expect(imageService.compareImage).toHaveBeenCalledWith(entity, entity2); - }); - }); - -- describe('trackDimensionById', () => { -- it('Should return tracked Dimension primary key', () => { -+ describe('compareDimension', () => { -+ it('Should forward to dimensionService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackDimensionById(0, entity); -- expect(trackResult).toEqual(entity.id); -- }); -- }); -- }); -- -- describe('Getting selected relationships', () => { -- describe('getSelectedDimension', () => { -- it('Should return option if no Dimension is selected', () => { -- const option = { id: 123 }; -- const result = comp.getSelectedDimension(option); -- expect(result === option).toEqual(true); -- }); -- -- it('Should return selected Dimension for according option', () => { -- const option = { id: 123 }; -- const selected = { id: 123 }; -- const selected2 = { id: 456 }; -- const result = comp.getSelectedDimension(option, [selected2, selected]); -- expect(result === selected).toEqual(true); -- expect(result === selected2).toEqual(false); -- expect(result === option).toEqual(false); -- }); -- -- it('Should return option if this Dimension is not selected', () => { -- const option = { id: 123 }; -- const selected = { id: 456 }; -- const result = comp.getSelectedDimension(option, [selected]); -- expect(result === option).toEqual(true); -- expect(result === selected).toEqual(false); -+ const entity2 = { id: 456 }; -+ jest.spyOn(dimensionService, 'compareDimension'); -+ comp.compareDimension(entity, entity2); -+ expect(dimensionService.compareDimension).toHaveBeenCalledWith(entity, entity2); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/comment/comment.model.ts b/src/main/webapp/app/entities/comment/comment.model.ts -index 597970d8..13d836c8 100644 ---- a/src/main/webapp/app/entities/comment/comment.model.ts -+++ b/src/main/webapp/app/entities/comment/comment.model.ts -@@ -3,25 +3,12 @@ import { ITeam } from 'app/entities/team/team.model'; - import { ISkill } from 'app/entities/skill/skill.model'; - - export interface IComment { -- id?: number; -- text?: string; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; -- team?: ITeam; -- skill?: ISkill; -+ id: number; -+ text?: string | null; -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; -+ team?: Pick | null; -+ skill?: Pick | null; - } - --export class Comment implements IComment { -- constructor( -- public id?: number, -- public text?: string, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs, -- public team?: ITeam, -- public skill?: ISkill -- ) {} --} -- --export function getCommentIdentifier(comment: IComment): number | undefined { -- return comment.id; --} -+export type NewComment = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/comment/comment.module.ts b/src/main/webapp/app/entities/comment/comment.module.ts -deleted file mode 100644 -index 7b531d9a..00000000 ---- a/src/main/webapp/app/entities/comment/comment.module.ts -+++ /dev/null -@@ -1,23 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { CommentComponent } from './list/comment.component'; --import { CommentDetailComponent } from './detail/comment-detail.component'; --import { CommentUpdateComponent } from './update/comment-update.component'; --import { CommentDeleteDialogComponent } from './delete/comment-delete-dialog.component'; --import { CommentRoutingModule } from './route/comment-routing.module'; --// ### MODIFICATION-START ### --import { TeamdojoSharedCommonModule } from '../../custom/shared/shared-common.module'; --// ### MODIFICATION-END ### -- --@NgModule({ -- imports: [ -- SharedModule, -- CommentRoutingModule, -- // ### MODIFICATION-START ### -- TeamdojoSharedCommonModule, -- // ### MODIFICATION-END ### -- ], -- declarations: [CommentComponent, CommentDetailComponent, CommentUpdateComponent, CommentDeleteDialogComponent], -- entryComponents: [CommentDeleteDialogComponent], --}) --export class CommentModule {} -diff --git a/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.html b/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.html -index 8c0f945a..4effbb23 100644 ---- a/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.spec.ts -index 42cd0190..c1fa9abe 100644 ---- a/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('Comment Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [CommentDeleteDialogComponent], -+ imports: [HttpClientTestingModule, CommentDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(CommentDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('Comment Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.ts b/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.ts -index a613ff8c..a2225ee4 100644 ---- a/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/comment/delete/comment-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { IComment } from '../comment.model'; - import { CommentService } from '../service/comment.service'; - - @Component({ -+ standalone: true, - templateUrl: './comment-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class CommentDeleteDialogComponent { - comment?: IComment; - -- constructor(protected commentService: CommentService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected commentService: CommentService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class CommentDeleteDialogComponent { - - confirmDelete(id: number): void { - this.commentService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/comment/detail/comment-detail.component.html b/src/main/webapp/app/entities/comment/detail/comment-detail.component.html -index 942eb154..d61defdd 100644 ---- a/src/main/webapp/app/entities/comment/detail/comment-detail.component.html -+++ b/src/main/webapp/app/entities/comment/detail/comment-detail.component.html -@@ -35,7 +35,9 @@ -
Skill
-
- -
- -diff --git a/src/main/webapp/app/entities/comment/detail/comment-detail.component.spec.ts b/src/main/webapp/app/entities/comment/detail/comment-detail.component.spec.ts -index 4f74965d..7c120ad9 100644 ---- a/src/main/webapp/app/entities/comment/detail/comment-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/comment/detail/comment-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { CommentDetailComponent } from './comment-detail.component'; - - describe('Comment Management Detail Component', () => { -- let comp: CommentDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [CommentDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [CommentDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ comment: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: CommentDetailComponent, -+ resolve: { comment: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(CommentDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(CommentDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load comment on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load comment on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', CommentDetailComponent); - - // THEN -- expect(comp.comment).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.comment).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/comment/detail/comment-detail.component.ts b/src/main/webapp/app/entities/comment/detail/comment-detail.component.ts -index e5e82f51..a454135e 100644 ---- a/src/main/webapp/app/entities/comment/detail/comment-detail.component.ts -+++ b/src/main/webapp/app/entities/comment/detail/comment-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { IComment } from '../comment.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-comment-detail', - templateUrl: './comment-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class CommentDetailComponent implements OnInit { -- comment: IComment | null = null; -+export class CommentDetailComponent { -+ @Input() comment: IComment | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ comment }) => { -- this.comment = comment; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/comment/list/comment.component.html b/src/main/webapp/app/entities/comment/list/comment.component.html -index 7fabe8b8..fc23c621 100644 ---- a/src/main/webapp/app/entities/comment/list/comment.component.html -+++ b/src/main/webapp/app/entities/comment/list/comment.component.html -@@ -91,7 +91,9 @@ -
- - -diff --git a/src/main/webapp/app/entities/comment/list/comment.component.spec.ts b/src/main/webapp/app/entities/comment/list/comment.component.spec.ts -index 41b0a2ef..02e1e087 100644 ---- a/src/main/webapp/app/entities/comment/list/comment.component.spec.ts -+++ b/src/main/webapp/app/entities/comment/list/comment.component.spec.ts -@@ -1,21 +1,47 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { CommentService } from '../service/comment.service'; - - import { CommentComponent } from './comment.component'; -+import SpyInstance = jest.SpyInstance; - - describe('Comment Management Component', () => { - let comp: CommentComponent; - let fixture: ComponentFixture; - let service: CommentService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [CommentComponent], -+ imports: [ -+ RouterTestingModule.withRoutes([{ path: 'comment', component: CommentComponent }]), -+ HttpClientTestingModule, -+ CommentComponent, -+ ], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(CommentComponent, '') - .compileComponents(); -@@ -23,6 +49,7 @@ describe('Comment Management Component', () => { - fixture = TestBed.createComponent(CommentComponent); - comp = fixture.componentInstance; - service = TestBed.inject(CommentService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +57,8 @@ describe('Comment Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +68,25 @@ describe('Comment Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.comments[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.comments?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to commentService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getCommentIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getCommentIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.comments[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +94,25 @@ describe('Comment Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +121,8 @@ describe('Comment Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.comments[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.comments?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/comment/list/comment.component.ts b/src/main/webapp/app/entities/comment/list/comment.component.ts -index 63b38fd4..0dfdb6de 100644 ---- a/src/main/webapp/app/entities/comment/list/comment.component.ts -+++ b/src/main/webapp/app/entities/comment/list/comment.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { IComment } from '../comment.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { CommentService } from '../service/comment.service'; --import { CommentDeleteDialogComponent } from '../delete/comment-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, CommentService } from '../service/comment.service'; -+import { CommentDeleteDialogComponent } from '../delete/comment-delete-dialog.component'; -+import { IComment } from '../comment.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-comment', - templateUrl: './comment.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class CommentComponent implements OnInit { -- comments: IComment[]; -+ comments?: IComment[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected commentService: CommentService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.comments = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.commentService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateComments(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected commentService: CommentService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.comments = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: IComment): number => this.commentService.getCommentIdentifier(item); - -- trackId(_index: number, item: IComment): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(comment: IComment): void { - const modalRef = this.modalService.open(CommentDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.comment = comment; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.comments = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: IComment[] | null): IComment[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const commentsNew = this.comments ?? []; -+ if (data) { -+ for (const d of data) { -+ if (commentsNew.map(op => op.id).indexOf(d.id) === -1) { -+ commentsNew.push(d); -+ } -+ } -+ } -+ return commentsNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateComments(data: IComment[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,39 @@ export class CommentComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.comments.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ eagerload: true, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.commentService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/comment/route/comment-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/comment/route/comment-routing-resolve.service.spec.ts -index ecb6d037..5cb90f0a 100644 ---- a/src/main/webapp/app/entities/comment/route/comment-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/comment/route/comment-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { IComment, Comment } from '../comment.model'; -+import { IComment } from '../comment.model'; - import { CommentService } from '../service/comment.service'; - --import { CommentRoutingResolveService } from './comment-routing-resolve.service'; -+import commentResolve from './comment-routing-resolve.service'; - - describe('Comment routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: CommentRoutingResolveService; - let service: CommentService; -- let resultComment: IComment | undefined; -+ let resultComment: IComment | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('Comment routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(CommentRoutingResolveService); - service = TestBed.inject(CommentService); - resultComment = undefined; - }); -@@ -46,8 +44,12 @@ describe('Comment routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultComment = result; -+ TestBed.runInInjectionContext(() => { -+ commentResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultComment = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('Comment routing resolve service', () => { - expect(resultComment).toEqual({ id: 123 }); - }); - -- it('should return new IComment if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultComment = result; -+ TestBed.runInInjectionContext(() => { -+ commentResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultComment = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultComment).toEqual(new Comment()); -+ expect(resultComment).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as Comment }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultComment = result; -+ TestBed.runInInjectionContext(() => { -+ commentResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultComment = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/comment/route/comment-routing-resolve.service.ts b/src/main/webapp/app/entities/comment/route/comment-routing-resolve.service.ts -index b6fc2b39..236816b7 100644 ---- a/src/main/webapp/app/entities/comment/route/comment-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/comment/route/comment-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { IComment, Comment } from '../comment.model'; -+import { IComment } from '../comment.model'; - import { CommentService } from '../service/comment.service'; - --@Injectable({ providedIn: 'root' }) --export class CommentRoutingResolveService implements Resolve { -- constructor(protected service: CommentService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((comment: HttpResponse) => { -+export const commentResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(CommentService) -+ .find(id) -+ .pipe( -+ mergeMap((comment: HttpResponse) => { - if (comment.body) { - return of(comment.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new Comment()); - } --} -+ return of(null); -+}; -+ -+export default commentResolve; -diff --git a/src/main/webapp/app/entities/comment/route/comment-routing.module.ts b/src/main/webapp/app/entities/comment/route/comment-routing.module.ts -deleted file mode 100644 -index 3837bef9..00000000 ---- a/src/main/webapp/app/entities/comment/route/comment-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { CommentComponent } from '../list/comment.component'; --import { CommentDetailComponent } from '../detail/comment-detail.component'; --import { CommentUpdateComponent } from '../update/comment-update.component'; --import { CommentRoutingResolveService } from './comment-routing-resolve.service'; -- --const commentRoute: Routes = [ -- { -- path: '', -- component: CommentComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: CommentDetailComponent, -- resolve: { -- comment: CommentRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: CommentUpdateComponent, -- resolve: { -- comment: CommentRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: CommentUpdateComponent, -- resolve: { -- comment: CommentRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(commentRoute)], -- exports: [RouterModule], --}) --export class CommentRoutingModule {} -diff --git a/src/main/webapp/app/entities/comment/service/comment.service.spec.ts b/src/main/webapp/app/entities/comment/service/comment.service.spec.ts -index 8237fb40..388e55dc 100644 ---- a/src/main/webapp/app/entities/comment/service/comment.service.spec.ts -+++ b/src/main/webapp/app/entities/comment/service/comment.service.spec.ts -@@ -1,18 +1,21 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { IComment, Comment } from '../comment.model'; -+import { IComment } from '../comment.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../comment.test-samples'; - --import { CommentService } from './comment.service'; -+import { CommentService, RestComment } from './comment.service'; -+ -+const requireRestSample: RestComment = { -+ ...sampleWithRequiredData, -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('Comment Service', () => { - let service: CommentService; - let httpMock: HttpTestingController; -- let elemDefault: IComment; - let expectedResult: IComment | IComment[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -21,52 +24,26 @@ describe('Comment Service', () => { - expectedResult = null; - service = TestBed.inject(CommentService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- text: 'AAAAAAA', -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a Comment', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new Comment()).subscribe(resp => (expectedResult = resp.body)); -+ const comment = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(comment).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -74,25 +51,11 @@ describe('Comment Service', () => { - }); - - it('should update a Comment', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- text: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const comment = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(comment).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -100,23 +63,9 @@ describe('Comment Service', () => { - }); - - it('should partial update a Comment', () => { -- const patchObject = Object.assign( -- { -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- new Comment() -- ); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -126,78 +75,66 @@ describe('Comment Service', () => { - }); - - it('should return a list of Comment', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- text: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a Comment', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addCommentToCollectionIfMissing', () => { - it('should add a Comment to an empty array', () => { -- const comment: IComment = { id: 123 }; -+ const comment: IComment = sampleWithRequiredData; - expectedResult = service.addCommentToCollectionIfMissing([], comment); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(comment); - }); - - it('should not add a Comment to an array that contains it', () => { -- const comment: IComment = { id: 123 }; -+ const comment: IComment = sampleWithRequiredData; - const commentCollection: IComment[] = [ - { - ...comment, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addCommentToCollectionIfMissing(commentCollection, comment); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a Comment to an array that doesn't contain it", () => { -- const comment: IComment = { id: 123 }; -- const commentCollection: IComment[] = [{ id: 456 }]; -+ const comment: IComment = sampleWithRequiredData; -+ const commentCollection: IComment[] = [sampleWithPartialData]; - expectedResult = service.addCommentToCollectionIfMissing(commentCollection, comment); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(comment); - }); - - it('should add only unique Comment to an array', () => { -- const commentArray: IComment[] = [{ id: 123 }, { id: 456 }, { id: 2755 }]; -- const commentCollection: IComment[] = [{ id: 123 }]; -+ const commentArray: IComment[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const commentCollection: IComment[] = [sampleWithRequiredData]; - expectedResult = service.addCommentToCollectionIfMissing(commentCollection, ...commentArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const comment: IComment = { id: 123 }; -- const comment2: IComment = { id: 456 }; -+ const comment: IComment = sampleWithRequiredData; -+ const comment2: IComment = sampleWithPartialData; - expectedResult = service.addCommentToCollectionIfMissing([], comment, comment2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(comment); -@@ -205,18 +142,62 @@ describe('Comment Service', () => { - }); - - it('should accept null and undefined values', () => { -- const comment: IComment = { id: 123 }; -+ const comment: IComment = sampleWithRequiredData; - expectedResult = service.addCommentToCollectionIfMissing([], null, comment, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(comment); - }); - - it('should return initial array if no Comment is added', () => { -- const commentCollection: IComment[] = [{ id: 123 }]; -+ const commentCollection: IComment[] = [sampleWithRequiredData]; - expectedResult = service.addCommentToCollectionIfMissing(commentCollection, undefined, null); - expect(expectedResult).toEqual(commentCollection); - }); - }); -+ -+ describe('compareComment', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareComment(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareComment(entity1, entity2); -+ const compareResult2 = service.compareComment(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareComment(entity1, entity2); -+ const compareResult2 = service.compareComment(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareComment(entity1, entity2); -+ const compareResult2 = service.compareComment(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/comment/service/comment.service.ts b/src/main/webapp/app/entities/comment/service/comment.service.ts -index 0e06804b..f663777d 100644 ---- a/src/main/webapp/app/entities/comment/service/comment.service.ts -+++ b/src/main/webapp/app/entities/comment/service/comment.service.ts -@@ -1,13 +1,28 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { IComment, getCommentIdentifier } from '../comment.model'; -+import { IComment, NewComment } from '../comment.model'; -+ -+export type PartialUpdateComment = Partial & Pick; -+ -+type RestOf = Omit & { -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestComment = RestOf; -+ -+export type NewRestComment = RestOf; -+ -+export type PartialUpdateRestComment = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,53 +31,67 @@ export type EntityArrayResponseType = HttpResponse; - export class CommentService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/comments'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(comment: IComment): Observable { -+ create(comment: NewComment): Observable { - const copy = this.convertDateFromClient(comment); - return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .post(this.resourceUrl, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - update(comment: IComment): Observable { - const copy = this.convertDateFromClient(comment); - return this.http -- .put(`${this.resourceUrl}/${getCommentIdentifier(comment) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getCommentIdentifier(comment)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(comment: IComment): Observable { -+ partialUpdate(comment: PartialUpdateComment): Observable { - const copy = this.convertDateFromClient(comment); - return this.http -- .patch(`${this.resourceUrl}/${getCommentIdentifier(comment) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getCommentIdentifier(comment)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addCommentToCollectionIfMissing(commentCollection: IComment[], ...commentsToCheck: (IComment | null | undefined)[]): IComment[] { -- const comments: IComment[] = commentsToCheck.filter(isPresent); -+ getCommentIdentifier(comment: Pick): number { -+ return comment.id; -+ } -+ -+ compareComment(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getCommentIdentifier(o1) === this.getCommentIdentifier(o2) : o1 === o2; -+ } -+ -+ addCommentToCollectionIfMissing>( -+ commentCollection: Type[], -+ ...commentsToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const comments: Type[] = commentsToCheck.filter(isPresent); - if (comments.length > 0) { -- const commentCollectionIdentifiers = commentCollection.map(commentItem => getCommentIdentifier(commentItem)!); -+ const commentCollectionIdentifiers = commentCollection.map(commentItem => this.getCommentIdentifier(commentItem)!); - const commentsToAdd = comments.filter(commentItem => { -- const commentIdentifier = getCommentIdentifier(commentItem); -- if (commentIdentifier == null || commentCollectionIdentifiers.includes(commentIdentifier)) { -+ const commentIdentifier = this.getCommentIdentifier(commentItem); -+ if (commentCollectionIdentifiers.includes(commentIdentifier)) { - return false; - } - commentCollectionIdentifiers.push(commentIdentifier); -@@ -73,28 +102,31 @@ export class CommentService { - return commentCollection; - } - -- protected convertDateFromClient(comment: IComment): IComment { -- return Object.assign({}, comment, { -- createdAt: comment.createdAt?.isValid() ? comment.createdAt.toJSON() : undefined, -- updatedAt: comment.updatedAt?.isValid() ? comment.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromClient(comment: T): RestOf { -+ return { -+ ...comment, -+ createdAt: comment.createdAt?.toJSON() ?? null, -+ updatedAt: comment.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertDateFromServer(restComment: RestComment): IComment { -+ return { -+ ...restComment, -+ createdAt: restComment.createdAt ? dayjs(restComment.createdAt) : undefined, -+ updatedAt: restComment.updatedAt ? dayjs(restComment.updatedAt) : undefined, -+ }; - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((comment: IComment) => { -- comment.createdAt = comment.createdAt ? dayjs(comment.createdAt) : undefined; -- comment.updatedAt = comment.updatedAt ? dayjs(comment.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); -+ } -+ -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/comment/update/comment-update.component.html b/src/main/webapp/app/entities/comment/update/comment-update.component.html -index 646633c9..c4a4907f 100644 ---- a/src/main/webapp/app/entities/comment/update/comment-update.component.html -+++ b/src/main/webapp/app/entities/comment/update/comment-update.component.html -@@ -8,30 +8,29 @@ -
- - --
-+
- - -
- --
-+
- - -
-- -- This field is required. -- -+ This field is required. - This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -- - -- -+ - -
-
-- -- This field is required. -- -+ This field is required. -
- -- -+ -
-+ - -- - -- - -- -
-
-- -- This field is required. -- -+ This field is required. -
-
- -diff --git a/src/main/webapp/app/entities/comment/update/comment-update.component.spec.ts b/src/main/webapp/app/entities/comment/update/comment-update.component.spec.ts -index 9e02c6d1..58be926c 100644 ---- a/src/main/webapp/app/entities/comment/update/comment-update.component.spec.ts -+++ b/src/main/webapp/app/entities/comment/update/comment-update.component.spec.ts -@@ -6,12 +6,13 @@ import { ActivatedRoute } from '@angular/router'; - import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - --import { CommentService } from '../service/comment.service'; --import { IComment, Comment } from '../comment.model'; - import { ITeam } from 'app/entities/team/team.model'; - import { TeamService } from 'app/entities/team/service/team.service'; - import { ISkill } from 'app/entities/skill/skill.model'; - import { SkillService } from 'app/entities/skill/service/skill.service'; -+import { IComment } from '../comment.model'; -+import { CommentService } from '../service/comment.service'; -+import { CommentFormService } from './comment-form.service'; - - import { CommentUpdateComponent } from './comment-update.component'; - -@@ -19,14 +20,14 @@ describe('Comment Management Update Component', () => { - let comp: CommentUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let commentFormService: CommentFormService; - let commentService: CommentService; - let teamService: TeamService; - let skillService: SkillService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [CommentUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), CommentUpdateComponent], - providers: [ - FormBuilder, - { -@@ -42,6 +43,7 @@ describe('Comment Management Update Component', () => { - - fixture = TestBed.createComponent(CommentUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ commentFormService = TestBed.inject(CommentFormService); - commentService = TestBed.inject(CommentService); - teamService = TestBed.inject(TeamService); - skillService = TestBed.inject(SkillService); -@@ -52,10 +54,10 @@ describe('Comment Management Update Component', () => { - describe('ngOnInit', () => { - it('Should call Team query and add missing value', () => { - const comment: IComment = { id: 456 }; -- const team: ITeam = { id: 51342 }; -+ const team: ITeam = { id: 13093 }; - comment.team = team; - -- const teamCollection: ITeam[] = [{ id: 85290 }]; -+ const teamCollection: ITeam[] = [{ id: 24335 }]; - jest.spyOn(teamService, 'query').mockReturnValue(of(new HttpResponse({ body: teamCollection }))); - const additionalTeams = [team]; - const expectedCollection: ITeam[] = [...additionalTeams, ...teamCollection]; -@@ -65,16 +67,19 @@ describe('Comment Management Update Component', () => { - comp.ngOnInit(); - - expect(teamService.query).toHaveBeenCalled(); -- expect(teamService.addTeamToCollectionIfMissing).toHaveBeenCalledWith(teamCollection, ...additionalTeams); -+ expect(teamService.addTeamToCollectionIfMissing).toHaveBeenCalledWith( -+ teamCollection, -+ ...additionalTeams.map(expect.objectContaining), -+ ); - expect(comp.teamsSharedCollection).toEqual(expectedCollection); - }); - - it('Should call Skill query and add missing value', () => { - const comment: IComment = { id: 456 }; -- const skill: ISkill = { id: 1923 }; -+ const skill: ISkill = { id: 11526 }; - comment.skill = skill; - -- const skillCollection: ISkill[] = [{ id: 78540 }]; -+ const skillCollection: ISkill[] = [{ id: 23298 }]; - jest.spyOn(skillService, 'query').mockReturnValue(of(new HttpResponse({ body: skillCollection }))); - const additionalSkills = [skill]; - const expectedCollection: ISkill[] = [...additionalSkills, ...skillCollection]; -@@ -84,31 +89,35 @@ describe('Comment Management Update Component', () => { - comp.ngOnInit(); - - expect(skillService.query).toHaveBeenCalled(); -- expect(skillService.addSkillToCollectionIfMissing).toHaveBeenCalledWith(skillCollection, ...additionalSkills); -+ expect(skillService.addSkillToCollectionIfMissing).toHaveBeenCalledWith( -+ skillCollection, -+ ...additionalSkills.map(expect.objectContaining), -+ ); - expect(comp.skillsSharedCollection).toEqual(expectedCollection); - }); - - it('Should update editForm', () => { - const comment: IComment = { id: 456 }; -- const team: ITeam = { id: 89702 }; -+ const team: ITeam = { id: 25120 }; - comment.team = team; -- const skill: ISkill = { id: 30354 }; -+ const skill: ISkill = { id: 28529 }; - comment.skill = skill; - - activatedRoute.data = of({ comment }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(comment)); - expect(comp.teamsSharedCollection).toContain(team); - expect(comp.skillsSharedCollection).toContain(skill); -+ expect(comp.comment).toEqual(comment); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const comment = { id: 123 }; -+ jest.spyOn(commentFormService, 'getComment').mockReturnValue(comment); - jest.spyOn(commentService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ comment }); -@@ -121,18 +130,20 @@ describe('Comment Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(commentFormService.getComment).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(commentService.update).toHaveBeenCalledWith(comment); -+ expect(commentService.update).toHaveBeenCalledWith(expect.objectContaining(comment)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const comment = new Comment(); -+ const saveSubject = new Subject>(); -+ const comment = { id: 123 }; -+ jest.spyOn(commentFormService, 'getComment').mockReturnValue({ id: null }); - jest.spyOn(commentService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ comment }); -+ activatedRoute.data = of({ comment: null }); - comp.ngOnInit(); - - // WHEN -@@ -142,14 +153,15 @@ describe('Comment Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(commentService.create).toHaveBeenCalledWith(comment); -+ expect(commentFormService.getComment).toHaveBeenCalled(); -+ expect(commentService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const comment = { id: 123 }; - jest.spyOn(commentService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -162,26 +174,30 @@ describe('Comment Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(commentService.update).toHaveBeenCalledWith(comment); -+ expect(commentService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); - }); - -- describe('Tracking relationships identifiers', () => { -- describe('trackTeamById', () => { -- it('Should return tracked Team primary key', () => { -+ describe('Compare relationships', () => { -+ describe('compareTeam', () => { -+ it('Should forward to teamService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackTeamById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(teamService, 'compareTeam'); -+ comp.compareTeam(entity, entity2); -+ expect(teamService.compareTeam).toHaveBeenCalledWith(entity, entity2); - }); - }); - -- describe('trackSkillById', () => { -- it('Should return tracked Skill primary key', () => { -+ describe('compareSkill', () => { -+ it('Should forward to skillService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackSkillById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(skillService, 'compareSkill'); -+ comp.compareSkill(entity, entity2); -+ expect(skillService.compareSkill).toHaveBeenCalledWith(entity, entity2); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.html b/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.html -index 5af4dd2d..ffbdadf5 100644 ---- a/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.spec.ts -index 4dc751bd..65125d85 100644 ---- a/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('Dimension Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [DimensionDeleteDialogComponent], -+ imports: [HttpClientTestingModule, DimensionDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(DimensionDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('Dimension Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.ts b/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.ts -index 7416e371..4d6d34fc 100644 ---- a/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/dimension/delete/dimension-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { IDimension } from '../dimension.model'; - import { DimensionService } from '../service/dimension.service'; - - @Component({ -+ standalone: true, - templateUrl: './dimension-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class DimensionDeleteDialogComponent { - dimension?: IDimension; - -- constructor(protected dimensionService: DimensionService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected dimensionService: DimensionService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class DimensionDeleteDialogComponent { - - confirmDelete(id: number): void { - this.dimensionService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/dimension/detail/dimension-detail.component.spec.ts b/src/main/webapp/app/entities/dimension/detail/dimension-detail.component.spec.ts -index 04cec141..99b9d0ec 100644 ---- a/src/main/webapp/app/entities/dimension/detail/dimension-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/dimension/detail/dimension-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { DimensionDetailComponent } from './dimension-detail.component'; - - describe('Dimension Management Detail Component', () => { -- let comp: DimensionDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [DimensionDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [DimensionDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ dimension: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: DimensionDetailComponent, -+ resolve: { dimension: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(DimensionDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(DimensionDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load dimension on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load dimension on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', DimensionDetailComponent); - - // THEN -- expect(comp.dimension).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.dimension).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/dimension/detail/dimension-detail.component.ts b/src/main/webapp/app/entities/dimension/detail/dimension-detail.component.ts -index 6c916776..2ce49245 100644 ---- a/src/main/webapp/app/entities/dimension/detail/dimension-detail.component.ts -+++ b/src/main/webapp/app/entities/dimension/detail/dimension-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { IDimension } from '../dimension.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-dimension-detail', - templateUrl: './dimension-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class DimensionDetailComponent implements OnInit { -- dimension: IDimension | null = null; -+export class DimensionDetailComponent { -+ @Input() dimension: IDimension | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ dimension }) => { -- this.dimension = dimension; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/dimension/dimension.model.ts b/src/main/webapp/app/entities/dimension/dimension.model.ts -index 1c6d8b7d..87b57909 100644 ---- a/src/main/webapp/app/entities/dimension/dimension.model.ts -+++ b/src/main/webapp/app/entities/dimension/dimension.model.ts -@@ -1,36 +1,17 @@ - import dayjs from 'dayjs/esm'; --import { ILevel } from 'app/entities/level/level.model'; - import { IBadge } from 'app/entities/badge/badge.model'; - import { ITeam } from 'app/entities/team/team.model'; - - export interface IDimension { -- id?: number; -- titleEN?: string; -+ id: number; -+ titleEN?: string | null; - titleDE?: string | null; - descriptionEN?: string | null; - descriptionDE?: string | null; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; -- levels?: ILevel[] | null; -- badges?: IBadge[] | null; -- participants?: ITeam[] | null; -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; -+ badges?: Pick[] | null; -+ participants?: Pick[] | null; - } - --export class Dimension implements IDimension { -- constructor( -- public id?: number, -- public titleEN?: string, -- public titleDE?: string | null, -- public descriptionEN?: string | null, -- public descriptionDE?: string | null, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs, -- public levels?: ILevel[] | null, -- public badges?: IBadge[] | null, -- public participants?: ITeam[] | null -- ) {} --} -- --export function getDimensionIdentifier(dimension: IDimension): number | undefined { -- return dimension.id; --} -+export type NewDimension = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/dimension/dimension.module.ts b/src/main/webapp/app/entities/dimension/dimension.module.ts -deleted file mode 100644 -index 516968a0..00000000 ---- a/src/main/webapp/app/entities/dimension/dimension.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { DimensionComponent } from './list/dimension.component'; --import { DimensionDetailComponent } from './detail/dimension-detail.component'; --import { DimensionUpdateComponent } from './update/dimension-update.component'; --import { DimensionDeleteDialogComponent } from './delete/dimension-delete-dialog.component'; --import { DimensionRoutingModule } from './route/dimension-routing.module'; -- --@NgModule({ -- imports: [SharedModule, DimensionRoutingModule], -- declarations: [DimensionComponent, DimensionDetailComponent, DimensionUpdateComponent, DimensionDeleteDialogComponent], -- entryComponents: [DimensionDeleteDialogComponent], --}) --export class DimensionModule {} -diff --git a/src/main/webapp/app/entities/dimension/list/dimension.component.html b/src/main/webapp/app/entities/dimension/list/dimension.component.html -index e31ca1dd..3d9861c1 100644 ---- a/src/main/webapp/app/entities/dimension/list/dimension.component.html -+++ b/src/main/webapp/app/entities/dimension/list/dimension.component.html -@@ -3,9 +3,9 @@ - Dimensions - -
-- - - -
- -@@ -25,36 +25,64 @@ - - -
-- No dimensions found -+ No Dimensions found -
- --
-+
- - -- -- -+ -+ - - - - - - - - - -- -+ - -
ID
-+
-+ ID -+ -+
-+
-- Title EN -+
-+ Title EN -+ -+
-
-- Title DE -+
-+ Title DE -+ -+
-
-- Description EN -+
-+ Description EN -+ -+
-
-- Description DE -+
-+ Description DE -+ -+
-
-- Created At -+
-+ Created At -+ -+
-
-- Updated At -+
-+ Updated At -+ -+
-
- {{ dimension.id }} -diff --git a/src/main/webapp/app/entities/dimension/list/dimension.component.spec.ts b/src/main/webapp/app/entities/dimension/list/dimension.component.spec.ts -index 33fb20c7..1d4471a1 100644 ---- a/src/main/webapp/app/entities/dimension/list/dimension.component.spec.ts -+++ b/src/main/webapp/app/entities/dimension/list/dimension.component.spec.ts -@@ -1,21 +1,47 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { DimensionService } from '../service/dimension.service'; - - import { DimensionComponent } from './dimension.component'; -+import SpyInstance = jest.SpyInstance; - - describe('Dimension Management Component', () => { - let comp: DimensionComponent; - let fixture: ComponentFixture; - let service: DimensionService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [DimensionComponent], -+ imports: [ -+ RouterTestingModule.withRoutes([{ path: 'dimension', component: DimensionComponent }]), -+ HttpClientTestingModule, -+ DimensionComponent, -+ ], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(DimensionComponent, '') - .compileComponents(); -@@ -23,6 +49,7 @@ describe('Dimension Management Component', () => { - fixture = TestBed.createComponent(DimensionComponent); - comp = fixture.componentInstance; - service = TestBed.inject(DimensionService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +57,8 @@ describe('Dimension Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +68,25 @@ describe('Dimension Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.dimensions[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.dimensions?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to dimensionService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getDimensionIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getDimensionIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.dimensions[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +94,25 @@ describe('Dimension Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +121,8 @@ describe('Dimension Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.dimensions[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.dimensions?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/dimension/list/dimension.component.ts b/src/main/webapp/app/entities/dimension/list/dimension.component.ts -index c2ce158e..0ebc412c 100644 ---- a/src/main/webapp/app/entities/dimension/list/dimension.component.ts -+++ b/src/main/webapp/app/entities/dimension/list/dimension.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { IDimension } from '../dimension.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { DimensionService } from '../service/dimension.service'; --import { DimensionDeleteDialogComponent } from '../delete/dimension-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, DimensionService } from '../service/dimension.service'; -+import { DimensionDeleteDialogComponent } from '../delete/dimension-delete-dialog.component'; -+import { IDimension } from '../dimension.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-dimension', - templateUrl: './dimension.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class DimensionComponent implements OnInit { -- dimensions: IDimension[]; -+ dimensions?: IDimension[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected dimensionService: DimensionService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.dimensions = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.dimensionService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateDimensions(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected dimensionService: DimensionService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.dimensions = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: IDimension): number => this.dimensionService.getDimensionIdentifier(item); - -- trackId(_index: number, item: IDimension): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(dimension: IDimension): void { - const modalRef = this.modalService.open(DimensionDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.dimension = dimension; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.dimensions = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: IDimension[] | null): IDimension[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const dimensionsNew = this.dimensions ?? []; -+ if (data) { -+ for (const d of data) { -+ if (dimensionsNew.map(op => op.id).indexOf(d.id) === -1) { -+ dimensionsNew.push(d); -+ } -+ } -+ } -+ return dimensionsNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateDimensions(data: IDimension[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,38 @@ export class DimensionComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.dimensions.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.dimensionService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/dimension/route/dimension-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/dimension/route/dimension-routing-resolve.service.spec.ts -index e4662adf..fafa7f27 100644 ---- a/src/main/webapp/app/entities/dimension/route/dimension-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/dimension/route/dimension-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { IDimension, Dimension } from '../dimension.model'; -+import { IDimension } from '../dimension.model'; - import { DimensionService } from '../service/dimension.service'; - --import { DimensionRoutingResolveService } from './dimension-routing-resolve.service'; -+import dimensionResolve from './dimension-routing-resolve.service'; - - describe('Dimension routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: DimensionRoutingResolveService; - let service: DimensionService; -- let resultDimension: IDimension | undefined; -+ let resultDimension: IDimension | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('Dimension routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(DimensionRoutingResolveService); - service = TestBed.inject(DimensionService); - resultDimension = undefined; - }); -@@ -46,8 +44,12 @@ describe('Dimension routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultDimension = result; -+ TestBed.runInInjectionContext(() => { -+ dimensionResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultDimension = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('Dimension routing resolve service', () => { - expect(resultDimension).toEqual({ id: 123 }); - }); - -- it('should return new IDimension if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultDimension = result; -+ TestBed.runInInjectionContext(() => { -+ dimensionResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultDimension = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultDimension).toEqual(new Dimension()); -+ expect(resultDimension).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as Dimension }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultDimension = result; -+ TestBed.runInInjectionContext(() => { -+ dimensionResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultDimension = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/dimension/route/dimension-routing-resolve.service.ts b/src/main/webapp/app/entities/dimension/route/dimension-routing-resolve.service.ts -index ac2436fd..ecd83c83 100644 ---- a/src/main/webapp/app/entities/dimension/route/dimension-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/dimension/route/dimension-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { IDimension, Dimension } from '../dimension.model'; -+import { IDimension } from '../dimension.model'; - import { DimensionService } from '../service/dimension.service'; - --@Injectable({ providedIn: 'root' }) --export class DimensionRoutingResolveService implements Resolve { -- constructor(protected service: DimensionService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((dimension: HttpResponse) => { -+export const dimensionResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(DimensionService) -+ .find(id) -+ .pipe( -+ mergeMap((dimension: HttpResponse) => { - if (dimension.body) { - return of(dimension.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new Dimension()); - } --} -+ return of(null); -+}; -+ -+export default dimensionResolve; -diff --git a/src/main/webapp/app/entities/dimension/route/dimension-routing.module.ts b/src/main/webapp/app/entities/dimension/route/dimension-routing.module.ts -deleted file mode 100644 -index 2e8a5a8b..00000000 ---- a/src/main/webapp/app/entities/dimension/route/dimension-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { DimensionComponent } from '../list/dimension.component'; --import { DimensionDetailComponent } from '../detail/dimension-detail.component'; --import { DimensionUpdateComponent } from '../update/dimension-update.component'; --import { DimensionRoutingResolveService } from './dimension-routing-resolve.service'; -- --const dimensionRoute: Routes = [ -- { -- path: '', -- component: DimensionComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: DimensionDetailComponent, -- resolve: { -- dimension: DimensionRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: DimensionUpdateComponent, -- resolve: { -- dimension: DimensionRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: DimensionUpdateComponent, -- resolve: { -- dimension: DimensionRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(dimensionRoute)], -- exports: [RouterModule], --}) --export class DimensionRoutingModule {} -diff --git a/src/main/webapp/app/entities/dimension/service/dimension.service.spec.ts b/src/main/webapp/app/entities/dimension/service/dimension.service.spec.ts -index 21d0f830..7af877a8 100644 ---- a/src/main/webapp/app/entities/dimension/service/dimension.service.spec.ts -+++ b/src/main/webapp/app/entities/dimension/service/dimension.service.spec.ts -@@ -1,18 +1,21 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { IDimension, Dimension } from '../dimension.model'; -+import { IDimension } from '../dimension.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../dimension.test-samples'; - --import { DimensionService } from './dimension.service'; -+import { DimensionService, RestDimension } from './dimension.service'; -+ -+const requireRestSample: RestDimension = { -+ ...sampleWithRequiredData, -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('Dimension Service', () => { - let service: DimensionService; - let httpMock: HttpTestingController; -- let elemDefault: IDimension; - let expectedResult: IDimension | IDimension[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -21,55 +24,26 @@ describe('Dimension Service', () => { - expectedResult = null; - service = TestBed.inject(DimensionService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- titleEN: 'AAAAAAA', -- titleDE: 'AAAAAAA', -- descriptionEN: 'AAAAAAA', -- descriptionDE: 'AAAAAAA', -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a Dimension', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new Dimension()).subscribe(resp => (expectedResult = resp.body)); -+ const dimension = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(dimension).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -77,28 +51,11 @@ describe('Dimension Service', () => { - }); - - it('should update a Dimension', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- titleEN: 'BBBBBB', -- titleDE: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const dimension = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(dimension).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -106,25 +63,9 @@ describe('Dimension Service', () => { - }); - - it('should partial update a Dimension', () => { -- const patchObject = Object.assign( -- { -- titleDE: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- new Dimension() -- ); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -134,81 +75,66 @@ describe('Dimension Service', () => { - }); - - it('should return a list of Dimension', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- titleEN: 'BBBBBB', -- titleDE: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a Dimension', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addDimensionToCollectionIfMissing', () => { - it('should add a Dimension to an empty array', () => { -- const dimension: IDimension = { id: 123 }; -+ const dimension: IDimension = sampleWithRequiredData; - expectedResult = service.addDimensionToCollectionIfMissing([], dimension); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(dimension); - }); - - it('should not add a Dimension to an array that contains it', () => { -- const dimension: IDimension = { id: 123 }; -+ const dimension: IDimension = sampleWithRequiredData; - const dimensionCollection: IDimension[] = [ - { - ...dimension, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addDimensionToCollectionIfMissing(dimensionCollection, dimension); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a Dimension to an array that doesn't contain it", () => { -- const dimension: IDimension = { id: 123 }; -- const dimensionCollection: IDimension[] = [{ id: 456 }]; -+ const dimension: IDimension = sampleWithRequiredData; -+ const dimensionCollection: IDimension[] = [sampleWithPartialData]; - expectedResult = service.addDimensionToCollectionIfMissing(dimensionCollection, dimension); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(dimension); - }); - - it('should add only unique Dimension to an array', () => { -- const dimensionArray: IDimension[] = [{ id: 123 }, { id: 456 }, { id: 13236 }]; -- const dimensionCollection: IDimension[] = [{ id: 123 }]; -+ const dimensionArray: IDimension[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const dimensionCollection: IDimension[] = [sampleWithRequiredData]; - expectedResult = service.addDimensionToCollectionIfMissing(dimensionCollection, ...dimensionArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const dimension: IDimension = { id: 123 }; -- const dimension2: IDimension = { id: 456 }; -+ const dimension: IDimension = sampleWithRequiredData; -+ const dimension2: IDimension = sampleWithPartialData; - expectedResult = service.addDimensionToCollectionIfMissing([], dimension, dimension2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(dimension); -@@ -216,18 +142,62 @@ describe('Dimension Service', () => { - }); - - it('should accept null and undefined values', () => { -- const dimension: IDimension = { id: 123 }; -+ const dimension: IDimension = sampleWithRequiredData; - expectedResult = service.addDimensionToCollectionIfMissing([], null, dimension, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(dimension); - }); - - it('should return initial array if no Dimension is added', () => { -- const dimensionCollection: IDimension[] = [{ id: 123 }]; -+ const dimensionCollection: IDimension[] = [sampleWithRequiredData]; - expectedResult = service.addDimensionToCollectionIfMissing(dimensionCollection, undefined, null); - expect(expectedResult).toEqual(dimensionCollection); - }); - }); -+ -+ describe('compareDimension', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareDimension(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareDimension(entity1, entity2); -+ const compareResult2 = service.compareDimension(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareDimension(entity1, entity2); -+ const compareResult2 = service.compareDimension(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareDimension(entity1, entity2); -+ const compareResult2 = service.compareDimension(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/dimension/service/dimension.service.ts b/src/main/webapp/app/entities/dimension/service/dimension.service.ts -index ae273d0c..32e10f3b 100644 ---- a/src/main/webapp/app/entities/dimension/service/dimension.service.ts -+++ b/src/main/webapp/app/entities/dimension/service/dimension.service.ts -@@ -1,13 +1,28 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { IDimension, getDimensionIdentifier } from '../dimension.model'; -+import { IDimension, NewDimension } from '../dimension.model'; -+ -+export type PartialUpdateDimension = Partial & Pick; -+ -+type RestOf = Omit & { -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestDimension = RestOf; -+ -+export type NewRestDimension = RestOf; -+ -+export type PartialUpdateRestDimension = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,56 +31,67 @@ export type EntityArrayResponseType = HttpResponse; - export class DimensionService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/dimensions'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(dimension: IDimension): Observable { -+ create(dimension: NewDimension): Observable { - const copy = this.convertDateFromClient(dimension); - return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .post(this.resourceUrl, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - update(dimension: IDimension): Observable { - const copy = this.convertDateFromClient(dimension); - return this.http -- .put(`${this.resourceUrl}/${getDimensionIdentifier(dimension) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getDimensionIdentifier(dimension)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(dimension: IDimension): Observable { -+ partialUpdate(dimension: PartialUpdateDimension): Observable { - const copy = this.convertDateFromClient(dimension); - return this.http -- .patch(`${this.resourceUrl}/${getDimensionIdentifier(dimension) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getDimensionIdentifier(dimension)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addDimensionToCollectionIfMissing( -- dimensionCollection: IDimension[], -- ...dimensionsToCheck: (IDimension | null | undefined)[] -- ): IDimension[] { -- const dimensions: IDimension[] = dimensionsToCheck.filter(isPresent); -+ getDimensionIdentifier(dimension: Pick): number { -+ return dimension.id; -+ } -+ -+ compareDimension(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getDimensionIdentifier(o1) === this.getDimensionIdentifier(o2) : o1 === o2; -+ } -+ -+ addDimensionToCollectionIfMissing>( -+ dimensionCollection: Type[], -+ ...dimensionsToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const dimensions: Type[] = dimensionsToCheck.filter(isPresent); - if (dimensions.length > 0) { -- const dimensionCollectionIdentifiers = dimensionCollection.map(dimensionItem => getDimensionIdentifier(dimensionItem)!); -+ const dimensionCollectionIdentifiers = dimensionCollection.map(dimensionItem => this.getDimensionIdentifier(dimensionItem)!); - const dimensionsToAdd = dimensions.filter(dimensionItem => { -- const dimensionIdentifier = getDimensionIdentifier(dimensionItem); -- if (dimensionIdentifier == null || dimensionCollectionIdentifiers.includes(dimensionIdentifier)) { -+ const dimensionIdentifier = this.getDimensionIdentifier(dimensionItem); -+ if (dimensionCollectionIdentifiers.includes(dimensionIdentifier)) { - return false; - } - dimensionCollectionIdentifiers.push(dimensionIdentifier); -@@ -76,28 +102,31 @@ export class DimensionService { - return dimensionCollection; - } - -- protected convertDateFromClient(dimension: IDimension): IDimension { -- return Object.assign({}, dimension, { -- createdAt: dimension.createdAt?.isValid() ? dimension.createdAt.toJSON() : undefined, -- updatedAt: dimension.updatedAt?.isValid() ? dimension.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromClient(dimension: T): RestOf { -+ return { -+ ...dimension, -+ createdAt: dimension.createdAt?.toJSON() ?? null, -+ updatedAt: dimension.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertDateFromServer(restDimension: RestDimension): IDimension { -+ return { -+ ...restDimension, -+ createdAt: restDimension.createdAt ? dayjs(restDimension.createdAt) : undefined, -+ updatedAt: restDimension.updatedAt ? dayjs(restDimension.updatedAt) : undefined, -+ }; - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((dimension: IDimension) => { -- dimension.createdAt = dimension.createdAt ? dayjs(dimension.createdAt) : undefined; -- dimension.updatedAt = dimension.updatedAt ? dayjs(dimension.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); -+ } -+ -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/dimension/update/dimension-update.component.html b/src/main/webapp/app/entities/dimension/update/dimension-update.component.html -index 000e2d1e..68778b02 100644 ---- a/src/main/webapp/app/entities/dimension/update/dimension-update.component.html -+++ b/src/main/webapp/app/entities/dimension/update/dimension-update.component.html -@@ -8,42 +8,36 @@ -
- - --
-+
- - -
- --
-+
- - -
-- This field is required. -- This field is required. -- - This field is required to be at least 1 characters. -- This field is required to be at least 1 characters. -- - This field cannot be longer than 50 characters. -- This field cannot be longer than 50 characters. -- -
-
- --
-+
- - -
-@@ -52,21 +46,19 @@ - *ngIf="editForm.get('titleDE')?.errors?.minlength" - jhiTranslate="entity.validation.minlength" - [translateValues]="{ min: 1 }" -+ >This field is required to be at least 1 characters. -- This field is required to be at least 1 characters. -- - This field cannot be longer than 50 characters. -- This field cannot be longer than 50 characters. -- -
-
- --
-+
- - This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- - This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
-
-diff --git a/src/main/webapp/app/entities/dimension/update/dimension-update.component.spec.ts b/src/main/webapp/app/entities/dimension/update/dimension-update.component.spec.ts -index ed5841fb..44963dc3 100644 ---- a/src/main/webapp/app/entities/dimension/update/dimension-update.component.spec.ts -+++ b/src/main/webapp/app/entities/dimension/update/dimension-update.component.spec.ts -@@ -7,7 +7,8 @@ import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - - import { DimensionService } from '../service/dimension.service'; --import { IDimension, Dimension } from '../dimension.model'; -+import { IDimension } from '../dimension.model'; -+import { DimensionFormService } from './dimension-form.service'; - - import { DimensionUpdateComponent } from './dimension-update.component'; - -@@ -15,12 +16,12 @@ describe('Dimension Management Update Component', () => { - let comp: DimensionUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let dimensionFormService: DimensionFormService; - let dimensionService: DimensionService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [DimensionUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), DimensionUpdateComponent], - providers: [ - FormBuilder, - { -@@ -36,6 +37,7 @@ describe('Dimension Management Update Component', () => { - - fixture = TestBed.createComponent(DimensionUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ dimensionFormService = TestBed.inject(DimensionFormService); - dimensionService = TestBed.inject(DimensionService); - - comp = fixture.componentInstance; -@@ -48,15 +50,16 @@ describe('Dimension Management Update Component', () => { - activatedRoute.data = of({ dimension }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(dimension)); -+ expect(comp.dimension).toEqual(dimension); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const dimension = { id: 123 }; -+ jest.spyOn(dimensionFormService, 'getDimension').mockReturnValue(dimension); - jest.spyOn(dimensionService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ dimension }); -@@ -69,18 +72,20 @@ describe('Dimension Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(dimensionFormService.getDimension).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(dimensionService.update).toHaveBeenCalledWith(dimension); -+ expect(dimensionService.update).toHaveBeenCalledWith(expect.objectContaining(dimension)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const dimension = new Dimension(); -+ const saveSubject = new Subject>(); -+ const dimension = { id: 123 }; -+ jest.spyOn(dimensionFormService, 'getDimension').mockReturnValue({ id: null }); - jest.spyOn(dimensionService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ dimension }); -+ activatedRoute.data = of({ dimension: null }); - comp.ngOnInit(); - - // WHEN -@@ -90,14 +95,15 @@ describe('Dimension Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(dimensionService.create).toHaveBeenCalledWith(dimension); -+ expect(dimensionFormService.getDimension).toHaveBeenCalled(); -+ expect(dimensionService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const dimension = { id: 123 }; - jest.spyOn(dimensionService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -110,7 +116,7 @@ describe('Dimension Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(dimensionService.update).toHaveBeenCalledWith(dimension); -+ expect(dimensionService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); -diff --git a/src/main/webapp/app/entities/dimension/update/dimension-update.component.ts b/src/main/webapp/app/entities/dimension/update/dimension-update.component.ts -index 3768a3dc..588f1a37 100644 ---- a/src/main/webapp/app/entities/dimension/update/dimension-update.component.ts -+++ b/src/main/webapp/app/entities/dimension/update/dimension-update.component.ts -@@ -1,44 +1,40 @@ - import { Component, OnInit } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { FormBuilder, Validators } from '@angular/forms'; - import { ActivatedRoute } from '@angular/router'; - import { Observable } from 'rxjs'; - import { finalize } from 'rxjs/operators'; - --import dayjs from 'dayjs/esm'; --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; -+import SharedModule from 'app/shared/shared.module'; -+import { FormsModule, ReactiveFormsModule } from '@angular/forms'; - --import { IDimension, Dimension } from '../dimension.model'; -+import { IDimension } from '../dimension.model'; - import { DimensionService } from '../service/dimension.service'; -+import { DimensionFormService, DimensionFormGroup } from './dimension-form.service'; - - @Component({ -+ standalone: true, - selector: 'jhi-dimension-update', - templateUrl: './dimension-update.component.html', -+ imports: [SharedModule, FormsModule, ReactiveFormsModule], - }) - export class DimensionUpdateComponent implements OnInit { - isSaving = false; -+ dimension: IDimension | null = null; - -- editForm = this.fb.group({ -- id: [], -- titleEN: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]], -- titleDE: [null, [Validators.minLength(1), Validators.maxLength(50)]], -- descriptionEN: [null, [Validators.maxLength(4096)]], -- descriptionDE: [null, [Validators.maxLength(4096)]], -- createdAt: [null, [Validators.required]], -- updatedAt: [null, [Validators.required]], -- }); -+ editForm: DimensionFormGroup = this.dimensionFormService.createDimensionFormGroup(); - -- constructor(protected dimensionService: DimensionService, protected activatedRoute: ActivatedRoute, protected fb: FormBuilder) {} -+ constructor( -+ protected dimensionService: DimensionService, -+ protected dimensionFormService: DimensionFormService, -+ protected activatedRoute: ActivatedRoute, -+ ) {} - - ngOnInit(): void { - this.activatedRoute.data.subscribe(({ dimension }) => { -- if (dimension.id === undefined) { -- const today = dayjs().startOf('day'); -- dimension.createdAt = today; -- dimension.updatedAt = today; -+ this.dimension = dimension; -+ if (dimension) { -+ this.updateForm(dimension); - } -- -- this.updateForm(dimension); - }); - } - -@@ -48,8 +44,8 @@ export class DimensionUpdateComponent implements OnInit { - - save(): void { - this.isSaving = true; -- const dimension = this.createFromForm(); -- if (dimension.id !== undefined) { -+ const dimension = this.dimensionFormService.getDimension(this.editForm); -+ if (dimension.id !== null) { - this.subscribeToSaveResponse(this.dimensionService.update(dimension)); - } else { - this.subscribeToSaveResponse(this.dimensionService.create(dimension)); -@@ -76,27 +72,7 @@ export class DimensionUpdateComponent implements OnInit { - } - - protected updateForm(dimension: IDimension): void { -- this.editForm.patchValue({ -- id: dimension.id, -- titleEN: dimension.titleEN, -- titleDE: dimension.titleDE, -- descriptionEN: dimension.descriptionEN, -- descriptionDE: dimension.descriptionDE, -- createdAt: dimension.createdAt ? dimension.createdAt.format(DATE_TIME_FORMAT) : null, -- updatedAt: dimension.updatedAt ? dimension.updatedAt.format(DATE_TIME_FORMAT) : null, -- }); -- } -- -- protected createFromForm(): IDimension { -- return { -- ...new Dimension(), -- id: this.editForm.get(['id'])!.value, -- titleEN: this.editForm.get(['titleEN'])!.value, -- titleDE: this.editForm.get(['titleDE'])!.value, -- descriptionEN: this.editForm.get(['descriptionEN'])!.value, -- descriptionDE: this.editForm.get(['descriptionDE'])!.value, -- createdAt: this.editForm.get(['createdAt'])!.value ? dayjs(this.editForm.get(['createdAt'])!.value, DATE_TIME_FORMAT) : undefined, -- updatedAt: this.editForm.get(['updatedAt'])!.value ? dayjs(this.editForm.get(['updatedAt'])!.value, DATE_TIME_FORMAT) : undefined, -- }; -+ this.dimension = dimension; -+ this.dimensionFormService.resetForm(this.editForm, dimension); - } - } -diff --git a/src/main/webapp/app/entities/entity-navbar-items.ts b/src/main/webapp/app/entities/entity-navbar-items.ts -index b2d6634e..36fdddac 100644 ---- a/src/main/webapp/app/entities/entity-navbar-items.ts -+++ b/src/main/webapp/app/entities/entity-navbar-items.ts -@@ -1,72 +1,74 @@ --export const EntityNavbarItems = [ -+import NavbarItem from 'app/layouts/navbar/navbar-item.model'; -+ -+export const EntityNavbarItems: NavbarItem[] = [ - { - name: 'Activity', -- route: 'activity', -+ route: '/activity', - translationKey: 'global.menu.entities.activity', - }, - { - name: 'Badge', -- route: 'badge', -+ route: '/badge', - translationKey: 'global.menu.entities.badge', - }, - { - name: 'BadgeSkill', -- route: 'badge-skill', -+ route: '/badge-skill', - translationKey: 'global.menu.entities.badgeSkill', - }, - { - name: 'Comment', -- route: 'comment', -+ route: '/comment', - translationKey: 'global.menu.entities.comment', - }, - { - name: 'Dimension', -- route: 'dimension', -+ route: '/dimension', - translationKey: 'global.menu.entities.dimension', - }, - { - name: 'Image', -- route: 'image', -+ route: '/image', - translationKey: 'global.menu.entities.image', - }, - { - name: 'Level', -- route: 'level', -+ route: '/level', - translationKey: 'global.menu.entities.level', - }, - { - name: 'LevelSkill', -- route: 'level-skill', -+ route: '/level-skill', - translationKey: 'global.menu.entities.levelSkill', - }, - { - name: 'Report', -- route: 'report', -+ route: '/report', - translationKey: 'global.menu.entities.report', - }, - { - name: 'Skill', -- route: 'skill', -+ route: '/skill', - translationKey: 'global.menu.entities.skill', - }, - { - name: 'Team', -- route: 'team', -+ route: '/team', - translationKey: 'global.menu.entities.team', - }, - { - name: 'TeamSkill', -- route: 'team-skill', -+ route: '/team-skill', - translationKey: 'global.menu.entities.teamSkill', - }, - { - name: 'Training', -- route: 'training', -+ route: '/training', - translationKey: 'global.menu.entities.training', - }, - { - name: 'TeamGroup', -- route: 'team-group', -+ route: '/team-group', - translationKey: 'global.menu.entities.teamGroup', - }, - ]; -diff --git a/src/main/webapp/app/entities/entity-routing.module.ts b/src/main/webapp/app/entities/entity-routing.module.ts -index 61e1518c..1b7999ed 100644 ---- a/src/main/webapp/app/entities/entity-routing.module.ts -+++ b/src/main/webapp/app/entities/entity-routing.module.ts -@@ -7,72 +7,72 @@ import { RouterModule } from '@angular/router'; - { - path: 'activity', - data: { pageTitle: 'teamDojoApp.activity.home.title' }, -- loadChildren: () => import('./activity/activity.module').then(m => m.ActivityModule), -+ loadChildren: () => import('./activity/activity.routes'), - }, - { - path: 'badge', - data: { pageTitle: 'teamDojoApp.badge.home.title' }, -- loadChildren: () => import('./badge/badge.module').then(m => m.BadgeModule), -+ loadChildren: () => import('./badge/badge.routes'), - }, - { - path: 'badge-skill', - data: { pageTitle: 'teamDojoApp.badgeSkill.home.title' }, -- loadChildren: () => import('./badge-skill/badge-skill.module').then(m => m.BadgeSkillModule), -+ loadChildren: () => import('./badge-skill/badge-skill.routes'), - }, - { - path: 'comment', - data: { pageTitle: 'teamDojoApp.comment.home.title' }, -- loadChildren: () => import('./comment/comment.module').then(m => m.CommentModule), -+ loadChildren: () => import('./comment/comment.routes'), - }, - { - path: 'dimension', - data: { pageTitle: 'teamDojoApp.dimension.home.title' }, -- loadChildren: () => import('./dimension/dimension.module').then(m => m.DimensionModule), -+ loadChildren: () => import('./dimension/dimension.routes'), - }, - { - path: 'image', - data: { pageTitle: 'teamDojoApp.image.home.title' }, -- loadChildren: () => import('./image/image.module').then(m => m.ImageModule), -+ loadChildren: () => import('./image/image.routes'), - }, - { - path: 'level', - data: { pageTitle: 'teamDojoApp.level.home.title' }, -- loadChildren: () => import('./level/level.module').then(m => m.LevelModule), -+ loadChildren: () => import('./level/level.routes'), - }, - { - path: 'level-skill', - data: { pageTitle: 'teamDojoApp.levelSkill.home.title' }, -- loadChildren: () => import('./level-skill/level-skill.module').then(m => m.LevelSkillModule), -+ loadChildren: () => import('./level-skill/level-skill.routes'), - }, - { - path: 'report', - data: { pageTitle: 'teamDojoApp.report.home.title' }, -- loadChildren: () => import('./report/report.module').then(m => m.ReportModule), -+ loadChildren: () => import('./report/report.routes'), - }, - { - path: 'skill', - data: { pageTitle: 'teamDojoApp.skill.home.title' }, -- loadChildren: () => import('./skill/skill.module').then(m => m.SkillModule), -+ loadChildren: () => import('./skill/skill.routes'), - }, - { - path: 'team', - data: { pageTitle: 'teamDojoApp.team.home.title' }, -- loadChildren: () => import('./team/team.module').then(m => m.TeamModule), -+ loadChildren: () => import('./team/team.routes'), - }, - { - path: 'team-skill', - data: { pageTitle: 'teamDojoApp.teamSkill.home.title' }, -- loadChildren: () => import('./team-skill/team-skill.module').then(m => m.TeamSkillModule), -+ loadChildren: () => import('./team-skill/team-skill.routes'), - }, - { - path: 'training', - data: { pageTitle: 'teamDojoApp.training.home.title' }, -- loadChildren: () => import('./training/training.module').then(m => m.TrainingModule), -+ loadChildren: () => import('./training/training.routes'), - }, - { - path: 'team-group', - data: { pageTitle: 'teamDojoApp.teamGroup.home.title' }, -- loadChildren: () => import('./team-group/team-group.module').then(m => m.TeamGroupModule), -+ loadChildren: () => import('./team-group/team-group.routes'), - }, - /* jhipster-needle-add-entity-route - JHipster will add entity modules routes here */ - ]), -diff --git a/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.html b/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.html -index 080b3d53..0f268f6d 100644 ---- a/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.spec.ts -index 2e81a9f8..69e8bebd 100644 ---- a/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('Image Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [ImageDeleteDialogComponent], -+ imports: [HttpClientTestingModule, ImageDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(ImageDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('Image Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.ts b/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.ts -index b9a623b3..7324a93e 100644 ---- a/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/image/delete/image-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { IImage } from '../image.model'; - import { ImageService } from '../service/image.service'; - - @Component({ -+ standalone: true, - templateUrl: './image-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class ImageDeleteDialogComponent { - image?: IImage; - -- constructor(protected imageService: ImageService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected imageService: ImageService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class ImageDeleteDialogComponent { - - confirmDelete(id: number): void { - this.imageService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/image/detail/image-detail.component.spec.ts b/src/main/webapp/app/entities/image/detail/image-detail.component.spec.ts -index cd01c42d..744f5c02 100644 ---- a/src/main/webapp/app/entities/image/detail/image-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/image/detail/image-detail.component.spec.ts -@@ -1,5 +1,6 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { DataUtils } from 'app/core/util/data-util.service'; -@@ -7,35 +8,37 @@ import { DataUtils } from 'app/core/util/data-util.service'; - import { ImageDetailComponent } from './image-detail.component'; - - describe('Image Management Detail Component', () => { -- let comp: ImageDetailComponent; -- let fixture: ComponentFixture; - let dataUtils: DataUtils; - -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [ImageDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [ImageDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ image: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: ImageDetailComponent, -+ resolve: { image: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(ImageDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(ImageDetailComponent); -- comp = fixture.componentInstance; - dataUtils = TestBed.inject(DataUtils); - jest.spyOn(window, 'open').mockImplementation(() => null); - }); - - describe('OnInit', () => { -- it('Should load image on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load image on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', ImageDetailComponent); - - // THEN -- expect(comp.image).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.image).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - -@@ -44,6 +47,8 @@ describe('Image Management Detail Component', () => { - // GIVEN - jest.spyOn(dataUtils, 'byteSize'); - const fakeBase64 = 'fake base64'; -+ const fixture = TestBed.createComponent(ImageDetailComponent); -+ const comp = fixture.componentInstance; - - // WHEN - comp.byteSize(fakeBase64); -@@ -58,12 +63,14 @@ describe('Image Management Detail Component', () => { - const newWindow = { ...window }; - newWindow.document.write = jest.fn(); - window.open = jest.fn(() => newWindow); -- window.onload = jest.fn(() => newWindow); -- window.URL.createObjectURL = jest.fn(); -+ window.onload = jest.fn(() => newWindow) as any; -+ window.URL.createObjectURL = jest.fn() as any; - // GIVEN - jest.spyOn(dataUtils, 'openFile'); - const fakeContentType = 'fake content type'; - const fakeBase64 = 'fake base64'; -+ const fixture = TestBed.createComponent(ImageDetailComponent); -+ const comp = fixture.componentInstance; - - // WHEN - comp.openFile(fakeBase64, fakeContentType); -diff --git a/src/main/webapp/app/entities/image/detail/image-detail.component.ts b/src/main/webapp/app/entities/image/detail/image-detail.component.ts -index 440e736e..0694be2c 100644 ---- a/src/main/webapp/app/entities/image/detail/image-detail.component.ts -+++ b/src/main/webapp/app/entities/image/detail/image-detail.component.ts -@@ -1,23 +1,24 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - --import { IImage } from '../image.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { DataUtils } from 'app/core/util/data-util.service'; -+import { IImage } from '../image.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-image-detail', - templateUrl: './image-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class ImageDetailComponent implements OnInit { -- image: IImage | null = null; -+export class ImageDetailComponent { -+ @Input() image: IImage | null = null; - -- constructor(protected dataUtils: DataUtils, protected activatedRoute: ActivatedRoute) {} -- -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ image }) => { -- this.image = image; -- }); -- } -+ constructor( -+ protected dataUtils: DataUtils, -+ protected activatedRoute: ActivatedRoute, -+ ) {} - - byteSize(base64String: string): string { - return this.dataUtils.byteSize(base64String); -diff --git a/src/main/webapp/app/entities/image/image.model.ts b/src/main/webapp/app/entities/image/image.model.ts -index cf89c7d7..58da5487 100644 ---- a/src/main/webapp/app/entities/image/image.model.ts -+++ b/src/main/webapp/app/entities/image/image.model.ts -@@ -1,35 +1,17 @@ - import dayjs from 'dayjs/esm'; - - export interface IImage { -- id?: number; -- title?: string; -- smallContentType?: string | null; -+ id: number; -+ title?: string | null; - small?: string | null; -- mediumContentType?: string | null; -+ smallContentType?: string | null; - medium?: string | null; -- largeContentType?: string | null; -+ mediumContentType?: string | null; - large?: string | null; -+ largeContentType?: string | null; - hash?: string | null; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; --} -- --export class Image implements IImage { -- constructor( -- public id?: number, -- public title?: string, -- public smallContentType?: string | null, -- public small?: string | null, -- public mediumContentType?: string | null, -- public medium?: string | null, -- public largeContentType?: string | null, -- public large?: string | null, -- public hash?: string | null, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs -- ) {} -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; - } - --export function getImageIdentifier(image: IImage): number | undefined { -- return image.id; --} -+export type NewImage = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/image/image.module.ts b/src/main/webapp/app/entities/image/image.module.ts -deleted file mode 100644 -index 12ba5b14..00000000 ---- a/src/main/webapp/app/entities/image/image.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { ImageComponent } from './list/image.component'; --import { ImageDetailComponent } from './detail/image-detail.component'; --import { ImageUpdateComponent } from './update/image-update.component'; --import { ImageDeleteDialogComponent } from './delete/image-delete-dialog.component'; --import { ImageRoutingModule } from './route/image-routing.module'; -- --@NgModule({ -- imports: [SharedModule, ImageRoutingModule], -- declarations: [ImageComponent, ImageDetailComponent, ImageUpdateComponent, ImageDeleteDialogComponent], -- entryComponents: [ImageDeleteDialogComponent], --}) --export class ImageModule {} -diff --git a/src/main/webapp/app/entities/image/list/image.component.html b/src/main/webapp/app/entities/image/list/image.component.html -index e6a342aa..7a2e399e 100644 ---- a/src/main/webapp/app/entities/image/list/image.component.html -+++ b/src/main/webapp/app/entities/image/list/image.component.html -@@ -3,9 +3,9 @@ - Images - -
-- - - -
- -@@ -25,31 +25,70 @@ - - -
-- No images found -+ No Images found -
- --
-+
- - -- -- -- -- -+ -+ -+ -+ - -+ -+ -- -- - - - - - -- -+ - -
ID Title Small
-+
-+ ID -+ -+
-+
-+
-+ Title -+ -+
-+
-+
-+ Small -+ -+
-+
-- Medium -+
-+ Medium -+ -+
-+
-+
-+ Large -+ -+
-+
-+
-+ Hash -+ -+
-
Large Hash -- Created At -+
-+ Created At -+ -+
-
-- Updated At -+
-+ Updated At -+ -+
-
- {{ image.id }} -diff --git a/src/main/webapp/app/entities/image/list/image.component.spec.ts b/src/main/webapp/app/entities/image/list/image.component.spec.ts -index 6205a74a..ec7d032e 100644 ---- a/src/main/webapp/app/entities/image/list/image.component.spec.ts -+++ b/src/main/webapp/app/entities/image/list/image.component.spec.ts -@@ -1,21 +1,43 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { ImageService } from '../service/image.service'; - - import { ImageComponent } from './image.component'; -+import SpyInstance = jest.SpyInstance; - - describe('Image Management Component', () => { - let comp: ImageComponent; - let fixture: ComponentFixture; - let service: ImageService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [ImageComponent], -+ imports: [RouterTestingModule.withRoutes([{ path: 'image', component: ImageComponent }]), HttpClientTestingModule, ImageComponent], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(ImageComponent, '') - .compileComponents(); -@@ -23,6 +45,7 @@ describe('Image Management Component', () => { - fixture = TestBed.createComponent(ImageComponent); - comp = fixture.componentInstance; - service = TestBed.inject(ImageService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +53,8 @@ describe('Image Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +64,25 @@ describe('Image Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.images[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.images?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to imageService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getImageIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getImageIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.images[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +90,25 @@ describe('Image Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +117,8 @@ describe('Image Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.images[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.images?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/image/list/image.component.ts b/src/main/webapp/app/entities/image/list/image.component.ts -index b69aedd2..fc8cd57f 100644 ---- a/src/main/webapp/app/entities/image/list/image.component.ts -+++ b/src/main/webapp/app/entities/image/list/image.component.ts -@@ -1,81 +1,76 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { IImage } from '../image.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { ImageService } from '../service/image.service'; --import { ImageDeleteDialogComponent } from '../delete/image-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { DataUtils } from 'app/core/util/data-util.service'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { ImageDeleteDialogComponent } from '../delete/image-delete-dialog.component'; -+import { EntityArrayResponseType, ImageService } from '../service/image.service'; -+import { IImage } from '../image.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-image', - templateUrl: './image.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class ImageComponent implements OnInit { -- images: IImage[]; -+ images?: IImage[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; -+ -+ predicate = 'id'; -+ ascending = true; -+ -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - - constructor( - protected imageService: ImageService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, - protected dataUtils: DataUtils, - protected modalService: NgbModal, -- protected parseLinks: ParseLinks -- ) { -- this.images = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -- -- loadAll(): void { -- this.isLoading = true; -- -- this.imageService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateImages(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.images = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: IImage): number => this.imageService.getImageIdentifier(item); - -- trackId(_index: number, item: IImage): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - byteSize(base64String: string): string { -@@ -90,22 +85,70 @@ export class ImageComponent implements OnInit { - const modalRef = this.modalService.open(ImageDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.image = image; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.images = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: IImage[] | null): IImage[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const imagesNew = this.images ?? []; -+ if (data) { -+ for (const d of data) { -+ if (imagesNew.map(op => op.id).indexOf(d.id) === -1) { -+ imagesNew.push(d); -+ } -+ } -+ } -+ return imagesNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateImages(data: IImage[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -114,10 +157,38 @@ export class ImageComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.images.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.imageService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/image/route/image-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/image/route/image-routing-resolve.service.spec.ts -index 8b77f2c5..0dbdc764 100644 ---- a/src/main/webapp/app/entities/image/route/image-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/image/route/image-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { IImage, Image } from '../image.model'; -+import { IImage } from '../image.model'; - import { ImageService } from '../service/image.service'; - --import { ImageRoutingResolveService } from './image-routing-resolve.service'; -+import imageResolve from './image-routing-resolve.service'; - - describe('Image routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: ImageRoutingResolveService; - let service: ImageService; -- let resultImage: IImage | undefined; -+ let resultImage: IImage | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('Image routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(ImageRoutingResolveService); - service = TestBed.inject(ImageService); - resultImage = undefined; - }); -@@ -46,8 +44,12 @@ describe('Image routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultImage = result; -+ TestBed.runInInjectionContext(() => { -+ imageResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultImage = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('Image routing resolve service', () => { - expect(resultImage).toEqual({ id: 123 }); - }); - -- it('should return new IImage if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultImage = result; -+ TestBed.runInInjectionContext(() => { -+ imageResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultImage = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultImage).toEqual(new Image()); -+ expect(resultImage).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as Image }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultImage = result; -+ TestBed.runInInjectionContext(() => { -+ imageResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultImage = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/image/route/image-routing-resolve.service.ts b/src/main/webapp/app/entities/image/route/image-routing-resolve.service.ts -index 02bceffc..6020d5e4 100644 ---- a/src/main/webapp/app/entities/image/route/image-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/image/route/image-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { IImage, Image } from '../image.model'; -+import { IImage } from '../image.model'; - import { ImageService } from '../service/image.service'; - --@Injectable({ providedIn: 'root' }) --export class ImageRoutingResolveService implements Resolve { -- constructor(protected service: ImageService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((image: HttpResponse) => { -+export const imageResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(ImageService) -+ .find(id) -+ .pipe( -+ mergeMap((image: HttpResponse) => { - if (image.body) { - return of(image.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new Image()); - } --} -+ return of(null); -+}; -+ -+export default imageResolve; -diff --git a/src/main/webapp/app/entities/image/route/image-routing.module.ts b/src/main/webapp/app/entities/image/route/image-routing.module.ts -deleted file mode 100644 -index 507306b7..00000000 ---- a/src/main/webapp/app/entities/image/route/image-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { ImageComponent } from '../list/image.component'; --import { ImageDetailComponent } from '../detail/image-detail.component'; --import { ImageUpdateComponent } from '../update/image-update.component'; --import { ImageRoutingResolveService } from './image-routing-resolve.service'; -- --const imageRoute: Routes = [ -- { -- path: '', -- component: ImageComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: ImageDetailComponent, -- resolve: { -- image: ImageRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: ImageUpdateComponent, -- resolve: { -- image: ImageRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: ImageUpdateComponent, -- resolve: { -- image: ImageRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(imageRoute)], -- exports: [RouterModule], --}) --export class ImageRoutingModule {} -diff --git a/src/main/webapp/app/entities/image/service/image.service.spec.ts b/src/main/webapp/app/entities/image/service/image.service.spec.ts -index 8b94171c..d987d0d5 100644 ---- a/src/main/webapp/app/entities/image/service/image.service.spec.ts -+++ b/src/main/webapp/app/entities/image/service/image.service.spec.ts -@@ -1,18 +1,21 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { IImage, Image } from '../image.model'; -+import { IImage } from '../image.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../image.test-samples'; - --import { ImageService } from './image.service'; -+import { ImageService, RestImage } from './image.service'; -+ -+const requireRestSample: RestImage = { -+ ...sampleWithRequiredData, -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('Image Service', () => { - let service: ImageService; - let httpMock: HttpTestingController; -- let elemDefault: IImage; - let expectedResult: IImage | IImage[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -21,59 +24,26 @@ describe('Image Service', () => { - expectedResult = null; - service = TestBed.inject(ImageService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- title: 'AAAAAAA', -- smallContentType: 'image/png', -- small: 'AAAAAAA', -- mediumContentType: 'image/png', -- medium: 'AAAAAAA', -- largeContentType: 'image/png', -- large: 'AAAAAAA', -- hash: 'AAAAAAA', -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a Image', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new Image()).subscribe(resp => (expectedResult = resp.body)); -+ const image = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(image).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -81,29 +51,11 @@ describe('Image Service', () => { - }); - - it('should update a Image', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- title: 'BBBBBB', -- small: 'BBBBBB', -- medium: 'BBBBBB', -- large: 'BBBBBB', -- hash: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const image = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(image).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -111,26 +63,9 @@ describe('Image Service', () => { - }); - - it('should partial update a Image', () => { -- const patchObject = Object.assign( -- { -- title: 'BBBBBB', -- medium: 'BBBBBB', -- hash: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- new Image() -- ); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -140,82 +75,66 @@ describe('Image Service', () => { - }); - - it('should return a list of Image', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- title: 'BBBBBB', -- small: 'BBBBBB', -- medium: 'BBBBBB', -- large: 'BBBBBB', -- hash: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a Image', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addImageToCollectionIfMissing', () => { - it('should add a Image to an empty array', () => { -- const image: IImage = { id: 123 }; -+ const image: IImage = sampleWithRequiredData; - expectedResult = service.addImageToCollectionIfMissing([], image); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(image); - }); - - it('should not add a Image to an array that contains it', () => { -- const image: IImage = { id: 123 }; -+ const image: IImage = sampleWithRequiredData; - const imageCollection: IImage[] = [ - { - ...image, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addImageToCollectionIfMissing(imageCollection, image); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a Image to an array that doesn't contain it", () => { -- const image: IImage = { id: 123 }; -- const imageCollection: IImage[] = [{ id: 456 }]; -+ const image: IImage = sampleWithRequiredData; -+ const imageCollection: IImage[] = [sampleWithPartialData]; - expectedResult = service.addImageToCollectionIfMissing(imageCollection, image); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(image); - }); - - it('should add only unique Image to an array', () => { -- const imageArray: IImage[] = [{ id: 123 }, { id: 456 }, { id: 58679 }]; -- const imageCollection: IImage[] = [{ id: 123 }]; -+ const imageArray: IImage[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const imageCollection: IImage[] = [sampleWithRequiredData]; - expectedResult = service.addImageToCollectionIfMissing(imageCollection, ...imageArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const image: IImage = { id: 123 }; -- const image2: IImage = { id: 456 }; -+ const image: IImage = sampleWithRequiredData; -+ const image2: IImage = sampleWithPartialData; - expectedResult = service.addImageToCollectionIfMissing([], image, image2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(image); -@@ -223,18 +142,62 @@ describe('Image Service', () => { - }); - - it('should accept null and undefined values', () => { -- const image: IImage = { id: 123 }; -+ const image: IImage = sampleWithRequiredData; - expectedResult = service.addImageToCollectionIfMissing([], null, image, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(image); - }); - - it('should return initial array if no Image is added', () => { -- const imageCollection: IImage[] = [{ id: 123 }]; -+ const imageCollection: IImage[] = [sampleWithRequiredData]; - expectedResult = service.addImageToCollectionIfMissing(imageCollection, undefined, null); - expect(expectedResult).toEqual(imageCollection); - }); - }); -+ -+ describe('compareImage', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareImage(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareImage(entity1, entity2); -+ const compareResult2 = service.compareImage(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareImage(entity1, entity2); -+ const compareResult2 = service.compareImage(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareImage(entity1, entity2); -+ const compareResult2 = service.compareImage(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/image/service/image.service.ts b/src/main/webapp/app/entities/image/service/image.service.ts -index c66d59a7..e33af2dd 100644 ---- a/src/main/webapp/app/entities/image/service/image.service.ts -+++ b/src/main/webapp/app/entities/image/service/image.service.ts -@@ -1,13 +1,28 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { IImage, getImageIdentifier } from '../image.model'; -+import { IImage, NewImage } from '../image.model'; -+ -+export type PartialUpdateImage = Partial & Pick; -+ -+type RestOf = Omit & { -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestImage = RestOf; -+ -+export type NewRestImage = RestOf; -+ -+export type PartialUpdateRestImage = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,53 +31,65 @@ export type EntityArrayResponseType = HttpResponse; - export class ImageService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/images'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(image: IImage): Observable { -+ create(image: NewImage): Observable { - const copy = this.convertDateFromClient(image); -- return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ return this.http.post(this.resourceUrl, copy, { observe: 'response' }).pipe(map(res => this.convertResponseFromServer(res))); - } - - update(image: IImage): Observable { - const copy = this.convertDateFromClient(image); - return this.http -- .put(`${this.resourceUrl}/${getImageIdentifier(image) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getImageIdentifier(image)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(image: IImage): Observable { -+ partialUpdate(image: PartialUpdateImage): Observable { - const copy = this.convertDateFromClient(image); - return this.http -- .patch(`${this.resourceUrl}/${getImageIdentifier(image) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getImageIdentifier(image)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addImageToCollectionIfMissing(imageCollection: IImage[], ...imagesToCheck: (IImage | null | undefined)[]): IImage[] { -- const images: IImage[] = imagesToCheck.filter(isPresent); -+ getImageIdentifier(image: Pick): number { -+ return image.id; -+ } -+ -+ compareImage(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getImageIdentifier(o1) === this.getImageIdentifier(o2) : o1 === o2; -+ } -+ -+ addImageToCollectionIfMissing>( -+ imageCollection: Type[], -+ ...imagesToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const images: Type[] = imagesToCheck.filter(isPresent); - if (images.length > 0) { -- const imageCollectionIdentifiers = imageCollection.map(imageItem => getImageIdentifier(imageItem)!); -+ const imageCollectionIdentifiers = imageCollection.map(imageItem => this.getImageIdentifier(imageItem)!); - const imagesToAdd = images.filter(imageItem => { -- const imageIdentifier = getImageIdentifier(imageItem); -- if (imageIdentifier == null || imageCollectionIdentifiers.includes(imageIdentifier)) { -+ const imageIdentifier = this.getImageIdentifier(imageItem); -+ if (imageCollectionIdentifiers.includes(imageIdentifier)) { - return false; - } - imageCollectionIdentifiers.push(imageIdentifier); -@@ -73,32 +100,31 @@ export class ImageService { - return imageCollection; - } - -- getHash(id: number): Observable> { -- return this.http.get(`${this.resourceUrl}/${id}/hash`, { observe: 'response', responseType: 'text' }); -+ protected convertDateFromClient(image: T): RestOf { -+ return { -+ ...image, -+ createdAt: image.createdAt?.toJSON() ?? null, -+ updatedAt: image.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromClient(image: IImage): IImage { -- return Object.assign({}, image, { -- createdAt: image.createdAt?.isValid() ? image.createdAt.toJSON() : undefined, -- updatedAt: image.updatedAt?.isValid() ? image.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromServer(restImage: RestImage): IImage { -+ return { -+ ...restImage, -+ createdAt: restImage.createdAt ? dayjs(restImage.createdAt) : undefined, -+ updatedAt: restImage.updatedAt ? dayjs(restImage.updatedAt) : undefined, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((image: IImage) => { -- image.createdAt = image.createdAt ? dayjs(image.createdAt) : undefined; -- image.updatedAt = image.updatedAt ? dayjs(image.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/image/update/image-update.component.html b/src/main/webapp/app/entities/image/update/image-update.component.html -index 4e93b824..73a8ecbe 100644 ---- a/src/main/webapp/app/entities/image/update/image-update.component.html -+++ b/src/main/webapp/app/entities/image/update/image-update.component.html -@@ -8,38 +8,36 @@ -
- - --
-+
- - -
- --
-+
- - -
-- -- This field is required. -- -+ This field is required. - This field is required to be at least 1 characters. -- This field is required to be at least 1 characters. -- - This field cannot be longer than 50 characters. -- This field cannot be longer than 50 characters. -- -
-
- --
-+
- -
- image image -
-- {{ editForm.get('smallContentType')!.value }}, {{ byteSize(editForm.get('small')!.value) }} -+ {{ editForm.get('smallContentType')!.value }}, {{ byteSize(editForm.get('small')!.value!) }} -
- --
-+
- -
- image image -
-- {{ editForm.get('mediumContentType')!.value }}, {{ byteSize(editForm.get('medium')!.value) }} -+ {{ editForm.get('mediumContentType')!.value }}, {{ byteSize(editForm.get('medium')!.value!) }} -
- --
-+
- -
- image image -
-- {{ editForm.get('largeContentType')!.value }}, {{ byteSize(editForm.get('large')!.value) }} -+ {{ editForm.get('largeContentType')!.value }}, {{ byteSize(editForm.get('large')!.value!) }} -
- --
-+
- - -
-@@ -162,13 +160,12 @@ - *ngIf="editForm.get('hash')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 32 }" -+ >This field cannot be longer than 32 characters. -- This field cannot be longer than 32 characters. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
-
-diff --git a/src/main/webapp/app/entities/image/update/image-update.component.spec.ts b/src/main/webapp/app/entities/image/update/image-update.component.spec.ts -index 78ad7ba7..99dad039 100644 ---- a/src/main/webapp/app/entities/image/update/image-update.component.spec.ts -+++ b/src/main/webapp/app/entities/image/update/image-update.component.spec.ts -@@ -7,7 +7,8 @@ import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - - import { ImageService } from '../service/image.service'; --import { IImage, Image } from '../image.model'; -+import { IImage } from '../image.model'; -+import { ImageFormService } from './image-form.service'; - - import { ImageUpdateComponent } from './image-update.component'; - -@@ -15,12 +16,12 @@ describe('Image Management Update Component', () => { - let comp: ImageUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let imageFormService: ImageFormService; - let imageService: ImageService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [ImageUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), ImageUpdateComponent], - providers: [ - FormBuilder, - { -@@ -36,6 +37,7 @@ describe('Image Management Update Component', () => { - - fixture = TestBed.createComponent(ImageUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ imageFormService = TestBed.inject(ImageFormService); - imageService = TestBed.inject(ImageService); - - comp = fixture.componentInstance; -@@ -48,15 +50,16 @@ describe('Image Management Update Component', () => { - activatedRoute.data = of({ image }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(image)); -+ expect(comp.image).toEqual(image); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const image = { id: 123 }; -+ jest.spyOn(imageFormService, 'getImage').mockReturnValue(image); - jest.spyOn(imageService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ image }); -@@ -69,18 +72,20 @@ describe('Image Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(imageFormService.getImage).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(imageService.update).toHaveBeenCalledWith(image); -+ expect(imageService.update).toHaveBeenCalledWith(expect.objectContaining(image)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const image = new Image(); -+ const saveSubject = new Subject>(); -+ const image = { id: 123 }; -+ jest.spyOn(imageFormService, 'getImage').mockReturnValue({ id: null }); - jest.spyOn(imageService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ image }); -+ activatedRoute.data = of({ image: null }); - comp.ngOnInit(); - - // WHEN -@@ -90,14 +95,15 @@ describe('Image Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(imageService.create).toHaveBeenCalledWith(image); -+ expect(imageFormService.getImage).toHaveBeenCalled(); -+ expect(imageService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const image = { id: 123 }; - jest.spyOn(imageService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -110,7 +116,7 @@ describe('Image Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(imageService.update).toHaveBeenCalledWith(image); -+ expect(imageService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); -diff --git a/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.html b/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.html -index d63cac50..6e266655 100644 ---- a/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.spec.ts -index 10e27af9..3b81d6ef 100644 ---- a/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('LevelSkill Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [LevelSkillDeleteDialogComponent], -+ imports: [HttpClientTestingModule, LevelSkillDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(LevelSkillDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('LevelSkill Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.ts b/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.ts -index 99cbb408..d125e495 100644 ---- a/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/level-skill/delete/level-skill-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { ILevelSkill } from '../level-skill.model'; - import { LevelSkillService } from '../service/level-skill.service'; - - @Component({ -+ standalone: true, - templateUrl: './level-skill-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class LevelSkillDeleteDialogComponent { - levelSkill?: ILevelSkill; - -- constructor(protected levelSkillService: LevelSkillService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected levelSkillService: LevelSkillService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class LevelSkillDeleteDialogComponent { - - confirmDelete(id: number): void { - this.levelSkillService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.html b/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.html -index 64d3116c..c62f3046 100644 ---- a/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.html -+++ b/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.html -@@ -17,13 +17,13 @@ -
Skill
-
- -
-
Level
-
- -
- -diff --git a/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.spec.ts b/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.spec.ts -index 06a83184..436f9b14 100644 ---- a/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { LevelSkillDetailComponent } from './level-skill-detail.component'; - - describe('LevelSkill Management Detail Component', () => { -- let comp: LevelSkillDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [LevelSkillDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [LevelSkillDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ levelSkill: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: LevelSkillDetailComponent, -+ resolve: { levelSkill: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(LevelSkillDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(LevelSkillDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load levelSkill on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load levelSkill on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', LevelSkillDetailComponent); - - // THEN -- expect(comp.levelSkill).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.levelSkill).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.ts b/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.ts -index 4f257d12..18908685 100644 ---- a/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.ts -+++ b/src/main/webapp/app/entities/level-skill/detail/level-skill-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { ILevelSkill } from '../level-skill.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-level-skill-detail', - templateUrl: './level-skill-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class LevelSkillDetailComponent implements OnInit { -- levelSkill: ILevelSkill | null = null; -+export class LevelSkillDetailComponent { -+ @Input() levelSkill: ILevelSkill | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ levelSkill }) => { -- this.levelSkill = levelSkill; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/level-skill/level-skill.model.ts b/src/main/webapp/app/entities/level-skill/level-skill.model.ts -index a4061669..4b0e5502 100644 ---- a/src/main/webapp/app/entities/level-skill/level-skill.model.ts -+++ b/src/main/webapp/app/entities/level-skill/level-skill.model.ts -@@ -2,15 +2,9 @@ import { ISkill } from 'app/entities/skill/skill.model'; - import { ILevel } from 'app/entities/level/level.model'; - - export interface ILevelSkill { -- id?: number; -- skill?: ISkill; -- level?: ILevel; -+ id: number; -+ skill?: Pick | null; -+ level?: Pick | null; - } - --export class LevelSkill implements ILevelSkill { -- constructor(public id?: number, public skill?: ISkill, public level?: ILevel) {} --} -- --export function getLevelSkillIdentifier(levelSkill: ILevelSkill): number | undefined { -- return levelSkill.id; --} -+export type NewLevelSkill = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/level-skill/level-skill.module.ts b/src/main/webapp/app/entities/level-skill/level-skill.module.ts -deleted file mode 100644 -index 57d14d5e..00000000 ---- a/src/main/webapp/app/entities/level-skill/level-skill.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { LevelSkillComponent } from './list/level-skill.component'; --import { LevelSkillDetailComponent } from './detail/level-skill-detail.component'; --import { LevelSkillUpdateComponent } from './update/level-skill-update.component'; --import { LevelSkillDeleteDialogComponent } from './delete/level-skill-delete-dialog.component'; --import { LevelSkillRoutingModule } from './route/level-skill-routing.module'; -- --@NgModule({ -- imports: [SharedModule, LevelSkillRoutingModule], -- declarations: [LevelSkillComponent, LevelSkillDetailComponent, LevelSkillUpdateComponent, LevelSkillDeleteDialogComponent], -- entryComponents: [LevelSkillDeleteDialogComponent], --}) --export class LevelSkillModule {} -diff --git a/src/main/webapp/app/entities/level-skill/list/level-skill.component.html b/src/main/webapp/app/entities/level-skill/list/level-skill.component.html -index 09c7a5a3..1eaeb4a8 100644 ---- a/src/main/webapp/app/entities/level-skill/list/level-skill.component.html -+++ b/src/main/webapp/app/entities/level-skill/list/level-skill.component.html -@@ -3,9 +3,9 @@ - Level Skills - -
-- - - -
- -@@ -25,36 +25,52 @@ - - -
-- No levelSkills found -+ No Level Skills found -
- --
-+
- - -- -- -+ -+ - - - - - -- -+ - - - - -
ID
-+
-+ ID -+ -+
-+
-- Skill -+
-+ Skill -+ -+
-
-- Level -+
-+ Level -+ -+
-
- {{ levelSkill.id }} - - - - - -diff --git a/src/main/webapp/app/entities/level-skill/list/level-skill.component.spec.ts b/src/main/webapp/app/entities/level-skill/list/level-skill.component.spec.ts -index 81cc7e35..8ee4891f 100644 ---- a/src/main/webapp/app/entities/level-skill/list/level-skill.component.spec.ts -+++ b/src/main/webapp/app/entities/level-skill/list/level-skill.component.spec.ts -@@ -1,21 +1,47 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { LevelSkillService } from '../service/level-skill.service'; - - import { LevelSkillComponent } from './level-skill.component'; -+import SpyInstance = jest.SpyInstance; - - describe('LevelSkill Management Component', () => { - let comp: LevelSkillComponent; - let fixture: ComponentFixture; - let service: LevelSkillService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [LevelSkillComponent], -+ imports: [ -+ RouterTestingModule.withRoutes([{ path: 'level-skill', component: LevelSkillComponent }]), -+ HttpClientTestingModule, -+ LevelSkillComponent, -+ ], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(LevelSkillComponent, '') - .compileComponents(); -@@ -23,6 +49,7 @@ describe('LevelSkill Management Component', () => { - fixture = TestBed.createComponent(LevelSkillComponent); - comp = fixture.componentInstance; - service = TestBed.inject(LevelSkillService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +57,8 @@ describe('LevelSkill Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +68,25 @@ describe('LevelSkill Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.levelSkills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.levelSkills?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to levelSkillService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getLevelSkillIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getLevelSkillIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.levelSkills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +94,25 @@ describe('LevelSkill Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +121,8 @@ describe('LevelSkill Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.levelSkills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.levelSkills?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/level-skill/list/level-skill.component.ts b/src/main/webapp/app/entities/level-skill/list/level-skill.component.ts -index 71da91c0..2483456d 100644 ---- a/src/main/webapp/app/entities/level-skill/list/level-skill.component.ts -+++ b/src/main/webapp/app/entities/level-skill/list/level-skill.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { ILevelSkill } from '../level-skill.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { LevelSkillService } from '../service/level-skill.service'; --import { LevelSkillDeleteDialogComponent } from '../delete/level-skill-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, LevelSkillService } from '../service/level-skill.service'; -+import { LevelSkillDeleteDialogComponent } from '../delete/level-skill-delete-dialog.component'; -+import { ILevelSkill } from '../level-skill.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-level-skill', - templateUrl: './level-skill.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class LevelSkillComponent implements OnInit { -- levelSkills: ILevelSkill[]; -+ levelSkills?: ILevelSkill[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected levelSkillService: LevelSkillService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.levelSkills = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.levelSkillService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateLevelSkills(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected levelSkillService: LevelSkillService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.levelSkills = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: ILevelSkill): number => this.levelSkillService.getLevelSkillIdentifier(item); - -- trackId(_index: number, item: ILevelSkill): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(levelSkill: ILevelSkill): void { - const modalRef = this.modalService.open(LevelSkillDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.levelSkill = levelSkill; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.levelSkills = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: ILevelSkill[] | null): ILevelSkill[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const levelSkillsNew = this.levelSkills ?? []; -+ if (data) { -+ for (const d of data) { -+ if (levelSkillsNew.map(op => op.id).indexOf(d.id) === -1) { -+ levelSkillsNew.push(d); -+ } -+ } -+ } -+ return levelSkillsNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateLevelSkills(data: ILevelSkill[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,39 @@ export class LevelSkillComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.levelSkills.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ eagerload: true, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.levelSkillService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/level-skill/route/level-skill-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/level-skill/route/level-skill-routing-resolve.service.spec.ts -index 1826eac0..22cf6082 100644 ---- a/src/main/webapp/app/entities/level-skill/route/level-skill-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/level-skill/route/level-skill-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { ILevelSkill, LevelSkill } from '../level-skill.model'; -+import { ILevelSkill } from '../level-skill.model'; - import { LevelSkillService } from '../service/level-skill.service'; - --import { LevelSkillRoutingResolveService } from './level-skill-routing-resolve.service'; -+import levelSkillResolve from './level-skill-routing-resolve.service'; - - describe('LevelSkill routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: LevelSkillRoutingResolveService; - let service: LevelSkillService; -- let resultLevelSkill: ILevelSkill | undefined; -+ let resultLevelSkill: ILevelSkill | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('LevelSkill routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(LevelSkillRoutingResolveService); - service = TestBed.inject(LevelSkillService); - resultLevelSkill = undefined; - }); -@@ -46,8 +44,12 @@ describe('LevelSkill routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultLevelSkill = result; -+ TestBed.runInInjectionContext(() => { -+ levelSkillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultLevelSkill = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('LevelSkill routing resolve service', () => { - expect(resultLevelSkill).toEqual({ id: 123 }); - }); - -- it('should return new ILevelSkill if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultLevelSkill = result; -+ TestBed.runInInjectionContext(() => { -+ levelSkillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultLevelSkill = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultLevelSkill).toEqual(new LevelSkill()); -+ expect(resultLevelSkill).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as LevelSkill }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultLevelSkill = result; -+ TestBed.runInInjectionContext(() => { -+ levelSkillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultLevelSkill = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/level-skill/route/level-skill-routing-resolve.service.ts b/src/main/webapp/app/entities/level-skill/route/level-skill-routing-resolve.service.ts -index 5cfeb498..e9840737 100644 ---- a/src/main/webapp/app/entities/level-skill/route/level-skill-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/level-skill/route/level-skill-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { ILevelSkill, LevelSkill } from '../level-skill.model'; -+import { ILevelSkill } from '../level-skill.model'; - import { LevelSkillService } from '../service/level-skill.service'; - --@Injectable({ providedIn: 'root' }) --export class LevelSkillRoutingResolveService implements Resolve { -- constructor(protected service: LevelSkillService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((levelSkill: HttpResponse) => { -+export const levelSkillResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(LevelSkillService) -+ .find(id) -+ .pipe( -+ mergeMap((levelSkill: HttpResponse) => { - if (levelSkill.body) { - return of(levelSkill.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new LevelSkill()); - } --} -+ return of(null); -+}; -+ -+export default levelSkillResolve; -diff --git a/src/main/webapp/app/entities/level-skill/route/level-skill-routing.module.ts b/src/main/webapp/app/entities/level-skill/route/level-skill-routing.module.ts -deleted file mode 100644 -index ba15b48b..00000000 ---- a/src/main/webapp/app/entities/level-skill/route/level-skill-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { LevelSkillComponent } from '../list/level-skill.component'; --import { LevelSkillDetailComponent } from '../detail/level-skill-detail.component'; --import { LevelSkillUpdateComponent } from '../update/level-skill-update.component'; --import { LevelSkillRoutingResolveService } from './level-skill-routing-resolve.service'; -- --const levelSkillRoute: Routes = [ -- { -- path: '', -- component: LevelSkillComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: LevelSkillDetailComponent, -- resolve: { -- levelSkill: LevelSkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: LevelSkillUpdateComponent, -- resolve: { -- levelSkill: LevelSkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: LevelSkillUpdateComponent, -- resolve: { -- levelSkill: LevelSkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(levelSkillRoute)], -- exports: [RouterModule], --}) --export class LevelSkillRoutingModule {} -diff --git a/src/main/webapp/app/entities/level-skill/service/level-skill.service.spec.ts b/src/main/webapp/app/entities/level-skill/service/level-skill.service.spec.ts -index d10dcf5f..f0aeef7a 100644 ---- a/src/main/webapp/app/entities/level-skill/service/level-skill.service.spec.ts -+++ b/src/main/webapp/app/entities/level-skill/service/level-skill.service.spec.ts -@@ -1,14 +1,18 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - --import { ILevelSkill, LevelSkill } from '../level-skill.model'; -+import { ILevelSkill } from '../level-skill.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../level-skill.test-samples'; - - import { LevelSkillService } from './level-skill.service'; - -+const requireRestSample: ILevelSkill = { -+ ...sampleWithRequiredData, -+}; -+ - describe('LevelSkill Service', () => { - let service: LevelSkillService; - let httpMock: HttpTestingController; -- let elemDefault: ILevelSkill; - let expectedResult: ILevelSkill | ILevelSkill[] | boolean | null; - - beforeEach(() => { -@@ -18,34 +22,26 @@ describe('LevelSkill Service', () => { - expectedResult = null; - service = TestBed.inject(LevelSkillService); - httpMock = TestBed.inject(HttpTestingController); -- -- elemDefault = { -- id: 0, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign({}, elemDefault); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a LevelSkill', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- }, -- elemDefault -- ); -- -- const expected = Object.assign({}, returnedFromService); -+ const levelSkill = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - -- service.create(new LevelSkill()).subscribe(resp => (expectedResult = resp.body)); -+ service.create(levelSkill).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -53,16 +49,11 @@ describe('LevelSkill Service', () => { - }); - - it('should update a LevelSkill', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- }, -- elemDefault -- ); -+ const levelSkill = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - -- const expected = Object.assign({}, returnedFromService); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ service.update(levelSkill).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -70,11 +61,9 @@ describe('LevelSkill Service', () => { - }); - - it('should partial update a LevelSkill', () => { -- const patchObject = Object.assign({}, new LevelSkill()); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign({}, returnedFromService); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -84,69 +73,66 @@ describe('LevelSkill Service', () => { - }); - - it('should return a list of LevelSkill', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; - -- const expected = Object.assign({}, returnedFromService); -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a LevelSkill', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addLevelSkillToCollectionIfMissing', () => { - it('should add a LevelSkill to an empty array', () => { -- const levelSkill: ILevelSkill = { id: 123 }; -+ const levelSkill: ILevelSkill = sampleWithRequiredData; - expectedResult = service.addLevelSkillToCollectionIfMissing([], levelSkill); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(levelSkill); - }); - - it('should not add a LevelSkill to an array that contains it', () => { -- const levelSkill: ILevelSkill = { id: 123 }; -+ const levelSkill: ILevelSkill = sampleWithRequiredData; - const levelSkillCollection: ILevelSkill[] = [ - { - ...levelSkill, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addLevelSkillToCollectionIfMissing(levelSkillCollection, levelSkill); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a LevelSkill to an array that doesn't contain it", () => { -- const levelSkill: ILevelSkill = { id: 123 }; -- const levelSkillCollection: ILevelSkill[] = [{ id: 456 }]; -+ const levelSkill: ILevelSkill = sampleWithRequiredData; -+ const levelSkillCollection: ILevelSkill[] = [sampleWithPartialData]; - expectedResult = service.addLevelSkillToCollectionIfMissing(levelSkillCollection, levelSkill); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(levelSkill); - }); - - it('should add only unique LevelSkill to an array', () => { -- const levelSkillArray: ILevelSkill[] = [{ id: 123 }, { id: 456 }, { id: 8957 }]; -- const levelSkillCollection: ILevelSkill[] = [{ id: 123 }]; -+ const levelSkillArray: ILevelSkill[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const levelSkillCollection: ILevelSkill[] = [sampleWithRequiredData]; - expectedResult = service.addLevelSkillToCollectionIfMissing(levelSkillCollection, ...levelSkillArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const levelSkill: ILevelSkill = { id: 123 }; -- const levelSkill2: ILevelSkill = { id: 456 }; -+ const levelSkill: ILevelSkill = sampleWithRequiredData; -+ const levelSkill2: ILevelSkill = sampleWithPartialData; - expectedResult = service.addLevelSkillToCollectionIfMissing([], levelSkill, levelSkill2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(levelSkill); -@@ -154,18 +140,62 @@ describe('LevelSkill Service', () => { - }); - - it('should accept null and undefined values', () => { -- const levelSkill: ILevelSkill = { id: 123 }; -+ const levelSkill: ILevelSkill = sampleWithRequiredData; - expectedResult = service.addLevelSkillToCollectionIfMissing([], null, levelSkill, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(levelSkill); - }); - - it('should return initial array if no LevelSkill is added', () => { -- const levelSkillCollection: ILevelSkill[] = [{ id: 123 }]; -+ const levelSkillCollection: ILevelSkill[] = [sampleWithRequiredData]; - expectedResult = service.addLevelSkillToCollectionIfMissing(levelSkillCollection, undefined, null); - expect(expectedResult).toEqual(levelSkillCollection); - }); - }); -+ -+ describe('compareLevelSkill', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareLevelSkill(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareLevelSkill(entity1, entity2); -+ const compareResult2 = service.compareLevelSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareLevelSkill(entity1, entity2); -+ const compareResult2 = service.compareLevelSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareLevelSkill(entity1, entity2); -+ const compareResult2 = service.compareLevelSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/level-skill/service/level-skill.service.ts b/src/main/webapp/app/entities/level-skill/service/level-skill.service.ts -index ff8d9788..17d4b94c 100644 ---- a/src/main/webapp/app/entities/level-skill/service/level-skill.service.ts -+++ b/src/main/webapp/app/entities/level-skill/service/level-skill.service.ts -@@ -5,7 +5,9 @@ import { Observable } from 'rxjs'; - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { ILevelSkill, getLevelSkillIdentifier } from '../level-skill.model'; -+import { ILevelSkill, NewLevelSkill } from '../level-skill.model'; -+ -+export type PartialUpdateLevelSkill = Partial & Pick; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -14,20 +16,23 @@ export type EntityArrayResponseType = HttpResponse; - export class LevelSkillService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/level-skills'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(levelSkill: ILevelSkill): Observable { -+ create(levelSkill: NewLevelSkill): Observable { - return this.http.post(this.resourceUrl, levelSkill, { observe: 'response' }); - } - - update(levelSkill: ILevelSkill): Observable { -- return this.http.put(`${this.resourceUrl}/${getLevelSkillIdentifier(levelSkill) as number}`, levelSkill, { -+ return this.http.put(`${this.resourceUrl}/${this.getLevelSkillIdentifier(levelSkill)}`, levelSkill, { - observe: 'response', - }); - } - -- partialUpdate(levelSkill: ILevelSkill): Observable { -- return this.http.patch(`${this.resourceUrl}/${getLevelSkillIdentifier(levelSkill) as number}`, levelSkill, { -+ partialUpdate(levelSkill: PartialUpdateLevelSkill): Observable { -+ return this.http.patch(`${this.resourceUrl}/${this.getLevelSkillIdentifier(levelSkill)}`, levelSkill, { - observe: 'response', - }); - } -@@ -45,16 +50,24 @@ export class LevelSkillService { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addLevelSkillToCollectionIfMissing( -- levelSkillCollection: ILevelSkill[], -- ...levelSkillsToCheck: (ILevelSkill | null | undefined)[] -- ): ILevelSkill[] { -- const levelSkills: ILevelSkill[] = levelSkillsToCheck.filter(isPresent); -+ getLevelSkillIdentifier(levelSkill: Pick): number { -+ return levelSkill.id; -+ } -+ -+ compareLevelSkill(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getLevelSkillIdentifier(o1) === this.getLevelSkillIdentifier(o2) : o1 === o2; -+ } -+ -+ addLevelSkillToCollectionIfMissing>( -+ levelSkillCollection: Type[], -+ ...levelSkillsToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const levelSkills: Type[] = levelSkillsToCheck.filter(isPresent); - if (levelSkills.length > 0) { -- const levelSkillCollectionIdentifiers = levelSkillCollection.map(levelSkillItem => getLevelSkillIdentifier(levelSkillItem)!); -+ const levelSkillCollectionIdentifiers = levelSkillCollection.map(levelSkillItem => this.getLevelSkillIdentifier(levelSkillItem)!); - const levelSkillsToAdd = levelSkills.filter(levelSkillItem => { -- const levelSkillIdentifier = getLevelSkillIdentifier(levelSkillItem); -- if (levelSkillIdentifier == null || levelSkillCollectionIdentifiers.includes(levelSkillIdentifier)) { -+ const levelSkillIdentifier = this.getLevelSkillIdentifier(levelSkillItem); -+ if (levelSkillCollectionIdentifiers.includes(levelSkillIdentifier)) { - return false; - } - levelSkillCollectionIdentifiers.push(levelSkillIdentifier); -diff --git a/src/main/webapp/app/entities/level-skill/update/level-skill-update.component.html b/src/main/webapp/app/entities/level-skill/update/level-skill-update.component.html -index 71ac8468..f89dbc62 100644 ---- a/src/main/webapp/app/entities/level-skill/update/level-skill-update.component.html -+++ b/src/main/webapp/app/entities/level-skill/update/level-skill-update.component.html -@@ -8,45 +8,35 @@ -
- - --
-+
- - -
- --
-+
- -- -+ -+ - -
-
-- -- This field is required. -- -+ This field is required. -
- --
-+
- -- -+ -+ - -
-
-- -- This field is required. -- -+ This field is required. -
-
- -diff --git a/src/main/webapp/app/entities/level-skill/update/level-skill-update.component.spec.ts b/src/main/webapp/app/entities/level-skill/update/level-skill-update.component.spec.ts -index 2cf08385..95aaa10a 100644 ---- a/src/main/webapp/app/entities/level-skill/update/level-skill-update.component.spec.ts -+++ b/src/main/webapp/app/entities/level-skill/update/level-skill-update.component.spec.ts -@@ -6,12 +6,13 @@ import { ActivatedRoute } from '@angular/router'; - import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - --import { LevelSkillService } from '../service/level-skill.service'; --import { ILevelSkill, LevelSkill } from '../level-skill.model'; - import { ISkill } from 'app/entities/skill/skill.model'; - import { SkillService } from 'app/entities/skill/service/skill.service'; - import { ILevel } from 'app/entities/level/level.model'; - import { LevelService } from 'app/entities/level/service/level.service'; -+import { ILevelSkill } from '../level-skill.model'; -+import { LevelSkillService } from '../service/level-skill.service'; -+import { LevelSkillFormService } from './level-skill-form.service'; - - import { LevelSkillUpdateComponent } from './level-skill-update.component'; - -@@ -19,14 +20,14 @@ describe('LevelSkill Management Update Component', () => { - let comp: LevelSkillUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let levelSkillFormService: LevelSkillFormService; - let levelSkillService: LevelSkillService; - let skillService: SkillService; - let levelService: LevelService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [LevelSkillUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), LevelSkillUpdateComponent], - providers: [ - FormBuilder, - { -@@ -42,6 +43,7 @@ describe('LevelSkill Management Update Component', () => { - - fixture = TestBed.createComponent(LevelSkillUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ levelSkillFormService = TestBed.inject(LevelSkillFormService); - levelSkillService = TestBed.inject(LevelSkillService); - skillService = TestBed.inject(SkillService); - levelService = TestBed.inject(LevelService); -@@ -52,10 +54,10 @@ describe('LevelSkill Management Update Component', () => { - describe('ngOnInit', () => { - it('Should call Skill query and add missing value', () => { - const levelSkill: ILevelSkill = { id: 456 }; -- const skill: ISkill = { id: 37505 }; -+ const skill: ISkill = { id: 24051 }; - levelSkill.skill = skill; - -- const skillCollection: ISkill[] = [{ id: 47120 }]; -+ const skillCollection: ISkill[] = [{ id: 16685 }]; - jest.spyOn(skillService, 'query').mockReturnValue(of(new HttpResponse({ body: skillCollection }))); - const additionalSkills = [skill]; - const expectedCollection: ISkill[] = [...additionalSkills, ...skillCollection]; -@@ -65,16 +67,19 @@ describe('LevelSkill Management Update Component', () => { - comp.ngOnInit(); - - expect(skillService.query).toHaveBeenCalled(); -- expect(skillService.addSkillToCollectionIfMissing).toHaveBeenCalledWith(skillCollection, ...additionalSkills); -+ expect(skillService.addSkillToCollectionIfMissing).toHaveBeenCalledWith( -+ skillCollection, -+ ...additionalSkills.map(expect.objectContaining), -+ ); - expect(comp.skillsSharedCollection).toEqual(expectedCollection); - }); - - it('Should call Level query and add missing value', () => { - const levelSkill: ILevelSkill = { id: 456 }; -- const level: ILevel = { id: 55830 }; -+ const level: ILevel = { id: 24251 }; - levelSkill.level = level; - -- const levelCollection: ILevel[] = [{ id: 71169 }]; -+ const levelCollection: ILevel[] = [{ id: 18449 }]; - jest.spyOn(levelService, 'query').mockReturnValue(of(new HttpResponse({ body: levelCollection }))); - const additionalLevels = [level]; - const expectedCollection: ILevel[] = [...additionalLevels, ...levelCollection]; -@@ -84,31 +89,35 @@ describe('LevelSkill Management Update Component', () => { - comp.ngOnInit(); - - expect(levelService.query).toHaveBeenCalled(); -- expect(levelService.addLevelToCollectionIfMissing).toHaveBeenCalledWith(levelCollection, ...additionalLevels); -+ expect(levelService.addLevelToCollectionIfMissing).toHaveBeenCalledWith( -+ levelCollection, -+ ...additionalLevels.map(expect.objectContaining), -+ ); - expect(comp.levelsSharedCollection).toEqual(expectedCollection); - }); - - it('Should update editForm', () => { - const levelSkill: ILevelSkill = { id: 456 }; -- const skill: ISkill = { id: 24786 }; -+ const skill: ISkill = { id: 13646 }; - levelSkill.skill = skill; -- const level: ILevel = { id: 6053 }; -+ const level: ILevel = { id: 14441 }; - levelSkill.level = level; - - activatedRoute.data = of({ levelSkill }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(levelSkill)); - expect(comp.skillsSharedCollection).toContain(skill); - expect(comp.levelsSharedCollection).toContain(level); -+ expect(comp.levelSkill).toEqual(levelSkill); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const levelSkill = { id: 123 }; -+ jest.spyOn(levelSkillFormService, 'getLevelSkill').mockReturnValue(levelSkill); - jest.spyOn(levelSkillService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ levelSkill }); -@@ -121,18 +130,20 @@ describe('LevelSkill Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(levelSkillFormService.getLevelSkill).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(levelSkillService.update).toHaveBeenCalledWith(levelSkill); -+ expect(levelSkillService.update).toHaveBeenCalledWith(expect.objectContaining(levelSkill)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const levelSkill = new LevelSkill(); -+ const saveSubject = new Subject>(); -+ const levelSkill = { id: 123 }; -+ jest.spyOn(levelSkillFormService, 'getLevelSkill').mockReturnValue({ id: null }); - jest.spyOn(levelSkillService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ levelSkill }); -+ activatedRoute.data = of({ levelSkill: null }); - comp.ngOnInit(); - - // WHEN -@@ -142,14 +153,15 @@ describe('LevelSkill Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(levelSkillService.create).toHaveBeenCalledWith(levelSkill); -+ expect(levelSkillFormService.getLevelSkill).toHaveBeenCalled(); -+ expect(levelSkillService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const levelSkill = { id: 123 }; - jest.spyOn(levelSkillService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -162,26 +174,30 @@ describe('LevelSkill Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(levelSkillService.update).toHaveBeenCalledWith(levelSkill); -+ expect(levelSkillService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); - }); - -- describe('Tracking relationships identifiers', () => { -- describe('trackSkillById', () => { -- it('Should return tracked Skill primary key', () => { -+ describe('Compare relationships', () => { -+ describe('compareSkill', () => { -+ it('Should forward to skillService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackSkillById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(skillService, 'compareSkill'); -+ comp.compareSkill(entity, entity2); -+ expect(skillService.compareSkill).toHaveBeenCalledWith(entity, entity2); - }); - }); - -- describe('trackLevelById', () => { -- it('Should return tracked Level primary key', () => { -+ describe('compareLevel', () => { -+ it('Should forward to levelService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackLevelById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(levelService, 'compareLevel'); -+ comp.compareLevel(entity, entity2); -+ expect(levelService.compareLevel).toHaveBeenCalledWith(entity, entity2); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.html b/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.html -index 1445923f..c219ac08 100644 ---- a/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.spec.ts -index 018d4e65..84505521 100644 ---- a/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('Level Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [LevelDeleteDialogComponent], -+ imports: [HttpClientTestingModule, LevelDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(LevelDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('Level Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.ts b/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.ts -index 12d0fa41..ed31a096 100644 ---- a/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/level/delete/level-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { ILevel } from '../level.model'; - import { LevelService } from '../service/level.service'; - - @Component({ -+ standalone: true, - templateUrl: './level-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class LevelDeleteDialogComponent { - level?: ILevel; - -- constructor(protected levelService: LevelService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected levelService: LevelService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class LevelDeleteDialogComponent { - - confirmDelete(id: number): void { - this.levelService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/level/detail/level-detail.component.html b/src/main/webapp/app/entities/level/detail/level-detail.component.html -index 135210c8..a09dba03 100644 ---- a/src/main/webapp/app/entities/level/detail/level-detail.component.html -+++ b/src/main/webapp/app/entities/level/detail/level-detail.component.html -@@ -53,19 +53,19 @@ -
Depends On
-
- -
-
Image
-
- -
-
Dimension
-
- -
- -diff --git a/src/main/webapp/app/entities/level/detail/level-detail.component.spec.ts b/src/main/webapp/app/entities/level/detail/level-detail.component.spec.ts -index 6b796c14..8b19297b 100644 ---- a/src/main/webapp/app/entities/level/detail/level-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/level/detail/level-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { LevelDetailComponent } from './level-detail.component'; - - describe('Level Management Detail Component', () => { -- let comp: LevelDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [LevelDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [LevelDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ level: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: LevelDetailComponent, -+ resolve: { level: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(LevelDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(LevelDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load level on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load level on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', LevelDetailComponent); - - // THEN -- expect(comp.level).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.level).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/level/detail/level-detail.component.ts b/src/main/webapp/app/entities/level/detail/level-detail.component.ts -index c70c7855..f2d904a9 100644 ---- a/src/main/webapp/app/entities/level/detail/level-detail.component.ts -+++ b/src/main/webapp/app/entities/level/detail/level-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { ILevel } from '../level.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-level-detail', - templateUrl: './level-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class LevelDetailComponent implements OnInit { -- level: ILevel | null = null; -+export class LevelDetailComponent { -+ @Input() level: ILevel | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ level }) => { -- this.level = level; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/level/level.model.ts b/src/main/webapp/app/entities/level/level.model.ts -index 7ea6975a..f01ff14c 100644 ---- a/src/main/webapp/app/entities/level/level.model.ts -+++ b/src/main/webapp/app/entities/level/level.model.ts -@@ -1,44 +1,21 @@ - import dayjs from 'dayjs/esm'; --import { ILevelSkill } from 'app/entities/level-skill/level-skill.model'; - import { IImage } from 'app/entities/image/image.model'; - import { IDimension } from 'app/entities/dimension/dimension.model'; - - export interface ILevel { -- id?: number; -- titleEN?: string; -+ id: number; -+ titleEN?: string | null; - titleDE?: string | null; - descriptionEN?: string | null; - descriptionDE?: string | null; -- requiredScore?: number; -- instantMultiplier?: number; -+ requiredScore?: number | null; -+ instantMultiplier?: number | null; - completionBonus?: number | null; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; -- dependsOn?: ILevel | null; -- skills?: ILevelSkill[] | null; -- image?: IImage | null; -- dimension?: IDimension; -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; -+ dependsOn?: Pick | null; -+ image?: Pick | null; -+ dimension?: Pick | null; - } - --export class Level implements ILevel { -- constructor( -- public id?: number, -- public titleEN?: string, -- public titleDE?: string | null, -- public descriptionEN?: string | null, -- public descriptionDE?: string | null, -- public requiredScore?: number, -- public instantMultiplier?: number, -- public completionBonus?: number | null, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs, -- public dependsOn?: ILevel | null, -- public skills?: ILevelSkill[] | null, -- public image?: IImage | null, -- public dimension?: IDimension -- ) {} --} -- --export function getLevelIdentifier(level: ILevel): number | undefined { -- return level.id; --} -+export type NewLevel = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/level/level.module.ts b/src/main/webapp/app/entities/level/level.module.ts -deleted file mode 100644 -index d445b0b3..00000000 ---- a/src/main/webapp/app/entities/level/level.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { LevelComponent } from './list/level.component'; --import { LevelDetailComponent } from './detail/level-detail.component'; --import { LevelUpdateComponent } from './update/level-update.component'; --import { LevelDeleteDialogComponent } from './delete/level-delete-dialog.component'; --import { LevelRoutingModule } from './route/level-routing.module'; -- --@NgModule({ -- imports: [SharedModule, LevelRoutingModule], -- declarations: [LevelComponent, LevelDetailComponent, LevelUpdateComponent, LevelDeleteDialogComponent], -- entryComponents: [LevelDeleteDialogComponent], --}) --export class LevelModule {} -diff --git a/src/main/webapp/app/entities/level/list/level.component.html b/src/main/webapp/app/entities/level/list/level.component.html -index 6fd04c71..0a607e48 100644 ---- a/src/main/webapp/app/entities/level/list/level.component.html -+++ b/src/main/webapp/app/entities/level/list/level.component.html -@@ -3,9 +3,9 @@ - Levels - -
-- - - -
- -@@ -25,54 +25,100 @@ - - -
-- No levels found -+ No Levels found -
- --
-+
- - -- -- -+ -+ - - - - - - - - - - - - - - - -- -+ - - - - - -
ID
-+
-+ ID -+ -+
-+
-- Title EN -+
-+ Title EN -+ -+
-
-- Title DE -+
-+ Title DE -+ -+
-
-- Description EN -+
-+ Description EN -+ -+
-
-- Description DE -+
-+ Description DE -+ -+
-
-- Required Score -+
-+ Required Score -+ -+
-
-- Instant Multiplier -+
-+ Instant Multiplier -+ -+
-
-- Completion Bonus -+
-+ Completion Bonus -+ -+
-
-- Created At -+
-+ Created At -+ -+
-
-- Updated At -+
-+ Updated At -+ -+
-
-- Depends On -+
-+ Depends On -+ -+
-
-- Image -+
-+ Image -+ -+
-
-- Dimension -+
-+ Dimension -+ -+
-
- {{ level.id }} -@@ -88,17 +134,17 @@ - {{ level.updatedAt | formatMediumDatetime }} - - - - - - -diff --git a/src/main/webapp/app/entities/level/list/level.component.spec.ts b/src/main/webapp/app/entities/level/list/level.component.spec.ts -index 22b9ef0b..cf28d7be 100644 ---- a/src/main/webapp/app/entities/level/list/level.component.spec.ts -+++ b/src/main/webapp/app/entities/level/list/level.component.spec.ts -@@ -1,21 +1,43 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { LevelService } from '../service/level.service'; - - import { LevelComponent } from './level.component'; -+import SpyInstance = jest.SpyInstance; - - describe('Level Management Component', () => { - let comp: LevelComponent; - let fixture: ComponentFixture; - let service: LevelService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [LevelComponent], -+ imports: [RouterTestingModule.withRoutes([{ path: 'level', component: LevelComponent }]), HttpClientTestingModule, LevelComponent], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(LevelComponent, '') - .compileComponents(); -@@ -23,6 +45,7 @@ describe('Level Management Component', () => { - fixture = TestBed.createComponent(LevelComponent); - comp = fixture.componentInstance; - service = TestBed.inject(LevelService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +53,8 @@ describe('Level Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +64,25 @@ describe('Level Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.levels[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.levels?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to levelService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getLevelIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getLevelIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.levels[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +90,25 @@ describe('Level Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +117,8 @@ describe('Level Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.levels[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.levels?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/level/list/level.component.ts b/src/main/webapp/app/entities/level/list/level.component.ts -index 7cdcd1fa..3a3ab771 100644 ---- a/src/main/webapp/app/entities/level/list/level.component.ts -+++ b/src/main/webapp/app/entities/level/list/level.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { ILevel } from '../level.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { LevelService } from '../service/level.service'; --import { LevelDeleteDialogComponent } from '../delete/level-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, LevelService } from '../service/level.service'; -+import { LevelDeleteDialogComponent } from '../delete/level-delete-dialog.component'; -+import { ILevel } from '../level.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-level', - templateUrl: './level.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class LevelComponent implements OnInit { -- levels: ILevel[]; -+ levels?: ILevel[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected levelService: LevelService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.levels = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.levelService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateLevels(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected levelService: LevelService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.levels = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: ILevel): number => this.levelService.getLevelIdentifier(item); - -- trackId(_index: number, item: ILevel): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(level: ILevel): void { - const modalRef = this.modalService.open(LevelDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.level = level; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.levels = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: ILevel[] | null): ILevel[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const levelsNew = this.levels ?? []; -+ if (data) { -+ for (const d of data) { -+ if (levelsNew.map(op => op.id).indexOf(d.id) === -1) { -+ levelsNew.push(d); -+ } -+ } -+ } -+ return levelsNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateLevels(data: ILevel[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,39 @@ export class LevelComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.levels.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ eagerload: true, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.levelService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/level/route/level-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/level/route/level-routing-resolve.service.spec.ts -index fad3c9b4..226fe9bb 100644 ---- a/src/main/webapp/app/entities/level/route/level-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/level/route/level-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { ILevel, Level } from '../level.model'; -+import { ILevel } from '../level.model'; - import { LevelService } from '../service/level.service'; - --import { LevelRoutingResolveService } from './level-routing-resolve.service'; -+import levelResolve from './level-routing-resolve.service'; - - describe('Level routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: LevelRoutingResolveService; - let service: LevelService; -- let resultLevel: ILevel | undefined; -+ let resultLevel: ILevel | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('Level routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(LevelRoutingResolveService); - service = TestBed.inject(LevelService); - resultLevel = undefined; - }); -@@ -46,8 +44,12 @@ describe('Level routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultLevel = result; -+ TestBed.runInInjectionContext(() => { -+ levelResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultLevel = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('Level routing resolve service', () => { - expect(resultLevel).toEqual({ id: 123 }); - }); - -- it('should return new ILevel if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultLevel = result; -+ TestBed.runInInjectionContext(() => { -+ levelResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultLevel = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultLevel).toEqual(new Level()); -+ expect(resultLevel).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as Level }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultLevel = result; -+ TestBed.runInInjectionContext(() => { -+ levelResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultLevel = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/level/route/level-routing-resolve.service.ts b/src/main/webapp/app/entities/level/route/level-routing-resolve.service.ts -index fcafc576..4214e217 100644 ---- a/src/main/webapp/app/entities/level/route/level-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/level/route/level-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { ILevel, Level } from '../level.model'; -+import { ILevel } from '../level.model'; - import { LevelService } from '../service/level.service'; - --@Injectable({ providedIn: 'root' }) --export class LevelRoutingResolveService implements Resolve { -- constructor(protected service: LevelService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((level: HttpResponse) => { -+export const levelResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(LevelService) -+ .find(id) -+ .pipe( -+ mergeMap((level: HttpResponse) => { - if (level.body) { - return of(level.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new Level()); - } --} -+ return of(null); -+}; -+ -+export default levelResolve; -diff --git a/src/main/webapp/app/entities/level/route/level-routing.module.ts b/src/main/webapp/app/entities/level/route/level-routing.module.ts -deleted file mode 100644 -index f95a96a7..00000000 ---- a/src/main/webapp/app/entities/level/route/level-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { LevelComponent } from '../list/level.component'; --import { LevelDetailComponent } from '../detail/level-detail.component'; --import { LevelUpdateComponent } from '../update/level-update.component'; --import { LevelRoutingResolveService } from './level-routing-resolve.service'; -- --const levelRoute: Routes = [ -- { -- path: '', -- component: LevelComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: LevelDetailComponent, -- resolve: { -- level: LevelRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: LevelUpdateComponent, -- resolve: { -- level: LevelRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: LevelUpdateComponent, -- resolve: { -- level: LevelRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(levelRoute)], -- exports: [RouterModule], --}) --export class LevelRoutingModule {} -diff --git a/src/main/webapp/app/entities/level/service/level.service.spec.ts b/src/main/webapp/app/entities/level/service/level.service.spec.ts -index 6be7430b..e75bae62 100644 ---- a/src/main/webapp/app/entities/level/service/level.service.spec.ts -+++ b/src/main/webapp/app/entities/level/service/level.service.spec.ts -@@ -1,18 +1,21 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { ILevel, Level } from '../level.model'; -+import { ILevel } from '../level.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../level.test-samples'; - --import { LevelService } from './level.service'; -+import { LevelService, RestLevel } from './level.service'; -+ -+const requireRestSample: RestLevel = { -+ ...sampleWithRequiredData, -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('Level Service', () => { - let service: LevelService; - let httpMock: HttpTestingController; -- let elemDefault: ILevel; - let expectedResult: ILevel | ILevel[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -21,58 +24,26 @@ describe('Level Service', () => { - expectedResult = null; - service = TestBed.inject(LevelService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- titleEN: 'AAAAAAA', -- titleDE: 'AAAAAAA', -- descriptionEN: 'AAAAAAA', -- descriptionDE: 'AAAAAAA', -- requiredScore: 0, -- instantMultiplier: 0, -- completionBonus: 0, -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a Level', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new Level()).subscribe(resp => (expectedResult = resp.body)); -+ const level = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(level).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -80,31 +51,11 @@ describe('Level Service', () => { - }); - - it('should update a Level', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- titleEN: 'BBBBBB', -- titleDE: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- requiredScore: 1, -- instantMultiplier: 1, -- completionBonus: 1, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const level = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(level).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -112,25 +63,9 @@ describe('Level Service', () => { - }); - - it('should partial update a Level', () => { -- const patchObject = Object.assign( -- { -- titleEN: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- instantMultiplier: 1, -- }, -- new Level() -- ); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -140,84 +75,66 @@ describe('Level Service', () => { - }); - - it('should return a list of Level', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- titleEN: 'BBBBBB', -- titleDE: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- requiredScore: 1, -- instantMultiplier: 1, -- completionBonus: 1, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a Level', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addLevelToCollectionIfMissing', () => { - it('should add a Level to an empty array', () => { -- const level: ILevel = { id: 123 }; -+ const level: ILevel = sampleWithRequiredData; - expectedResult = service.addLevelToCollectionIfMissing([], level); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(level); - }); - - it('should not add a Level to an array that contains it', () => { -- const level: ILevel = { id: 123 }; -+ const level: ILevel = sampleWithRequiredData; - const levelCollection: ILevel[] = [ - { - ...level, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addLevelToCollectionIfMissing(levelCollection, level); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a Level to an array that doesn't contain it", () => { -- const level: ILevel = { id: 123 }; -- const levelCollection: ILevel[] = [{ id: 456 }]; -+ const level: ILevel = sampleWithRequiredData; -+ const levelCollection: ILevel[] = [sampleWithPartialData]; - expectedResult = service.addLevelToCollectionIfMissing(levelCollection, level); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(level); - }); - - it('should add only unique Level to an array', () => { -- const levelArray: ILevel[] = [{ id: 123 }, { id: 456 }, { id: 95526 }]; -- const levelCollection: ILevel[] = [{ id: 123 }]; -+ const levelArray: ILevel[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const levelCollection: ILevel[] = [sampleWithRequiredData]; - expectedResult = service.addLevelToCollectionIfMissing(levelCollection, ...levelArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const level: ILevel = { id: 123 }; -- const level2: ILevel = { id: 456 }; -+ const level: ILevel = sampleWithRequiredData; -+ const level2: ILevel = sampleWithPartialData; - expectedResult = service.addLevelToCollectionIfMissing([], level, level2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(level); -@@ -225,18 +142,62 @@ describe('Level Service', () => { - }); - - it('should accept null and undefined values', () => { -- const level: ILevel = { id: 123 }; -+ const level: ILevel = sampleWithRequiredData; - expectedResult = service.addLevelToCollectionIfMissing([], null, level, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(level); - }); - - it('should return initial array if no Level is added', () => { -- const levelCollection: ILevel[] = [{ id: 123 }]; -+ const levelCollection: ILevel[] = [sampleWithRequiredData]; - expectedResult = service.addLevelToCollectionIfMissing(levelCollection, undefined, null); - expect(expectedResult).toEqual(levelCollection); - }); - }); -+ -+ describe('compareLevel', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareLevel(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareLevel(entity1, entity2); -+ const compareResult2 = service.compareLevel(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareLevel(entity1, entity2); -+ const compareResult2 = service.compareLevel(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareLevel(entity1, entity2); -+ const compareResult2 = service.compareLevel(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/level/service/level.service.ts b/src/main/webapp/app/entities/level/service/level.service.ts -index e7cd8817..5a57ff16 100644 ---- a/src/main/webapp/app/entities/level/service/level.service.ts -+++ b/src/main/webapp/app/entities/level/service/level.service.ts -@@ -1,13 +1,28 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { ILevel, getLevelIdentifier } from '../level.model'; -+import { ILevel, NewLevel } from '../level.model'; -+ -+export type PartialUpdateLevel = Partial & Pick; -+ -+type RestOf = Omit & { -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestLevel = RestOf; -+ -+export type NewRestLevel = RestOf; -+ -+export type PartialUpdateRestLevel = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,53 +31,65 @@ export type EntityArrayResponseType = HttpResponse; - export class LevelService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/levels'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(level: ILevel): Observable { -+ create(level: NewLevel): Observable { - const copy = this.convertDateFromClient(level); -- return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ return this.http.post(this.resourceUrl, copy, { observe: 'response' }).pipe(map(res => this.convertResponseFromServer(res))); - } - - update(level: ILevel): Observable { - const copy = this.convertDateFromClient(level); - return this.http -- .put(`${this.resourceUrl}/${getLevelIdentifier(level) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getLevelIdentifier(level)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(level: ILevel): Observable { -+ partialUpdate(level: PartialUpdateLevel): Observable { - const copy = this.convertDateFromClient(level); - return this.http -- .patch(`${this.resourceUrl}/${getLevelIdentifier(level) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getLevelIdentifier(level)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addLevelToCollectionIfMissing(levelCollection: ILevel[], ...levelsToCheck: (ILevel | null | undefined)[]): ILevel[] { -- const levels: ILevel[] = levelsToCheck.filter(isPresent); -+ getLevelIdentifier(level: Pick): number { -+ return level.id; -+ } -+ -+ compareLevel(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getLevelIdentifier(o1) === this.getLevelIdentifier(o2) : o1 === o2; -+ } -+ -+ addLevelToCollectionIfMissing>( -+ levelCollection: Type[], -+ ...levelsToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const levels: Type[] = levelsToCheck.filter(isPresent); - if (levels.length > 0) { -- const levelCollectionIdentifiers = levelCollection.map(levelItem => getLevelIdentifier(levelItem)!); -+ const levelCollectionIdentifiers = levelCollection.map(levelItem => this.getLevelIdentifier(levelItem)!); - const levelsToAdd = levels.filter(levelItem => { -- const levelIdentifier = getLevelIdentifier(levelItem); -- if (levelIdentifier == null || levelCollectionIdentifiers.includes(levelIdentifier)) { -+ const levelIdentifier = this.getLevelIdentifier(levelItem); -+ if (levelCollectionIdentifiers.includes(levelIdentifier)) { - return false; - } - levelCollectionIdentifiers.push(levelIdentifier); -@@ -73,28 +100,31 @@ export class LevelService { - return levelCollection; - } - -- protected convertDateFromClient(level: ILevel): ILevel { -- return Object.assign({}, level, { -- createdAt: level.createdAt?.isValid() ? level.createdAt.toJSON() : undefined, -- updatedAt: level.updatedAt?.isValid() ? level.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromClient(level: T): RestOf { -+ return { -+ ...level, -+ createdAt: level.createdAt?.toJSON() ?? null, -+ updatedAt: level.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertDateFromServer(restLevel: RestLevel): ILevel { -+ return { -+ ...restLevel, -+ createdAt: restLevel.createdAt ? dayjs(restLevel.createdAt) : undefined, -+ updatedAt: restLevel.updatedAt ? dayjs(restLevel.updatedAt) : undefined, -+ }; - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((level: ILevel) => { -- level.createdAt = level.createdAt ? dayjs(level.createdAt) : undefined; -- level.updatedAt = level.updatedAt ? dayjs(level.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); -+ } -+ -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/level/update/level-update.component.html b/src/main/webapp/app/entities/level/update/level-update.component.html -index 0641a3b5..d3b939a6 100644 ---- a/src/main/webapp/app/entities/level/update/level-update.component.html -+++ b/src/main/webapp/app/entities/level/update/level-update.component.html -@@ -8,42 +8,36 @@ -
- - --
-+
- - -
- --
-+
- - -
-- This field is required. -- This field is required. -- - This field is required to be at least 3 characters. -- This field is required to be at least 3 characters. -- - This field cannot be longer than 50 characters. -- This field cannot be longer than 50 characters. -- -
-
- --
-+
- - -
-@@ -52,21 +46,19 @@ - *ngIf="editForm.get('titleDE')?.errors?.minlength" - jhiTranslate="entity.validation.minlength" - [translateValues]="{ min: 3 }" -+ >This field is required to be at least 3 characters. -- This field is required to be at least 3 characters. -- - This field cannot be longer than 50 characters. -- This field cannot be longer than 50 characters. -- -
-
- --
-+
- - This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- - This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- - This field is required. -- This field is required. -- - This field should be at least 0. -- This field should be at least 0. -- - This field cannot be more than 1. -- This field cannot be more than 1. -- - This field should be a number. -- This field should be a number. -- -
-
- --
-+
- -@@ -188,28 +174,25 @@ - class="form-text text-danger" - *ngIf="editForm.get('instantMultiplier')?.errors?.required" - jhiTranslate="entity.validation.required" -+ >This field is required. -- This field is required. -- - This field should be at least 0. -- This field should be at least 0. -- - This field should be a number. -- This field should be a number. -- -
-
- --
-+
- - This field should be at least 0. -- This field should be at least 0. -- - This field should be a number. -- This field should be a number. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -- - -- -+ - -
- --
-+
- -- - -- -+ - -
- --
-+
- -- -+ -+ - -@@ -348,9 +326,8 @@ - class="form-text text-danger" - *ngIf="editForm.get(['dimension'])?.errors?.required" - jhiTranslate="entity.validation.required" -+ >This field is required. -- This field is required. -- -
-
- -diff --git a/src/main/webapp/app/entities/level/update/level-update.component.spec.ts b/src/main/webapp/app/entities/level/update/level-update.component.spec.ts -index 7d70530a..41b33452 100644 ---- a/src/main/webapp/app/entities/level/update/level-update.component.spec.ts -+++ b/src/main/webapp/app/entities/level/update/level-update.component.spec.ts -@@ -6,12 +6,13 @@ import { ActivatedRoute } from '@angular/router'; - import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - --import { LevelService } from '../service/level.service'; --import { ILevel, Level } from '../level.model'; - import { IImage } from 'app/entities/image/image.model'; - import { ImageService } from 'app/entities/image/service/image.service'; - import { IDimension } from 'app/entities/dimension/dimension.model'; - import { DimensionService } from 'app/entities/dimension/service/dimension.service'; -+import { ILevel } from '../level.model'; -+import { LevelService } from '../service/level.service'; -+import { LevelFormService } from './level-form.service'; - - import { LevelUpdateComponent } from './level-update.component'; - -@@ -19,14 +20,14 @@ describe('Level Management Update Component', () => { - let comp: LevelUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let levelFormService: LevelFormService; - let levelService: LevelService; - let imageService: ImageService; - let dimensionService: DimensionService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [LevelUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), LevelUpdateComponent], - providers: [ - FormBuilder, - { -@@ -42,6 +43,7 @@ describe('Level Management Update Component', () => { - - fixture = TestBed.createComponent(LevelUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ levelFormService = TestBed.inject(LevelFormService); - levelService = TestBed.inject(LevelService); - imageService = TestBed.inject(ImageService); - dimensionService = TestBed.inject(DimensionService); -@@ -52,10 +54,10 @@ describe('Level Management Update Component', () => { - describe('ngOnInit', () => { - it('Should call dependsOn query and add missing value', () => { - const level: ILevel = { id: 456 }; -- const dependsOn: ILevel = { id: 74966 }; -+ const dependsOn: ILevel = { id: 27683 }; - level.dependsOn = dependsOn; - -- const dependsOnCollection: ILevel[] = [{ id: 63987 }]; -+ const dependsOnCollection: ILevel[] = [{ id: 29218 }]; - jest.spyOn(levelService, 'query').mockReturnValue(of(new HttpResponse({ body: dependsOnCollection }))); - const expectedCollection: ILevel[] = [dependsOn, ...dependsOnCollection]; - jest.spyOn(levelService, 'addLevelToCollectionIfMissing').mockReturnValue(expectedCollection); -@@ -70,10 +72,10 @@ describe('Level Management Update Component', () => { - - it('Should call Image query and add missing value', () => { - const level: ILevel = { id: 456 }; -- const image: IImage = { id: 28544 }; -+ const image: IImage = { id: 19565 }; - level.image = image; - -- const imageCollection: IImage[] = [{ id: 34107 }]; -+ const imageCollection: IImage[] = [{ id: 97 }]; - jest.spyOn(imageService, 'query').mockReturnValue(of(new HttpResponse({ body: imageCollection }))); - const additionalImages = [image]; - const expectedCollection: IImage[] = [...additionalImages, ...imageCollection]; -@@ -83,16 +85,19 @@ describe('Level Management Update Component', () => { - comp.ngOnInit(); - - expect(imageService.query).toHaveBeenCalled(); -- expect(imageService.addImageToCollectionIfMissing).toHaveBeenCalledWith(imageCollection, ...additionalImages); -+ expect(imageService.addImageToCollectionIfMissing).toHaveBeenCalledWith( -+ imageCollection, -+ ...additionalImages.map(expect.objectContaining), -+ ); - expect(comp.imagesSharedCollection).toEqual(expectedCollection); - }); - - it('Should call Dimension query and add missing value', () => { - const level: ILevel = { id: 456 }; -- const dimension: IDimension = { id: 70829 }; -+ const dimension: IDimension = { id: 17165 }; - level.dimension = dimension; - -- const dimensionCollection: IDimension[] = [{ id: 88619 }]; -+ const dimensionCollection: IDimension[] = [{ id: 1860 }]; - jest.spyOn(dimensionService, 'query').mockReturnValue(of(new HttpResponse({ body: dimensionCollection }))); - const additionalDimensions = [dimension]; - const expectedCollection: IDimension[] = [...additionalDimensions, ...dimensionCollection]; -@@ -102,34 +107,38 @@ describe('Level Management Update Component', () => { - comp.ngOnInit(); - - expect(dimensionService.query).toHaveBeenCalled(); -- expect(dimensionService.addDimensionToCollectionIfMissing).toHaveBeenCalledWith(dimensionCollection, ...additionalDimensions); -+ expect(dimensionService.addDimensionToCollectionIfMissing).toHaveBeenCalledWith( -+ dimensionCollection, -+ ...additionalDimensions.map(expect.objectContaining), -+ ); - expect(comp.dimensionsSharedCollection).toEqual(expectedCollection); - }); - - it('Should update editForm', () => { - const level: ILevel = { id: 456 }; -- const dependsOn: ILevel = { id: 41742 }; -+ const dependsOn: ILevel = { id: 21624 }; - level.dependsOn = dependsOn; -- const image: IImage = { id: 27382 }; -+ const image: IImage = { id: 17088 }; - level.image = image; -- const dimension: IDimension = { id: 31519 }; -+ const dimension: IDimension = { id: 22674 }; - level.dimension = dimension; - - activatedRoute.data = of({ level }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(level)); - expect(comp.dependsOnsCollection).toContain(dependsOn); - expect(comp.imagesSharedCollection).toContain(image); - expect(comp.dimensionsSharedCollection).toContain(dimension); -+ expect(comp.level).toEqual(level); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const level = { id: 123 }; -+ jest.spyOn(levelFormService, 'getLevel').mockReturnValue(level); - jest.spyOn(levelService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ level }); -@@ -142,18 +151,20 @@ describe('Level Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(levelFormService.getLevel).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(levelService.update).toHaveBeenCalledWith(level); -+ expect(levelService.update).toHaveBeenCalledWith(expect.objectContaining(level)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const level = new Level(); -+ const saveSubject = new Subject>(); -+ const level = { id: 123 }; -+ jest.spyOn(levelFormService, 'getLevel').mockReturnValue({ id: null }); - jest.spyOn(levelService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ level }); -+ activatedRoute.data = of({ level: null }); - comp.ngOnInit(); - - // WHEN -@@ -163,14 +174,15 @@ describe('Level Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(levelService.create).toHaveBeenCalledWith(level); -+ expect(levelFormService.getLevel).toHaveBeenCalled(); -+ expect(levelService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const level = { id: 123 }; - jest.spyOn(levelService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -183,34 +195,40 @@ describe('Level Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(levelService.update).toHaveBeenCalledWith(level); -+ expect(levelService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); - }); - -- describe('Tracking relationships identifiers', () => { -- describe('trackLevelById', () => { -- it('Should return tracked Level primary key', () => { -+ describe('Compare relationships', () => { -+ describe('compareLevel', () => { -+ it('Should forward to levelService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackLevelById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(levelService, 'compareLevel'); -+ comp.compareLevel(entity, entity2); -+ expect(levelService.compareLevel).toHaveBeenCalledWith(entity, entity2); - }); - }); - -- describe('trackImageById', () => { -- it('Should return tracked Image primary key', () => { -+ describe('compareImage', () => { -+ it('Should forward to imageService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackImageById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(imageService, 'compareImage'); -+ comp.compareImage(entity, entity2); -+ expect(imageService.compareImage).toHaveBeenCalledWith(entity, entity2); - }); - }); - -- describe('trackDimensionById', () => { -- it('Should return tracked Dimension primary key', () => { -+ describe('compareDimension', () => { -+ it('Should forward to dimensionService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackDimensionById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(dimensionService, 'compareDimension'); -+ comp.compareDimension(entity, entity2); -+ expect(dimensionService.compareDimension).toHaveBeenCalledWith(entity, entity2); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/level/update/level-update.component.ts b/src/main/webapp/app/entities/level/update/level-update.component.ts -index e25bde5e..4772ca28 100644 ---- a/src/main/webapp/app/entities/level/update/level-update.component.ts -+++ b/src/main/webapp/app/entities/level/update/level-update.component.ts -@@ -1,68 +1,60 @@ - import { Component, OnInit } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { FormBuilder, Validators } from '@angular/forms'; - import { ActivatedRoute } from '@angular/router'; - import { Observable } from 'rxjs'; - import { finalize, map } from 'rxjs/operators'; - --import dayjs from 'dayjs/esm'; --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; -+import SharedModule from 'app/shared/shared.module'; -+import { FormsModule, ReactiveFormsModule } from '@angular/forms'; - --import { ILevel, Level } from '../level.model'; --import { LevelService } from '../service/level.service'; - import { IImage } from 'app/entities/image/image.model'; - import { ImageService } from 'app/entities/image/service/image.service'; - import { IDimension } from 'app/entities/dimension/dimension.model'; - import { DimensionService } from 'app/entities/dimension/service/dimension.service'; -+import { LevelService } from '../service/level.service'; -+import { ILevel } from '../level.model'; -+import { LevelFormService, LevelFormGroup } from './level-form.service'; - // ### Modification-Start ### - import { DIMENSIONS_PER_PAGE, IMAGES_PER_PAGE } from '../../../config/pagination.constants'; - // ### Modification-End ### - - @Component({ -+ standalone: true, - selector: 'jhi-level-update', - templateUrl: './level-update.component.html', -+ imports: [SharedModule, FormsModule, ReactiveFormsModule], - }) - export class LevelUpdateComponent implements OnInit { - isSaving = false; -+ level: ILevel | null = null; - - dependsOnsCollection: ILevel[] = []; - imagesSharedCollection: IImage[] = []; - dimensionsSharedCollection: IDimension[] = []; - -- editForm = this.fb.group({ -- id: [], -- titleEN: [null, [Validators.required, Validators.minLength(3), Validators.maxLength(50)]], -- titleDE: [null, [Validators.minLength(3), Validators.maxLength(50)]], -- descriptionEN: [null, [Validators.maxLength(4096)]], -- descriptionDE: [null, [Validators.maxLength(4096)]], -- requiredScore: [null, [Validators.required, Validators.min(0), Validators.max(1)]], -- instantMultiplier: [null, [Validators.required, Validators.min(0)]], -- completionBonus: [null, [Validators.min(0)]], -- createdAt: [null, [Validators.required]], -- updatedAt: [null, [Validators.required]], -- dependsOn: [], -- image: [], -- dimension: [null, Validators.required], -- }); -+ editForm: LevelFormGroup = this.levelFormService.createLevelFormGroup(); - - constructor( - protected levelService: LevelService, -+ protected levelFormService: LevelFormService, - protected imageService: ImageService, - protected dimensionService: DimensionService, - protected activatedRoute: ActivatedRoute, -- protected fb: FormBuilder - ) {} - -+ compareLevel = (o1: ILevel | null, o2: ILevel | null): boolean => this.levelService.compareLevel(o1, o2); -+ -+ compareImage = (o1: IImage | null, o2: IImage | null): boolean => this.imageService.compareImage(o1, o2); -+ -+ compareDimension = (o1: IDimension | null, o2: IDimension | null): boolean => this.dimensionService.compareDimension(o1, o2); -+ - ngOnInit(): void { - this.activatedRoute.data.subscribe(({ level }) => { -- if (level.id === undefined) { -- const today = dayjs().startOf('day'); -- level.createdAt = today; -- level.updatedAt = today; -+ this.level = level; -+ if (level) { -+ this.updateForm(level); - } - -- this.updateForm(level); -- - this.loadRelationshipsOptions(); - }); - } -@@ -73,26 +65,14 @@ export class LevelUpdateComponent implements OnInit { - - save(): void { - this.isSaving = true; -- const level = this.createFromForm(); -- if (level.id !== undefined) { -+ const level = this.levelFormService.getLevel(this.editForm); -+ if (level.id !== null) { - this.subscribeToSaveResponse(this.levelService.update(level)); - } else { - this.subscribeToSaveResponse(this.levelService.create(level)); - } - } - -- trackLevelById(_index: number, item: ILevel): number { -- return item.id!; -- } -- -- trackImageById(_index: number, item: IImage): number { -- return item.id!; -- } -- -- trackDimensionById(_index: number, item: IDimension): number { -- return item.id!; -- } -- - protected subscribeToSaveResponse(result: Observable>): void { - result.pipe(finalize(() => this.onSaveFinalize())).subscribe({ - next: () => this.onSaveSuccess(), -@@ -113,27 +93,14 @@ export class LevelUpdateComponent implements OnInit { - } - - protected updateForm(level: ILevel): void { -- this.editForm.patchValue({ -- id: level.id, -- titleEN: level.titleEN, -- titleDE: level.titleDE, -- descriptionEN: level.descriptionEN, -- descriptionDE: level.descriptionDE, -- requiredScore: level.requiredScore, -- instantMultiplier: level.instantMultiplier, -- completionBonus: level.completionBonus, -- createdAt: level.createdAt ? level.createdAt.format(DATE_TIME_FORMAT) : null, -- updatedAt: level.updatedAt ? level.updatedAt.format(DATE_TIME_FORMAT) : null, -- dependsOn: level.dependsOn, -- image: level.image, -- dimension: level.dimension, -- }); -+ this.level = level; -+ this.levelFormService.resetForm(this.editForm, level); - -- this.dependsOnsCollection = this.levelService.addLevelToCollectionIfMissing(this.dependsOnsCollection, level.dependsOn); -- this.imagesSharedCollection = this.imageService.addImageToCollectionIfMissing(this.imagesSharedCollection, level.image); -- this.dimensionsSharedCollection = this.dimensionService.addDimensionToCollectionIfMissing( -+ this.dependsOnsCollection = this.levelService.addLevelToCollectionIfMissing(this.dependsOnsCollection, level.dependsOn); -+ this.imagesSharedCollection = this.imageService.addImageToCollectionIfMissing(this.imagesSharedCollection, level.image); -+ this.dimensionsSharedCollection = this.dimensionService.addDimensionToCollectionIfMissing( - this.dimensionsSharedCollection, -- level.dimension -+ level.dimension, - ); - } - -@@ -141,7 +108,7 @@ export class LevelUpdateComponent implements OnInit { - this.levelService - .query({ 'levelId.specified': 'false' }) - .pipe(map((res: HttpResponse) => res.body ?? [])) -- .pipe(map((levels: ILevel[]) => this.levelService.addLevelToCollectionIfMissing(levels, this.editForm.get('dependsOn')!.value))) -+ .pipe(map((levels: ILevel[]) => this.levelService.addLevelToCollectionIfMissing(levels, this.level?.dependsOn))) - .subscribe((levels: ILevel[]) => (this.dependsOnsCollection = levels)); - - this.imageService -@@ -149,7 +116,7 @@ export class LevelUpdateComponent implements OnInit { - .query({ page: 0, size: IMAGES_PER_PAGE }) - // ### Modification-End ### - .pipe(map((res: HttpResponse) => res.body ?? [])) -- .pipe(map((images: IImage[]) => this.imageService.addImageToCollectionIfMissing(images, this.editForm.get('image')!.value))) -+ .pipe(map((images: IImage[]) => this.imageService.addImageToCollectionIfMissing(images, this.level?.image))) - .subscribe((images: IImage[]) => (this.imagesSharedCollection = images)); - - this.dimensionService -@@ -159,28 +126,9 @@ export class LevelUpdateComponent implements OnInit { - .pipe(map((res: HttpResponse) => res.body ?? [])) - .pipe( - map((dimensions: IDimension[]) => -- this.dimensionService.addDimensionToCollectionIfMissing(dimensions, this.editForm.get('dimension')!.value) -- ) -+ this.dimensionService.addDimensionToCollectionIfMissing(dimensions, this.level?.dimension), -+ ), - ) - .subscribe((dimensions: IDimension[]) => (this.dimensionsSharedCollection = dimensions)); - } -- -- protected createFromForm(): ILevel { -- return { -- ...new Level(), -- id: this.editForm.get(['id'])!.value, -- titleEN: this.editForm.get(['titleEN'])!.value, -- titleDE: this.editForm.get(['titleDE'])!.value, -- descriptionEN: this.editForm.get(['descriptionEN'])!.value, -- descriptionDE: this.editForm.get(['descriptionDE'])!.value, -- requiredScore: this.editForm.get(['requiredScore'])!.value, -- instantMultiplier: this.editForm.get(['instantMultiplier'])!.value, -- completionBonus: this.editForm.get(['completionBonus'])!.value, -- createdAt: this.editForm.get(['createdAt'])!.value ? dayjs(this.editForm.get(['createdAt'])!.value, DATE_TIME_FORMAT) : undefined, -- updatedAt: this.editForm.get(['updatedAt'])!.value ? dayjs(this.editForm.get(['updatedAt'])!.value, DATE_TIME_FORMAT) : undefined, -- dependsOn: this.editForm.get(['dependsOn'])!.value, -- image: this.editForm.get(['image'])!.value, -- dimension: this.editForm.get(['dimension'])!.value, -- }; -- } - } -diff --git a/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.html b/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.html -index 1b63be3d..2610f920 100644 ---- a/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.spec.ts -index 32938d9f..621f9e55 100644 ---- a/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('Report Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [ReportDeleteDialogComponent], -+ imports: [HttpClientTestingModule, ReportDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(ReportDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('Report Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.ts b/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.ts -index c0948896..34efe43e 100644 ---- a/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/report/delete/report-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { IReport } from '../report.model'; - import { ReportService } from '../service/report.service'; - - @Component({ -+ standalone: true, - templateUrl: './report-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class ReportDeleteDialogComponent { - report?: IReport; - -- constructor(protected reportService: ReportService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected reportService: ReportService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class ReportDeleteDialogComponent { - - confirmDelete(id: number): void { - this.reportService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/report/detail/report-detail.component.spec.ts b/src/main/webapp/app/entities/report/detail/report-detail.component.spec.ts -index 711136cb..a51eb62b 100644 ---- a/src/main/webapp/app/entities/report/detail/report-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/report/detail/report-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { ReportDetailComponent } from './report-detail.component'; - - describe('Report Management Detail Component', () => { -- let comp: ReportDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [ReportDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [ReportDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ report: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: ReportDetailComponent, -+ resolve: { report: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(ReportDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(ReportDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load report on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load report on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', ReportDetailComponent); - - // THEN -- expect(comp.report).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.report).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/report/detail/report-detail.component.ts b/src/main/webapp/app/entities/report/detail/report-detail.component.ts -index e85aec6f..b2ab9a12 100644 ---- a/src/main/webapp/app/entities/report/detail/report-detail.component.ts -+++ b/src/main/webapp/app/entities/report/detail/report-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { IReport } from '../report.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-report-detail', - templateUrl: './report-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class ReportDetailComponent implements OnInit { -- report: IReport | null = null; -+export class ReportDetailComponent { -+ @Input() report: IReport | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ report }) => { -- this.report = report; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/report/list/report.component.html b/src/main/webapp/app/entities/report/list/report.component.html -index 5a283ca9..591cf4bb 100644 ---- a/src/main/webapp/app/entities/report/list/report.component.html -+++ b/src/main/webapp/app/entities/report/list/report.component.html -@@ -3,9 +3,9 @@ - Reports - -
-- - - -
- -@@ -25,19 +25,49 @@ - - -
-- No reports found -+ No Reports found -
- --
-+
- - -- -- -- -- -- -- -- -+ -+ -+ -+ -+ -+ -+ - - - -diff --git a/src/main/webapp/app/entities/report/list/report.component.spec.ts b/src/main/webapp/app/entities/report/list/report.component.spec.ts -index 45ff9d17..1f05285d 100644 ---- a/src/main/webapp/app/entities/report/list/report.component.spec.ts -+++ b/src/main/webapp/app/entities/report/list/report.component.spec.ts -@@ -1,6 +1,8 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { ReportService } from '../service/report.service'; -@@ -14,8 +16,26 @@ describe('Report Management Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [ReportComponent], -+ imports: [RouterTestingModule.withRoutes([{ path: 'report', component: ReportComponent }]), HttpClientTestingModule, ReportComponent], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(ReportComponent, '') - .compileComponents(); -@@ -30,8 +50,8 @@ describe('Report Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -43,4 +63,14 @@ describe('Report Management Component', () => { - expect(service.query).toHaveBeenCalled(); - expect(comp.reports?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); -+ -+ describe('trackId', () => { -+ it('Should forward to reportService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getReportIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getReportIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); -+ }); - }); -diff --git a/src/main/webapp/app/entities/report/list/report.component.ts b/src/main/webapp/app/entities/report/list/report.component.ts -index 8242c0cf..7754fcf9 100644 ---- a/src/main/webapp/app/entities/report/list/report.component.ts -+++ b/src/main/webapp/app/entities/report/list/report.component.ts -@@ -1,51 +1,133 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpResponse } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; -+import { SortService } from 'app/shared/sort/sort.service'; - import { IReport } from '../report.model'; --import { ReportService } from '../service/report.service'; -+import { EntityArrayResponseType, ReportService } from '../service/report.service'; - import { ReportDeleteDialogComponent } from '../delete/report-delete-dialog.component'; - - @Component({ -+ standalone: true, - selector: 'jhi-report', - templateUrl: './report.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ ], - }) - export class ReportComponent implements OnInit { - reports?: IReport[]; - isLoading = false; - -- constructor(protected reportService: ReportService, protected modalService: NgbModal) {} -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ constructor( -+ protected reportService: ReportService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected sortService: SortService, -+ protected modalService: NgbModal, -+ ) {} - -- this.reportService.query().subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.reports = res.body ?? []; -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ trackId = (_index: number, item: IReport): number => this.reportService.getReportIdentifier(item); - - ngOnInit(): void { -- this.loadAll(); -- } -- -- trackId(_index: number, item: IReport): number { -- return item.id!; -+ this.load(); - } - - delete(report: IReport): void { - const modalRef = this.modalService.open(ReportDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.report = report; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.loadAll(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } -+ -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.reports = this.refineData(dataFromBody); -+ } -+ -+ protected refineData(data: IReport[]): IReport[] { -+ return data.sort(this.sortService.startSort(this.predicate, this.ascending ? 1 : -1)); -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: IReport[] | null): IReport[] { -+ return data ?? []; -+ } -+ -+ protected queryBackend(predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const queryObject: any = { -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.reportService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; -+ } -+ } - } -diff --git a/src/main/webapp/app/entities/report/report.model.ts b/src/main/webapp/app/entities/report/report.model.ts -index 706c385a..a2941d97 100644 ---- a/src/main/webapp/app/entities/report/report.model.ts -+++ b/src/main/webapp/app/entities/report/report.model.ts -@@ -2,25 +2,12 @@ import dayjs from 'dayjs/esm'; - import { ReportType } from 'app/entities/enumerations/report-type.model'; - - export interface IReport { -- id?: number; -- title?: string; -- description?: string; -- type?: ReportType; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; -+ id: number; -+ title?: string | null; -+ description?: string | null; -+ type?: keyof typeof ReportType | null; -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; - } - --export class Report implements IReport { -- constructor( -- public id?: number, -- public title?: string, -- public description?: string, -- public type?: ReportType, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs -- ) {} --} -- --export function getReportIdentifier(report: IReport): number | undefined { -- return report.id; --} -+export type NewReport = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/report/report.module.ts b/src/main/webapp/app/entities/report/report.module.ts -deleted file mode 100644 -index bfd18822..00000000 ---- a/src/main/webapp/app/entities/report/report.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { ReportComponent } from './list/report.component'; --import { ReportDetailComponent } from './detail/report-detail.component'; --import { ReportUpdateComponent } from './update/report-update.component'; --import { ReportDeleteDialogComponent } from './delete/report-delete-dialog.component'; --import { ReportRoutingModule } from './route/report-routing.module'; -- --@NgModule({ -- imports: [SharedModule, ReportRoutingModule], -- declarations: [ReportComponent, ReportDetailComponent, ReportUpdateComponent, ReportDeleteDialogComponent], -- entryComponents: [ReportDeleteDialogComponent], --}) --export class ReportModule {} -diff --git a/src/main/webapp/app/entities/report/route/report-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/report/route/report-routing-resolve.service.spec.ts -index 315601f3..71cb7588 100644 ---- a/src/main/webapp/app/entities/report/route/report-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/report/route/report-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { IReport, Report } from '../report.model'; -+import { IReport } from '../report.model'; - import { ReportService } from '../service/report.service'; - --import { ReportRoutingResolveService } from './report-routing-resolve.service'; -+import reportResolve from './report-routing-resolve.service'; - - describe('Report routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: ReportRoutingResolveService; - let service: ReportService; -- let resultReport: IReport | undefined; -+ let resultReport: IReport | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('Report routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(ReportRoutingResolveService); - service = TestBed.inject(ReportService); - resultReport = undefined; - }); -@@ -46,8 +44,12 @@ describe('Report routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultReport = result; -+ TestBed.runInInjectionContext(() => { -+ reportResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultReport = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('Report routing resolve service', () => { - expect(resultReport).toEqual({ id: 123 }); - }); - -- it('should return new IReport if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultReport = result; -+ TestBed.runInInjectionContext(() => { -+ reportResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultReport = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultReport).toEqual(new Report()); -+ expect(resultReport).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as Report }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultReport = result; -+ TestBed.runInInjectionContext(() => { -+ reportResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultReport = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/report/route/report-routing-resolve.service.ts b/src/main/webapp/app/entities/report/route/report-routing-resolve.service.ts -index 29eccf48..377416eb 100644 ---- a/src/main/webapp/app/entities/report/route/report-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/report/route/report-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { IReport, Report } from '../report.model'; -+import { IReport } from '../report.model'; - import { ReportService } from '../service/report.service'; - --@Injectable({ providedIn: 'root' }) --export class ReportRoutingResolveService implements Resolve { -- constructor(protected service: ReportService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((report: HttpResponse) => { -+export const reportResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(ReportService) -+ .find(id) -+ .pipe( -+ mergeMap((report: HttpResponse) => { - if (report.body) { - return of(report.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new Report()); - } --} -+ return of(null); -+}; -+ -+export default reportResolve; -diff --git a/src/main/webapp/app/entities/report/route/report-routing.module.ts b/src/main/webapp/app/entities/report/route/report-routing.module.ts -deleted file mode 100644 -index d39a34dd..00000000 ---- a/src/main/webapp/app/entities/report/route/report-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { ReportComponent } from '../list/report.component'; --import { ReportDetailComponent } from '../detail/report-detail.component'; --import { ReportUpdateComponent } from '../update/report-update.component'; --import { ReportRoutingResolveService } from './report-routing-resolve.service'; -- --const reportRoute: Routes = [ -- { -- path: '', -- component: ReportComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: ReportDetailComponent, -- resolve: { -- report: ReportRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: ReportUpdateComponent, -- resolve: { -- report: ReportRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: ReportUpdateComponent, -- resolve: { -- report: ReportRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(reportRoute)], -- exports: [RouterModule], --}) --export class ReportRoutingModule {} -diff --git a/src/main/webapp/app/entities/report/service/report.service.spec.ts b/src/main/webapp/app/entities/report/service/report.service.spec.ts -index b682d461..ff9a89e1 100644 ---- a/src/main/webapp/app/entities/report/service/report.service.spec.ts -+++ b/src/main/webapp/app/entities/report/service/report.service.spec.ts -@@ -1,19 +1,21 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { ReportType } from 'app/entities/enumerations/report-type.model'; --import { IReport, Report } from '../report.model'; -+import { IReport } from '../report.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../report.test-samples'; - --import { ReportService } from './report.service'; -+import { ReportService, RestReport } from './report.service'; -+ -+const requireRestSample: RestReport = { -+ ...sampleWithRequiredData, -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('Report Service', () => { - let service: ReportService; - let httpMock: HttpTestingController; -- let elemDefault: IReport; - let expectedResult: IReport | IReport[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -22,54 +24,26 @@ describe('Report Service', () => { - expectedResult = null; - service = TestBed.inject(ReportService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- title: 'AAAAAAA', -- description: 'AAAAAAA', -- type: ReportType.BUG, -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a Report', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new Report()).subscribe(resp => (expectedResult = resp.body)); -+ const report = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(report).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -77,27 +51,11 @@ describe('Report Service', () => { - }); - - it('should update a Report', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- title: 'BBBBBB', -- description: 'BBBBBB', -- type: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const report = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(report).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -105,25 +63,9 @@ describe('Report Service', () => { - }); - - it('should partial update a Report', () => { -- const patchObject = Object.assign( -- { -- title: 'BBBBBB', -- description: 'BBBBBB', -- type: 'BBBBBB', -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- new Report() -- ); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -133,80 +75,66 @@ describe('Report Service', () => { - }); - - it('should return a list of Report', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- title: 'BBBBBB', -- description: 'BBBBBB', -- type: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a Report', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addReportToCollectionIfMissing', () => { - it('should add a Report to an empty array', () => { -- const report: IReport = { id: 123 }; -+ const report: IReport = sampleWithRequiredData; - expectedResult = service.addReportToCollectionIfMissing([], report); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(report); - }); - - it('should not add a Report to an array that contains it', () => { -- const report: IReport = { id: 123 }; -+ const report: IReport = sampleWithRequiredData; - const reportCollection: IReport[] = [ - { - ...report, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addReportToCollectionIfMissing(reportCollection, report); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a Report to an array that doesn't contain it", () => { -- const report: IReport = { id: 123 }; -- const reportCollection: IReport[] = [{ id: 456 }]; -+ const report: IReport = sampleWithRequiredData; -+ const reportCollection: IReport[] = [sampleWithPartialData]; - expectedResult = service.addReportToCollectionIfMissing(reportCollection, report); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(report); - }); - - it('should add only unique Report to an array', () => { -- const reportArray: IReport[] = [{ id: 123 }, { id: 456 }, { id: 84743 }]; -- const reportCollection: IReport[] = [{ id: 123 }]; -+ const reportArray: IReport[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const reportCollection: IReport[] = [sampleWithRequiredData]; - expectedResult = service.addReportToCollectionIfMissing(reportCollection, ...reportArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const report: IReport = { id: 123 }; -- const report2: IReport = { id: 456 }; -+ const report: IReport = sampleWithRequiredData; -+ const report2: IReport = sampleWithPartialData; - expectedResult = service.addReportToCollectionIfMissing([], report, report2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(report); -@@ -214,18 +142,62 @@ describe('Report Service', () => { - }); - - it('should accept null and undefined values', () => { -- const report: IReport = { id: 123 }; -+ const report: IReport = sampleWithRequiredData; - expectedResult = service.addReportToCollectionIfMissing([], null, report, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(report); - }); - - it('should return initial array if no Report is added', () => { -- const reportCollection: IReport[] = [{ id: 123 }]; -+ const reportCollection: IReport[] = [sampleWithRequiredData]; - expectedResult = service.addReportToCollectionIfMissing(reportCollection, undefined, null); - expect(expectedResult).toEqual(reportCollection); - }); - }); -+ -+ describe('compareReport', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareReport(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareReport(entity1, entity2); -+ const compareResult2 = service.compareReport(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareReport(entity1, entity2); -+ const compareResult2 = service.compareReport(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareReport(entity1, entity2); -+ const compareResult2 = service.compareReport(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/report/service/report.service.ts b/src/main/webapp/app/entities/report/service/report.service.ts -index 30e55017..a2eb7693 100644 ---- a/src/main/webapp/app/entities/report/service/report.service.ts -+++ b/src/main/webapp/app/entities/report/service/report.service.ts -@@ -1,13 +1,28 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { IReport, getReportIdentifier } from '../report.model'; -+import { IReport, NewReport } from '../report.model'; -+ -+export type PartialUpdateReport = Partial & Pick; -+ -+type RestOf = Omit & { -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestReport = RestOf; -+ -+export type NewRestReport = RestOf; -+ -+export type PartialUpdateRestReport = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,53 +31,67 @@ export type EntityArrayResponseType = HttpResponse; - export class ReportService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/reports'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(report: IReport): Observable { -+ create(report: NewReport): Observable { - const copy = this.convertDateFromClient(report); - return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .post(this.resourceUrl, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - update(report: IReport): Observable { - const copy = this.convertDateFromClient(report); - return this.http -- .put(`${this.resourceUrl}/${getReportIdentifier(report) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getReportIdentifier(report)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(report: IReport): Observable { -+ partialUpdate(report: PartialUpdateReport): Observable { - const copy = this.convertDateFromClient(report); - return this.http -- .patch(`${this.resourceUrl}/${getReportIdentifier(report) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getReportIdentifier(report)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addReportToCollectionIfMissing(reportCollection: IReport[], ...reportsToCheck: (IReport | null | undefined)[]): IReport[] { -- const reports: IReport[] = reportsToCheck.filter(isPresent); -+ getReportIdentifier(report: Pick): number { -+ return report.id; -+ } -+ -+ compareReport(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getReportIdentifier(o1) === this.getReportIdentifier(o2) : o1 === o2; -+ } -+ -+ addReportToCollectionIfMissing>( -+ reportCollection: Type[], -+ ...reportsToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const reports: Type[] = reportsToCheck.filter(isPresent); - if (reports.length > 0) { -- const reportCollectionIdentifiers = reportCollection.map(reportItem => getReportIdentifier(reportItem)!); -+ const reportCollectionIdentifiers = reportCollection.map(reportItem => this.getReportIdentifier(reportItem)!); - const reportsToAdd = reports.filter(reportItem => { -- const reportIdentifier = getReportIdentifier(reportItem); -- if (reportIdentifier == null || reportCollectionIdentifiers.includes(reportIdentifier)) { -+ const reportIdentifier = this.getReportIdentifier(reportItem); -+ if (reportCollectionIdentifiers.includes(reportIdentifier)) { - return false; - } - reportCollectionIdentifiers.push(reportIdentifier); -@@ -73,28 +102,31 @@ export class ReportService { - return reportCollection; - } - -- protected convertDateFromClient(report: IReport): IReport { -- return Object.assign({}, report, { -- createdAt: report.createdAt?.isValid() ? report.createdAt.toJSON() : undefined, -- updatedAt: report.updatedAt?.isValid() ? report.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromClient(report: T): RestOf { -+ return { -+ ...report, -+ createdAt: report.createdAt?.toJSON() ?? null, -+ updatedAt: report.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertDateFromServer(restReport: RestReport): IReport { -+ return { -+ ...restReport, -+ createdAt: restReport.createdAt ? dayjs(restReport.createdAt) : undefined, -+ updatedAt: restReport.updatedAt ? dayjs(restReport.updatedAt) : undefined, -+ }; - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((report: IReport) => { -- report.createdAt = report.createdAt ? dayjs(report.createdAt) : undefined; -- report.updatedAt = report.updatedAt ? dayjs(report.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); -+ } -+ -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/report/update/report-update.component.html b/src/main/webapp/app/entities/report/update/report-update.component.html -index 25851bd6..82449e8f 100644 ---- a/src/main/webapp/app/entities/report/update/report-update.component.html -+++ b/src/main/webapp/app/entities/report/update/report-update.component.html -@@ -8,38 +8,36 @@ -
- - --
-+
- - -
- --
-+
- - -
-- -- This field is required. -- -+ This field is required. - This field is required to be at least 1 characters. -- This field is required to be at least 1 characters. -- - This field cannot be longer than 50 characters. -- This field cannot be longer than 50 characters. -- -
-
- --
-+
- - This field is required. -- This field is required. -- - This field is required to be at least 1 characters. -- This field is required to be at least 1 characters. -- - This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- - -
-- -- This field is required. -- -+ This field is required. -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
-
-diff --git a/src/main/webapp/app/entities/report/update/report-update.component.spec.ts b/src/main/webapp/app/entities/report/update/report-update.component.spec.ts -index 40f200dc..8165d9cd 100644 ---- a/src/main/webapp/app/entities/report/update/report-update.component.spec.ts -+++ b/src/main/webapp/app/entities/report/update/report-update.component.spec.ts -@@ -7,7 +7,8 @@ import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - - import { ReportService } from '../service/report.service'; --import { IReport, Report } from '../report.model'; -+import { IReport } from '../report.model'; -+import { ReportFormService } from './report-form.service'; - - import { ReportUpdateComponent } from './report-update.component'; - -@@ -15,12 +16,12 @@ describe('Report Management Update Component', () => { - let comp: ReportUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let reportFormService: ReportFormService; - let reportService: ReportService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [ReportUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), ReportUpdateComponent], - providers: [ - FormBuilder, - { -@@ -36,6 +37,7 @@ describe('Report Management Update Component', () => { - - fixture = TestBed.createComponent(ReportUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ reportFormService = TestBed.inject(ReportFormService); - reportService = TestBed.inject(ReportService); - - comp = fixture.componentInstance; -@@ -48,15 +50,16 @@ describe('Report Management Update Component', () => { - activatedRoute.data = of({ report }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(report)); -+ expect(comp.report).toEqual(report); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const report = { id: 123 }; -+ jest.spyOn(reportFormService, 'getReport').mockReturnValue(report); - jest.spyOn(reportService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ report }); -@@ -69,18 +72,20 @@ describe('Report Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(reportFormService.getReport).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(reportService.update).toHaveBeenCalledWith(report); -+ expect(reportService.update).toHaveBeenCalledWith(expect.objectContaining(report)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const report = new Report(); -+ const saveSubject = new Subject>(); -+ const report = { id: 123 }; -+ jest.spyOn(reportFormService, 'getReport').mockReturnValue({ id: null }); - jest.spyOn(reportService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ report }); -+ activatedRoute.data = of({ report: null }); - comp.ngOnInit(); - - // WHEN -@@ -90,14 +95,15 @@ describe('Report Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(reportService.create).toHaveBeenCalledWith(report); -+ expect(reportFormService.getReport).toHaveBeenCalled(); -+ expect(reportService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const report = { id: 123 }; - jest.spyOn(reportService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -110,7 +116,7 @@ describe('Report Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(reportService.update).toHaveBeenCalledWith(report); -+ expect(reportService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); -diff --git a/src/main/webapp/app/entities/report/update/report-update.component.ts b/src/main/webapp/app/entities/report/update/report-update.component.ts -index 4fb3e50f..56cd2805 100644 ---- a/src/main/webapp/app/entities/report/update/report-update.component.ts -+++ b/src/main/webapp/app/entities/report/update/report-update.component.ts -@@ -1,45 +1,42 @@ - import { Component, OnInit } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { FormBuilder, Validators } from '@angular/forms'; - import { ActivatedRoute } from '@angular/router'; - import { Observable } from 'rxjs'; - import { finalize } from 'rxjs/operators'; - --import dayjs from 'dayjs/esm'; --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; -+import SharedModule from 'app/shared/shared.module'; -+import { FormsModule, ReactiveFormsModule } from '@angular/forms'; - --import { IReport, Report } from '../report.model'; --import { ReportService } from '../service/report.service'; - import { ReportType } from 'app/entities/enumerations/report-type.model'; -+import { IReport } from '../report.model'; -+import { ReportService } from '../service/report.service'; -+import { ReportFormService, ReportFormGroup } from './report-form.service'; - - @Component({ -+ standalone: true, - selector: 'jhi-report-update', - templateUrl: './report-update.component.html', -+ imports: [SharedModule, FormsModule, ReactiveFormsModule], - }) - export class ReportUpdateComponent implements OnInit { - isSaving = false; -+ report: IReport | null = null; - reportTypeValues = Object.keys(ReportType); - -- editForm = this.fb.group({ -- id: [], -- title: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]], -- description: [null, [Validators.required, Validators.minLength(1), Validators.maxLength(4096)]], -- type: [null, [Validators.required]], -- createdAt: [null, [Validators.required]], -- updatedAt: [null, [Validators.required]], -- }); -+ editForm: ReportFormGroup = this.reportFormService.createReportFormGroup(); - -- constructor(protected reportService: ReportService, protected activatedRoute: ActivatedRoute, protected fb: FormBuilder) {} -+ constructor( -+ protected reportService: ReportService, -+ protected reportFormService: ReportFormService, -+ protected activatedRoute: ActivatedRoute, -+ ) {} - - ngOnInit(): void { - this.activatedRoute.data.subscribe(({ report }) => { -- if (report.id === undefined) { -- const today = dayjs().startOf('day'); -- report.createdAt = today; -- report.updatedAt = today; -+ this.report = report; -+ if (report) { -+ this.updateForm(report); - } -- -- this.updateForm(report); - }); - } - -@@ -49,8 +46,8 @@ export class ReportUpdateComponent implements OnInit { - - save(): void { - this.isSaving = true; -- const report = this.createFromForm(); -- if (report.id !== undefined) { -+ const report = this.reportFormService.getReport(this.editForm); -+ if (report.id !== null) { - this.subscribeToSaveResponse(this.reportService.update(report)); - } else { - this.subscribeToSaveResponse(this.reportService.create(report)); -@@ -77,25 +74,7 @@ export class ReportUpdateComponent implements OnInit { - } - - protected updateForm(report: IReport): void { -- this.editForm.patchValue({ -- id: report.id, -- title: report.title, -- description: report.description, -- type: report.type, -- createdAt: report.createdAt ? report.createdAt.format(DATE_TIME_FORMAT) : null, -- updatedAt: report.updatedAt ? report.updatedAt.format(DATE_TIME_FORMAT) : null, -- }); -- } -- -- protected createFromForm(): IReport { -- return { -- ...new Report(), -- id: this.editForm.get(['id'])!.value, -- title: this.editForm.get(['title'])!.value, -- description: this.editForm.get(['description'])!.value, -- type: this.editForm.get(['type'])!.value, -- createdAt: this.editForm.get(['createdAt'])!.value ? dayjs(this.editForm.get(['createdAt'])!.value, DATE_TIME_FORMAT) : undefined, -- updatedAt: this.editForm.get(['updatedAt'])!.value ? dayjs(this.editForm.get(['updatedAt'])!.value, DATE_TIME_FORMAT) : undefined, -- }; -+ this.report = report; -+ this.reportFormService.resetForm(this.editForm, report); - } - } -diff --git a/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.html b/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.html -index 5e4a97b0..8e510119 100644 ---- a/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.spec.ts -index d2f3c1b1..cf08263a 100644 ---- a/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('Skill Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [SkillDeleteDialogComponent], -+ imports: [HttpClientTestingModule, SkillDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(SkillDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('Skill Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.ts b/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.ts -index 804e5e5b..7cd41cc8 100644 ---- a/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/skill/delete/skill-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { ISkill } from '../skill.model'; - import { SkillService } from '../service/skill.service'; - - @Component({ -+ standalone: true, - templateUrl: './skill-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class SkillDeleteDialogComponent { - skill?: ISkill; - -- constructor(protected skillService: SkillService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected skillService: SkillService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class SkillDeleteDialogComponent { - - confirmDelete(id: number): void { - this.skillService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/skill/detail/skill-detail.component.spec.ts b/src/main/webapp/app/entities/skill/detail/skill-detail.component.spec.ts -index 1efc8169..4daef08a 100644 ---- a/src/main/webapp/app/entities/skill/detail/skill-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/skill/detail/skill-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { SkillDetailComponent } from './skill-detail.component'; - - describe('Skill Management Detail Component', () => { -- let comp: SkillDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [SkillDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [SkillDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ skill: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: SkillDetailComponent, -+ resolve: { skill: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(SkillDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(SkillDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load skill on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load skill on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', SkillDetailComponent); - - // THEN -- expect(comp.skill).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.skill).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/skill/detail/skill-detail.component.ts b/src/main/webapp/app/entities/skill/detail/skill-detail.component.ts -index 4ad4ed16..d936293b 100644 ---- a/src/main/webapp/app/entities/skill/detail/skill-detail.component.ts -+++ b/src/main/webapp/app/entities/skill/detail/skill-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { ISkill } from '../skill.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-skill-detail', - templateUrl: './skill-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class SkillDetailComponent implements OnInit { -- skill: ISkill | null = null; -+export class SkillDetailComponent { -+ @Input() skill: ISkill | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ skill }) => { -- this.skill = skill; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/skill/list/skill.component.html b/src/main/webapp/app/entities/skill/list/skill.component.html -index d276ec10..aaac2da4 100644 ---- a/src/main/webapp/app/entities/skill/list/skill.component.html -+++ b/src/main/webapp/app/entities/skill/list/skill.component.html -@@ -3,9 +3,9 @@ - Skills - -
-- - - -
- -@@ -25,61 +25,118 @@ - - -
-- No skills found -+ No Skills found -
- --
-+
-
IDTitleDescriptionTypeCreated AtUpdated At
-+
-+ ID -+ -+
-+
-+
-+ Title -+ -+
-+
-+
-+ Description -+ -+
-+
-+
-+ Type -+ -+
-+
-+
-+ Created At -+ -+
-+
-+
-+ Updated At -+ -+
-+
- -- -- -+ -+ - - - - - - - - - - -+ -- - - - - - - - -- -+ - -
ID
-+
-+ ID -+ -+
-+
-- Title EN -+
-+ Title EN -+ -+
-
-- Title DE -+
-+ Title DE -+ -+
-
-- Description EN -+
-+ Description EN -+ -+
-
-- Description DE -+
-+ Description DE -+ -+
-
-- Implementation EN -+
-+ Implementation EN -+ -+
-
-- Implementation DE -+
-+ Implementation DE -+ -+
-
-- Validation EN -+
-+ Validation EN -+ -+
-
-- Validation DE -+
-+ Validation DE -+ -+
-
-- Expiry Period -+
-+ Expiry Period -+ -+
-
-- Contact -+
-+ Contact -+ -+
-+
-+
-+ Score -+ -+
-
Score -- Rate Score -+
-+ Rate Score -+ -+
-
-- Rate Count -+
-+ Rate Count -+ -+
-
-- Created At -+
-+ Created At -+ -+
-
-- Updated At -+
-+ Updated At -+ -+
-
- {{ skill.id }} -diff --git a/src/main/webapp/app/entities/skill/list/skill.component.spec.ts b/src/main/webapp/app/entities/skill/list/skill.component.spec.ts -index 9d470431..5f487257 100644 ---- a/src/main/webapp/app/entities/skill/list/skill.component.spec.ts -+++ b/src/main/webapp/app/entities/skill/list/skill.component.spec.ts -@@ -1,21 +1,43 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { SkillService } from '../service/skill.service'; - - import { SkillComponent } from './skill.component'; -+import SpyInstance = jest.SpyInstance; - - describe('Skill Management Component', () => { - let comp: SkillComponent; - let fixture: ComponentFixture; - let service: SkillService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [SkillComponent], -+ imports: [RouterTestingModule.withRoutes([{ path: 'skill', component: SkillComponent }]), HttpClientTestingModule, SkillComponent], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(SkillComponent, '') - .compileComponents(); -@@ -23,6 +45,7 @@ describe('Skill Management Component', () => { - fixture = TestBed.createComponent(SkillComponent); - comp = fixture.componentInstance; - service = TestBed.inject(SkillService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +53,8 @@ describe('Skill Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +64,25 @@ describe('Skill Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.skills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.skills?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to skillService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getSkillIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getSkillIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.skills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +90,25 @@ describe('Skill Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +117,8 @@ describe('Skill Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.skills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.skills?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/skill/list/skill.component.ts b/src/main/webapp/app/entities/skill/list/skill.component.ts -index c01b4a8e..5cf1af54 100644 ---- a/src/main/webapp/app/entities/skill/list/skill.component.ts -+++ b/src/main/webapp/app/entities/skill/list/skill.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { ISkill } from '../skill.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { SkillService } from '../service/skill.service'; --import { SkillDeleteDialogComponent } from '../delete/skill-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, SkillService } from '../service/skill.service'; -+import { SkillDeleteDialogComponent } from '../delete/skill-delete-dialog.component'; -+import { ISkill } from '../skill.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-skill', - templateUrl: './skill.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class SkillComponent implements OnInit { -- skills: ISkill[]; -+ skills?: ISkill[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected skillService: SkillService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.skills = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.skillService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateSkills(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected skillService: SkillService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.skills = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: ISkill): number => this.skillService.getSkillIdentifier(item); - -- trackId(_index: number, item: ISkill): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(skill: ISkill): void { - const modalRef = this.modalService.open(SkillDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.skill = skill; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.skills = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: ISkill[] | null): ISkill[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const skillsNew = this.skills ?? []; -+ if (data) { -+ for (const d of data) { -+ if (skillsNew.map(op => op.id).indexOf(d.id) === -1) { -+ skillsNew.push(d); -+ } -+ } -+ } -+ return skillsNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateSkills(data: ISkill[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,38 @@ export class SkillComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.skills.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.skillService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/skill/route/skill-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/skill/route/skill-routing-resolve.service.spec.ts -index c57f1540..8b138181 100644 ---- a/src/main/webapp/app/entities/skill/route/skill-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/skill/route/skill-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { ISkill, Skill } from '../skill.model'; -+import { ISkill } from '../skill.model'; - import { SkillService } from '../service/skill.service'; - --import { SkillRoutingResolveService } from './skill-routing-resolve.service'; -+import skillResolve from './skill-routing-resolve.service'; - - describe('Skill routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: SkillRoutingResolveService; - let service: SkillService; -- let resultSkill: ISkill | undefined; -+ let resultSkill: ISkill | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('Skill routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(SkillRoutingResolveService); - service = TestBed.inject(SkillService); - resultSkill = undefined; - }); -@@ -46,8 +44,12 @@ describe('Skill routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultSkill = result; -+ TestBed.runInInjectionContext(() => { -+ skillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultSkill = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('Skill routing resolve service', () => { - expect(resultSkill).toEqual({ id: 123 }); - }); - -- it('should return new ISkill if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultSkill = result; -+ TestBed.runInInjectionContext(() => { -+ skillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultSkill = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultSkill).toEqual(new Skill()); -+ expect(resultSkill).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as Skill }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultSkill = result; -+ TestBed.runInInjectionContext(() => { -+ skillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultSkill = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/skill/route/skill-routing-resolve.service.ts b/src/main/webapp/app/entities/skill/route/skill-routing-resolve.service.ts -index f5f6d7d5..2ad83933 100644 ---- a/src/main/webapp/app/entities/skill/route/skill-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/skill/route/skill-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { ISkill, Skill } from '../skill.model'; -+import { ISkill } from '../skill.model'; - import { SkillService } from '../service/skill.service'; - --@Injectable({ providedIn: 'root' }) --export class SkillRoutingResolveService implements Resolve { -- constructor(protected service: SkillService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((skill: HttpResponse) => { -+export const skillResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(SkillService) -+ .find(id) -+ .pipe( -+ mergeMap((skill: HttpResponse) => { - if (skill.body) { - return of(skill.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new Skill()); - } --} -+ return of(null); -+}; -+ -+export default skillResolve; -diff --git a/src/main/webapp/app/entities/skill/route/skill-routing.module.ts b/src/main/webapp/app/entities/skill/route/skill-routing.module.ts -deleted file mode 100644 -index 6c5a615d..00000000 ---- a/src/main/webapp/app/entities/skill/route/skill-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { SkillComponent } from '../list/skill.component'; --import { SkillDetailComponent } from '../detail/skill-detail.component'; --import { SkillUpdateComponent } from '../update/skill-update.component'; --import { SkillRoutingResolveService } from './skill-routing-resolve.service'; -- --const skillRoute: Routes = [ -- { -- path: '', -- component: SkillComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: SkillDetailComponent, -- resolve: { -- skill: SkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: SkillUpdateComponent, -- resolve: { -- skill: SkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: SkillUpdateComponent, -- resolve: { -- skill: SkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(skillRoute)], -- exports: [RouterModule], --}) --export class SkillRoutingModule {} -diff --git a/src/main/webapp/app/entities/skill/service/skill.service.spec.ts b/src/main/webapp/app/entities/skill/service/skill.service.spec.ts -index 8efa8af6..75cccaf1 100644 ---- a/src/main/webapp/app/entities/skill/service/skill.service.spec.ts -+++ b/src/main/webapp/app/entities/skill/service/skill.service.spec.ts -@@ -1,18 +1,21 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { ISkill, Skill } from '../skill.model'; -+import { ISkill } from '../skill.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../skill.test-samples'; - --import { SkillService } from './skill.service'; -+import { SkillService, RestSkill } from './skill.service'; -+ -+const requireRestSample: RestSkill = { -+ ...sampleWithRequiredData, -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('Skill Service', () => { - let service: SkillService; - let httpMock: HttpTestingController; -- let elemDefault: ISkill; - let expectedResult: ISkill | ISkill[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -21,64 +24,26 @@ describe('Skill Service', () => { - expectedResult = null; - service = TestBed.inject(SkillService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- titleEN: 'AAAAAAA', -- titleDE: 'AAAAAAA', -- descriptionEN: 'AAAAAAA', -- descriptionDE: 'AAAAAAA', -- implementationEN: 'AAAAAAA', -- implementationDE: 'AAAAAAA', -- validationEN: 'AAAAAAA', -- validationDE: 'AAAAAAA', -- expiryPeriod: 0, -- contact: 'AAAAAAA', -- score: 0, -- rateScore: 0, -- rateCount: 0, -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a Skill', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new Skill()).subscribe(resp => (expectedResult = resp.body)); -+ const skill = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(skill).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -86,37 +51,11 @@ describe('Skill Service', () => { - }); - - it('should update a Skill', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- titleEN: 'BBBBBB', -- titleDE: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- implementationEN: 'BBBBBB', -- implementationDE: 'BBBBBB', -- validationEN: 'BBBBBB', -- validationDE: 'BBBBBB', -- expiryPeriod: 1, -- contact: 'BBBBBB', -- score: 1, -- rateScore: 1, -- rateCount: 1, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const skill = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(skill).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -124,28 +63,9 @@ describe('Skill Service', () => { - }); - - it('should partial update a Skill', () => { -- const patchObject = Object.assign( -- { -- titleDE: 'BBBBBB', -- implementationEN: 'BBBBBB', -- implementationDE: 'BBBBBB', -- contact: 'BBBBBB', -- score: 1, -- rateScore: 1, -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- new Skill() -- ); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -155,90 +75,66 @@ describe('Skill Service', () => { - }); - - it('should return a list of Skill', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- titleEN: 'BBBBBB', -- titleDE: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- implementationEN: 'BBBBBB', -- implementationDE: 'BBBBBB', -- validationEN: 'BBBBBB', -- validationDE: 'BBBBBB', -- expiryPeriod: 1, -- contact: 'BBBBBB', -- score: 1, -- rateScore: 1, -- rateCount: 1, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a Skill', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addSkillToCollectionIfMissing', () => { - it('should add a Skill to an empty array', () => { -- const skill: ISkill = { id: 123 }; -+ const skill: ISkill = sampleWithRequiredData; - expectedResult = service.addSkillToCollectionIfMissing([], skill); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(skill); - }); - - it('should not add a Skill to an array that contains it', () => { -- const skill: ISkill = { id: 123 }; -+ const skill: ISkill = sampleWithRequiredData; - const skillCollection: ISkill[] = [ - { - ...skill, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addSkillToCollectionIfMissing(skillCollection, skill); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a Skill to an array that doesn't contain it", () => { -- const skill: ISkill = { id: 123 }; -- const skillCollection: ISkill[] = [{ id: 456 }]; -+ const skill: ISkill = sampleWithRequiredData; -+ const skillCollection: ISkill[] = [sampleWithPartialData]; - expectedResult = service.addSkillToCollectionIfMissing(skillCollection, skill); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(skill); - }); - - it('should add only unique Skill to an array', () => { -- const skillArray: ISkill[] = [{ id: 123 }, { id: 456 }, { id: 78271 }]; -- const skillCollection: ISkill[] = [{ id: 123 }]; -+ const skillArray: ISkill[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const skillCollection: ISkill[] = [sampleWithRequiredData]; - expectedResult = service.addSkillToCollectionIfMissing(skillCollection, ...skillArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const skill: ISkill = { id: 123 }; -- const skill2: ISkill = { id: 456 }; -+ const skill: ISkill = sampleWithRequiredData; -+ const skill2: ISkill = sampleWithPartialData; - expectedResult = service.addSkillToCollectionIfMissing([], skill, skill2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(skill); -@@ -246,18 +142,62 @@ describe('Skill Service', () => { - }); - - it('should accept null and undefined values', () => { -- const skill: ISkill = { id: 123 }; -+ const skill: ISkill = sampleWithRequiredData; - expectedResult = service.addSkillToCollectionIfMissing([], null, skill, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(skill); - }); - - it('should return initial array if no Skill is added', () => { -- const skillCollection: ISkill[] = [{ id: 123 }]; -+ const skillCollection: ISkill[] = [sampleWithRequiredData]; - expectedResult = service.addSkillToCollectionIfMissing(skillCollection, undefined, null); - expect(expectedResult).toEqual(skillCollection); - }); - }); -+ -+ describe('compareSkill', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareSkill(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareSkill(entity1, entity2); -+ const compareResult2 = service.compareSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareSkill(entity1, entity2); -+ const compareResult2 = service.compareSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareSkill(entity1, entity2); -+ const compareResult2 = service.compareSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/skill/service/skill.service.ts b/src/main/webapp/app/entities/skill/service/skill.service.ts -index 37ac6e87..13554de3 100644 ---- a/src/main/webapp/app/entities/skill/service/skill.service.ts -+++ b/src/main/webapp/app/entities/skill/service/skill.service.ts -@@ -1,13 +1,28 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { ISkill, getSkillIdentifier } from '../skill.model'; -+import { ISkill, NewSkill } from '../skill.model'; -+ -+export type PartialUpdateSkill = Partial & Pick; -+ -+type RestOf = Omit & { -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestSkill = RestOf; -+ -+export type NewRestSkill = RestOf; -+ -+export type PartialUpdateRestSkill = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,53 +31,65 @@ export type EntityArrayResponseType = HttpResponse; - export class SkillService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/skills'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(skill: ISkill): Observable { -+ create(skill: NewSkill): Observable { - const copy = this.convertDateFromClient(skill); -- return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ return this.http.post(this.resourceUrl, copy, { observe: 'response' }).pipe(map(res => this.convertResponseFromServer(res))); - } - - update(skill: ISkill): Observable { - const copy = this.convertDateFromClient(skill); - return this.http -- .put(`${this.resourceUrl}/${getSkillIdentifier(skill) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getSkillIdentifier(skill)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(skill: ISkill): Observable { -+ partialUpdate(skill: PartialUpdateSkill): Observable { - const copy = this.convertDateFromClient(skill); - return this.http -- .patch(`${this.resourceUrl}/${getSkillIdentifier(skill) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getSkillIdentifier(skill)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addSkillToCollectionIfMissing(skillCollection: ISkill[], ...skillsToCheck: (ISkill | null | undefined)[]): ISkill[] { -- const skills: ISkill[] = skillsToCheck.filter(isPresent); -+ getSkillIdentifier(skill: Pick): number { -+ return skill.id; -+ } -+ -+ compareSkill(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getSkillIdentifier(o1) === this.getSkillIdentifier(o2) : o1 === o2; -+ } -+ -+ addSkillToCollectionIfMissing>( -+ skillCollection: Type[], -+ ...skillsToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const skills: Type[] = skillsToCheck.filter(isPresent); - if (skills.length > 0) { -- const skillCollectionIdentifiers = skillCollection.map(skillItem => getSkillIdentifier(skillItem)!); -+ const skillCollectionIdentifiers = skillCollection.map(skillItem => this.getSkillIdentifier(skillItem)!); - const skillsToAdd = skills.filter(skillItem => { -- const skillIdentifier = getSkillIdentifier(skillItem); -- if (skillIdentifier == null || skillCollectionIdentifiers.includes(skillIdentifier)) { -+ const skillIdentifier = this.getSkillIdentifier(skillItem); -+ if (skillCollectionIdentifiers.includes(skillIdentifier)) { - return false; - } - skillCollectionIdentifiers.push(skillIdentifier); -@@ -73,28 +100,31 @@ export class SkillService { - return skillCollection; - } - -- protected convertDateFromClient(skill: ISkill): ISkill { -- return Object.assign({}, skill, { -- createdAt: skill.createdAt?.isValid() ? skill.createdAt.toJSON() : undefined, -- updatedAt: skill.updatedAt?.isValid() ? skill.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromClient(skill: T): RestOf { -+ return { -+ ...skill, -+ createdAt: skill.createdAt?.toJSON() ?? null, -+ updatedAt: skill.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertDateFromServer(restSkill: RestSkill): ISkill { -+ return { -+ ...restSkill, -+ createdAt: restSkill.createdAt ? dayjs(restSkill.createdAt) : undefined, -+ updatedAt: restSkill.updatedAt ? dayjs(restSkill.updatedAt) : undefined, -+ }; - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((skill: ISkill) => { -- skill.createdAt = skill.createdAt ? dayjs(skill.createdAt) : undefined; -- skill.updatedAt = skill.updatedAt ? dayjs(skill.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); -+ } -+ -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/skill/skill.model.ts b/src/main/webapp/app/entities/skill/skill.model.ts -index 096a8d52..0dfb9c75 100644 ---- a/src/main/webapp/app/entities/skill/skill.model.ts -+++ b/src/main/webapp/app/entities/skill/skill.model.ts -@@ -1,12 +1,9 @@ - import dayjs from 'dayjs/esm'; --import { IBadgeSkill } from 'app/entities/badge-skill/badge-skill.model'; --import { ILevelSkill } from 'app/entities/level-skill/level-skill.model'; --import { ITeamSkill } from 'app/entities/team-skill/team-skill.model'; - import { ITraining } from 'app/entities/training/training.model'; - - export interface ISkill { -- id?: number; -- titleEN?: string; -+ id: number; -+ titleEN?: string | null; - titleDE?: string | null; - descriptionEN?: string | null; - descriptionDE?: string | null; -@@ -16,42 +13,12 @@ export interface ISkill { - validationDE?: string | null; - expiryPeriod?: number | null; - contact?: string | null; -- score?: number; -+ score?: number | null; - rateScore?: number | null; -- rateCount?: number; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; -- badges?: IBadgeSkill[] | null; -- levels?: ILevelSkill[] | null; -- teams?: ITeamSkill[] | null; -- trainings?: ITraining[] | null; -+ rateCount?: number | null; -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; -+ trainings?: Pick[] | null; - } - --export class Skill implements ISkill { -- constructor( -- public id?: number, -- public titleEN?: string, -- public titleDE?: string | null, -- public descriptionEN?: string | null, -- public descriptionDE?: string | null, -- public implementationEN?: string | null, -- public implementationDE?: string | null, -- public validationEN?: string | null, -- public validationDE?: string | null, -- public expiryPeriod?: number | null, -- public contact?: string | null, -- public score?: number, -- public rateScore?: number | null, -- public rateCount?: number, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs, -- public badges?: IBadgeSkill[] | null, -- public levels?: ILevelSkill[] | null, -- public teams?: ITeamSkill[] | null, -- public trainings?: ITraining[] | null -- ) {} --} -- --export function getSkillIdentifier(skill: ISkill): number | undefined { -- return skill.id; --} -+export type NewSkill = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/skill/skill.module.ts b/src/main/webapp/app/entities/skill/skill.module.ts -deleted file mode 100644 -index 94ec3aff..00000000 ---- a/src/main/webapp/app/entities/skill/skill.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { SkillComponent } from './list/skill.component'; --import { SkillDetailComponent } from './detail/skill-detail.component'; --import { SkillUpdateComponent } from './update/skill-update.component'; --import { SkillDeleteDialogComponent } from './delete/skill-delete-dialog.component'; --import { SkillRoutingModule } from './route/skill-routing.module'; -- --@NgModule({ -- imports: [SharedModule, SkillRoutingModule], -- declarations: [SkillComponent, SkillDetailComponent, SkillUpdateComponent, SkillDeleteDialogComponent], -- entryComponents: [SkillDeleteDialogComponent], --}) --export class SkillModule {} -diff --git a/src/main/webapp/app/entities/skill/update/skill-update.component.html b/src/main/webapp/app/entities/skill/update/skill-update.component.html -index 5368d3d4..5f7826e7 100644 ---- a/src/main/webapp/app/entities/skill/update/skill-update.component.html -+++ b/src/main/webapp/app/entities/skill/update/skill-update.component.html -@@ -8,42 +8,36 @@ -
- - --
-+
- - -
- --
-+
- - -
-- This field is required. -- This field is required. -- - This field is required to be at least 5 characters. -- This field is required to be at least 5 characters. -- - This field cannot be longer than 80 characters. -- This field cannot be longer than 80 characters. -- -
-
- --
-+
- - -
-@@ -52,37 +46,28 @@ - *ngIf="editForm.get('titleDE')?.errors?.minlength" - jhiTranslate="entity.validation.minlength" - [translateValues]="{ min: 5 }" -+ >This field is required to be at least 5 characters. -- This field is required to be at least 5 characters. -- - This field cannot be longer than 80 characters. -- This field cannot be longer than 80 characters. -- -
-
- --
-+
- -- -- --
-- -- Hint: This field allows Markdown syntax. -- --
-- -+ /> -
This field cannot be longer than 2147483647 characters. -- This field cannot be longer than 2147483647 characters. -- -
-
- --
-+
- -- -- --
-- -- Hint: This field allows Markdown syntax. -- --
-- -+ /> -
This field cannot be longer than 2147483647 characters. -- This field cannot be longer than 2147483647 characters. -- -
-
- --
-+
- -- -- --
-- -- Hint: This field allows Markdown syntax. -- --
-- -+ /> -
This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- -- -- --
-- -- Hint: This field allows Markdown syntax. -- --
-- -+ /> -
This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- -- -- --
-- -- Hint: This field allows Markdown syntax. -- --
-- -+ /> -
-@@ -229,30 +178,21 @@ - *ngIf="editForm.get('validationEN')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 4096 }" -+ >This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- -- -- --
-- -- Hint: This field allows Markdown syntax. -- --
-- -+ /> -
-@@ -261,13 +201,12 @@ - *ngIf="editForm.get('validationDE')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 4096 }" -+ >This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- - This field should be at least 1. -- This field should be at least 1. -- - This field should be a number. -- This field should be a number. -- -
-
- --
-+
- - -
-@@ -307,34 +244,32 @@ - *ngIf="editForm.get('contact')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 255 }" -+ >This field cannot be longer than 255 characters. -- This field cannot be longer than 255 characters. -- -
-
- --
-+
- - -
-- -- This field is required. -- -+ This field is required. - This field should be at least 0. -+ This field should be a number. -- This field should be at least 0. -- -- -- This field should be a number. -- -
-
- --
-+
- - -
-@@ -343,28 +278,25 @@ - *ngIf="editForm.get('rateScore')?.errors?.min" - jhiTranslate="entity.validation.min" - [translateValues]="{ min: 0 }" -+ >This field should be at least 0. -- This field should be at least 0. -- - This field cannot be more than 5. -- This field cannot be more than 5. -- - This field should be a number. -- This field should be a number. -- -
-
- --
-+
- - -
-@@ -372,28 +304,25 @@ - class="form-text text-danger" - *ngIf="editForm.get('rateCount')?.errors?.required" - jhiTranslate="entity.validation.required" -+ >This field is required. -- This field is required. -- - This field should be at least 0. -- This field should be at least 0. -- - This field should be a number. -- This field should be a number. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
-
-diff --git a/src/main/webapp/app/entities/skill/update/skill-update.component.spec.ts b/src/main/webapp/app/entities/skill/update/skill-update.component.spec.ts -index 704116f9..9b03f2d6 100644 ---- a/src/main/webapp/app/entities/skill/update/skill-update.component.spec.ts -+++ b/src/main/webapp/app/entities/skill/update/skill-update.component.spec.ts -@@ -7,7 +7,8 @@ import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - - import { SkillService } from '../service/skill.service'; --import { ISkill, Skill } from '../skill.model'; -+import { ISkill } from '../skill.model'; -+import { SkillFormService } from './skill-form.service'; - - import { SkillUpdateComponent } from './skill-update.component'; - -@@ -15,12 +16,12 @@ describe('Skill Management Update Component', () => { - let comp: SkillUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let skillFormService: SkillFormService; - let skillService: SkillService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [SkillUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), SkillUpdateComponent], - providers: [ - FormBuilder, - { -@@ -36,6 +37,7 @@ describe('Skill Management Update Component', () => { - - fixture = TestBed.createComponent(SkillUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ skillFormService = TestBed.inject(SkillFormService); - skillService = TestBed.inject(SkillService); - - comp = fixture.componentInstance; -@@ -48,15 +50,16 @@ describe('Skill Management Update Component', () => { - activatedRoute.data = of({ skill }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(skill)); -+ expect(comp.skill).toEqual(skill); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const skill = { id: 123 }; -+ jest.spyOn(skillFormService, 'getSkill').mockReturnValue(skill); - jest.spyOn(skillService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ skill }); -@@ -69,18 +72,20 @@ describe('Skill Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(skillFormService.getSkill).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(skillService.update).toHaveBeenCalledWith(skill); -+ expect(skillService.update).toHaveBeenCalledWith(expect.objectContaining(skill)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const skill = new Skill(); -+ const saveSubject = new Subject>(); -+ const skill = { id: 123 }; -+ jest.spyOn(skillFormService, 'getSkill').mockReturnValue({ id: null }); - jest.spyOn(skillService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ skill }); -+ activatedRoute.data = of({ skill: null }); - comp.ngOnInit(); - - // WHEN -@@ -90,14 +95,15 @@ describe('Skill Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(skillService.create).toHaveBeenCalledWith(skill); -+ expect(skillFormService.getSkill).toHaveBeenCalled(); -+ expect(skillService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const skill = { id: 123 }; - jest.spyOn(skillService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -110,7 +116,7 @@ describe('Skill Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(skillService.update).toHaveBeenCalledWith(skill); -+ expect(skillService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); -diff --git a/src/main/webapp/app/entities/skill/update/skill-update.component.ts b/src/main/webapp/app/entities/skill/update/skill-update.component.ts -index 055b443a..c4ce3a67 100644 ---- a/src/main/webapp/app/entities/skill/update/skill-update.component.ts -+++ b/src/main/webapp/app/entities/skill/update/skill-update.component.ts -@@ -1,53 +1,40 @@ - import { Component, OnInit } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { FormBuilder, Validators } from '@angular/forms'; - import { ActivatedRoute } from '@angular/router'; - import { Observable } from 'rxjs'; - import { finalize } from 'rxjs/operators'; - --import dayjs from 'dayjs/esm'; --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; -+import SharedModule from 'app/shared/shared.module'; -+import { FormsModule, ReactiveFormsModule } from '@angular/forms'; - --import { ISkill, Skill } from '../skill.model'; -+import { ISkill } from '../skill.model'; - import { SkillService } from '../service/skill.service'; -+import { SkillFormService, SkillFormGroup } from './skill-form.service'; - - @Component({ -+ standalone: true, - selector: 'jhi-skill-update', - templateUrl: './skill-update.component.html', -+ imports: [SharedModule, FormsModule, ReactiveFormsModule], - }) - export class SkillUpdateComponent implements OnInit { - isSaving = false; -+ skill: ISkill | null = null; - -- editForm = this.fb.group({ -- id: [], -- titleEN: [null, [Validators.required, Validators.minLength(5), Validators.maxLength(80)]], -- titleDE: [null, [Validators.minLength(5), Validators.maxLength(80)]], -- descriptionEN: [null, [Validators.maxLength(2147483647)]], -- descriptionDE: [null, [Validators.maxLength(2147483647)]], -- implementationEN: [null, [Validators.maxLength(4096)]], -- implementationDE: [null, [Validators.maxLength(4096)]], -- validationEN: [null, [Validators.maxLength(4096)]], -- validationDE: [null, [Validators.maxLength(4096)]], -- expiryPeriod: [null, [Validators.min(1)]], -- contact: [null, [Validators.maxLength(255)]], -- score: [null, [Validators.required, Validators.min(0)]], -- rateScore: [null, [Validators.min(0), Validators.max(5)]], -- rateCount: [null, [Validators.required, Validators.min(0)]], -- createdAt: [null, [Validators.required]], -- updatedAt: [null, [Validators.required]], -- }); -+ editForm: SkillFormGroup = this.skillFormService.createSkillFormGroup(); - -- constructor(protected skillService: SkillService, protected activatedRoute: ActivatedRoute, protected fb: FormBuilder) {} -+ constructor( -+ protected skillService: SkillService, -+ protected skillFormService: SkillFormService, -+ protected activatedRoute: ActivatedRoute, -+ ) {} - - ngOnInit(): void { - this.activatedRoute.data.subscribe(({ skill }) => { -- if (skill.id === undefined) { -- const today = dayjs().startOf('day'); -- skill.createdAt = today; -- skill.updatedAt = today; -+ this.skill = skill; -+ if (skill) { -+ this.updateForm(skill); - } -- -- this.updateForm(skill); - }); - } - -@@ -57,8 +44,8 @@ export class SkillUpdateComponent implements OnInit { - - save(): void { - this.isSaving = true; -- const skill = this.createFromForm(); -- if (skill.id !== undefined) { -+ const skill = this.skillFormService.getSkill(this.editForm); -+ if (skill.id !== null) { - this.subscribeToSaveResponse(this.skillService.update(skill)); - } else { - this.subscribeToSaveResponse(this.skillService.create(skill)); -@@ -85,45 +72,7 @@ export class SkillUpdateComponent implements OnInit { - } - - protected updateForm(skill: ISkill): void { -- this.editForm.patchValue({ -- id: skill.id, -- titleEN: skill.titleEN, -- titleDE: skill.titleDE, -- descriptionEN: skill.descriptionEN, -- descriptionDE: skill.descriptionDE, -- implementationEN: skill.implementationEN, -- implementationDE: skill.implementationDE, -- validationEN: skill.validationEN, -- validationDE: skill.validationDE, -- expiryPeriod: skill.expiryPeriod, -- contact: skill.contact, -- score: skill.score, -- rateScore: skill.rateScore, -- rateCount: skill.rateCount, -- createdAt: skill.createdAt ? skill.createdAt.format(DATE_TIME_FORMAT) : null, -- updatedAt: skill.updatedAt ? skill.updatedAt.format(DATE_TIME_FORMAT) : null, -- }); -- } -- -- protected createFromForm(): ISkill { -- return { -- ...new Skill(), -- id: this.editForm.get(['id'])!.value, -- titleEN: this.editForm.get(['titleEN'])!.value, -- titleDE: this.editForm.get(['titleDE'])!.value, -- descriptionEN: this.editForm.get(['descriptionEN'])!.value, -- descriptionDE: this.editForm.get(['descriptionDE'])!.value, -- implementationEN: this.editForm.get(['implementationEN'])!.value, -- implementationDE: this.editForm.get(['implementationDE'])!.value, -- validationEN: this.editForm.get(['validationEN'])!.value, -- validationDE: this.editForm.get(['validationDE'])!.value, -- expiryPeriod: this.editForm.get(['expiryPeriod'])!.value, -- contact: this.editForm.get(['contact'])!.value, -- score: this.editForm.get(['score'])!.value, -- rateScore: this.editForm.get(['rateScore'])!.value, -- rateCount: this.editForm.get(['rateCount'])!.value, -- createdAt: this.editForm.get(['createdAt'])!.value ? dayjs(this.editForm.get(['createdAt'])!.value, DATE_TIME_FORMAT) : undefined, -- updatedAt: this.editForm.get(['updatedAt'])!.value ? dayjs(this.editForm.get(['updatedAt'])!.value, DATE_TIME_FORMAT) : undefined, -- }; -+ this.skill = skill; -+ this.skillFormService.resetForm(this.editForm, skill); - } - } -diff --git a/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.html b/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.html -index 1bc13d66..c8cdd437 100644 ---- a/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.spec.ts -index ddd0a7d9..abdd4b40 100644 ---- a/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('TeamGroup Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [TeamGroupDeleteDialogComponent], -+ imports: [HttpClientTestingModule, TeamGroupDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(TeamGroupDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('TeamGroup Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.ts b/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.ts -index 52e8e588..08cb3b5b 100644 ---- a/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/team-group/delete/team-group-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { ITeamGroup } from '../team-group.model'; - import { TeamGroupService } from '../service/team-group.service'; - - @Component({ -+ standalone: true, - templateUrl: './team-group-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class TeamGroupDeleteDialogComponent { - teamGroup?: ITeamGroup; - -- constructor(protected teamGroupService: TeamGroupService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected teamGroupService: TeamGroupService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class TeamGroupDeleteDialogComponent { - - confirmDelete(id: number): void { - this.teamGroupService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.html b/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.html -index 38b4f004..f4230ee8 100644 ---- a/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.html -+++ b/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.html -@@ -33,7 +33,7 @@ -
Parent
-
- -
- -diff --git a/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.spec.ts b/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.spec.ts -index 0ec8ed92..ae80cf52 100644 ---- a/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { TeamGroupDetailComponent } from './team-group-detail.component'; - - describe('TeamGroup Management Detail Component', () => { -- let comp: TeamGroupDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [TeamGroupDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [TeamGroupDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ teamGroup: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: TeamGroupDetailComponent, -+ resolve: { teamGroup: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(TeamGroupDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(TeamGroupDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load teamGroup on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load teamGroup on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', TeamGroupDetailComponent); - - // THEN -- expect(comp.teamGroup).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.teamGroup).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.ts b/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.ts -index 99c34a2c..9426f05b 100644 ---- a/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.ts -+++ b/src/main/webapp/app/entities/team-group/detail/team-group-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { ITeamGroup } from '../team-group.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-team-group-detail', - templateUrl: './team-group-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class TeamGroupDetailComponent implements OnInit { -- teamGroup: ITeamGroup | null = null; -+export class TeamGroupDetailComponent { -+ @Input() teamGroup: ITeamGroup | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ teamGroup }) => { -- this.teamGroup = teamGroup; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/team-group/list/team-group.component.html b/src/main/webapp/app/entities/team-group/list/team-group.component.html -index 389052fd..9ae0c4a8 100644 ---- a/src/main/webapp/app/entities/team-group/list/team-group.component.html -+++ b/src/main/webapp/app/entities/team-group/list/team-group.component.html -@@ -3,9 +3,9 @@ - Team Groups - -
-- - - -
- -@@ -25,33 +25,58 @@ - - -
-- No teamGroups found -+ No Team Groups found -
- --
-+
- - -- -- -+ -+ - - - - - - - - -- -+ - - - -
ID
-+
-+ ID -+ -+
-+
-- Title -+
-+ Title -+ -+
-
-- Description -+
-+ Description -+ -+
-
-- Created At -+
-+ Created At -+ -+
-
-- Updated At -+
-+ Updated At -+ -+
-
-- Parent -+
-+ Parent -+ -+
-
- {{ teamGroup.id }} -@@ -62,7 +87,7 @@ - {{ teamGroup.updatedAt | formatMediumDatetime }} - - -diff --git a/src/main/webapp/app/entities/team-group/list/team-group.component.spec.ts b/src/main/webapp/app/entities/team-group/list/team-group.component.spec.ts -index 463b0498..06720562 100644 ---- a/src/main/webapp/app/entities/team-group/list/team-group.component.spec.ts -+++ b/src/main/webapp/app/entities/team-group/list/team-group.component.spec.ts -@@ -1,21 +1,47 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { TeamGroupService } from '../service/team-group.service'; - - import { TeamGroupComponent } from './team-group.component'; -+import SpyInstance = jest.SpyInstance; - - describe('TeamGroup Management Component', () => { - let comp: TeamGroupComponent; - let fixture: ComponentFixture; - let service: TeamGroupService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [TeamGroupComponent], -+ imports: [ -+ RouterTestingModule.withRoutes([{ path: 'team-group', component: TeamGroupComponent }]), -+ HttpClientTestingModule, -+ TeamGroupComponent, -+ ], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(TeamGroupComponent, '') - .compileComponents(); -@@ -23,6 +49,7 @@ describe('TeamGroup Management Component', () => { - fixture = TestBed.createComponent(TeamGroupComponent); - comp = fixture.componentInstance; - service = TestBed.inject(TeamGroupService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +57,8 @@ describe('TeamGroup Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +68,25 @@ describe('TeamGroup Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.teamGroups[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.teamGroups?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to teamGroupService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getTeamGroupIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getTeamGroupIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.teamGroups[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +94,25 @@ describe('TeamGroup Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +121,8 @@ describe('TeamGroup Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.teamGroups[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.teamGroups?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/team-group/list/team-group.component.ts b/src/main/webapp/app/entities/team-group/list/team-group.component.ts -index 35cdd769..a62f3bc3 100644 ---- a/src/main/webapp/app/entities/team-group/list/team-group.component.ts -+++ b/src/main/webapp/app/entities/team-group/list/team-group.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { ITeamGroup } from '../team-group.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { TeamGroupService } from '../service/team-group.service'; --import { TeamGroupDeleteDialogComponent } from '../delete/team-group-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, TeamGroupService } from '../service/team-group.service'; -+import { TeamGroupDeleteDialogComponent } from '../delete/team-group-delete-dialog.component'; -+import { ITeamGroup } from '../team-group.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-team-group', - templateUrl: './team-group.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class TeamGroupComponent implements OnInit { -- teamGroups: ITeamGroup[]; -+ teamGroups?: ITeamGroup[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected teamGroupService: TeamGroupService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.teamGroups = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.teamGroupService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateTeamGroups(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected teamGroupService: TeamGroupService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.teamGroups = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: ITeamGroup): number => this.teamGroupService.getTeamGroupIdentifier(item); - -- trackId(_index: number, item: ITeamGroup): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(teamGroup: ITeamGroup): void { - const modalRef = this.modalService.open(TeamGroupDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.teamGroup = teamGroup; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.teamGroups = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: ITeamGroup[] | null): ITeamGroup[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const teamGroupsNew = this.teamGroups ?? []; -+ if (data) { -+ for (const d of data) { -+ if (teamGroupsNew.map(op => op.id).indexOf(d.id) === -1) { -+ teamGroupsNew.push(d); -+ } -+ } -+ } -+ return teamGroupsNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateTeamGroups(data: ITeamGroup[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,39 @@ export class TeamGroupComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.teamGroups.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ eagerload: true, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.teamGroupService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/team-group/route/team-group-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/team-group/route/team-group-routing-resolve.service.spec.ts -index 5fc069a2..b09e0c3b 100644 ---- a/src/main/webapp/app/entities/team-group/route/team-group-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/team-group/route/team-group-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { ITeamGroup, TeamGroup } from '../team-group.model'; -+import { ITeamGroup } from '../team-group.model'; - import { TeamGroupService } from '../service/team-group.service'; - --import { TeamGroupRoutingResolveService } from './team-group-routing-resolve.service'; -+import teamGroupResolve from './team-group-routing-resolve.service'; - - describe('TeamGroup routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: TeamGroupRoutingResolveService; - let service: TeamGroupService; -- let resultTeamGroup: ITeamGroup | undefined; -+ let resultTeamGroup: ITeamGroup | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('TeamGroup routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(TeamGroupRoutingResolveService); - service = TestBed.inject(TeamGroupService); - resultTeamGroup = undefined; - }); -@@ -46,8 +44,12 @@ describe('TeamGroup routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTeamGroup = result; -+ TestBed.runInInjectionContext(() => { -+ teamGroupResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTeamGroup = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('TeamGroup routing resolve service', () => { - expect(resultTeamGroup).toEqual({ id: 123 }); - }); - -- it('should return new ITeamGroup if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTeamGroup = result; -+ TestBed.runInInjectionContext(() => { -+ teamGroupResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTeamGroup = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultTeamGroup).toEqual(new TeamGroup()); -+ expect(resultTeamGroup).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as TeamGroup }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTeamGroup = result; -+ TestBed.runInInjectionContext(() => { -+ teamGroupResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTeamGroup = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/team-group/route/team-group-routing-resolve.service.ts b/src/main/webapp/app/entities/team-group/route/team-group-routing-resolve.service.ts -index 1eeda66e..98b90eb5 100644 ---- a/src/main/webapp/app/entities/team-group/route/team-group-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/team-group/route/team-group-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { ITeamGroup, TeamGroup } from '../team-group.model'; -+import { ITeamGroup } from '../team-group.model'; - import { TeamGroupService } from '../service/team-group.service'; - --@Injectable({ providedIn: 'root' }) --export class TeamGroupRoutingResolveService implements Resolve { -- constructor(protected service: TeamGroupService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((teamGroup: HttpResponse) => { -+export const teamGroupResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(TeamGroupService) -+ .find(id) -+ .pipe( -+ mergeMap((teamGroup: HttpResponse) => { - if (teamGroup.body) { - return of(teamGroup.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new TeamGroup()); - } --} -+ return of(null); -+}; -+ -+export default teamGroupResolve; -diff --git a/src/main/webapp/app/entities/team-group/route/team-group-routing.module.ts b/src/main/webapp/app/entities/team-group/route/team-group-routing.module.ts -deleted file mode 100644 -index c06f6396..00000000 ---- a/src/main/webapp/app/entities/team-group/route/team-group-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { TeamGroupComponent } from '../list/team-group.component'; --import { TeamGroupDetailComponent } from '../detail/team-group-detail.component'; --import { TeamGroupUpdateComponent } from '../update/team-group-update.component'; --import { TeamGroupRoutingResolveService } from './team-group-routing-resolve.service'; -- --const teamGroupRoute: Routes = [ -- { -- path: '', -- component: TeamGroupComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: TeamGroupDetailComponent, -- resolve: { -- teamGroup: TeamGroupRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: TeamGroupUpdateComponent, -- resolve: { -- teamGroup: TeamGroupRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: TeamGroupUpdateComponent, -- resolve: { -- teamGroup: TeamGroupRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(teamGroupRoute)], -- exports: [RouterModule], --}) --export class TeamGroupRoutingModule {} -diff --git a/src/main/webapp/app/entities/team-group/service/team-group.service.spec.ts b/src/main/webapp/app/entities/team-group/service/team-group.service.spec.ts -index 8b0ba49a..44309cd8 100644 ---- a/src/main/webapp/app/entities/team-group/service/team-group.service.spec.ts -+++ b/src/main/webapp/app/entities/team-group/service/team-group.service.spec.ts -@@ -1,18 +1,21 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { ITeamGroup, TeamGroup } from '../team-group.model'; -+import { ITeamGroup } from '../team-group.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../team-group.test-samples'; - --import { TeamGroupService } from './team-group.service'; -+import { TeamGroupService, RestTeamGroup } from './team-group.service'; -+ -+const requireRestSample: RestTeamGroup = { -+ ...sampleWithRequiredData, -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('TeamGroup Service', () => { - let service: TeamGroupService; - let httpMock: HttpTestingController; -- let elemDefault: ITeamGroup; - let expectedResult: ITeamGroup | ITeamGroup[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -21,53 +24,26 @@ describe('TeamGroup Service', () => { - expectedResult = null; - service = TestBed.inject(TeamGroupService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- title: 'AAAAAAA', -- description: 'AAAAAAA', -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a TeamGroup', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new TeamGroup()).subscribe(resp => (expectedResult = resp.body)); -+ const teamGroup = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(teamGroup).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -75,26 +51,11 @@ describe('TeamGroup Service', () => { - }); - - it('should update a TeamGroup', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- title: 'BBBBBB', -- description: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const teamGroup = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(teamGroup).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -102,22 +63,9 @@ describe('TeamGroup Service', () => { - }); - - it('should partial update a TeamGroup', () => { -- const patchObject = Object.assign( -- { -- description: 'BBBBBB', -- }, -- new TeamGroup() -- ); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -127,79 +75,66 @@ describe('TeamGroup Service', () => { - }); - - it('should return a list of TeamGroup', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- title: 'BBBBBB', -- description: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a TeamGroup', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addTeamGroupToCollectionIfMissing', () => { - it('should add a TeamGroup to an empty array', () => { -- const teamGroup: ITeamGroup = { id: 123 }; -+ const teamGroup: ITeamGroup = sampleWithRequiredData; - expectedResult = service.addTeamGroupToCollectionIfMissing([], teamGroup); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(teamGroup); - }); - - it('should not add a TeamGroup to an array that contains it', () => { -- const teamGroup: ITeamGroup = { id: 123 }; -+ const teamGroup: ITeamGroup = sampleWithRequiredData; - const teamGroupCollection: ITeamGroup[] = [ - { - ...teamGroup, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addTeamGroupToCollectionIfMissing(teamGroupCollection, teamGroup); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a TeamGroup to an array that doesn't contain it", () => { -- const teamGroup: ITeamGroup = { id: 123 }; -- const teamGroupCollection: ITeamGroup[] = [{ id: 456 }]; -+ const teamGroup: ITeamGroup = sampleWithRequiredData; -+ const teamGroupCollection: ITeamGroup[] = [sampleWithPartialData]; - expectedResult = service.addTeamGroupToCollectionIfMissing(teamGroupCollection, teamGroup); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(teamGroup); - }); - - it('should add only unique TeamGroup to an array', () => { -- const teamGroupArray: ITeamGroup[] = [{ id: 123 }, { id: 456 }, { id: 83533 }]; -- const teamGroupCollection: ITeamGroup[] = [{ id: 123 }]; -+ const teamGroupArray: ITeamGroup[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const teamGroupCollection: ITeamGroup[] = [sampleWithRequiredData]; - expectedResult = service.addTeamGroupToCollectionIfMissing(teamGroupCollection, ...teamGroupArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const teamGroup: ITeamGroup = { id: 123 }; -- const teamGroup2: ITeamGroup = { id: 456 }; -+ const teamGroup: ITeamGroup = sampleWithRequiredData; -+ const teamGroup2: ITeamGroup = sampleWithPartialData; - expectedResult = service.addTeamGroupToCollectionIfMissing([], teamGroup, teamGroup2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(teamGroup); -@@ -207,18 +142,62 @@ describe('TeamGroup Service', () => { - }); - - it('should accept null and undefined values', () => { -- const teamGroup: ITeamGroup = { id: 123 }; -+ const teamGroup: ITeamGroup = sampleWithRequiredData; - expectedResult = service.addTeamGroupToCollectionIfMissing([], null, teamGroup, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(teamGroup); - }); - - it('should return initial array if no TeamGroup is added', () => { -- const teamGroupCollection: ITeamGroup[] = [{ id: 123 }]; -+ const teamGroupCollection: ITeamGroup[] = [sampleWithRequiredData]; - expectedResult = service.addTeamGroupToCollectionIfMissing(teamGroupCollection, undefined, null); - expect(expectedResult).toEqual(teamGroupCollection); - }); - }); -+ -+ describe('compareTeamGroup', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareTeamGroup(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareTeamGroup(entity1, entity2); -+ const compareResult2 = service.compareTeamGroup(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareTeamGroup(entity1, entity2); -+ const compareResult2 = service.compareTeamGroup(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareTeamGroup(entity1, entity2); -+ const compareResult2 = service.compareTeamGroup(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/team-group/service/team-group.service.ts b/src/main/webapp/app/entities/team-group/service/team-group.service.ts -index 57954081..f76c773d 100644 ---- a/src/main/webapp/app/entities/team-group/service/team-group.service.ts -+++ b/src/main/webapp/app/entities/team-group/service/team-group.service.ts -@@ -1,13 +1,28 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { ITeamGroup, getTeamGroupIdentifier } from '../team-group.model'; -+import { ITeamGroup, NewTeamGroup } from '../team-group.model'; -+ -+export type PartialUpdateTeamGroup = Partial & Pick; -+ -+type RestOf = Omit & { -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestTeamGroup = RestOf; -+ -+export type NewRestTeamGroup = RestOf; -+ -+export type PartialUpdateRestTeamGroup = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,56 +31,67 @@ export type EntityArrayResponseType = HttpResponse; - export class TeamGroupService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/team-groups'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(teamGroup: ITeamGroup): Observable { -+ create(teamGroup: NewTeamGroup): Observable { - const copy = this.convertDateFromClient(teamGroup); - return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .post(this.resourceUrl, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - update(teamGroup: ITeamGroup): Observable { - const copy = this.convertDateFromClient(teamGroup); - return this.http -- .put(`${this.resourceUrl}/${getTeamGroupIdentifier(teamGroup) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getTeamGroupIdentifier(teamGroup)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(teamGroup: ITeamGroup): Observable { -+ partialUpdate(teamGroup: PartialUpdateTeamGroup): Observable { - const copy = this.convertDateFromClient(teamGroup); - return this.http -- .patch(`${this.resourceUrl}/${getTeamGroupIdentifier(teamGroup) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getTeamGroupIdentifier(teamGroup)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addTeamGroupToCollectionIfMissing( -- teamGroupCollection: ITeamGroup[], -- ...teamGroupsToCheck: (ITeamGroup | null | undefined)[] -- ): ITeamGroup[] { -- const teamGroups: ITeamGroup[] = teamGroupsToCheck.filter(isPresent); -+ getTeamGroupIdentifier(teamGroup: Pick): number { -+ return teamGroup.id; -+ } -+ -+ compareTeamGroup(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getTeamGroupIdentifier(o1) === this.getTeamGroupIdentifier(o2) : o1 === o2; -+ } -+ -+ addTeamGroupToCollectionIfMissing>( -+ teamGroupCollection: Type[], -+ ...teamGroupsToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const teamGroups: Type[] = teamGroupsToCheck.filter(isPresent); - if (teamGroups.length > 0) { -- const teamGroupCollectionIdentifiers = teamGroupCollection.map(teamGroupItem => getTeamGroupIdentifier(teamGroupItem)!); -+ const teamGroupCollectionIdentifiers = teamGroupCollection.map(teamGroupItem => this.getTeamGroupIdentifier(teamGroupItem)!); - const teamGroupsToAdd = teamGroups.filter(teamGroupItem => { -- const teamGroupIdentifier = getTeamGroupIdentifier(teamGroupItem); -- if (teamGroupIdentifier == null || teamGroupCollectionIdentifiers.includes(teamGroupIdentifier)) { -+ const teamGroupIdentifier = this.getTeamGroupIdentifier(teamGroupItem); -+ if (teamGroupCollectionIdentifiers.includes(teamGroupIdentifier)) { - return false; - } - teamGroupCollectionIdentifiers.push(teamGroupIdentifier); -@@ -76,28 +102,31 @@ export class TeamGroupService { - return teamGroupCollection; - } - -- protected convertDateFromClient(teamGroup: ITeamGroup): ITeamGroup { -- return Object.assign({}, teamGroup, { -- createdAt: teamGroup.createdAt?.isValid() ? teamGroup.createdAt.toJSON() : undefined, -- updatedAt: teamGroup.updatedAt?.isValid() ? teamGroup.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromClient(teamGroup: T): RestOf { -+ return { -+ ...teamGroup, -+ createdAt: teamGroup.createdAt?.toJSON() ?? null, -+ updatedAt: teamGroup.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertDateFromServer(restTeamGroup: RestTeamGroup): ITeamGroup { -+ return { -+ ...restTeamGroup, -+ createdAt: restTeamGroup.createdAt ? dayjs(restTeamGroup.createdAt) : undefined, -+ updatedAt: restTeamGroup.updatedAt ? dayjs(restTeamGroup.updatedAt) : undefined, -+ }; - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((teamGroup: ITeamGroup) => { -- teamGroup.createdAt = teamGroup.createdAt ? dayjs(teamGroup.createdAt) : undefined; -- teamGroup.updatedAt = teamGroup.updatedAt ? dayjs(teamGroup.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); -+ } -+ -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/team-group/team-group.model.ts b/src/main/webapp/app/entities/team-group/team-group.model.ts -index 73c20820..4daccf16 100644 ---- a/src/main/webapp/app/entities/team-group/team-group.model.ts -+++ b/src/main/webapp/app/entities/team-group/team-group.model.ts -@@ -1,28 +1,12 @@ - import dayjs from 'dayjs/esm'; --import { ITeam } from 'app/entities/team/team.model'; - - export interface ITeamGroup { -- id?: number; -- title?: string; -+ id: number; -+ title?: string | null; - description?: string | null; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; -- teams?: ITeam[] | null; -- parent?: ITeamGroup | null; -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; -+ parent?: Pick | null; - } - --export class TeamGroup implements ITeamGroup { -- constructor( -- public id?: number, -- public title?: string, -- public description?: string | null, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs, -- public teams?: ITeam[] | null, -- public parent?: ITeamGroup | null -- ) {} --} -- --export function getTeamGroupIdentifier(teamGroup: ITeamGroup): number | undefined { -- return teamGroup.id; --} -+export type NewTeamGroup = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/team-group/team-group.module.ts b/src/main/webapp/app/entities/team-group/team-group.module.ts -deleted file mode 100644 -index 8690ab1f..00000000 ---- a/src/main/webapp/app/entities/team-group/team-group.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { TeamGroupComponent } from './list/team-group.component'; --import { TeamGroupDetailComponent } from './detail/team-group-detail.component'; --import { TeamGroupUpdateComponent } from './update/team-group-update.component'; --import { TeamGroupDeleteDialogComponent } from './delete/team-group-delete-dialog.component'; --import { TeamGroupRoutingModule } from './route/team-group-routing.module'; -- --@NgModule({ -- imports: [SharedModule, TeamGroupRoutingModule], -- declarations: [TeamGroupComponent, TeamGroupDetailComponent, TeamGroupUpdateComponent, TeamGroupDeleteDialogComponent], -- entryComponents: [TeamGroupDeleteDialogComponent], --}) --export class TeamGroupModule {} -diff --git a/src/main/webapp/app/entities/team-group/update/team-group-update.component.html b/src/main/webapp/app/entities/team-group/update/team-group-update.component.html -index 4b7f5228..7f20fa4a 100644 ---- a/src/main/webapp/app/entities/team-group/update/team-group-update.component.html -+++ b/src/main/webapp/app/entities/team-group/update/team-group-update.component.html -@@ -8,30 +8,29 @@ -
- - --
-+
- - -
- --
-+
- - -
-- -- This field is required. -- -+ This field is required. - This field cannot be longer than 80 characters. -- This field cannot be longer than 80 characters. -- -
-
- --
-+
- - This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -- - -- - -diff --git a/src/main/webapp/app/entities/team-group/update/team-group-update.component.spec.ts b/src/main/webapp/app/entities/team-group/update/team-group-update.component.spec.ts -index 98443b46..6110b5b9 100644 ---- a/src/main/webapp/app/entities/team-group/update/team-group-update.component.spec.ts -+++ b/src/main/webapp/app/entities/team-group/update/team-group-update.component.spec.ts -@@ -7,7 +7,8 @@ import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - - import { TeamGroupService } from '../service/team-group.service'; --import { ITeamGroup, TeamGroup } from '../team-group.model'; -+import { ITeamGroup } from '../team-group.model'; -+import { TeamGroupFormService } from './team-group-form.service'; - - import { TeamGroupUpdateComponent } from './team-group-update.component'; - -@@ -15,12 +16,12 @@ describe('TeamGroup Management Update Component', () => { - let comp: TeamGroupUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let teamGroupFormService: TeamGroupFormService; - let teamGroupService: TeamGroupService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [TeamGroupUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), TeamGroupUpdateComponent], - providers: [ - FormBuilder, - { -@@ -36,6 +37,7 @@ describe('TeamGroup Management Update Component', () => { - - fixture = TestBed.createComponent(TeamGroupUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ teamGroupFormService = TestBed.inject(TeamGroupFormService); - teamGroupService = TestBed.inject(TeamGroupService); - - comp = fixture.componentInstance; -@@ -44,10 +46,10 @@ describe('TeamGroup Management Update Component', () => { - describe('ngOnInit', () => { - it('Should call TeamGroup query and add missing value', () => { - const teamGroup: ITeamGroup = { id: 456 }; -- const parent: ITeamGroup = { id: 56995 }; -+ const parent: ITeamGroup = { id: 14294 }; - teamGroup.parent = parent; - -- const teamGroupCollection: ITeamGroup[] = [{ id: 38959 }]; -+ const teamGroupCollection: ITeamGroup[] = [{ id: 1380 }]; - jest.spyOn(teamGroupService, 'query').mockReturnValue(of(new HttpResponse({ body: teamGroupCollection }))); - const additionalTeamGroups = [parent]; - const expectedCollection: ITeamGroup[] = [...additionalTeamGroups, ...teamGroupCollection]; -@@ -57,28 +59,32 @@ describe('TeamGroup Management Update Component', () => { - comp.ngOnInit(); - - expect(teamGroupService.query).toHaveBeenCalled(); -- expect(teamGroupService.addTeamGroupToCollectionIfMissing).toHaveBeenCalledWith(teamGroupCollection, ...additionalTeamGroups); -+ expect(teamGroupService.addTeamGroupToCollectionIfMissing).toHaveBeenCalledWith( -+ teamGroupCollection, -+ ...additionalTeamGroups.map(expect.objectContaining), -+ ); - expect(comp.teamGroupsSharedCollection).toEqual(expectedCollection); - }); - - it('Should update editForm', () => { - const teamGroup: ITeamGroup = { id: 456 }; -- const parent: ITeamGroup = { id: 20159 }; -+ const parent: ITeamGroup = { id: 20477 }; - teamGroup.parent = parent; - - activatedRoute.data = of({ teamGroup }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(teamGroup)); - expect(comp.teamGroupsSharedCollection).toContain(parent); -+ expect(comp.teamGroup).toEqual(teamGroup); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const teamGroup = { id: 123 }; -+ jest.spyOn(teamGroupFormService, 'getTeamGroup').mockReturnValue(teamGroup); - jest.spyOn(teamGroupService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ teamGroup }); -@@ -91,18 +97,20 @@ describe('TeamGroup Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(teamGroupFormService.getTeamGroup).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(teamGroupService.update).toHaveBeenCalledWith(teamGroup); -+ expect(teamGroupService.update).toHaveBeenCalledWith(expect.objectContaining(teamGroup)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const teamGroup = new TeamGroup(); -+ const saveSubject = new Subject>(); -+ const teamGroup = { id: 123 }; -+ jest.spyOn(teamGroupFormService, 'getTeamGroup').mockReturnValue({ id: null }); - jest.spyOn(teamGroupService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ teamGroup }); -+ activatedRoute.data = of({ teamGroup: null }); - comp.ngOnInit(); - - // WHEN -@@ -112,14 +120,15 @@ describe('TeamGroup Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(teamGroupService.create).toHaveBeenCalledWith(teamGroup); -+ expect(teamGroupFormService.getTeamGroup).toHaveBeenCalled(); -+ expect(teamGroupService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const teamGroup = { id: 123 }; - jest.spyOn(teamGroupService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -132,18 +141,20 @@ describe('TeamGroup Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(teamGroupService.update).toHaveBeenCalledWith(teamGroup); -+ expect(teamGroupService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); - }); - -- describe('Tracking relationships identifiers', () => { -- describe('trackTeamGroupById', () => { -- it('Should return tracked TeamGroup primary key', () => { -+ describe('Compare relationships', () => { -+ describe('compareTeamGroup', () => { -+ it('Should forward to teamGroupService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackTeamGroupById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(teamGroupService, 'compareTeamGroup'); -+ comp.compareTeamGroup(entity, entity2); -+ expect(teamGroupService.compareTeamGroup).toHaveBeenCalledWith(entity, entity2); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.html b/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.html -index 92686993..22f8e023 100644 ---- a/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.spec.ts -index bf2477cc..6aa03060 100644 ---- a/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('TeamSkill Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [TeamSkillDeleteDialogComponent], -+ imports: [HttpClientTestingModule, TeamSkillDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(TeamSkillDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('TeamSkill Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.ts b/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.ts -index ab5de417..c028013f 100644 ---- a/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/team-skill/delete/team-skill-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { ITeamSkill } from '../team-skill.model'; - import { TeamSkillService } from '../service/team-skill.service'; - - @Component({ -+ standalone: true, - templateUrl: './team-skill-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class TeamSkillDeleteDialogComponent { - teamSkill?: ITeamSkill; - -- constructor(protected teamSkillService: TeamSkillService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected teamSkillService: TeamSkillService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class TeamSkillDeleteDialogComponent { - - confirmDelete(id: number): void { - this.teamSkillService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.html b/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.html -index 8c1349e5..69cdaf65 100644 ---- a/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.html -+++ b/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.html -@@ -53,13 +53,13 @@ -
Skill
-
- -
-
Team
-
- -
- -diff --git a/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.spec.ts b/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.spec.ts -index baa98c4e..d7eee411 100644 ---- a/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { TeamSkillDetailComponent } from './team-skill-detail.component'; - - describe('TeamSkill Management Detail Component', () => { -- let comp: TeamSkillDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [TeamSkillDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [TeamSkillDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ teamSkill: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: TeamSkillDetailComponent, -+ resolve: { teamSkill: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(TeamSkillDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(TeamSkillDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load teamSkill on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load teamSkill on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', TeamSkillDetailComponent); - - // THEN -- expect(comp.teamSkill).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.teamSkill).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.ts b/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.ts -index 931e7474..47f5772f 100644 ---- a/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.ts -+++ b/src/main/webapp/app/entities/team-skill/detail/team-skill-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { ITeamSkill } from '../team-skill.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-team-skill-detail', - templateUrl: './team-skill-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class TeamSkillDetailComponent implements OnInit { -- teamSkill: ITeamSkill | null = null; -+export class TeamSkillDetailComponent { -+ @Input() teamSkill: ITeamSkill | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ teamSkill }) => { -- this.teamSkill = teamSkill; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/team-skill/list/team-skill.component.html b/src/main/webapp/app/entities/team-skill/list/team-skill.component.html -index c98b51ac..003d6927 100644 ---- a/src/main/webapp/app/entities/team-skill/list/team-skill.component.html -+++ b/src/main/webapp/app/entities/team-skill/list/team-skill.component.html -@@ -3,9 +3,9 @@ - Team Skills - -
-- - - -
- -@@ -25,47 +25,94 @@ - - -
-- No teamSkills found -+ No Team Skills found -
- --
-+
- - -- -- -+ -+ - - - - -+ -+ -- -- - - - - - - - - -- -+ - - - - -
ID
-+
-+ ID -+ -+
-+
-- Completed At -+
-+ Completed At -+ -+
-
-- Verified At -+
-+ Verified At -+ -+
-
-- Irrelevant -+
-+ Irrelevant -+ -+
-
-- Skill Status -+
-+ Skill Status -+ -+
-+
-+
-+ Note -+ -+
-+
-+
-+ Vote -+ -+
-
Note Vote -- Voters -+
-+ Voters -+ -+
-
-- Created At -+
-+ Created At -+ -+
-
-- Updated At -+
-+ Updated At -+ -+
-
-- Skill -+
-+ Skill -+ -+
-
-- Team -+
-+ Team -+ -+
-
- {{ teamSkill.id }} -@@ -81,12 +128,12 @@ - {{ teamSkill.updatedAt | formatMediumDatetime }} - - - - -diff --git a/src/main/webapp/app/entities/team-skill/list/team-skill.component.spec.ts b/src/main/webapp/app/entities/team-skill/list/team-skill.component.spec.ts -index f69b59ac..532cb75d 100644 ---- a/src/main/webapp/app/entities/team-skill/list/team-skill.component.spec.ts -+++ b/src/main/webapp/app/entities/team-skill/list/team-skill.component.spec.ts -@@ -1,21 +1,47 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { TeamSkillService } from '../service/team-skill.service'; - - import { TeamSkillComponent } from './team-skill.component'; -+import SpyInstance = jest.SpyInstance; - - describe('TeamSkill Management Component', () => { - let comp: TeamSkillComponent; - let fixture: ComponentFixture; - let service: TeamSkillService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [TeamSkillComponent], -+ imports: [ -+ RouterTestingModule.withRoutes([{ path: 'team-skill', component: TeamSkillComponent }]), -+ HttpClientTestingModule, -+ TeamSkillComponent, -+ ], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(TeamSkillComponent, '') - .compileComponents(); -@@ -23,6 +49,7 @@ describe('TeamSkill Management Component', () => { - fixture = TestBed.createComponent(TeamSkillComponent); - comp = fixture.componentInstance; - service = TestBed.inject(TeamSkillService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +57,8 @@ describe('TeamSkill Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +68,25 @@ describe('TeamSkill Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.teamSkills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.teamSkills?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to teamSkillService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getTeamSkillIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getTeamSkillIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.teamSkills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +94,25 @@ describe('TeamSkill Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +121,8 @@ describe('TeamSkill Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.teamSkills[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.teamSkills?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/team-skill/list/team-skill.component.ts b/src/main/webapp/app/entities/team-skill/list/team-skill.component.ts -index 5f8056b8..34072097 100644 ---- a/src/main/webapp/app/entities/team-skill/list/team-skill.component.ts -+++ b/src/main/webapp/app/entities/team-skill/list/team-skill.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { ITeamSkill } from '../team-skill.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { TeamSkillService } from '../service/team-skill.service'; --import { TeamSkillDeleteDialogComponent } from '../delete/team-skill-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, TeamSkillService } from '../service/team-skill.service'; -+import { TeamSkillDeleteDialogComponent } from '../delete/team-skill-delete-dialog.component'; -+import { ITeamSkill } from '../team-skill.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-team-skill', - templateUrl: './team-skill.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class TeamSkillComponent implements OnInit { -- teamSkills: ITeamSkill[]; -+ teamSkills?: ITeamSkill[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected teamSkillService: TeamSkillService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.teamSkills = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.teamSkillService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateTeamSkills(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected teamSkillService: TeamSkillService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.teamSkills = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: ITeamSkill): number => this.teamSkillService.getTeamSkillIdentifier(item); - -- trackId(_index: number, item: ITeamSkill): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(teamSkill: ITeamSkill): void { - const modalRef = this.modalService.open(TeamSkillDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.teamSkill = teamSkill; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.teamSkills = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: ITeamSkill[] | null): ITeamSkill[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const teamSkillsNew = this.teamSkills ?? []; -+ if (data) { -+ for (const d of data) { -+ if (teamSkillsNew.map(op => op.id).indexOf(d.id) === -1) { -+ teamSkillsNew.push(d); -+ } -+ } -+ } -+ return teamSkillsNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateTeamSkills(data: ITeamSkill[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,39 @@ export class TeamSkillComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.teamSkills.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ eagerload: true, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.teamSkillService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/team-skill/route/team-skill-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/team-skill/route/team-skill-routing-resolve.service.spec.ts -index 29c08ffe..0e0b5db3 100644 ---- a/src/main/webapp/app/entities/team-skill/route/team-skill-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/team-skill/route/team-skill-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { ITeamSkill, TeamSkill } from '../team-skill.model'; -+import { ITeamSkill } from '../team-skill.model'; - import { TeamSkillService } from '../service/team-skill.service'; - --import { TeamSkillRoutingResolveService } from './team-skill-routing-resolve.service'; -+import teamSkillResolve from './team-skill-routing-resolve.service'; - - describe('TeamSkill routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: TeamSkillRoutingResolveService; - let service: TeamSkillService; -- let resultTeamSkill: ITeamSkill | undefined; -+ let resultTeamSkill: ITeamSkill | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('TeamSkill routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(TeamSkillRoutingResolveService); - service = TestBed.inject(TeamSkillService); - resultTeamSkill = undefined; - }); -@@ -46,8 +44,12 @@ describe('TeamSkill routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTeamSkill = result; -+ TestBed.runInInjectionContext(() => { -+ teamSkillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTeamSkill = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('TeamSkill routing resolve service', () => { - expect(resultTeamSkill).toEqual({ id: 123 }); - }); - -- it('should return new ITeamSkill if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTeamSkill = result; -+ TestBed.runInInjectionContext(() => { -+ teamSkillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTeamSkill = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultTeamSkill).toEqual(new TeamSkill()); -+ expect(resultTeamSkill).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as TeamSkill }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTeamSkill = result; -+ TestBed.runInInjectionContext(() => { -+ teamSkillResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTeamSkill = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/team-skill/route/team-skill-routing-resolve.service.ts b/src/main/webapp/app/entities/team-skill/route/team-skill-routing-resolve.service.ts -index c89b8609..aeded640 100644 ---- a/src/main/webapp/app/entities/team-skill/route/team-skill-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/team-skill/route/team-skill-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { ITeamSkill, TeamSkill } from '../team-skill.model'; -+import { ITeamSkill } from '../team-skill.model'; - import { TeamSkillService } from '../service/team-skill.service'; - --@Injectable({ providedIn: 'root' }) --export class TeamSkillRoutingResolveService implements Resolve { -- constructor(protected service: TeamSkillService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((teamSkill: HttpResponse) => { -+export const teamSkillResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(TeamSkillService) -+ .find(id) -+ .pipe( -+ mergeMap((teamSkill: HttpResponse) => { - if (teamSkill.body) { - return of(teamSkill.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new TeamSkill()); - } --} -+ return of(null); -+}; -+ -+export default teamSkillResolve; -diff --git a/src/main/webapp/app/entities/team-skill/route/team-skill-routing.module.ts b/src/main/webapp/app/entities/team-skill/route/team-skill-routing.module.ts -deleted file mode 100644 -index 619e8e3b..00000000 ---- a/src/main/webapp/app/entities/team-skill/route/team-skill-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { TeamSkillComponent } from '../list/team-skill.component'; --import { TeamSkillDetailComponent } from '../detail/team-skill-detail.component'; --import { TeamSkillUpdateComponent } from '../update/team-skill-update.component'; --import { TeamSkillRoutingResolveService } from './team-skill-routing-resolve.service'; -- --const teamSkillRoute: Routes = [ -- { -- path: '', -- component: TeamSkillComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: TeamSkillDetailComponent, -- resolve: { -- teamSkill: TeamSkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: TeamSkillUpdateComponent, -- resolve: { -- teamSkill: TeamSkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: TeamSkillUpdateComponent, -- resolve: { -- teamSkill: TeamSkillRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(teamSkillRoute)], -- exports: [RouterModule], --}) --export class TeamSkillRoutingModule {} -diff --git a/src/main/webapp/app/entities/team-skill/service/team-skill.service.spec.ts b/src/main/webapp/app/entities/team-skill/service/team-skill.service.spec.ts -index c9248faf..03317a73 100644 ---- a/src/main/webapp/app/entities/team-skill/service/team-skill.service.spec.ts -+++ b/src/main/webapp/app/entities/team-skill/service/team-skill.service.spec.ts -@@ -1,19 +1,23 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { SkillStatus } from 'app/entities/enumerations/skill-status.model'; --import { ITeamSkill, TeamSkill } from '../team-skill.model'; -+import { ITeamSkill } from '../team-skill.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../team-skill.test-samples'; - --import { TeamSkillService } from './team-skill.service'; -+import { TeamSkillService, RestTeamSkill } from './team-skill.service'; -+ -+const requireRestSample: RestTeamSkill = { -+ ...sampleWithRequiredData, -+ completedAt: sampleWithRequiredData.completedAt?.toJSON(), -+ verifiedAt: sampleWithRequiredData.verifiedAt?.toJSON(), -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('TeamSkill Service', () => { - let service: TeamSkillService; - let httpMock: HttpTestingController; -- let elemDefault: ITeamSkill; - let expectedResult: ITeamSkill | ITeamSkill[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -22,64 +26,26 @@ describe('TeamSkill Service', () => { - expectedResult = null; - service = TestBed.inject(TeamSkillService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- completedAt: currentDate, -- verifiedAt: currentDate, -- irrelevant: false, -- skillStatus: SkillStatus.OPEN, -- note: 'AAAAAAA', -- vote: 0, -- voters: 'AAAAAAA', -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- completedAt: currentDate.format(DATE_TIME_FORMAT), -- verifiedAt: currentDate.format(DATE_TIME_FORMAT), -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a TeamSkill', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- completedAt: currentDate.format(DATE_TIME_FORMAT), -- verifiedAt: currentDate.format(DATE_TIME_FORMAT), -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- completedAt: currentDate, -- verifiedAt: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new TeamSkill()).subscribe(resp => (expectedResult = resp.body)); -+ const teamSkill = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(teamSkill).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -87,33 +53,11 @@ describe('TeamSkill Service', () => { - }); - - it('should update a TeamSkill', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- completedAt: currentDate.format(DATE_TIME_FORMAT), -- verifiedAt: currentDate.format(DATE_TIME_FORMAT), -- irrelevant: true, -- skillStatus: 'BBBBBB', -- note: 'BBBBBB', -- vote: 1, -- voters: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- completedAt: currentDate, -- verifiedAt: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const teamSkill = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(teamSkill).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -121,26 +65,9 @@ describe('TeamSkill Service', () => { - }); - - it('should partial update a TeamSkill', () => { -- const patchObject = Object.assign( -- { -- completedAt: currentDate.format(DATE_TIME_FORMAT), -- irrelevant: true, -- vote: 1, -- }, -- new TeamSkill() -- ); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- completedAt: currentDate, -- verifiedAt: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -150,86 +77,66 @@ describe('TeamSkill Service', () => { - }); - - it('should return a list of TeamSkill', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- completedAt: currentDate.format(DATE_TIME_FORMAT), -- verifiedAt: currentDate.format(DATE_TIME_FORMAT), -- irrelevant: true, -- skillStatus: 'BBBBBB', -- note: 'BBBBBB', -- vote: 1, -- voters: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- completedAt: currentDate, -- verifiedAt: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a TeamSkill', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addTeamSkillToCollectionIfMissing', () => { - it('should add a TeamSkill to an empty array', () => { -- const teamSkill: ITeamSkill = { id: 123 }; -+ const teamSkill: ITeamSkill = sampleWithRequiredData; - expectedResult = service.addTeamSkillToCollectionIfMissing([], teamSkill); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(teamSkill); - }); - - it('should not add a TeamSkill to an array that contains it', () => { -- const teamSkill: ITeamSkill = { id: 123 }; -+ const teamSkill: ITeamSkill = sampleWithRequiredData; - const teamSkillCollection: ITeamSkill[] = [ - { - ...teamSkill, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addTeamSkillToCollectionIfMissing(teamSkillCollection, teamSkill); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a TeamSkill to an array that doesn't contain it", () => { -- const teamSkill: ITeamSkill = { id: 123 }; -- const teamSkillCollection: ITeamSkill[] = [{ id: 456 }]; -+ const teamSkill: ITeamSkill = sampleWithRequiredData; -+ const teamSkillCollection: ITeamSkill[] = [sampleWithPartialData]; - expectedResult = service.addTeamSkillToCollectionIfMissing(teamSkillCollection, teamSkill); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(teamSkill); - }); - - it('should add only unique TeamSkill to an array', () => { -- const teamSkillArray: ITeamSkill[] = [{ id: 123 }, { id: 456 }, { id: 51450 }]; -- const teamSkillCollection: ITeamSkill[] = [{ id: 123 }]; -+ const teamSkillArray: ITeamSkill[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const teamSkillCollection: ITeamSkill[] = [sampleWithRequiredData]; - expectedResult = service.addTeamSkillToCollectionIfMissing(teamSkillCollection, ...teamSkillArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const teamSkill: ITeamSkill = { id: 123 }; -- const teamSkill2: ITeamSkill = { id: 456 }; -+ const teamSkill: ITeamSkill = sampleWithRequiredData; -+ const teamSkill2: ITeamSkill = sampleWithPartialData; - expectedResult = service.addTeamSkillToCollectionIfMissing([], teamSkill, teamSkill2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(teamSkill); -@@ -237,18 +144,62 @@ describe('TeamSkill Service', () => { - }); - - it('should accept null and undefined values', () => { -- const teamSkill: ITeamSkill = { id: 123 }; -+ const teamSkill: ITeamSkill = sampleWithRequiredData; - expectedResult = service.addTeamSkillToCollectionIfMissing([], null, teamSkill, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(teamSkill); - }); - - it('should return initial array if no TeamSkill is added', () => { -- const teamSkillCollection: ITeamSkill[] = [{ id: 123 }]; -+ const teamSkillCollection: ITeamSkill[] = [sampleWithRequiredData]; - expectedResult = service.addTeamSkillToCollectionIfMissing(teamSkillCollection, undefined, null); - expect(expectedResult).toEqual(teamSkillCollection); - }); - }); -+ -+ describe('compareTeamSkill', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareTeamSkill(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareTeamSkill(entity1, entity2); -+ const compareResult2 = service.compareTeamSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareTeamSkill(entity1, entity2); -+ const compareResult2 = service.compareTeamSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareTeamSkill(entity1, entity2); -+ const compareResult2 = service.compareTeamSkill(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/team-skill/service/team-skill.service.ts b/src/main/webapp/app/entities/team-skill/service/team-skill.service.ts -index 05f0d275..37d59d28 100644 ---- a/src/main/webapp/app/entities/team-skill/service/team-skill.service.ts -+++ b/src/main/webapp/app/entities/team-skill/service/team-skill.service.ts -@@ -1,13 +1,30 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { ITeamSkill, getTeamSkillIdentifier } from '../team-skill.model'; -+import { ITeamSkill, NewTeamSkill } from '../team-skill.model'; -+ -+export type PartialUpdateTeamSkill = Partial & Pick; -+ -+type RestOf = Omit & { -+ completedAt?: string | null; -+ verifiedAt?: string | null; -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestTeamSkill = RestOf; -+ -+export type NewRestTeamSkill = RestOf; -+ -+export type PartialUpdateRestTeamSkill = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,56 +33,67 @@ export type EntityArrayResponseType = HttpResponse; - export class TeamSkillService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/team-skills'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(teamSkill: ITeamSkill): Observable { -+ create(teamSkill: NewTeamSkill): Observable { - const copy = this.convertDateFromClient(teamSkill); - return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .post(this.resourceUrl, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - update(teamSkill: ITeamSkill): Observable { - const copy = this.convertDateFromClient(teamSkill); - return this.http -- .put(`${this.resourceUrl}/${getTeamSkillIdentifier(teamSkill) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getTeamSkillIdentifier(teamSkill)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(teamSkill: ITeamSkill): Observable { -+ partialUpdate(teamSkill: PartialUpdateTeamSkill): Observable { - const copy = this.convertDateFromClient(teamSkill); - return this.http -- .patch(`${this.resourceUrl}/${getTeamSkillIdentifier(teamSkill) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getTeamSkillIdentifier(teamSkill)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addTeamSkillToCollectionIfMissing( -- teamSkillCollection: ITeamSkill[], -- ...teamSkillsToCheck: (ITeamSkill | null | undefined)[] -- ): ITeamSkill[] { -- const teamSkills: ITeamSkill[] = teamSkillsToCheck.filter(isPresent); -+ getTeamSkillIdentifier(teamSkill: Pick): number { -+ return teamSkill.id; -+ } -+ -+ compareTeamSkill(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getTeamSkillIdentifier(o1) === this.getTeamSkillIdentifier(o2) : o1 === o2; -+ } -+ -+ addTeamSkillToCollectionIfMissing>( -+ teamSkillCollection: Type[], -+ ...teamSkillsToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const teamSkills: Type[] = teamSkillsToCheck.filter(isPresent); - if (teamSkills.length > 0) { -- const teamSkillCollectionIdentifiers = teamSkillCollection.map(teamSkillItem => getTeamSkillIdentifier(teamSkillItem)!); -+ const teamSkillCollectionIdentifiers = teamSkillCollection.map(teamSkillItem => this.getTeamSkillIdentifier(teamSkillItem)!); - const teamSkillsToAdd = teamSkills.filter(teamSkillItem => { -- const teamSkillIdentifier = getTeamSkillIdentifier(teamSkillItem); -- if (teamSkillIdentifier == null || teamSkillCollectionIdentifiers.includes(teamSkillIdentifier)) { -+ const teamSkillIdentifier = this.getTeamSkillIdentifier(teamSkillItem); -+ if (teamSkillCollectionIdentifiers.includes(teamSkillIdentifier)) { - return false; - } - teamSkillCollectionIdentifiers.push(teamSkillIdentifier); -@@ -76,34 +104,35 @@ export class TeamSkillService { - return teamSkillCollection; - } - -- protected convertDateFromClient(teamSkill: ITeamSkill): ITeamSkill { -- return Object.assign({}, teamSkill, { -- completedAt: teamSkill.completedAt?.isValid() ? teamSkill.completedAt.toJSON() : undefined, -- verifiedAt: teamSkill.verifiedAt?.isValid() ? teamSkill.verifiedAt.toJSON() : undefined, -- createdAt: teamSkill.createdAt?.isValid() ? teamSkill.createdAt.toJSON() : undefined, -- updatedAt: teamSkill.updatedAt?.isValid() ? teamSkill.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromClient(teamSkill: T): RestOf { -+ return { -+ ...teamSkill, -+ completedAt: teamSkill.completedAt?.toJSON() ?? null, -+ verifiedAt: teamSkill.verifiedAt?.toJSON() ?? null, -+ createdAt: teamSkill.createdAt?.toJSON() ?? null, -+ updatedAt: teamSkill.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.completedAt = res.body.completedAt ? dayjs(res.body.completedAt) : undefined; -- res.body.verifiedAt = res.body.verifiedAt ? dayjs(res.body.verifiedAt) : undefined; -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertDateFromServer(restTeamSkill: RestTeamSkill): ITeamSkill { -+ return { -+ ...restTeamSkill, -+ completedAt: restTeamSkill.completedAt ? dayjs(restTeamSkill.completedAt) : undefined, -+ verifiedAt: restTeamSkill.verifiedAt ? dayjs(restTeamSkill.verifiedAt) : undefined, -+ createdAt: restTeamSkill.createdAt ? dayjs(restTeamSkill.createdAt) : undefined, -+ updatedAt: restTeamSkill.updatedAt ? dayjs(restTeamSkill.updatedAt) : undefined, -+ }; - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((teamSkill: ITeamSkill) => { -- teamSkill.completedAt = teamSkill.completedAt ? dayjs(teamSkill.completedAt) : undefined; -- teamSkill.verifiedAt = teamSkill.verifiedAt ? dayjs(teamSkill.verifiedAt) : undefined; -- teamSkill.createdAt = teamSkill.createdAt ? dayjs(teamSkill.createdAt) : undefined; -- teamSkill.updatedAt = teamSkill.updatedAt ? dayjs(teamSkill.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); -+ } -+ -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/team-skill/team-skill.model.ts b/src/main/webapp/app/entities/team-skill/team-skill.model.ts -index 59d076b8..11d82661 100644 ---- a/src/main/webapp/app/entities/team-skill/team-skill.model.ts -+++ b/src/main/webapp/app/entities/team-skill/team-skill.model.ts -@@ -4,39 +4,18 @@ import { ITeam } from 'app/entities/team/team.model'; - import { SkillStatus } from 'app/entities/enumerations/skill-status.model'; - - export interface ITeamSkill { -- id?: number; -+ id: number; - completedAt?: dayjs.Dayjs | null; - verifiedAt?: dayjs.Dayjs | null; - irrelevant?: boolean | null; -- skillStatus?: SkillStatus; -+ skillStatus?: keyof typeof SkillStatus | null; - note?: string | null; -- vote?: number; -+ vote?: number | null; - voters?: string | null; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; -- skill?: ISkill; -- team?: ITeam; -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; -+ skill?: Pick | null; -+ team?: Pick | null; - } - --export class TeamSkill implements ITeamSkill { -- constructor( -- public id?: number, -- public completedAt?: dayjs.Dayjs | null, -- public verifiedAt?: dayjs.Dayjs | null, -- public irrelevant?: boolean | null, -- public skillStatus?: SkillStatus, -- public note?: string | null, -- public vote?: number, -- public voters?: string | null, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs, -- public skill?: ISkill, -- public team?: ITeam -- ) { -- this.irrelevant = this.irrelevant ?? false; -- } --} -- --export function getTeamSkillIdentifier(teamSkill: ITeamSkill): number | undefined { -- return teamSkill.id; --} -+export type NewTeamSkill = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/team-skill/team-skill.module.ts b/src/main/webapp/app/entities/team-skill/team-skill.module.ts -deleted file mode 100644 -index 5ad8a1f6..00000000 ---- a/src/main/webapp/app/entities/team-skill/team-skill.module.ts -+++ /dev/null -@@ -1,23 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { TeamSkillComponent } from './list/team-skill.component'; --import { TeamSkillDetailComponent } from './detail/team-skill-detail.component'; --import { TeamSkillUpdateComponent } from './update/team-skill-update.component'; --import { TeamSkillDeleteDialogComponent } from './delete/team-skill-delete-dialog.component'; --import { TeamSkillRoutingModule } from './route/team-skill-routing.module'; --// ### MODIFICATION-START ### --import { CustomTeamSkillModule } from 'app/custom/entities/team-skill/team-skill.module'; --// ### MODIFICATION-END ### -- --@NgModule({ -- imports: [ -- SharedModule, -- TeamSkillRoutingModule, -- // ### MODIFICATION-START ### -- CustomTeamSkillModule, -- // ### MODIFICATION-END ### -- ], -- declarations: [TeamSkillComponent, TeamSkillDetailComponent, TeamSkillUpdateComponent, TeamSkillDeleteDialogComponent], -- entryComponents: [TeamSkillDeleteDialogComponent], --}) --export class TeamSkillModule {} -diff --git a/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.html b/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.html -index 1328bf89..a9f367be 100644 ---- a/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.html -+++ b/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.html -@@ -8,12 +8,12 @@ -
- - --
-+
- - -
- --
-+
- -
- -
- --
-+
- -
- -
- --
-+
- - -
- --
-+
- - -
-@@ -83,26 +82,25 @@ - *ngIf="editForm.get('note')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 4096 }" -+ >This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- - -
-- -- This field is required. -- -- -- This field should be a number. -- -+ This field is required. -+ This field should be a number. -
-
- --
-+
- - -
-@@ -111,13 +109,12 @@ - *ngIf="editForm.get('voters')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 255 }" -+ >This field cannot be longer than 255 characters. -- This field cannot be longer than 255 characters. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -- -+ -+ - -
-
-- -- This field is required. -- -+ This field is required. -
- --
-+
- -- -+ -+ - -
-
-- -- This field is required. -- -+ This field is required. -
-
- -diff --git a/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.spec.ts b/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.spec.ts -index 5efadbe9..b8256381 100644 ---- a/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.spec.ts -+++ b/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.spec.ts -@@ -6,12 +6,13 @@ import { ActivatedRoute } from '@angular/router'; - import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - --import { TeamSkillService } from '../service/team-skill.service'; --import { ITeamSkill, TeamSkill } from '../team-skill.model'; - import { ISkill } from 'app/entities/skill/skill.model'; - import { SkillService } from 'app/entities/skill/service/skill.service'; - import { ITeam } from 'app/entities/team/team.model'; - import { TeamService } from 'app/entities/team/service/team.service'; -+import { ITeamSkill } from '../team-skill.model'; -+import { TeamSkillService } from '../service/team-skill.service'; -+import { TeamSkillFormService } from './team-skill-form.service'; - - import { TeamSkillUpdateComponent } from './team-skill-update.component'; - -@@ -19,14 +20,14 @@ describe('TeamSkill Management Update Component', () => { - let comp: TeamSkillUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let teamSkillFormService: TeamSkillFormService; - let teamSkillService: TeamSkillService; - let skillService: SkillService; - let teamService: TeamService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [TeamSkillUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), TeamSkillUpdateComponent], - providers: [ - FormBuilder, - { -@@ -42,6 +43,7 @@ describe('TeamSkill Management Update Component', () => { - - fixture = TestBed.createComponent(TeamSkillUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ teamSkillFormService = TestBed.inject(TeamSkillFormService); - teamSkillService = TestBed.inject(TeamSkillService); - skillService = TestBed.inject(SkillService); - teamService = TestBed.inject(TeamService); -@@ -52,10 +54,10 @@ describe('TeamSkill Management Update Component', () => { - describe('ngOnInit', () => { - it('Should call Skill query and add missing value', () => { - const teamSkill: ITeamSkill = { id: 456 }; -- const skill: ISkill = { id: 18168 }; -+ const skill: ISkill = { id: 12899 }; - teamSkill.skill = skill; - -- const skillCollection: ISkill[] = [{ id: 66669 }]; -+ const skillCollection: ISkill[] = [{ id: 26994 }]; - jest.spyOn(skillService, 'query').mockReturnValue(of(new HttpResponse({ body: skillCollection }))); - const additionalSkills = [skill]; - const expectedCollection: ISkill[] = [...additionalSkills, ...skillCollection]; -@@ -65,16 +67,19 @@ describe('TeamSkill Management Update Component', () => { - comp.ngOnInit(); - - expect(skillService.query).toHaveBeenCalled(); -- expect(skillService.addSkillToCollectionIfMissing).toHaveBeenCalledWith(skillCollection, ...additionalSkills); -+ expect(skillService.addSkillToCollectionIfMissing).toHaveBeenCalledWith( -+ skillCollection, -+ ...additionalSkills.map(expect.objectContaining), -+ ); - expect(comp.skillsSharedCollection).toEqual(expectedCollection); - }); - - it('Should call Team query and add missing value', () => { - const teamSkill: ITeamSkill = { id: 456 }; -- const team: ITeam = { id: 95987 }; -+ const team: ITeam = { id: 6827 }; - teamSkill.team = team; - -- const teamCollection: ITeam[] = [{ id: 42696 }]; -+ const teamCollection: ITeam[] = [{ id: 10271 }]; - jest.spyOn(teamService, 'query').mockReturnValue(of(new HttpResponse({ body: teamCollection }))); - const additionalTeams = [team]; - const expectedCollection: ITeam[] = [...additionalTeams, ...teamCollection]; -@@ -84,31 +89,35 @@ describe('TeamSkill Management Update Component', () => { - comp.ngOnInit(); - - expect(teamService.query).toHaveBeenCalled(); -- expect(teamService.addTeamToCollectionIfMissing).toHaveBeenCalledWith(teamCollection, ...additionalTeams); -+ expect(teamService.addTeamToCollectionIfMissing).toHaveBeenCalledWith( -+ teamCollection, -+ ...additionalTeams.map(expect.objectContaining), -+ ); - expect(comp.teamsSharedCollection).toEqual(expectedCollection); - }); - - it('Should update editForm', () => { - const teamSkill: ITeamSkill = { id: 456 }; -- const skill: ISkill = { id: 99389 }; -+ const skill: ISkill = { id: 32507 }; - teamSkill.skill = skill; -- const team: ITeam = { id: 92382 }; -+ const team: ITeam = { id: 24057 }; - teamSkill.team = team; - - activatedRoute.data = of({ teamSkill }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(teamSkill)); - expect(comp.skillsSharedCollection).toContain(skill); - expect(comp.teamsSharedCollection).toContain(team); -+ expect(comp.teamSkill).toEqual(teamSkill); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const teamSkill = { id: 123 }; -+ jest.spyOn(teamSkillFormService, 'getTeamSkill').mockReturnValue(teamSkill); - jest.spyOn(teamSkillService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ teamSkill }); -@@ -121,18 +130,20 @@ describe('TeamSkill Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(teamSkillFormService.getTeamSkill).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(teamSkillService.update).toHaveBeenCalledWith(teamSkill); -+ expect(teamSkillService.update).toHaveBeenCalledWith(expect.objectContaining(teamSkill)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const teamSkill = new TeamSkill(); -+ const saveSubject = new Subject>(); -+ const teamSkill = { id: 123 }; -+ jest.spyOn(teamSkillFormService, 'getTeamSkill').mockReturnValue({ id: null }); - jest.spyOn(teamSkillService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ teamSkill }); -+ activatedRoute.data = of({ teamSkill: null }); - comp.ngOnInit(); - - // WHEN -@@ -142,14 +153,15 @@ describe('TeamSkill Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(teamSkillService.create).toHaveBeenCalledWith(teamSkill); -+ expect(teamSkillFormService.getTeamSkill).toHaveBeenCalled(); -+ expect(teamSkillService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const teamSkill = { id: 123 }; - jest.spyOn(teamSkillService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -162,26 +174,30 @@ describe('TeamSkill Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(teamSkillService.update).toHaveBeenCalledWith(teamSkill); -+ expect(teamSkillService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); - }); - -- describe('Tracking relationships identifiers', () => { -- describe('trackSkillById', () => { -- it('Should return tracked Skill primary key', () => { -+ describe('Compare relationships', () => { -+ describe('compareSkill', () => { -+ it('Should forward to skillService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackSkillById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(skillService, 'compareSkill'); -+ comp.compareSkill(entity, entity2); -+ expect(skillService.compareSkill).toHaveBeenCalledWith(entity, entity2); - }); - }); - -- describe('trackTeamById', () => { -- it('Should return tracked Team primary key', () => { -+ describe('compareTeam', () => { -+ it('Should forward to teamService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackTeamById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(teamService, 'compareTeam'); -+ comp.compareTeam(entity, entity2); -+ expect(teamService.compareTeam).toHaveBeenCalledWith(entity, entity2); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.ts b/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.ts -index 2b32edab..85e7acc5 100644 ---- a/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.ts -+++ b/src/main/webapp/app/entities/team-skill/update/team-skill-update.component.ts -@@ -15,6 +15,10 @@ import { SkillStatus } from 'app/entities/enumerations/skill-status.model'; - import { TeamSkillService } from '../service/team-skill.service'; - import { ITeamSkill } from '../team-skill.model'; - import { TeamSkillFormService, TeamSkillFormGroup } from './team-skill-form.service'; -+// ### Modification-Start ### -+import { SKILLS_PER_PAGE, TEAMS_PER_PAGE } from '../../../config/pagination.constants'; -+// ### Modification-End ### -+ - - @Component({ - standalone: true, -@@ -98,13 +102,17 @@ export class TeamSkillUpdateComponent implements OnInit { - - protected loadRelationshipsOptions(): void { - this.skillService -- .query() -+ // ### Modification-Start ### -+ .query({ page: 0, size: SKILLS_PER_PAGE }) -+ // ### Modification-End ### - .pipe(map((res: HttpResponse) => res.body ?? [])) - .pipe(map((skills: ISkill[]) => this.skillService.addSkillToCollectionIfMissing(skills, this.teamSkill?.skill))) - .subscribe((skills: ISkill[]) => (this.skillsSharedCollection = skills)); - - this.teamService -- .query() -+ // ### Modification-Start ### -+ .query({ page: 0, size: TEAMS_PER_PAGE }) -+ // ### Modification-End ### - .pipe(map((res: HttpResponse) => res.body ?? [])) - .pipe(map((teams: ITeam[]) => this.teamService.addTeamToCollectionIfMissing(teams, this.teamSkill?.team))) - .subscribe((teams: ITeam[]) => (this.teamsSharedCollection = teams)); -diff --git a/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.html b/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.html -index 3905671f..9aa28ce1 100644 ---- a/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.spec.ts -index 508b3dc8..af17b05d 100644 ---- a/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('Team Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [TeamDeleteDialogComponent], -+ imports: [HttpClientTestingModule, TeamDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(TeamDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('Team Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.ts b/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.ts -index 9d5616ff..654e6e44 100644 ---- a/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/team/delete/team-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { ITeam } from '../team.model'; - import { TeamService } from '../service/team.service'; - - @Component({ -+ standalone: true, - templateUrl: './team-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class TeamDeleteDialogComponent { - team?: ITeam; - -- constructor(protected teamService: TeamService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected teamService: TeamService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class TeamDeleteDialogComponent { - - confirmDelete(id: number): void { - this.teamService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/team/detail/team-detail.component.html b/src/main/webapp/app/entities/team/detail/team-detail.component.html -index 34951b24..37af7edf 100644 ---- a/src/main/webapp/app/entities/team/detail/team-detail.component.html -+++ b/src/main/webapp/app/entities/team/detail/team-detail.component.html -@@ -49,20 +49,20 @@ -
Image
-
- -
-
Participations
-
- -- {{ participations.titleEN }}{{ participations.titleEN }}{{ last ? '' : ', ' }} - -
-
Group
-
- -
- -diff --git a/src/main/webapp/app/entities/team/detail/team-detail.component.spec.ts b/src/main/webapp/app/entities/team/detail/team-detail.component.spec.ts -index 0b609fbe..b7b93b0a 100644 ---- a/src/main/webapp/app/entities/team/detail/team-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/team/detail/team-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { TeamDetailComponent } from './team-detail.component'; - - describe('Team Management Detail Component', () => { -- let comp: TeamDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [TeamDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [TeamDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ team: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: TeamDetailComponent, -+ resolve: { team: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(TeamDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(TeamDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load team on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load team on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', TeamDetailComponent); - - // THEN -- expect(comp.team).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.team).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/team/detail/team-detail.component.ts b/src/main/webapp/app/entities/team/detail/team-detail.component.ts -index df04ddd1..b0e61833 100644 ---- a/src/main/webapp/app/entities/team/detail/team-detail.component.ts -+++ b/src/main/webapp/app/entities/team/detail/team-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { ITeam } from '../team.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-team-detail', - templateUrl: './team-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class TeamDetailComponent implements OnInit { -- team: ITeam | null = null; -+export class TeamDetailComponent { -+ @Input() team: ITeam | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ team }) => { -- this.team = team; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/team/list/team.component.html b/src/main/webapp/app/entities/team/list/team.component.html -index e99fc3fe..efafe6ea 100644 ---- a/src/main/webapp/app/entities/team/list/team.component.html -+++ b/src/main/webapp/app/entities/team/list/team.component.html -@@ -3,9 +3,9 @@ - Teams - -
-- - - -
- -@@ -25,44 +25,88 @@ - - -
-- No teams found -+ No Teams found -
- --
-+
- - -- -- -- -+ -+ -+ - -+ -- - - - - - - - - - - -- -+ - - - - -
ID Title
-+
-+ ID -+ -+
-+
-+
-+ Title -+ -+
-+
-- Short Title -+
-+ Short Title -+ -+
-+
-+
-+ Slogan -+ -+
-
Slogan -- Contact -+
-+ Contact -+ -+
-
-- Expiration Date -+
-+ Expiration Date -+ -+
-
-- Official -+
-+ Official -+ -+
-
-- Created At -+
-+ Created At -+ -+
-
-- Updated At -+
-+ Updated At -+ -+
-
-- Image -+
-+ Image -+ -+
-
-- Group -+
-+ Group -+ -+
-
- {{ team.id }} -@@ -77,12 +121,12 @@ - {{ team.updatedAt | formatMediumDatetime }} - - - - -diff --git a/src/main/webapp/app/entities/team/list/team.component.spec.ts b/src/main/webapp/app/entities/team/list/team.component.spec.ts -index 0105777e..dc7555ce 100644 ---- a/src/main/webapp/app/entities/team/list/team.component.spec.ts -+++ b/src/main/webapp/app/entities/team/list/team.component.spec.ts -@@ -1,21 +1,43 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { TeamService } from '../service/team.service'; - - import { TeamComponent } from './team.component'; -+import SpyInstance = jest.SpyInstance; - - describe('Team Management Component', () => { - let comp: TeamComponent; - let fixture: ComponentFixture; - let service: TeamService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [TeamComponent], -+ imports: [RouterTestingModule.withRoutes([{ path: 'team', component: TeamComponent }]), HttpClientTestingModule, TeamComponent], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(TeamComponent, '') - .compileComponents(); -@@ -23,6 +45,7 @@ describe('Team Management Component', () => { - fixture = TestBed.createComponent(TeamComponent); - comp = fixture.componentInstance; - service = TestBed.inject(TeamService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +53,8 @@ describe('Team Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +64,25 @@ describe('Team Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.teams[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.teams?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to teamService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getTeamIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getTeamIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.teams[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +90,25 @@ describe('Team Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +117,8 @@ describe('Team Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.teams[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.teams?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/team/list/team.component.ts b/src/main/webapp/app/entities/team/list/team.component.ts -index 70d2058c..fe842308 100644 ---- a/src/main/webapp/app/entities/team/list/team.component.ts -+++ b/src/main/webapp/app/entities/team/list/team.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { ITeam } from '../team.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { TeamService } from '../service/team.service'; --import { TeamDeleteDialogComponent } from '../delete/team-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, TeamService } from '../service/team.service'; -+import { TeamDeleteDialogComponent } from '../delete/team-delete-dialog.component'; -+import { ITeam } from '../team.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-team', - templateUrl: './team.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class TeamComponent implements OnInit { -- teams: ITeam[]; -+ teams?: ITeam[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected teamService: TeamService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.teams = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.teamService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateTeams(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected teamService: TeamService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.teams = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: ITeam): number => this.teamService.getTeamIdentifier(item); - -- trackId(_index: number, item: ITeam): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(team: ITeam): void { - const modalRef = this.modalService.open(TeamDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.team = team; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.teams = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: ITeam[] | null): ITeam[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const teamsNew = this.teams ?? []; -+ if (data) { -+ for (const d of data) { -+ if (teamsNew.map(op => op.id).indexOf(d.id) === -1) { -+ teamsNew.push(d); -+ } -+ } -+ } -+ return teamsNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateTeams(data: ITeam[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,39 @@ export class TeamComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.teams.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ eagerload: true, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.teamService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/team/route/team-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/team/route/team-routing-resolve.service.spec.ts -index 986f1ee8..db2d2974 100644 ---- a/src/main/webapp/app/entities/team/route/team-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/team/route/team-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { ITeam, Team } from '../team.model'; -+import { ITeam } from '../team.model'; - import { TeamService } from '../service/team.service'; - --import { TeamRoutingResolveService } from './team-routing-resolve.service'; -+import teamResolve from './team-routing-resolve.service'; - - describe('Team routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: TeamRoutingResolveService; - let service: TeamService; -- let resultTeam: ITeam | undefined; -+ let resultTeam: ITeam | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('Team routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(TeamRoutingResolveService); - service = TestBed.inject(TeamService); - resultTeam = undefined; - }); -@@ -46,8 +44,12 @@ describe('Team routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTeam = result; -+ TestBed.runInInjectionContext(() => { -+ teamResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTeam = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('Team routing resolve service', () => { - expect(resultTeam).toEqual({ id: 123 }); - }); - -- it('should return new ITeam if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTeam = result; -+ TestBed.runInInjectionContext(() => { -+ teamResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTeam = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultTeam).toEqual(new Team()); -+ expect(resultTeam).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as Team }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTeam = result; -+ TestBed.runInInjectionContext(() => { -+ teamResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTeam = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/team/route/team-routing-resolve.service.ts b/src/main/webapp/app/entities/team/route/team-routing-resolve.service.ts -index faf190e5..f18f935e 100644 ---- a/src/main/webapp/app/entities/team/route/team-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/team/route/team-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { ITeam, Team } from '../team.model'; -+import { ITeam } from '../team.model'; - import { TeamService } from '../service/team.service'; - --@Injectable({ providedIn: 'root' }) --export class TeamRoutingResolveService implements Resolve { -- constructor(protected service: TeamService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((team: HttpResponse) => { -+export const teamResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(TeamService) -+ .find(id) -+ .pipe( -+ mergeMap((team: HttpResponse) => { - if (team.body) { - return of(team.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new Team()); - } --} -+ return of(null); -+}; -+ -+export default teamResolve; -diff --git a/src/main/webapp/app/entities/team/route/team-routing.module.ts b/src/main/webapp/app/entities/team/route/team-routing.module.ts -deleted file mode 100644 -index eadb0d20..00000000 ---- a/src/main/webapp/app/entities/team/route/team-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { TeamComponent } from '../list/team.component'; --import { TeamDetailComponent } from '../detail/team-detail.component'; --import { TeamUpdateComponent } from '../update/team-update.component'; --import { TeamRoutingResolveService } from './team-routing-resolve.service'; -- --const teamRoute: Routes = [ -- { -- path: '', -- component: TeamComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: TeamDetailComponent, -- resolve: { -- team: TeamRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: TeamUpdateComponent, -- resolve: { -- team: TeamRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: TeamUpdateComponent, -- resolve: { -- team: TeamRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(teamRoute)], -- exports: [RouterModule], --}) --export class TeamRoutingModule {} -diff --git a/src/main/webapp/app/entities/team/service/team.service.spec.ts b/src/main/webapp/app/entities/team/service/team.service.spec.ts -index 557f5326..726b8a81 100644 ---- a/src/main/webapp/app/entities/team/service/team.service.spec.ts -+++ b/src/main/webapp/app/entities/team/service/team.service.spec.ts -@@ -1,18 +1,22 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { ITeam, Team } from '../team.model'; -+import { ITeam } from '../team.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../team.test-samples'; - --import { TeamService } from './team.service'; -+import { TeamService, RestTeam } from './team.service'; -+ -+const requireRestSample: RestTeam = { -+ ...sampleWithRequiredData, -+ expirationDate: sampleWithRequiredData.expirationDate?.toJSON(), -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('Team Service', () => { - let service: TeamService; - let httpMock: HttpTestingController; -- let elemDefault: ITeam; - let expectedResult: ITeam | ITeam[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -21,60 +25,26 @@ describe('Team Service', () => { - expectedResult = null; - service = TestBed.inject(TeamService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- title: 'AAAAAAA', -- shortTitle: 'AAAAAAA', -- slogan: 'AAAAAAA', -- contact: 'AAAAAAA', -- expirationDate: currentDate, -- official: false, -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- expirationDate: currentDate.format(DATE_TIME_FORMAT), -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a Team', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- expirationDate: currentDate.format(DATE_TIME_FORMAT), -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- expirationDate: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new Team()).subscribe(resp => (expectedResult = resp.body)); -+ const team = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(team).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -82,31 +52,11 @@ describe('Team Service', () => { - }); - - it('should update a Team', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- title: 'BBBBBB', -- shortTitle: 'BBBBBB', -- slogan: 'BBBBBB', -- contact: 'BBBBBB', -- expirationDate: currentDate.format(DATE_TIME_FORMAT), -- official: true, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- expirationDate: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const team = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(team).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -114,26 +64,9 @@ describe('Team Service', () => { - }); - - it('should partial update a Team', () => { -- const patchObject = Object.assign( -- { -- contact: 'BBBBBB', -- expirationDate: currentDate.format(DATE_TIME_FORMAT), -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- new Team() -- ); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- expirationDate: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -143,84 +76,66 @@ describe('Team Service', () => { - }); - - it('should return a list of Team', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- title: 'BBBBBB', -- shortTitle: 'BBBBBB', -- slogan: 'BBBBBB', -- contact: 'BBBBBB', -- expirationDate: currentDate.format(DATE_TIME_FORMAT), -- official: true, -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- expirationDate: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a Team', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addTeamToCollectionIfMissing', () => { - it('should add a Team to an empty array', () => { -- const team: ITeam = { id: 123 }; -+ const team: ITeam = sampleWithRequiredData; - expectedResult = service.addTeamToCollectionIfMissing([], team); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(team); - }); - - it('should not add a Team to an array that contains it', () => { -- const team: ITeam = { id: 123 }; -+ const team: ITeam = sampleWithRequiredData; - const teamCollection: ITeam[] = [ - { - ...team, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addTeamToCollectionIfMissing(teamCollection, team); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a Team to an array that doesn't contain it", () => { -- const team: ITeam = { id: 123 }; -- const teamCollection: ITeam[] = [{ id: 456 }]; -+ const team: ITeam = sampleWithRequiredData; -+ const teamCollection: ITeam[] = [sampleWithPartialData]; - expectedResult = service.addTeamToCollectionIfMissing(teamCollection, team); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(team); - }); - - it('should add only unique Team to an array', () => { -- const teamArray: ITeam[] = [{ id: 123 }, { id: 456 }, { id: 26389 }]; -- const teamCollection: ITeam[] = [{ id: 123 }]; -+ const teamArray: ITeam[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const teamCollection: ITeam[] = [sampleWithRequiredData]; - expectedResult = service.addTeamToCollectionIfMissing(teamCollection, ...teamArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const team: ITeam = { id: 123 }; -- const team2: ITeam = { id: 456 }; -+ const team: ITeam = sampleWithRequiredData; -+ const team2: ITeam = sampleWithPartialData; - expectedResult = service.addTeamToCollectionIfMissing([], team, team2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(team); -@@ -228,18 +143,62 @@ describe('Team Service', () => { - }); - - it('should accept null and undefined values', () => { -- const team: ITeam = { id: 123 }; -+ const team: ITeam = sampleWithRequiredData; - expectedResult = service.addTeamToCollectionIfMissing([], null, team, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(team); - }); - - it('should return initial array if no Team is added', () => { -- const teamCollection: ITeam[] = [{ id: 123 }]; -+ const teamCollection: ITeam[] = [sampleWithRequiredData]; - expectedResult = service.addTeamToCollectionIfMissing(teamCollection, undefined, null); - expect(expectedResult).toEqual(teamCollection); - }); - }); -+ -+ describe('compareTeam', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareTeam(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareTeam(entity1, entity2); -+ const compareResult2 = service.compareTeam(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareTeam(entity1, entity2); -+ const compareResult2 = service.compareTeam(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareTeam(entity1, entity2); -+ const compareResult2 = service.compareTeam(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/team/service/team.service.ts b/src/main/webapp/app/entities/team/service/team.service.ts -index 3c8248e2..599cfaef 100644 ---- a/src/main/webapp/app/entities/team/service/team.service.ts -+++ b/src/main/webapp/app/entities/team/service/team.service.ts -@@ -1,13 +1,29 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { ITeam, getTeamIdentifier } from '../team.model'; -+import { ITeam, NewTeam } from '../team.model'; -+ -+export type PartialUpdateTeam = Partial & Pick; -+ -+type RestOf = Omit & { -+ expirationDate?: string | null; -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestTeam = RestOf; -+ -+export type NewRestTeam = RestOf; -+ -+export type PartialUpdateRestTeam = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,53 +32,65 @@ export type EntityArrayResponseType = HttpResponse; - export class TeamService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/teams'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(team: ITeam): Observable { -+ create(team: NewTeam): Observable { - const copy = this.convertDateFromClient(team); -- return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ return this.http.post(this.resourceUrl, copy, { observe: 'response' }).pipe(map(res => this.convertResponseFromServer(res))); - } - - update(team: ITeam): Observable { - const copy = this.convertDateFromClient(team); - return this.http -- .put(`${this.resourceUrl}/${getTeamIdentifier(team) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getTeamIdentifier(team)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(team: ITeam): Observable { -+ partialUpdate(team: PartialUpdateTeam): Observable { - const copy = this.convertDateFromClient(team); - return this.http -- .patch(`${this.resourceUrl}/${getTeamIdentifier(team) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getTeamIdentifier(team)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addTeamToCollectionIfMissing(teamCollection: ITeam[], ...teamsToCheck: (ITeam | null | undefined)[]): ITeam[] { -- const teams: ITeam[] = teamsToCheck.filter(isPresent); -+ getTeamIdentifier(team: Pick): number { -+ return team.id; -+ } -+ -+ compareTeam(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getTeamIdentifier(o1) === this.getTeamIdentifier(o2) : o1 === o2; -+ } -+ -+ addTeamToCollectionIfMissing>( -+ teamCollection: Type[], -+ ...teamsToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const teams: Type[] = teamsToCheck.filter(isPresent); - if (teams.length > 0) { -- const teamCollectionIdentifiers = teamCollection.map(teamItem => getTeamIdentifier(teamItem)!); -+ const teamCollectionIdentifiers = teamCollection.map(teamItem => this.getTeamIdentifier(teamItem)!); - const teamsToAdd = teams.filter(teamItem => { -- const teamIdentifier = getTeamIdentifier(teamItem); -- if (teamIdentifier == null || teamCollectionIdentifiers.includes(teamIdentifier)) { -+ const teamIdentifier = this.getTeamIdentifier(teamItem); -+ if (teamCollectionIdentifiers.includes(teamIdentifier)) { - return false; - } - teamCollectionIdentifiers.push(teamIdentifier); -@@ -73,31 +101,33 @@ export class TeamService { - return teamCollection; - } - -- protected convertDateFromClient(team: ITeam): ITeam { -- return Object.assign({}, team, { -- expirationDate: team.expirationDate?.isValid() ? team.expirationDate.toJSON() : undefined, -- createdAt: team.createdAt?.isValid() ? team.createdAt.toJSON() : undefined, -- updatedAt: team.updatedAt?.isValid() ? team.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromClient(team: T): RestOf { -+ return { -+ ...team, -+ expirationDate: team.expirationDate?.toJSON() ?? null, -+ createdAt: team.createdAt?.toJSON() ?? null, -+ updatedAt: team.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.expirationDate = res.body.expirationDate ? dayjs(res.body.expirationDate) : undefined; -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertDateFromServer(restTeam: RestTeam): ITeam { -+ return { -+ ...restTeam, -+ expirationDate: restTeam.expirationDate ? dayjs(restTeam.expirationDate) : undefined, -+ createdAt: restTeam.createdAt ? dayjs(restTeam.createdAt) : undefined, -+ updatedAt: restTeam.updatedAt ? dayjs(restTeam.updatedAt) : undefined, -+ }; - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((team: ITeam) => { -- team.expirationDate = team.expirationDate ? dayjs(team.expirationDate) : undefined; -- team.createdAt = team.createdAt ? dayjs(team.createdAt) : undefined; -- team.updatedAt = team.updatedAt ? dayjs(team.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); -+ } -+ -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/team/team.model.ts b/src/main/webapp/app/entities/team/team.model.ts -index 36aab15d..0a336a3d 100644 ---- a/src/main/webapp/app/entities/team/team.model.ts -+++ b/src/main/webapp/app/entities/team/team.model.ts -@@ -1,45 +1,21 @@ - import dayjs from 'dayjs/esm'; --import { ITeamSkill } from 'app/entities/team-skill/team-skill.model'; - import { IImage } from 'app/entities/image/image.model'; - import { IDimension } from 'app/entities/dimension/dimension.model'; - import { ITeamGroup } from 'app/entities/team-group/team-group.model'; - - export interface ITeam { -- id?: number; -- title?: string; -- shortTitle?: string; -+ id: number; -+ title?: string | null; -+ shortTitle?: string | null; - slogan?: string | null; - contact?: string | null; - expirationDate?: dayjs.Dayjs | null; -- official?: boolean; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; -- skills?: ITeamSkill[] | null; -- image?: IImage | null; -- participations?: IDimension[] | null; -- group?: ITeamGroup; -+ official?: boolean | null; -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; -+ image?: Pick | null; -+ participations?: Pick[] | null; -+ group?: Pick | null; - } - --export class Team implements ITeam { -- constructor( -- public id?: number, -- public title?: string, -- public shortTitle?: string, -- public slogan?: string | null, -- public contact?: string | null, -- public expirationDate?: dayjs.Dayjs | null, -- public official?: boolean, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs, -- public skills?: ITeamSkill[] | null, -- public image?: IImage | null, -- public participations?: IDimension[] | null, -- public group?: ITeamGroup -- ) { -- this.official = this.official ?? false; -- } --} -- --export function getTeamIdentifier(team: ITeam): number | undefined { -- return team.id; --} -+export type NewTeam = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/team/team.module.ts b/src/main/webapp/app/entities/team/team.module.ts -deleted file mode 100644 -index 4edcc258..00000000 ---- a/src/main/webapp/app/entities/team/team.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { TeamComponent } from './list/team.component'; --import { TeamDetailComponent } from './detail/team-detail.component'; --import { TeamUpdateComponent } from './update/team-update.component'; --import { TeamDeleteDialogComponent } from './delete/team-delete-dialog.component'; --import { TeamRoutingModule } from './route/team-routing.module'; -- --@NgModule({ -- imports: [SharedModule, TeamRoutingModule], -- declarations: [TeamComponent, TeamDetailComponent, TeamUpdateComponent, TeamDeleteDialogComponent], -- entryComponents: [TeamDeleteDialogComponent], --}) --export class TeamModule {} -diff --git a/src/main/webapp/app/entities/team/update/team-update.component.html b/src/main/webapp/app/entities/team/update/team-update.component.html -index bb79d53b..9c0d5a08 100644 ---- a/src/main/webapp/app/entities/team/update/team-update.component.html -+++ b/src/main/webapp/app/entities/team/update/team-update.component.html -@@ -8,38 +8,36 @@ -
- - --
-+
- - -
- --
-+
- - -
-- -- This field is required. -- -+ This field is required. - This field is required to be at least 2 characters. -- This field is required to be at least 2 characters. -- - This field cannot be longer than 50 characters. -- This field cannot be longer than 50 characters. -- -
-
- --
-+
- - This field is required. -- This field is required. -- - This field is required to be at least 2 characters. -- This field is required to be at least 2 characters. -- - This field cannot be longer than 20 characters. -- This field cannot be longer than 20 characters. -- - This field should follow pattern for Short Title. -- This field should follow pattern for "Short Title". -- -
-
- --
-+
- - -
-@@ -93,13 +87,12 @@ - *ngIf="editForm.get('slogan')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 255 }" -+ >This field cannot be longer than 255 characters. -- This field cannot be longer than 255 characters. -- -
-
- --
-+
- - -
-@@ -108,13 +101,12 @@ - *ngIf="editForm.get('contact')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 255 }" -+ >This field cannot be longer than 255 characters. -- This field cannot be longer than 255 characters. -- -
-
- --
-+
- -
- -
- --
-+
- - -
-@@ -137,13 +129,12 @@ - class="form-text text-danger" - *ngIf="editForm.get('official')?.errors?.required" - jhiTranslate="entity.validation.required" -+ >This field is required. -- This field is required. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -- - -- -+ - -
- --
-+
- - -
- --
-+
- -- -+ -+ - -
-
-- -- This field is required. -- -+ This field is required. -
-
- -diff --git a/src/main/webapp/app/entities/team/update/team-update.component.spec.ts b/src/main/webapp/app/entities/team/update/team-update.component.spec.ts -index a8ad4263..49f70d66 100644 ---- a/src/main/webapp/app/entities/team/update/team-update.component.spec.ts -+++ b/src/main/webapp/app/entities/team/update/team-update.component.spec.ts -@@ -6,14 +6,15 @@ import { ActivatedRoute } from '@angular/router'; - import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - --import { TeamService } from '../service/team.service'; --import { ITeam, Team } from '../team.model'; - import { IImage } from 'app/entities/image/image.model'; - import { ImageService } from 'app/entities/image/service/image.service'; - import { IDimension } from 'app/entities/dimension/dimension.model'; - import { DimensionService } from 'app/entities/dimension/service/dimension.service'; - import { ITeamGroup } from 'app/entities/team-group/team-group.model'; - import { TeamGroupService } from 'app/entities/team-group/service/team-group.service'; -+import { ITeam } from '../team.model'; -+import { TeamService } from '../service/team.service'; -+import { TeamFormService } from './team-form.service'; - - import { TeamUpdateComponent } from './team-update.component'; - -@@ -21,6 +22,7 @@ describe('Team Management Update Component', () => { - let comp: TeamUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let teamFormService: TeamFormService; - let teamService: TeamService; - let imageService: ImageService; - let dimensionService: DimensionService; -@@ -28,8 +30,7 @@ describe('Team Management Update Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [TeamUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), TeamUpdateComponent], - providers: [ - FormBuilder, - { -@@ -45,6 +46,7 @@ describe('Team Management Update Component', () => { - - fixture = TestBed.createComponent(TeamUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ teamFormService = TestBed.inject(TeamFormService); - teamService = TestBed.inject(TeamService); - imageService = TestBed.inject(ImageService); - dimensionService = TestBed.inject(DimensionService); -@@ -56,10 +58,10 @@ describe('Team Management Update Component', () => { - describe('ngOnInit', () => { - it('Should call Image query and add missing value', () => { - const team: ITeam = { id: 456 }; -- const image: IImage = { id: 46064 }; -+ const image: IImage = { id: 10472 }; - team.image = image; - -- const imageCollection: IImage[] = [{ id: 62542 }]; -+ const imageCollection: IImage[] = [{ id: 2947 }]; - jest.spyOn(imageService, 'query').mockReturnValue(of(new HttpResponse({ body: imageCollection }))); - const additionalImages = [image]; - const expectedCollection: IImage[] = [...additionalImages, ...imageCollection]; -@@ -69,16 +71,19 @@ describe('Team Management Update Component', () => { - comp.ngOnInit(); - - expect(imageService.query).toHaveBeenCalled(); -- expect(imageService.addImageToCollectionIfMissing).toHaveBeenCalledWith(imageCollection, ...additionalImages); -+ expect(imageService.addImageToCollectionIfMissing).toHaveBeenCalledWith( -+ imageCollection, -+ ...additionalImages.map(expect.objectContaining), -+ ); - expect(comp.imagesSharedCollection).toEqual(expectedCollection); - }); - - it('Should call Dimension query and add missing value', () => { - const team: ITeam = { id: 456 }; -- const participations: IDimension[] = [{ id: 86130 }]; -+ const participations: IDimension[] = [{ id: 1866 }]; - team.participations = participations; - -- const dimensionCollection: IDimension[] = [{ id: 44513 }]; -+ const dimensionCollection: IDimension[] = [{ id: 20587 }]; - jest.spyOn(dimensionService, 'query').mockReturnValue(of(new HttpResponse({ body: dimensionCollection }))); - const additionalDimensions = [...participations]; - const expectedCollection: IDimension[] = [...additionalDimensions, ...dimensionCollection]; -@@ -88,16 +93,19 @@ describe('Team Management Update Component', () => { - comp.ngOnInit(); - - expect(dimensionService.query).toHaveBeenCalled(); -- expect(dimensionService.addDimensionToCollectionIfMissing).toHaveBeenCalledWith(dimensionCollection, ...additionalDimensions); -+ expect(dimensionService.addDimensionToCollectionIfMissing).toHaveBeenCalledWith( -+ dimensionCollection, -+ ...additionalDimensions.map(expect.objectContaining), -+ ); - expect(comp.dimensionsSharedCollection).toEqual(expectedCollection); - }); - - it('Should call TeamGroup query and add missing value', () => { - const team: ITeam = { id: 456 }; -- const group: ITeamGroup = { id: 28678 }; -+ const group: ITeamGroup = { id: 9526 }; - team.group = group; - -- const teamGroupCollection: ITeamGroup[] = [{ id: 88164 }]; -+ const teamGroupCollection: ITeamGroup[] = [{ id: 20370 }]; - jest.spyOn(teamGroupService, 'query').mockReturnValue(of(new HttpResponse({ body: teamGroupCollection }))); - const additionalTeamGroups = [group]; - const expectedCollection: ITeamGroup[] = [...additionalTeamGroups, ...teamGroupCollection]; -@@ -107,34 +115,38 @@ describe('Team Management Update Component', () => { - comp.ngOnInit(); - - expect(teamGroupService.query).toHaveBeenCalled(); -- expect(teamGroupService.addTeamGroupToCollectionIfMissing).toHaveBeenCalledWith(teamGroupCollection, ...additionalTeamGroups); -+ expect(teamGroupService.addTeamGroupToCollectionIfMissing).toHaveBeenCalledWith( -+ teamGroupCollection, -+ ...additionalTeamGroups.map(expect.objectContaining), -+ ); - expect(comp.teamGroupsSharedCollection).toEqual(expectedCollection); - }); - - it('Should update editForm', () => { - const team: ITeam = { id: 456 }; -- const image: IImage = { id: 47305 }; -+ const image: IImage = { id: 8757 }; - team.image = image; -- const participations: IDimension = { id: 6791 }; -+ const participations: IDimension = { id: 31929 }; - team.participations = [participations]; -- const group: ITeamGroup = { id: 60807 }; -+ const group: ITeamGroup = { id: 19697 }; - team.group = group; - - activatedRoute.data = of({ team }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(team)); - expect(comp.imagesSharedCollection).toContain(image); - expect(comp.dimensionsSharedCollection).toContain(participations); - expect(comp.teamGroupsSharedCollection).toContain(group); -+ expect(comp.team).toEqual(team); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const team = { id: 123 }; -+ jest.spyOn(teamFormService, 'getTeam').mockReturnValue(team); - jest.spyOn(teamService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ team }); -@@ -147,18 +159,20 @@ describe('Team Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(teamFormService.getTeam).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(teamService.update).toHaveBeenCalledWith(team); -+ expect(teamService.update).toHaveBeenCalledWith(expect.objectContaining(team)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const team = new Team(); -+ const saveSubject = new Subject>(); -+ const team = { id: 123 }; -+ jest.spyOn(teamFormService, 'getTeam').mockReturnValue({ id: null }); - jest.spyOn(teamService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ team }); -+ activatedRoute.data = of({ team: null }); - comp.ngOnInit(); - - // WHEN -@@ -168,14 +182,15 @@ describe('Team Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(teamService.create).toHaveBeenCalledWith(team); -+ expect(teamFormService.getTeam).toHaveBeenCalled(); -+ expect(teamService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const team = { id: 123 }; - jest.spyOn(teamService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -188,62 +203,40 @@ describe('Team Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(teamService.update).toHaveBeenCalledWith(team); -+ expect(teamService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); - }); - -- describe('Tracking relationships identifiers', () => { -- describe('trackImageById', () => { -- it('Should return tracked Image primary key', () => { -+ describe('Compare relationships', () => { -+ describe('compareImage', () => { -+ it('Should forward to imageService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackImageById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(imageService, 'compareImage'); -+ comp.compareImage(entity, entity2); -+ expect(imageService.compareImage).toHaveBeenCalledWith(entity, entity2); - }); - }); - -- describe('trackDimensionById', () => { -- it('Should return tracked Dimension primary key', () => { -+ describe('compareDimension', () => { -+ it('Should forward to dimensionService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackDimensionById(0, entity); -- expect(trackResult).toEqual(entity.id); -+ const entity2 = { id: 456 }; -+ jest.spyOn(dimensionService, 'compareDimension'); -+ comp.compareDimension(entity, entity2); -+ expect(dimensionService.compareDimension).toHaveBeenCalledWith(entity, entity2); - }); - }); - -- describe('trackTeamGroupById', () => { -- it('Should return tracked TeamGroup primary key', () => { -+ describe('compareTeamGroup', () => { -+ it('Should forward to teamGroupService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackTeamGroupById(0, entity); -- expect(trackResult).toEqual(entity.id); -- }); -- }); -- }); -- -- describe('Getting selected relationships', () => { -- describe('getSelectedDimension', () => { -- it('Should return option if no Dimension is selected', () => { -- const option = { id: 123 }; -- const result = comp.getSelectedDimension(option); -- expect(result === option).toEqual(true); -- }); -- -- it('Should return selected Dimension for according option', () => { -- const option = { id: 123 }; -- const selected = { id: 123 }; -- const selected2 = { id: 456 }; -- const result = comp.getSelectedDimension(option, [selected2, selected]); -- expect(result === selected).toEqual(true); -- expect(result === selected2).toEqual(false); -- expect(result === option).toEqual(false); -- }); -- -- it('Should return option if this Dimension is not selected', () => { -- const option = { id: 123 }; -- const selected = { id: 456 }; -- const result = comp.getSelectedDimension(option, [selected]); -- expect(result === option).toEqual(true); -- expect(result === selected).toEqual(false); -+ const entity2 = { id: 456 }; -+ jest.spyOn(teamGroupService, 'compareTeamGroup'); -+ comp.compareTeamGroup(entity, entity2); -+ expect(teamGroupService.compareTeamGroup).toHaveBeenCalledWith(entity, entity2); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/team/update/team-update.component.ts b/src/main/webapp/app/entities/team/update/team-update.component.ts -index fc06463c..1edadacb 100644 ---- a/src/main/webapp/app/entities/team/update/team-update.component.ts -+++ b/src/main/webapp/app/entities/team/update/team-update.component.ts -@@ -1,71 +1,63 @@ - import { Component, OnInit } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { FormBuilder, Validators } from '@angular/forms'; - import { ActivatedRoute } from '@angular/router'; - import { Observable } from 'rxjs'; - import { finalize, map } from 'rxjs/operators'; - --import dayjs from 'dayjs/esm'; --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; -+import SharedModule from 'app/shared/shared.module'; -+import { FormsModule, ReactiveFormsModule } from '@angular/forms'; - --import { ITeam, Team } from '../team.model'; --import { TeamService } from '../service/team.service'; - import { IImage } from 'app/entities/image/image.model'; - import { ImageService } from 'app/entities/image/service/image.service'; - import { IDimension } from 'app/entities/dimension/dimension.model'; - import { DimensionService } from 'app/entities/dimension/service/dimension.service'; - import { ITeamGroup } from 'app/entities/team-group/team-group.model'; - import { TeamGroupService } from 'app/entities/team-group/service/team-group.service'; -+import { TeamService } from '../service/team.service'; -+import { ITeam } from '../team.model'; -+import { TeamFormService, TeamFormGroup } from './team-form.service'; - // ### Modification-Start ### - import { DIMENSIONS_PER_PAGE, IMAGES_PER_PAGE, TEAM_GROUPS_PER_PAGE } from '../../../config/pagination.constants'; - // ### Modification-End ### - - @Component({ -+ standalone: true, - selector: 'jhi-team-update', - templateUrl: './team-update.component.html', -+ imports: [SharedModule, FormsModule, ReactiveFormsModule], - }) - export class TeamUpdateComponent implements OnInit { - isSaving = false; -+ team: ITeam | null = null; - - imagesSharedCollection: IImage[] = []; - dimensionsSharedCollection: IDimension[] = []; - teamGroupsSharedCollection: ITeamGroup[] = []; - -- editForm = this.fb.group({ -- id: [], -- title: [null, [Validators.required, Validators.minLength(2), Validators.maxLength(50)]], -- shortTitle: [null, [Validators.required, Validators.minLength(2), Validators.maxLength(20), Validators.pattern('^[a-zA-Z0-9_-]*$')]], -- slogan: [null, [Validators.maxLength(255)]], -- contact: [null, [Validators.maxLength(255)]], -- expirationDate: [], -- official: [null, [Validators.required]], -- createdAt: [null, [Validators.required]], -- updatedAt: [null, [Validators.required]], -- image: [], -- participations: [], -- group: [null, Validators.required], -- }); -+ editForm: TeamFormGroup = this.teamFormService.createTeamFormGroup(); - - constructor( - protected teamService: TeamService, -+ protected teamFormService: TeamFormService, - protected imageService: ImageService, - protected dimensionService: DimensionService, - protected teamGroupService: TeamGroupService, - protected activatedRoute: ActivatedRoute, -- protected fb: FormBuilder - ) {} - -+ compareImage = (o1: IImage | null, o2: IImage | null): boolean => this.imageService.compareImage(o1, o2); -+ -+ compareDimension = (o1: IDimension | null, o2: IDimension | null): boolean => this.dimensionService.compareDimension(o1, o2); -+ -+ compareTeamGroup = (o1: ITeamGroup | null, o2: ITeamGroup | null): boolean => this.teamGroupService.compareTeamGroup(o1, o2); -+ - ngOnInit(): void { - this.activatedRoute.data.subscribe(({ team }) => { -- if (team.id === undefined) { -- const today = dayjs().startOf('day'); -- team.expirationDate = today; -- team.createdAt = today; -- team.updatedAt = today; -+ this.team = team; -+ if (team) { -+ this.updateForm(team); - } - -- this.updateForm(team); -- - this.loadRelationshipsOptions(); - }); - } -@@ -76,37 +68,14 @@ export class TeamUpdateComponent implements OnInit { - - save(): void { - this.isSaving = true; -- const team = this.createFromForm(); -- if (team.id !== undefined) { -+ const team = this.teamFormService.getTeam(this.editForm); -+ if (team.id !== null) { - this.subscribeToSaveResponse(this.teamService.update(team)); - } else { - this.subscribeToSaveResponse(this.teamService.create(team)); - } - } - -- trackImageById(_index: number, item: IImage): number { -- return item.id!; -- } -- -- trackDimensionById(_index: number, item: IDimension): number { -- return item.id!; -- } -- -- trackTeamGroupById(_index: number, item: ITeamGroup): number { -- return item.id!; -- } -- -- getSelectedDimension(option: IDimension, selectedVals?: IDimension[]): IDimension { -- if (selectedVals) { -- for (const selectedVal of selectedVals) { -- if (option.id === selectedVal.id) { -- return selectedVal; -- } -- } -- } -- return option; -- } -- - protected subscribeToSaveResponse(result: Observable>): void { - result.pipe(finalize(() => this.onSaveFinalize())).subscribe({ - next: () => this.onSaveSuccess(), -@@ -127,27 +96,18 @@ export class TeamUpdateComponent implements OnInit { - } - - protected updateForm(team: ITeam): void { -- this.editForm.patchValue({ -- id: team.id, -- title: team.title, -- shortTitle: team.shortTitle, -- slogan: team.slogan, -- contact: team.contact, -- expirationDate: team.expirationDate ? team.expirationDate.format(DATE_TIME_FORMAT) : null, -- official: team.official, -- createdAt: team.createdAt ? team.createdAt.format(DATE_TIME_FORMAT) : null, -- updatedAt: team.updatedAt ? team.updatedAt.format(DATE_TIME_FORMAT) : null, -- image: team.image, -- participations: team.participations, -- group: team.group, -- }); -+ this.team = team; -+ this.teamFormService.resetForm(this.editForm, team); - -- this.imagesSharedCollection = this.imageService.addImageToCollectionIfMissing(this.imagesSharedCollection, team.image); -- this.dimensionsSharedCollection = this.dimensionService.addDimensionToCollectionIfMissing( -+ this.imagesSharedCollection = this.imageService.addImageToCollectionIfMissing(this.imagesSharedCollection, team.image); -+ this.dimensionsSharedCollection = this.dimensionService.addDimensionToCollectionIfMissing( - this.dimensionsSharedCollection, -- ...(team.participations ?? []) -+ ...(team.participations ?? []), -+ ); -+ this.teamGroupsSharedCollection = this.teamGroupService.addTeamGroupToCollectionIfMissing( -+ this.teamGroupsSharedCollection, -+ team.group, - ); -- this.teamGroupsSharedCollection = this.teamGroupService.addTeamGroupToCollectionIfMissing(this.teamGroupsSharedCollection, team.group); - } - - protected loadRelationshipsOptions(): void { -@@ -156,7 +116,7 @@ export class TeamUpdateComponent implements OnInit { - .query({ page: 0, size: IMAGES_PER_PAGE }) - // ### Modification-End### - .pipe(map((res: HttpResponse) => res.body ?? [])) -- .pipe(map((images: IImage[]) => this.imageService.addImageToCollectionIfMissing(images, this.editForm.get('image')!.value))) -+ .pipe(map((images: IImage[]) => this.imageService.addImageToCollectionIfMissing(images, this.team?.image))) - .subscribe((images: IImage[]) => (this.imagesSharedCollection = images)); - - this.dimensionService -@@ -166,8 +126,8 @@ export class TeamUpdateComponent implements OnInit { - .pipe(map((res: HttpResponse) => res.body ?? [])) - .pipe( - map((dimensions: IDimension[]) => -- this.dimensionService.addDimensionToCollectionIfMissing(dimensions, ...(this.editForm.get('participations')!.value ?? [])) -- ) -+ this.dimensionService.addDimensionToCollectionIfMissing(dimensions, ...(this.team?.participations ?? [])), -+ ), - ) - .subscribe((dimensions: IDimension[]) => (this.dimensionsSharedCollection = dimensions)); - -@@ -178,29 +138,9 @@ export class TeamUpdateComponent implements OnInit { - .pipe(map((res: HttpResponse) => res.body ?? [])) - .pipe( - map((teamGroups: ITeamGroup[]) => -- this.teamGroupService.addTeamGroupToCollectionIfMissing(teamGroups, this.editForm.get('group')!.value) -- ) -+ this.teamGroupService.addTeamGroupToCollectionIfMissing(teamGroups, this.team?.group), -+ ), - ) - .subscribe((teamGroups: ITeamGroup[]) => (this.teamGroupsSharedCollection = teamGroups)); - } -- -- protected createFromForm(): ITeam { -- return { -- ...new Team(), -- id: this.editForm.get(['id'])!.value, -- title: this.editForm.get(['title'])!.value, -- shortTitle: this.editForm.get(['shortTitle'])!.value, -- slogan: this.editForm.get(['slogan'])!.value, -- contact: this.editForm.get(['contact'])!.value, -- expirationDate: this.editForm.get(['expirationDate'])!.value -- ? dayjs(this.editForm.get(['expirationDate'])!.value, DATE_TIME_FORMAT) -- : undefined, -- official: this.editForm.get(['official'])!.value, -- createdAt: this.editForm.get(['createdAt'])!.value ? dayjs(this.editForm.get(['createdAt'])!.value, DATE_TIME_FORMAT) : undefined, -- updatedAt: this.editForm.get(['updatedAt'])!.value ? dayjs(this.editForm.get(['updatedAt'])!.value, DATE_TIME_FORMAT) : undefined, -- image: this.editForm.get(['image'])!.value, -- participations: this.editForm.get(['participations'])!.value, -- group: this.editForm.get(['group'])!.value, -- }; -- } - } -diff --git a/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.html b/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.html -index b699dd21..f8f59faa 100644 ---- a/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.html -+++ b/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.html -@@ -7,9 +7,8 @@ - - - -diff --git a/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.spec.ts b/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.spec.ts -index c304f3fc..4c265aa8 100644 ---- a/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.spec.ts -+++ b/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.spec.ts -@@ -18,8 +18,7 @@ describe('Training Management Delete Component', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [TrainingDeleteDialogComponent], -+ imports: [HttpClientTestingModule, TrainingDeleteDialogComponent], - providers: [NgbActiveModal], - }) - .overrideTemplate(TrainingDeleteDialogComponent, '') -@@ -44,7 +43,7 @@ describe('Training Management Delete Component', () => { - // THEN - expect(service.delete).toHaveBeenCalledWith(123); - expect(mockActiveModal.close).toHaveBeenCalledWith('deleted'); -- }) -+ }), - )); - - it('Should not call delete service on clear', () => { -diff --git a/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.ts b/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.ts -index 9350f0fd..f5194946 100644 ---- a/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.ts -+++ b/src/main/webapp/app/entities/training/delete/training-delete-dialog.component.ts -@@ -1,16 +1,24 @@ - import { Component } from '@angular/core'; -+import { FormsModule } from '@angular/forms'; - import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; - -+import SharedModule from 'app/shared/shared.module'; -+import { ITEM_DELETED_EVENT } from 'app/config/navigation.constants'; - import { ITraining } from '../training.model'; - import { TrainingService } from '../service/training.service'; - - @Component({ -+ standalone: true, - templateUrl: './training-delete-dialog.component.html', -+ imports: [SharedModule, FormsModule], - }) - export class TrainingDeleteDialogComponent { - training?: ITraining; - -- constructor(protected trainingService: TrainingService, protected activeModal: NgbActiveModal) {} -+ constructor( -+ protected trainingService: TrainingService, -+ protected activeModal: NgbActiveModal, -+ ) {} - - cancel(): void { - this.activeModal.dismiss(); -@@ -18,7 +26,7 @@ export class TrainingDeleteDialogComponent { - - confirmDelete(id: number): void { - this.trainingService.delete(id).subscribe(() => { -- this.activeModal.close('deleted'); -+ this.activeModal.close(ITEM_DELETED_EVENT); - }); - } - } -diff --git a/src/main/webapp/app/entities/training/detail/training-detail.component.html b/src/main/webapp/app/entities/training/detail/training-detail.component.html -index f6c44ac4..508f1aa0 100644 ---- a/src/main/webapp/app/entities/training/detail/training-detail.component.html -+++ b/src/main/webapp/app/entities/training/detail/training-detail.component.html -@@ -61,7 +61,7 @@ -
Skill
-
- -- {{ skill.titleEN }}{{ skill.titleEN }}{{ last ? '' : ', ' }} - -
-diff --git a/src/main/webapp/app/entities/training/detail/training-detail.component.spec.ts b/src/main/webapp/app/entities/training/detail/training-detail.component.spec.ts -index aab539f5..ece484f8 100644 ---- a/src/main/webapp/app/entities/training/detail/training-detail.component.spec.ts -+++ b/src/main/webapp/app/entities/training/detail/training-detail.component.spec.ts -@@ -1,36 +1,38 @@ --import { ComponentFixture, TestBed } from '@angular/core/testing'; --import { ActivatedRoute } from '@angular/router'; -+import { TestBed } from '@angular/core/testing'; -+import { provideRouter, withComponentInputBinding } from '@angular/router'; -+import { RouterTestingHarness, RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { TrainingDetailComponent } from './training-detail.component'; - - describe('Training Management Detail Component', () => { -- let comp: TrainingDetailComponent; -- let fixture: ComponentFixture; -- -- beforeEach(() => { -- TestBed.configureTestingModule({ -- declarations: [TrainingDetailComponent], -+ beforeEach(async () => { -+ await TestBed.configureTestingModule({ -+ imports: [TrainingDetailComponent, RouterTestingModule.withRoutes([], { bindToComponentInputs: true })], - providers: [ -- { -- provide: ActivatedRoute, -- useValue: { data: of({ training: { id: 123 } }) }, -- }, -+ provideRouter( -+ [ -+ { -+ path: '**', -+ component: TrainingDetailComponent, -+ resolve: { training: () => of({ id: 123 }) }, -+ }, -+ ], -+ withComponentInputBinding(), -+ ), - ], - }) - .overrideTemplate(TrainingDetailComponent, '') - .compileComponents(); -- fixture = TestBed.createComponent(TrainingDetailComponent); -- comp = fixture.componentInstance; - }); - - describe('OnInit', () => { -- it('Should load training on init', () => { -- // WHEN -- comp.ngOnInit(); -+ it('Should load training on init', async () => { -+ const harness = await RouterTestingHarness.create(); -+ const instance = await harness.navigateByUrl('/', TrainingDetailComponent); - - // THEN -- expect(comp.training).toEqual(expect.objectContaining({ id: 123 })); -+ expect(instance.training).toEqual(expect.objectContaining({ id: 123 })); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/training/detail/training-detail.component.ts b/src/main/webapp/app/entities/training/detail/training-detail.component.ts -index ff356a3b..bc50608b 100644 ---- a/src/main/webapp/app/entities/training/detail/training-detail.component.ts -+++ b/src/main/webapp/app/entities/training/detail/training-detail.component.ts -@@ -1,23 +1,21 @@ --import { Component, OnInit } from '@angular/core'; --import { ActivatedRoute } from '@angular/router'; -+import { Component, Input } from '@angular/core'; -+import { ActivatedRoute, RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; - import { ITraining } from '../training.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-training-detail', - templateUrl: './training-detail.component.html', -+ imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], - }) --export class TrainingDetailComponent implements OnInit { -- training: ITraining | null = null; -+export class TrainingDetailComponent { -+ @Input() training: ITraining | null = null; - - constructor(protected activatedRoute: ActivatedRoute) {} - -- ngOnInit(): void { -- this.activatedRoute.data.subscribe(({ training }) => { -- this.training = training; -- }); -- } -- - previousState(): void { - window.history.back(); - } -diff --git a/src/main/webapp/app/entities/training/list/training.component.html b/src/main/webapp/app/entities/training/list/training.component.html -index 165b33d5..d864c511 100644 ---- a/src/main/webapp/app/entities/training/list/training.component.html -+++ b/src/main/webapp/app/entities/training/list/training.component.html -@@ -3,9 +3,9 @@ - Trainings - -
-- - - -
- -@@ -25,49 +25,94 @@ - - -
-- No trainings found -+ No Trainings found -
- --
-+
- - -- -- -+ -+ - - - - - -+ -- - - - - - - - - -- -+ - -
ID
-+
-+ ID -+ -+
-+
-- Title EN -+
-+ Title EN -+ -+
-
-- Title DE -+
-+ Title DE -+ -+
-
-- Description EN -+
-+ Description EN -+ -+
-
-- Description DE -+
-+ Description DE -+ -+
-
-- Contact -+
-+ Contact -+ -+
-+
-+
-+ Link -+ -+
-
Link -- Valid Until -+
-+ Valid Until -+ -+
-
-- Is Official -+
-+ Is Official -+ -+
-
-- Suggested By -+
-+ Suggested By -+ -+
-
-- Created At -+
-+ Created At -+ -+
-
-- Updated At -+
-+ Updated At -+ -+
-
- {{ training.id }} -diff --git a/src/main/webapp/app/entities/training/list/training.component.spec.ts b/src/main/webapp/app/entities/training/list/training.component.spec.ts -index 34cd99ff..89bc9cd4 100644 ---- a/src/main/webapp/app/entities/training/list/training.component.spec.ts -+++ b/src/main/webapp/app/entities/training/list/training.component.spec.ts -@@ -1,21 +1,47 @@ - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { HttpHeaders, HttpResponse } from '@angular/common/http'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; -+import { ActivatedRoute } from '@angular/router'; -+import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - - import { TrainingService } from '../service/training.service'; - - import { TrainingComponent } from './training.component'; -+import SpyInstance = jest.SpyInstance; - - describe('Training Management Component', () => { - let comp: TrainingComponent; - let fixture: ComponentFixture; - let service: TrainingService; -+ let routerNavigateSpy: SpyInstance>; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [TrainingComponent], -+ imports: [ -+ RouterTestingModule.withRoutes([{ path: 'training', component: TrainingComponent }]), -+ HttpClientTestingModule, -+ TrainingComponent, -+ ], -+ providers: [ -+ { -+ provide: ActivatedRoute, -+ useValue: { -+ data: of({ -+ defaultSort: 'id,asc', -+ }), -+ queryParamMap: of( -+ jest.requireActual('@angular/router').convertToParamMap({ -+ page: '1', -+ size: '1', -+ sort: 'id,desc', -+ 'filter[someId.in]': 'dc4279ea-cfb9-11ec-9d64-0242ac120002', -+ }), -+ ), -+ snapshot: { queryParams: {} }, -+ }, -+ }, -+ ], - }) - .overrideTemplate(TrainingComponent, '') - .compileComponents(); -@@ -23,6 +49,7 @@ describe('Training Management Component', () => { - fixture = TestBed.createComponent(TrainingComponent); - comp = fixture.componentInstance; - service = TestBed.inject(TrainingService); -+ routerNavigateSpy = jest.spyOn(comp.router, 'navigate'); - - const headers = new HttpHeaders(); - jest.spyOn(service, 'query').mockReturnValue( -@@ -30,8 +57,8 @@ describe('Training Management Component', () => { - new HttpResponse({ - body: [{ id: 123 }], - headers, -- }) -- ) -+ }), -+ ), - ); - }); - -@@ -41,16 +68,25 @@ describe('Training Management Component', () => { - - // THEN - expect(service.query).toHaveBeenCalled(); -- expect(comp.trainings[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.trainings?.[0]).toEqual(expect.objectContaining({ id: 123 })); -+ }); -+ -+ describe('trackId', () => { -+ it('Should forward to trainingService', () => { -+ const entity = { id: 123 }; -+ jest.spyOn(service, 'getTrainingIdentifier'); -+ const id = comp.trackId(0, entity); -+ expect(service.getTrainingIdentifier).toHaveBeenCalledWith(entity); -+ expect(id).toBe(entity.id); -+ }); - }); - - it('should load a page', () => { - // WHEN -- comp.loadPage(1); -+ comp.navigateToPage(1); - - // THEN -- expect(service.query).toHaveBeenCalled(); -- expect(comp.trainings[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(routerNavigateSpy).toHaveBeenCalled(); - }); - - it('should calculate the sort attribute for an id', () => { -@@ -58,21 +94,25 @@ describe('Training Management Component', () => { - comp.ngOnInit(); - - // THEN -- expect(service.query).toHaveBeenCalledWith(expect.objectContaining({ sort: ['id,asc'] })); -+ expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['id,desc'] })); - }); - - it('should calculate the sort attribute for a non-id attribute', () => { -- // INIT -- comp.ngOnInit(); -- - // GIVEN - comp.predicate = 'name'; - - // WHEN -- comp.loadPage(1); -+ comp.navigateToWithComponentValues(); - - // THEN -- expect(service.query).toHaveBeenLastCalledWith(expect.objectContaining({ sort: ['name,asc', 'id'] })); -+ expect(routerNavigateSpy).toHaveBeenLastCalledWith( -+ expect.anything(), -+ expect.objectContaining({ -+ queryParams: expect.objectContaining({ -+ sort: ['name,asc'], -+ }), -+ }), -+ ); - }); - - it('should re-initialize the page', () => { -@@ -81,8 +121,8 @@ describe('Training Management Component', () => { - comp.reset(); - - // THEN -- expect(comp.page).toEqual(0); -+ expect(comp.page).toEqual(1); - expect(service.query).toHaveBeenCalledTimes(2); -- expect(comp.trainings[0]).toEqual(expect.objectContaining({ id: 123 })); -+ expect(comp.trainings?.[0]).toEqual(expect.objectContaining({ id: 123 })); - }); - }); -diff --git a/src/main/webapp/app/entities/training/list/training.component.ts b/src/main/webapp/app/entities/training/list/training.component.ts -index 6bf43e1a..762f1b89 100644 ---- a/src/main/webapp/app/entities/training/list/training.component.ts -+++ b/src/main/webapp/app/entities/training/list/training.component.ts -@@ -1,97 +1,144 @@ - import { Component, OnInit } from '@angular/core'; --import { HttpHeaders, HttpResponse } from '@angular/common/http'; -+import { HttpHeaders } from '@angular/common/http'; -+import { ActivatedRoute, Data, ParamMap, Router, RouterModule } from '@angular/router'; -+import { combineLatest, filter, Observable, switchMap, tap } from 'rxjs'; - import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; - --import { ITraining } from '../training.model'; -+import SharedModule from 'app/shared/shared.module'; -+import { SortDirective, SortByDirective } from 'app/shared/sort'; -+import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; -+import { FormsModule } from '@angular/forms'; - --import { ASC, DESC, ITEMS_PER_PAGE } from 'app/config/pagination.constants'; --import { TrainingService } from '../service/training.service'; --import { TrainingDeleteDialogComponent } from '../delete/training-delete-dialog.component'; -+import { ITEMS_PER_PAGE } from 'app/config/pagination.constants'; -+import { ASC, DESC, SORT, ITEM_DELETED_EVENT, DEFAULT_SORT_DATA } from 'app/config/navigation.constants'; - import { ParseLinks } from 'app/core/util/parse-links.service'; -+import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -+import { EntityArrayResponseType, TrainingService } from '../service/training.service'; -+import { TrainingDeleteDialogComponent } from '../delete/training-delete-dialog.component'; -+import { ITraining } from '../training.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-training', - templateUrl: './training.component.html', -+ imports: [ -+ RouterModule, -+ FormsModule, -+ SharedModule, -+ SortDirective, -+ SortByDirective, -+ DurationPipe, -+ FormatMediumDatetimePipe, -+ FormatMediumDatePipe, -+ InfiniteScrollModule, -+ ], - }) - export class TrainingComponent implements OnInit { -- trainings: ITraining[]; -+ trainings?: ITraining[]; - isLoading = false; -- itemsPerPage: number; -- links: { [key: string]: number }; -- page: number; -- predicate: string; -- ascending: boolean; - -- constructor(protected trainingService: TrainingService, protected modalService: NgbModal, protected parseLinks: ParseLinks) { -- this.trainings = []; -- this.itemsPerPage = ITEMS_PER_PAGE; -- this.page = 0; -- this.links = { -- last: 0, -- }; -- this.predicate = 'id'; -- this.ascending = true; -- } -+ predicate = 'id'; -+ ascending = true; - -- loadAll(): void { -- this.isLoading = true; -+ itemsPerPage = ITEMS_PER_PAGE; -+ links: { [key: string]: number } = { -+ last: 0, -+ }; -+ page = 1; - -- this.trainingService -- .query({ -- page: this.page, -- size: this.itemsPerPage, -- sort: this.sort(), -- }) -- .subscribe({ -- next: (res: HttpResponse) => { -- this.isLoading = false; -- this.paginateTrainings(res.body, res.headers); -- }, -- error: () => { -- this.isLoading = false; -- }, -- }); -- } -+ constructor( -+ protected trainingService: TrainingService, -+ protected activatedRoute: ActivatedRoute, -+ public router: Router, -+ protected parseLinks: ParseLinks, -+ protected modalService: NgbModal, -+ ) {} - - reset(): void { -- this.page = 0; -+ this.page = 1; - this.trainings = []; -- this.loadAll(); -+ this.load(); - } - - loadPage(page: number): void { - this.page = page; -- this.loadAll(); -+ this.load(); - } - -- ngOnInit(): void { -- this.loadAll(); -- } -+ trackId = (_index: number, item: ITraining): number => this.trainingService.getTrainingIdentifier(item); - -- trackId(_index: number, item: ITraining): number { -- return item.id!; -+ ngOnInit(): void { -+ this.load(); - } - - delete(training: ITraining): void { - const modalRef = this.modalService.open(TrainingDeleteDialogComponent, { size: 'lg', backdrop: 'static' }); - modalRef.componentInstance.training = training; - // unsubscribe not needed because closed completes on modal close -- modalRef.closed.subscribe(reason => { -- if (reason === 'deleted') { -- this.reset(); -- } -+ modalRef.closed -+ .pipe( -+ filter(reason => reason === ITEM_DELETED_EVENT), -+ switchMap(() => this.loadFromBackendWithRouteInformations()), -+ ) -+ .subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, -+ }); -+ } -+ -+ load(): void { -+ this.loadFromBackendWithRouteInformations().subscribe({ -+ next: (res: EntityArrayResponseType) => { -+ this.onResponseSuccess(res); -+ }, - }); - } - -- protected sort(): string[] { -- const result = [this.predicate + ',' + (this.ascending ? ASC : DESC)]; -- if (this.predicate !== 'id') { -- result.push('id'); -+ navigateToWithComponentValues(): void { -+ this.handleNavigation(this.page, this.predicate, this.ascending); -+ } -+ -+ navigateToPage(page = this.page): void { -+ this.handleNavigation(page, this.predicate, this.ascending); -+ } -+ -+ protected loadFromBackendWithRouteInformations(): Observable { -+ return combineLatest([this.activatedRoute.queryParamMap, this.activatedRoute.data]).pipe( -+ tap(([params, data]) => this.fillComponentAttributeFromRoute(params, data)), -+ switchMap(() => this.queryBackend(this.page, this.predicate, this.ascending)), -+ ); -+ } -+ -+ protected fillComponentAttributeFromRoute(params: ParamMap, data: Data): void { -+ const sort = (params.get(SORT) ?? data[DEFAULT_SORT_DATA]).split(','); -+ this.predicate = sort[0]; -+ this.ascending = sort[1] === ASC; -+ } -+ -+ protected onResponseSuccess(response: EntityArrayResponseType): void { -+ this.fillComponentAttributesFromResponseHeader(response.headers); -+ const dataFromBody = this.fillComponentAttributesFromResponseBody(response.body); -+ this.trainings = dataFromBody; -+ } -+ -+ protected fillComponentAttributesFromResponseBody(data: ITraining[] | null): ITraining[] { -+ // If there is previus link, data is a infinite scroll pagination content. -+ if ('prev' in this.links) { -+ const trainingsNew = this.trainings ?? []; -+ if (data) { -+ for (const d of data) { -+ if (trainingsNew.map(op => op.id).indexOf(d.id) === -1) { -+ trainingsNew.push(d); -+ } -+ } -+ } -+ return trainingsNew; - } -- return result; -+ return data ?? []; - } - -- protected paginateTrainings(data: ITraining[] | null, headers: HttpHeaders): void { -+ protected fillComponentAttributesFromResponseHeader(headers: HttpHeaders): void { - const linkHeader = headers.get('link'); - if (linkHeader) { - this.links = this.parseLinks.parse(linkHeader); -@@ -100,10 +147,39 @@ export class TrainingComponent implements OnInit { - last: 0, - }; - } -- if (data) { -- for (const d of data) { -- this.trainings.push(d); -- } -+ } -+ -+ protected queryBackend(page?: number, predicate?: string, ascending?: boolean): Observable { -+ this.isLoading = true; -+ const pageToLoad: number = page ?? 1; -+ const queryObject: any = { -+ page: pageToLoad - 1, -+ size: this.itemsPerPage, -+ eagerload: true, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ return this.trainingService.query(queryObject).pipe(tap(() => (this.isLoading = false))); -+ } -+ -+ protected handleNavigation(page = this.page, predicate?: string, ascending?: boolean): void { -+ const queryParamsObj = { -+ page, -+ size: this.itemsPerPage, -+ sort: this.getSortQueryParam(predicate, ascending), -+ }; -+ -+ this.router.navigate(['./'], { -+ relativeTo: this.activatedRoute, -+ queryParams: queryParamsObj, -+ }); -+ } -+ -+ protected getSortQueryParam(predicate = this.predicate, ascending = this.ascending): string[] { -+ const ascendingQueryParam = ascending ? ASC : DESC; -+ if (predicate === '') { -+ return []; -+ } else { -+ return [predicate + ',' + ascendingQueryParam]; - } - } - } -diff --git a/src/main/webapp/app/entities/training/route/training-routing-resolve.service.spec.ts b/src/main/webapp/app/entities/training/route/training-routing-resolve.service.spec.ts -index 553b1233..67ba07b3 100644 ---- a/src/main/webapp/app/entities/training/route/training-routing-resolve.service.spec.ts -+++ b/src/main/webapp/app/entities/training/route/training-routing-resolve.service.spec.ts -@@ -5,17 +5,16 @@ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } fro - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; - --import { ITraining, Training } from '../training.model'; -+import { ITraining } from '../training.model'; - import { TrainingService } from '../service/training.service'; - --import { TrainingRoutingResolveService } from './training-routing-resolve.service'; -+import trainingResolve from './training-routing-resolve.service'; - - describe('Training routing resolve service', () => { - let mockRouter: Router; - let mockActivatedRouteSnapshot: ActivatedRouteSnapshot; -- let routingResolveService: TrainingRoutingResolveService; - let service: TrainingService; -- let resultTraining: ITraining | undefined; -+ let resultTraining: ITraining | null | undefined; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -34,7 +33,6 @@ describe('Training routing resolve service', () => { - mockRouter = TestBed.inject(Router); - jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true)); - mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot; -- routingResolveService = TestBed.inject(TrainingRoutingResolveService); - service = TestBed.inject(TrainingService); - resultTraining = undefined; - }); -@@ -46,8 +44,12 @@ describe('Training routing resolve service', () => { - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTraining = result; -+ TestBed.runInInjectionContext(() => { -+ trainingResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTraining = result; -+ }, -+ }); - }); - - // THEN -@@ -55,29 +57,37 @@ describe('Training routing resolve service', () => { - expect(resultTraining).toEqual({ id: 123 }); - }); - -- it('should return new ITraining if id is not provided', () => { -+ it('should return null if id is not provided', () => { - // GIVEN - service.find = jest.fn(); - mockActivatedRouteSnapshot.params = {}; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTraining = result; -+ TestBed.runInInjectionContext(() => { -+ trainingResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTraining = result; -+ }, -+ }); - }); - - // THEN - expect(service.find).not.toBeCalled(); -- expect(resultTraining).toEqual(new Training()); -+ expect(resultTraining).toEqual(null); - }); - - it('should route to 404 page if data not found in server', () => { - // GIVEN -- jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null as unknown as Training }))); -+ jest.spyOn(service, 'find').mockReturnValue(of(new HttpResponse({ body: null }))); - mockActivatedRouteSnapshot.params = { id: 123 }; - - // WHEN -- routingResolveService.resolve(mockActivatedRouteSnapshot).subscribe(result => { -- resultTraining = result; -+ TestBed.runInInjectionContext(() => { -+ trainingResolve(mockActivatedRouteSnapshot).subscribe({ -+ next(result) { -+ resultTraining = result; -+ }, -+ }); - }); - - // THEN -diff --git a/src/main/webapp/app/entities/training/route/training-routing-resolve.service.ts b/src/main/webapp/app/entities/training/route/training-routing-resolve.service.ts -index bc26723a..82ed4755 100644 ---- a/src/main/webapp/app/entities/training/route/training-routing-resolve.service.ts -+++ b/src/main/webapp/app/entities/training/route/training-routing-resolve.service.ts -@@ -1,30 +1,29 @@ --import { Injectable } from '@angular/core'; -+import { inject } from '@angular/core'; - import { HttpResponse } from '@angular/common/http'; --import { Resolve, ActivatedRouteSnapshot, Router } from '@angular/router'; --import { Observable, of, EMPTY } from 'rxjs'; -+import { ActivatedRouteSnapshot, Router } from '@angular/router'; -+import { of, EMPTY, Observable } from 'rxjs'; - import { mergeMap } from 'rxjs/operators'; - --import { ITraining, Training } from '../training.model'; -+import { ITraining } from '../training.model'; - import { TrainingService } from '../service/training.service'; - --@Injectable({ providedIn: 'root' }) --export class TrainingRoutingResolveService implements Resolve { -- constructor(protected service: TrainingService, protected router: Router) {} -- -- resolve(route: ActivatedRouteSnapshot): Observable | Observable { -- const id = route.params['id']; -- if (id) { -- return this.service.find(id).pipe( -- mergeMap((training: HttpResponse) => { -+export const trainingResolve = (route: ActivatedRouteSnapshot): Observable => { -+ const id = route.params['id']; -+ if (id) { -+ return inject(TrainingService) -+ .find(id) -+ .pipe( -+ mergeMap((training: HttpResponse) => { - if (training.body) { - return of(training.body); - } else { -- this.router.navigate(['404']); -+ inject(Router).navigate(['404']); - return EMPTY; - } -- }) -+ }), - ); -- } -- return of(new Training()); - } --} -+ return of(null); -+}; -+ -+export default trainingResolve; -diff --git a/src/main/webapp/app/entities/training/route/training-routing.module.ts b/src/main/webapp/app/entities/training/route/training-routing.module.ts -deleted file mode 100644 -index dc392486..00000000 ---- a/src/main/webapp/app/entities/training/route/training-routing.module.ts -+++ /dev/null -@@ -1,46 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule, Routes } from '@angular/router'; -- --import { UserRouteAccessService } from 'app/core/auth/user-route-access.service'; --import { TrainingComponent } from '../list/training.component'; --import { TrainingDetailComponent } from '../detail/training-detail.component'; --import { TrainingUpdateComponent } from '../update/training-update.component'; --import { TrainingRoutingResolveService } from './training-routing-resolve.service'; -- --const trainingRoute: Routes = [ -- { -- path: '', -- component: TrainingComponent, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/view', -- component: TrainingDetailComponent, -- resolve: { -- training: TrainingRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: 'new', -- component: TrainingUpdateComponent, -- resolve: { -- training: TrainingRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, -- { -- path: ':id/edit', -- component: TrainingUpdateComponent, -- resolve: { -- training: TrainingRoutingResolveService, -- }, -- canActivate: [UserRouteAccessService], -- }, --]; -- --@NgModule({ -- imports: [RouterModule.forChild(trainingRoute)], -- exports: [RouterModule], --}) --export class TrainingRoutingModule {} -diff --git a/src/main/webapp/app/entities/training/service/training.service.spec.ts b/src/main/webapp/app/entities/training/service/training.service.spec.ts -index a6afa40d..fe6234e1 100644 ---- a/src/main/webapp/app/entities/training/service/training.service.spec.ts -+++ b/src/main/webapp/app/entities/training/service/training.service.spec.ts -@@ -1,18 +1,22 @@ - import { TestBed } from '@angular/core/testing'; - import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; --import dayjs from 'dayjs/esm'; - --import { DATE_TIME_FORMAT } from 'app/config/input.constants'; --import { ITraining, Training } from '../training.model'; -+import { ITraining } from '../training.model'; -+import { sampleWithRequiredData, sampleWithNewData, sampleWithPartialData, sampleWithFullData } from '../training.test-samples'; - --import { TrainingService } from './training.service'; -+import { TrainingService, RestTraining } from './training.service'; -+ -+const requireRestSample: RestTraining = { -+ ...sampleWithRequiredData, -+ validUntil: sampleWithRequiredData.validUntil?.toJSON(), -+ createdAt: sampleWithRequiredData.createdAt?.toJSON(), -+ updatedAt: sampleWithRequiredData.updatedAt?.toJSON(), -+}; - - describe('Training Service', () => { - let service: TrainingService; - let httpMock: HttpTestingController; -- let elemDefault: ITraining; - let expectedResult: ITraining | ITraining[] | boolean | null; -- let currentDate: dayjs.Dayjs; - - beforeEach(() => { - TestBed.configureTestingModule({ -@@ -21,63 +25,26 @@ describe('Training Service', () => { - expectedResult = null; - service = TestBed.inject(TrainingService); - httpMock = TestBed.inject(HttpTestingController); -- currentDate = dayjs(); -- -- elemDefault = { -- id: 0, -- titleEN: 'AAAAAAA', -- titleDE: 'AAAAAAA', -- descriptionEN: 'AAAAAAA', -- descriptionDE: 'AAAAAAA', -- contact: 'AAAAAAA', -- link: 'AAAAAAA', -- validUntil: currentDate, -- isOfficial: false, -- suggestedBy: 'AAAAAAA', -- createdAt: currentDate, -- updatedAt: currentDate, -- }; - }); - - describe('Service methods', () => { - it('should find an element', () => { -- const returnedFromService = Object.assign( -- { -- validUntil: currentDate.format(DATE_TIME_FORMAT), -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.find(123).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush(returnedFromService); -- expect(expectedResult).toMatchObject(elemDefault); -+ expect(expectedResult).toMatchObject(expected); - }); - - it('should create a Training', () => { -- const returnedFromService = Object.assign( -- { -- id: 0, -- validUntil: currentDate.format(DATE_TIME_FORMAT), -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- validUntil: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.create(new Training()).subscribe(resp => (expectedResult = resp.body)); -+ const training = { ...sampleWithNewData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.create(training).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'POST' }); - req.flush(returnedFromService); -@@ -85,34 +52,11 @@ describe('Training Service', () => { - }); - - it('should update a Training', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- titleEN: 'BBBBBB', -- titleDE: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- contact: 'BBBBBB', -- link: 'BBBBBB', -- validUntil: currentDate.format(DATE_TIME_FORMAT), -- isOfficial: true, -- suggestedBy: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- validUntil: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -- -- service.update(expected).subscribe(resp => (expectedResult = resp.body)); -+ const training = { ...sampleWithRequiredData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; -+ -+ service.update(training).subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'PUT' }); - req.flush(returnedFromService); -@@ -120,25 +64,9 @@ describe('Training Service', () => { - }); - - it('should partial update a Training', () => { -- const patchObject = Object.assign( -- { -- descriptionEN: 'BBBBBB', -- link: 'BBBBBB', -- validUntil: currentDate.format(DATE_TIME_FORMAT), -- }, -- new Training() -- ); -- -- const returnedFromService = Object.assign(patchObject, elemDefault); -- -- const expected = Object.assign( -- { -- validUntil: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const patchObject = { ...sampleWithPartialData }; -+ const returnedFromService = { ...requireRestSample }; -+ const expected = { ...sampleWithRequiredData }; - - service.partialUpdate(patchObject).subscribe(resp => (expectedResult = resp.body)); - -@@ -148,87 +76,66 @@ describe('Training Service', () => { - }); - - it('should return a list of Training', () => { -- const returnedFromService = Object.assign( -- { -- id: 1, -- titleEN: 'BBBBBB', -- titleDE: 'BBBBBB', -- descriptionEN: 'BBBBBB', -- descriptionDE: 'BBBBBB', -- contact: 'BBBBBB', -- link: 'BBBBBB', -- validUntil: currentDate.format(DATE_TIME_FORMAT), -- isOfficial: true, -- suggestedBy: 'BBBBBB', -- createdAt: currentDate.format(DATE_TIME_FORMAT), -- updatedAt: currentDate.format(DATE_TIME_FORMAT), -- }, -- elemDefault -- ); -- -- const expected = Object.assign( -- { -- validUntil: currentDate, -- createdAt: currentDate, -- updatedAt: currentDate, -- }, -- returnedFromService -- ); -+ const returnedFromService = { ...requireRestSample }; -+ -+ const expected = { ...sampleWithRequiredData }; - - service.query().subscribe(resp => (expectedResult = resp.body)); - - const req = httpMock.expectOne({ method: 'GET' }); - req.flush([returnedFromService]); - httpMock.verify(); -- expect(expectedResult).toContainEqual(expected); -+ expect(expectedResult).toMatchObject([expected]); - }); - - it('should delete a Training', () => { -+ const expected = true; -+ - service.delete(123).subscribe(resp => (expectedResult = resp.ok)); - - const req = httpMock.expectOne({ method: 'DELETE' }); - req.flush({ status: 200 }); -- expect(expectedResult); -+ expect(expectedResult).toBe(expected); - }); - - describe('addTrainingToCollectionIfMissing', () => { - it('should add a Training to an empty array', () => { -- const training: ITraining = { id: 123 }; -+ const training: ITraining = sampleWithRequiredData; - expectedResult = service.addTrainingToCollectionIfMissing([], training); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(training); - }); - - it('should not add a Training to an array that contains it', () => { -- const training: ITraining = { id: 123 }; -+ const training: ITraining = sampleWithRequiredData; - const trainingCollection: ITraining[] = [ - { - ...training, - }, -- { id: 456 }, -+ sampleWithPartialData, - ]; - expectedResult = service.addTrainingToCollectionIfMissing(trainingCollection, training); - expect(expectedResult).toHaveLength(2); - }); - - it("should add a Training to an array that doesn't contain it", () => { -- const training: ITraining = { id: 123 }; -- const trainingCollection: ITraining[] = [{ id: 456 }]; -+ const training: ITraining = sampleWithRequiredData; -+ const trainingCollection: ITraining[] = [sampleWithPartialData]; - expectedResult = service.addTrainingToCollectionIfMissing(trainingCollection, training); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(training); - }); - - it('should add only unique Training to an array', () => { -- const trainingArray: ITraining[] = [{ id: 123 }, { id: 456 }, { id: 40371 }]; -- const trainingCollection: ITraining[] = [{ id: 123 }]; -+ const trainingArray: ITraining[] = [sampleWithRequiredData, sampleWithPartialData, sampleWithFullData]; -+ const trainingCollection: ITraining[] = [sampleWithRequiredData]; - expectedResult = service.addTrainingToCollectionIfMissing(trainingCollection, ...trainingArray); - expect(expectedResult).toHaveLength(3); - }); - - it('should accept varargs', () => { -- const training: ITraining = { id: 123 }; -- const training2: ITraining = { id: 456 }; -+ const training: ITraining = sampleWithRequiredData; -+ const training2: ITraining = sampleWithPartialData; - expectedResult = service.addTrainingToCollectionIfMissing([], training, training2); - expect(expectedResult).toHaveLength(2); - expect(expectedResult).toContain(training); -@@ -236,18 +143,62 @@ describe('Training Service', () => { - }); - - it('should accept null and undefined values', () => { -- const training: ITraining = { id: 123 }; -+ const training: ITraining = sampleWithRequiredData; - expectedResult = service.addTrainingToCollectionIfMissing([], null, training, undefined); - expect(expectedResult).toHaveLength(1); - expect(expectedResult).toContain(training); - }); - - it('should return initial array if no Training is added', () => { -- const trainingCollection: ITraining[] = [{ id: 123 }]; -+ const trainingCollection: ITraining[] = [sampleWithRequiredData]; - expectedResult = service.addTrainingToCollectionIfMissing(trainingCollection, undefined, null); - expect(expectedResult).toEqual(trainingCollection); - }); - }); -+ -+ describe('compareTraining', () => { -+ it('Should return true if both entities are null', () => { -+ const entity1 = null; -+ const entity2 = null; -+ -+ const compareResult = service.compareTraining(entity1, entity2); -+ -+ expect(compareResult).toEqual(true); -+ }); -+ -+ it('Should return false if one entity is null', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = null; -+ -+ const compareResult1 = service.compareTraining(entity1, entity2); -+ const compareResult2 = service.compareTraining(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey differs', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 456 }; -+ -+ const compareResult1 = service.compareTraining(entity1, entity2); -+ const compareResult2 = service.compareTraining(entity2, entity1); -+ -+ expect(compareResult1).toEqual(false); -+ expect(compareResult2).toEqual(false); -+ }); -+ -+ it('Should return false if primaryKey matches', () => { -+ const entity1 = { id: 123 }; -+ const entity2 = { id: 123 }; -+ -+ const compareResult1 = service.compareTraining(entity1, entity2); -+ const compareResult2 = service.compareTraining(entity2, entity1); -+ -+ expect(compareResult1).toEqual(true); -+ expect(compareResult2).toEqual(true); -+ }); -+ }); - }); - - afterEach(() => { -diff --git a/src/main/webapp/app/entities/training/service/training.service.ts b/src/main/webapp/app/entities/training/service/training.service.ts -index 58220ece..0616ad86 100644 ---- a/src/main/webapp/app/entities/training/service/training.service.ts -+++ b/src/main/webapp/app/entities/training/service/training.service.ts -@@ -1,13 +1,29 @@ - import { Injectable } from '@angular/core'; - import { HttpClient, HttpResponse } from '@angular/common/http'; - import { Observable } from 'rxjs'; -+ - import { map } from 'rxjs/operators'; -+ - import dayjs from 'dayjs/esm'; - - import { isPresent } from 'app/core/util/operators'; - import { ApplicationConfigService } from 'app/core/config/application-config.service'; - import { createRequestOption } from 'app/core/request/request-util'; --import { ITraining, getTrainingIdentifier } from '../training.model'; -+import { ITraining, NewTraining } from '../training.model'; -+ -+export type PartialUpdateTraining = Partial & Pick; -+ -+type RestOf = Omit & { -+ validUntil?: string | null; -+ createdAt?: string | null; -+ updatedAt?: string | null; -+}; -+ -+export type RestTraining = RestOf; -+ -+export type NewRestTraining = RestOf; -+ -+export type PartialUpdateRestTraining = RestOf; - - export type EntityResponseType = HttpResponse; - export type EntityArrayResponseType = HttpResponse; -@@ -16,53 +32,67 @@ export type EntityArrayResponseType = HttpResponse; - export class TrainingService { - protected resourceUrl = this.applicationConfigService.getEndpointFor('api/trainings'); - -- constructor(protected http: HttpClient, protected applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ protected http: HttpClient, -+ protected applicationConfigService: ApplicationConfigService, -+ ) {} - -- create(training: ITraining): Observable { -+ create(training: NewTraining): Observable { - const copy = this.convertDateFromClient(training); - return this.http -- .post(this.resourceUrl, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .post(this.resourceUrl, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - update(training: ITraining): Observable { - const copy = this.convertDateFromClient(training); - return this.http -- .put(`${this.resourceUrl}/${getTrainingIdentifier(training) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .put(`${this.resourceUrl}/${this.getTrainingIdentifier(training)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - -- partialUpdate(training: ITraining): Observable { -+ partialUpdate(training: PartialUpdateTraining): Observable { - const copy = this.convertDateFromClient(training); - return this.http -- .patch(`${this.resourceUrl}/${getTrainingIdentifier(training) as number}`, copy, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .patch(`${this.resourceUrl}/${this.getTrainingIdentifier(training)}`, copy, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - find(id: number): Observable { - return this.http -- .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -- .pipe(map((res: EntityResponseType) => this.convertDateFromServer(res))); -+ .get(`${this.resourceUrl}/${id}`, { observe: 'response' }) -+ .pipe(map(res => this.convertResponseFromServer(res))); - } - - query(req?: any): Observable { - const options = createRequestOption(req); - return this.http -- .get(this.resourceUrl, { params: options, observe: 'response' }) -- .pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res))); -+ .get(this.resourceUrl, { params: options, observe: 'response' }) -+ .pipe(map(res => this.convertResponseArrayFromServer(res))); - } - - delete(id: number): Observable> { - return this.http.delete(`${this.resourceUrl}/${id}`, { observe: 'response' }); - } - -- addTrainingToCollectionIfMissing(trainingCollection: ITraining[], ...trainingsToCheck: (ITraining | null | undefined)[]): ITraining[] { -- const trainings: ITraining[] = trainingsToCheck.filter(isPresent); -+ getTrainingIdentifier(training: Pick): number { -+ return training.id; -+ } -+ -+ compareTraining(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? this.getTrainingIdentifier(o1) === this.getTrainingIdentifier(o2) : o1 === o2; -+ } -+ -+ addTrainingToCollectionIfMissing>( -+ trainingCollection: Type[], -+ ...trainingsToCheck: (Type | null | undefined)[] -+ ): Type[] { -+ const trainings: Type[] = trainingsToCheck.filter(isPresent); - if (trainings.length > 0) { -- const trainingCollectionIdentifiers = trainingCollection.map(trainingItem => getTrainingIdentifier(trainingItem)!); -+ const trainingCollectionIdentifiers = trainingCollection.map(trainingItem => this.getTrainingIdentifier(trainingItem)!); - const trainingsToAdd = trainings.filter(trainingItem => { -- const trainingIdentifier = getTrainingIdentifier(trainingItem); -- if (trainingIdentifier == null || trainingCollectionIdentifiers.includes(trainingIdentifier)) { -+ const trainingIdentifier = this.getTrainingIdentifier(trainingItem); -+ if (trainingCollectionIdentifiers.includes(trainingIdentifier)) { - return false; - } - trainingCollectionIdentifiers.push(trainingIdentifier); -@@ -73,31 +103,33 @@ export class TrainingService { - return trainingCollection; - } - -- protected convertDateFromClient(training: ITraining): ITraining { -- return Object.assign({}, training, { -- validUntil: training.validUntil?.isValid() ? training.validUntil.toJSON() : undefined, -- createdAt: training.createdAt?.isValid() ? training.createdAt.toJSON() : undefined, -- updatedAt: training.updatedAt?.isValid() ? training.updatedAt.toJSON() : undefined, -- }); -+ protected convertDateFromClient(training: T): RestOf { -+ return { -+ ...training, -+ validUntil: training.validUntil?.toJSON() ?? null, -+ createdAt: training.createdAt?.toJSON() ?? null, -+ updatedAt: training.updatedAt?.toJSON() ?? null, -+ }; - } - -- protected convertDateFromServer(res: EntityResponseType): EntityResponseType { -- if (res.body) { -- res.body.validUntil = res.body.validUntil ? dayjs(res.body.validUntil) : undefined; -- res.body.createdAt = res.body.createdAt ? dayjs(res.body.createdAt) : undefined; -- res.body.updatedAt = res.body.updatedAt ? dayjs(res.body.updatedAt) : undefined; -- } -- return res; -+ protected convertDateFromServer(restTraining: RestTraining): ITraining { -+ return { -+ ...restTraining, -+ validUntil: restTraining.validUntil ? dayjs(restTraining.validUntil) : undefined, -+ createdAt: restTraining.createdAt ? dayjs(restTraining.createdAt) : undefined, -+ updatedAt: restTraining.updatedAt ? dayjs(restTraining.updatedAt) : undefined, -+ }; - } - -- protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { -- if (res.body) { -- res.body.forEach((training: ITraining) => { -- training.validUntil = training.validUntil ? dayjs(training.validUntil) : undefined; -- training.createdAt = training.createdAt ? dayjs(training.createdAt) : undefined; -- training.updatedAt = training.updatedAt ? dayjs(training.updatedAt) : undefined; -- }); -- } -- return res; -+ protected convertResponseFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? this.convertDateFromServer(res.body) : null, -+ }); -+ } -+ -+ protected convertResponseArrayFromServer(res: HttpResponse): HttpResponse { -+ return res.clone({ -+ body: res.body ? res.body.map(item => this.convertDateFromServer(item)) : null, -+ }); - } - } -diff --git a/src/main/webapp/app/entities/training/training.model.ts b/src/main/webapp/app/entities/training/training.model.ts -index c90cd090..d3f36d9f 100644 ---- a/src/main/webapp/app/entities/training/training.model.ts -+++ b/src/main/webapp/app/entities/training/training.model.ts -@@ -2,41 +2,19 @@ import dayjs from 'dayjs/esm'; - import { ISkill } from 'app/entities/skill/skill.model'; - - export interface ITraining { -- id?: number; -- titleEN?: string; -+ id: number; -+ titleEN?: string | null; - titleDE?: string | null; - descriptionEN?: string | null; - descriptionDE?: string | null; - contact?: string | null; - link?: string | null; - validUntil?: dayjs.Dayjs | null; -- isOfficial?: boolean; -+ isOfficial?: boolean | null; - suggestedBy?: string | null; -- createdAt?: dayjs.Dayjs; -- updatedAt?: dayjs.Dayjs; -- skills?: ISkill[] | null; -+ createdAt?: dayjs.Dayjs | null; -+ updatedAt?: dayjs.Dayjs | null; -+ skills?: Pick[] | null; - } - --export class Training implements ITraining { -- constructor( -- public id?: number, -- public titleEN?: string, -- public titleDE?: string | null, -- public descriptionEN?: string | null, -- public descriptionDE?: string | null, -- public contact?: string | null, -- public link?: string | null, -- public validUntil?: dayjs.Dayjs | null, -- public isOfficial?: boolean, -- public suggestedBy?: string | null, -- public createdAt?: dayjs.Dayjs, -- public updatedAt?: dayjs.Dayjs, -- public skills?: ISkill[] | null -- ) { -- this.isOfficial = this.isOfficial ?? false; -- } --} -- --export function getTrainingIdentifier(training: ITraining): number | undefined { -- return training.id; --} -+export type NewTraining = Omit & { id: null }; -diff --git a/src/main/webapp/app/entities/training/training.module.ts b/src/main/webapp/app/entities/training/training.module.ts -deleted file mode 100644 -index 24c4dc77..00000000 ---- a/src/main/webapp/app/entities/training/training.module.ts -+++ /dev/null -@@ -1,14 +0,0 @@ --import { NgModule } from '@angular/core'; --import { SharedModule } from 'app/shared/shared.module'; --import { TrainingComponent } from './list/training.component'; --import { TrainingDetailComponent } from './detail/training-detail.component'; --import { TrainingUpdateComponent } from './update/training-update.component'; --import { TrainingDeleteDialogComponent } from './delete/training-delete-dialog.component'; --import { TrainingRoutingModule } from './route/training-routing.module'; -- --@NgModule({ -- imports: [SharedModule, TrainingRoutingModule], -- declarations: [TrainingComponent, TrainingDetailComponent, TrainingUpdateComponent, TrainingDeleteDialogComponent], -- entryComponents: [TrainingDeleteDialogComponent], --}) --export class TrainingModule {} -diff --git a/src/main/webapp/app/entities/training/update/training-update.component.html b/src/main/webapp/app/entities/training/update/training-update.component.html -index 5d8e05a0..5da50671 100644 ---- a/src/main/webapp/app/entities/training/update/training-update.component.html -+++ b/src/main/webapp/app/entities/training/update/training-update.component.html -@@ -8,34 +8,29 @@ -
- - --
-+
- - -
- --
-+
- - -
-- This field is required. -- This field is required. -- - This field cannot be longer than 80 characters. -- This field cannot be longer than 80 characters. -- -
-
- --
-+
- - -
-@@ -44,28 +39,21 @@ - *ngIf="editForm.get('titleDE')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 80 }" -+ >This field cannot be longer than 80 characters. -- This field cannot be longer than 80 characters. -- -
-
- --
-+
- -- --
-- -- Hint: This field allows Markdown syntax. -- --
-+ /> -
This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- -- --
-- -- Hint: This field allows Markdown syntax. -- --
-+ /> -
This field cannot be longer than 4096 characters. -- This field cannot be longer than 4096 characters. -- -
-
- --
-+
- - -
-@@ -123,13 +103,12 @@ - *ngIf="editForm.get('contact')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 255 }" -+ >This field cannot be longer than 255 characters. -- This field cannot be longer than 255 characters. -- -
-
- --
-+
- - -
-@@ -138,13 +117,12 @@ - *ngIf="editForm.get('link')?.errors?.maxlength" - jhiTranslate="entity.validation.maxlength" - [translateValues]="{ max: 255 }" -+ >This field cannot be longer than 255 characters. -- This field cannot be longer than 255 characters. -- -
-
- --
-+
- -
- -
- --
-+
- - This field is required. -- This field is required. -- -
-
- --
-+
- - This field cannot be longer than 255 characters. -- This field cannot be longer than 255 characters. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -
- This field is required. -- This field is required. -- - This field should be a date and time. -- This field should be a date and time. -- -
-
- --
-+
- -- -+ - -
-
-diff --git a/src/main/webapp/app/entities/training/update/training-update.component.spec.ts b/src/main/webapp/app/entities/training/update/training-update.component.spec.ts -index 949b183e..fea286fa 100644 ---- a/src/main/webapp/app/entities/training/update/training-update.component.spec.ts -+++ b/src/main/webapp/app/entities/training/update/training-update.component.spec.ts -@@ -6,10 +6,11 @@ import { ActivatedRoute } from '@angular/router'; - import { RouterTestingModule } from '@angular/router/testing'; - import { of, Subject, from } from 'rxjs'; - --import { TrainingService } from '../service/training.service'; --import { ITraining, Training } from '../training.model'; - import { ISkill } from 'app/entities/skill/skill.model'; - import { SkillService } from 'app/entities/skill/service/skill.service'; -+import { TrainingService } from '../service/training.service'; -+import { ITraining } from '../training.model'; -+import { TrainingFormService } from './training-form.service'; - - import { TrainingUpdateComponent } from './training-update.component'; - -@@ -17,13 +18,13 @@ describe('Training Management Update Component', () => { - let comp: TrainingUpdateComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRoute; -+ let trainingFormService: TrainingFormService; - let trainingService: TrainingService; - let skillService: SkillService; - - beforeEach(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])], -- declarations: [TrainingUpdateComponent], -+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), TrainingUpdateComponent], - providers: [ - FormBuilder, - { -@@ -39,6 +40,7 @@ describe('Training Management Update Component', () => { - - fixture = TestBed.createComponent(TrainingUpdateComponent); - activatedRoute = TestBed.inject(ActivatedRoute); -+ trainingFormService = TestBed.inject(TrainingFormService); - trainingService = TestBed.inject(TrainingService); - skillService = TestBed.inject(SkillService); - -@@ -48,10 +50,10 @@ describe('Training Management Update Component', () => { - describe('ngOnInit', () => { - it('Should call Skill query and add missing value', () => { - const training: ITraining = { id: 456 }; -- const skills: ISkill[] = [{ id: 39278 }]; -+ const skills: ISkill[] = [{ id: 22390 }]; - training.skills = skills; - -- const skillCollection: ISkill[] = [{ id: 14696 }]; -+ const skillCollection: ISkill[] = [{ id: 25778 }]; - jest.spyOn(skillService, 'query').mockReturnValue(of(new HttpResponse({ body: skillCollection }))); - const additionalSkills = [...skills]; - const expectedCollection: ISkill[] = [...additionalSkills, ...skillCollection]; -@@ -61,28 +63,32 @@ describe('Training Management Update Component', () => { - comp.ngOnInit(); - - expect(skillService.query).toHaveBeenCalled(); -- expect(skillService.addSkillToCollectionIfMissing).toHaveBeenCalledWith(skillCollection, ...additionalSkills); -+ expect(skillService.addSkillToCollectionIfMissing).toHaveBeenCalledWith( -+ skillCollection, -+ ...additionalSkills.map(expect.objectContaining), -+ ); - expect(comp.skillsSharedCollection).toEqual(expectedCollection); - }); - - it('Should update editForm', () => { - const training: ITraining = { id: 456 }; -- const skills: ISkill = { id: 49308 }; -- training.skills = [skills]; -+ const skill: ISkill = { id: 25977 }; -+ training.skills = [skill]; - - activatedRoute.data = of({ training }); - comp.ngOnInit(); - -- expect(comp.editForm.value).toEqual(expect.objectContaining(training)); -- expect(comp.skillsSharedCollection).toContain(skills); -+ expect(comp.skillsSharedCollection).toContain(skill); -+ expect(comp.training).toEqual(training); - }); - }); - - describe('save', () => { - it('Should call update service on save for existing entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const training = { id: 123 }; -+ jest.spyOn(trainingFormService, 'getTraining').mockReturnValue(training); - jest.spyOn(trainingService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); - activatedRoute.data = of({ training }); -@@ -95,18 +101,20 @@ describe('Training Management Update Component', () => { - saveSubject.complete(); - - // THEN -+ expect(trainingFormService.getTraining).toHaveBeenCalled(); - expect(comp.previousState).toHaveBeenCalled(); -- expect(trainingService.update).toHaveBeenCalledWith(training); -+ expect(trainingService.update).toHaveBeenCalledWith(expect.objectContaining(training)); - expect(comp.isSaving).toEqual(false); - }); - - it('Should call create service on save for new entity', () => { - // GIVEN -- const saveSubject = new Subject>(); -- const training = new Training(); -+ const saveSubject = new Subject>(); -+ const training = { id: 123 }; -+ jest.spyOn(trainingFormService, 'getTraining').mockReturnValue({ id: null }); - jest.spyOn(trainingService, 'create').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -- activatedRoute.data = of({ training }); -+ activatedRoute.data = of({ training: null }); - comp.ngOnInit(); - - // WHEN -@@ -116,14 +124,15 @@ describe('Training Management Update Component', () => { - saveSubject.complete(); - - // THEN -- expect(trainingService.create).toHaveBeenCalledWith(training); -+ expect(trainingFormService.getTraining).toHaveBeenCalled(); -+ expect(trainingService.create).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).toHaveBeenCalled(); - }); - - it('Should set isSaving to false on error', () => { - // GIVEN -- const saveSubject = new Subject>(); -+ const saveSubject = new Subject>(); - const training = { id: 123 }; - jest.spyOn(trainingService, 'update').mockReturnValue(saveSubject); - jest.spyOn(comp, 'previousState'); -@@ -136,46 +145,20 @@ describe('Training Management Update Component', () => { - saveSubject.error('This is an error!'); - - // THEN -- expect(trainingService.update).toHaveBeenCalledWith(training); -+ expect(trainingService.update).toHaveBeenCalled(); - expect(comp.isSaving).toEqual(false); - expect(comp.previousState).not.toHaveBeenCalled(); - }); - }); - -- describe('Tracking relationships identifiers', () => { -- describe('trackSkillById', () => { -- it('Should return tracked Skill primary key', () => { -+ describe('Compare relationships', () => { -+ describe('compareSkill', () => { -+ it('Should forward to skillService', () => { - const entity = { id: 123 }; -- const trackResult = comp.trackSkillById(0, entity); -- expect(trackResult).toEqual(entity.id); -- }); -- }); -- }); -- -- describe('Getting selected relationships', () => { -- describe('getSelectedSkill', () => { -- it('Should return option if no Skill is selected', () => { -- const option = { id: 123 }; -- const result = comp.getSelectedSkill(option); -- expect(result === option).toEqual(true); -- }); -- -- it('Should return selected Skill for according option', () => { -- const option = { id: 123 }; -- const selected = { id: 123 }; -- const selected2 = { id: 456 }; -- const result = comp.getSelectedSkill(option, [selected2, selected]); -- expect(result === selected).toEqual(true); -- expect(result === selected2).toEqual(false); -- expect(result === option).toEqual(false); -- }); -- -- it('Should return option if this Skill is not selected', () => { -- const option = { id: 123 }; -- const selected = { id: 456 }; -- const result = comp.getSelectedSkill(option, [selected]); -- expect(result === option).toEqual(true); -- expect(result === selected).toEqual(false); -+ const entity2 = { id: 456 }; -+ jest.spyOn(skillService, 'compareSkill'); -+ comp.compareSkill(entity, entity2); -+ expect(skillService.compareSkill).toHaveBeenCalledWith(entity, entity2); - }); - }); - }); -diff --git a/src/main/webapp/app/entities/user/user.model.ts b/src/main/webapp/app/entities/user/user.model.ts -index 37b91ff2..9159ab06 100644 ---- a/src/main/webapp/app/entities/user/user.model.ts -+++ b/src/main/webapp/app/entities/user/user.model.ts -@@ -1,12 +1,15 @@ - export interface IUser { -- id?: string; -+ id: string; - login?: string; - } - - export class User implements IUser { -- constructor(public id: string, public login: string) {} -+ constructor( -+ public id: string, -+ public login: string, -+ ) {} - } - --export function getUserIdentifier(user: IUser): string | undefined { -+export function getUserIdentifier(user: IUser): string { - return user.id; - } -diff --git a/src/main/webapp/app/entities/user/user.service.spec.ts b/src/main/webapp/app/entities/user/user.service.spec.ts -index c63f0106..2e0a6848 100644 ---- a/src/main/webapp/app/entities/user/user.service.spec.ts -+++ b/src/main/webapp/app/entities/user/user.service.spec.ts -@@ -43,7 +43,7 @@ describe('User Service', () => { - const req = httpMock.expectOne({ method: 'GET' }); - req.flush('Internal Server Error', { - status: 500, -- statusText: 'Inernal Server Error', -+ statusText: 'Internal Server Error', - }); - expect(expectedResult).toEqual(500); - }); -@@ -77,7 +77,7 @@ describe('User Service', () => { - }); - - it('should add only unique User to an array', () => { -- const userArray: IUser[] = [{ id: 'ABC' }, { id: 'CBA' }, { id: '4e721970-f867-4627-93d7-265264b9bbfd' }]; -+ const userArray: IUser[] = [{ id: 'ABC' }, { id: 'CBA' }, { id: 'f3a500f9-7a30-4689-b713-5d9707e9c89b' }]; - const userCollection: IUser[] = [{ id: 'CBA' }]; - expectedResult = service.addUserToCollectionIfMissing(userCollection, ...userArray); - expect(expectedResult).toHaveLength(3); -diff --git a/src/main/webapp/app/entities/user/user.service.ts b/src/main/webapp/app/entities/user/user.service.ts -index 7d23e9e1..02f2c659 100644 ---- a/src/main/webapp/app/entities/user/user.service.ts -+++ b/src/main/webapp/app/entities/user/user.service.ts -@@ -12,20 +12,30 @@ import { IUser, getUserIdentifier } from './user.model'; - export class UserService { - private resourceUrl = this.applicationConfigService.getEndpointFor('api/users'); - -- constructor(private http: HttpClient, private applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ private http: HttpClient, -+ private applicationConfigService: ApplicationConfigService, -+ ) {} - - query(req?: Pagination): Observable> { - const options = createRequestOption(req); - return this.http.get(this.resourceUrl, { params: options, observe: 'response' }); - } - -- addUserToCollectionIfMissing(userCollection: IUser[], ...usersToCheck: (IUser | null | undefined)[]): IUser[] { -- const users: IUser[] = usersToCheck.filter(isPresent); -+ compareUser(o1: Pick | null, o2: Pick | null): boolean { -+ return o1 && o2 ? o1.id === o2.id : o1 === o2; -+ } -+ -+ addUserToCollectionIfMissing & Pick>( -+ userCollection: Type[], -+ ...usersToCheck: (Type | null | undefined)[] -+ ): IUser[] { -+ const users: Type[] = usersToCheck.filter(isPresent); - if (users.length > 0) { - const userCollectionIdentifiers = userCollection.map(userItem => getUserIdentifier(userItem)!); - const usersToAdd = users.filter(userItem => { - const userIdentifier = getUserIdentifier(userItem); -- if (userIdentifier == null || userCollectionIdentifiers.includes(userIdentifier)) { -+ if (userCollectionIdentifiers.includes(userIdentifier)) { - return false; - } - userCollectionIdentifiers.push(userIdentifier); -diff --git a/src/main/webapp/app/home/home.component.spec.ts b/src/main/webapp/app/home/home.component.spec.ts -index 19a769fd..dae8e155 100644 ---- a/src/main/webapp/app/home/home.component.spec.ts -+++ b/src/main/webapp/app/home/home.component.spec.ts -@@ -8,7 +8,7 @@ import { AccountService } from 'app/core/auth/account.service'; - import { Account } from 'app/core/auth/account.model'; - import { LoginService } from 'app/login/login.service'; - --import { HomeComponent } from './home.component'; -+import HomeComponent from './home.component'; - - describe('Home Component', () => { - let comp: HomeComponent; -@@ -28,7 +28,7 @@ describe('Home Component', () => { - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- declarations: [HomeComponent], -+ imports: [HomeComponent], - providers: [AccountService, LoginService], - }) - .overrideTemplate(HomeComponent, '') -diff --git a/src/main/webapp/app/home/home.component.ts b/src/main/webapp/app/home/home.component.ts -index 83dc60c8..504f253c 100644 ---- a/src/main/webapp/app/home/home.component.ts -+++ b/src/main/webapp/app/home/home.component.ts -@@ -1,18 +1,25 @@ - import { Component, OnInit } from '@angular/core'; -+import { RouterModule } from '@angular/router'; - -+import SharedModule from 'app/shared/shared.module'; - import { LoginService } from 'app/login/login.service'; - import { AccountService } from 'app/core/auth/account.service'; - import { Account } from 'app/core/auth/account.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-home', - templateUrl: './home.component.html', - styleUrls: ['./home.component.scss'], -+ imports: [SharedModule, RouterModule], - }) --export class HomeComponent implements OnInit { -+export default class HomeComponent implements OnInit { - account: Account | null = null; - -- constructor(private accountService: AccountService, private loginService: LoginService) {} -+ constructor( -+ private accountService: AccountService, -+ private loginService: LoginService, -+ ) {} - - ngOnInit(): void { - this.accountService.identity().subscribe(account => (this.account = account)); -diff --git a/src/main/webapp/app/home/home.module.ts b/src/main/webapp/app/home/home.module.ts -deleted file mode 100644 -index 758f5c48..00000000 ---- a/src/main/webapp/app/home/home.module.ts -+++ /dev/null -@@ -1,12 +0,0 @@ --import { NgModule } from '@angular/core'; --import { RouterModule } from '@angular/router'; -- --import { SharedModule } from 'app/shared/shared.module'; --import { HOME_ROUTE } from './home.route'; --import { HomeComponent } from './home.component'; -- --@NgModule({ -- imports: [SharedModule, RouterModule.forChild([HOME_ROUTE])], -- declarations: [HomeComponent], --}) --export class HomeModule {} -diff --git a/src/main/webapp/app/home/home.route.ts b/src/main/webapp/app/home/home.route.ts -deleted file mode 100644 -index 213002d1..00000000 ---- a/src/main/webapp/app/home/home.route.ts -+++ /dev/null -@@ -1,11 +0,0 @@ --import { Route } from '@angular/router'; -- --import { HomeComponent } from './home.component'; -- --export const HOME_ROUTE: Route = { -- path: '', -- component: HomeComponent, -- data: { -- pageTitle: 'home.title', -- }, --}; -diff --git a/src/main/webapp/app/layouts/error/error.component.html b/src/main/webapp/app/layouts/error/error.component.html -index 570dd100..c1b52a55 100644 ---- a/src/main/webapp/app/layouts/error/error.component.html -+++ b/src/main/webapp/app/layouts/error/error.component.html -@@ -5,7 +5,7 @@ -
- -
--

Error Page!

-+

Error page!

- -
-
{{ errorMessage }}
-diff --git a/src/main/webapp/app/layouts/error/error.component.ts b/src/main/webapp/app/layouts/error/error.component.ts -index 86ba9782..9767ef62 100644 ---- a/src/main/webapp/app/layouts/error/error.component.ts -+++ b/src/main/webapp/app/layouts/error/error.component.ts -@@ -2,17 +2,23 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; - import { ActivatedRoute } from '@angular/router'; - import { Subscription } from 'rxjs'; - import { TranslateService } from '@ngx-translate/core'; -+import SharedModule from 'app/shared/shared.module'; - - @Component({ -+ standalone: true, - selector: 'jhi-error', - templateUrl: './error.component.html', -+ imports: [SharedModule], - }) --export class ErrorComponent implements OnInit, OnDestroy { -+export default class ErrorComponent implements OnInit, OnDestroy { - errorMessage?: string; - errorKey?: string; - langChangeSubscription?: Subscription; - -- constructor(private translateService: TranslateService, private route: ActivatedRoute) {} -+ constructor( -+ private translateService: TranslateService, -+ private route: ActivatedRoute, -+ ) {} - - ngOnInit(): void { - this.route.data.subscribe(routeData => { -diff --git a/src/main/webapp/app/layouts/error/error.route.ts b/src/main/webapp/app/layouts/error/error.route.ts -index a8574019..85f911b5 100644 ---- a/src/main/webapp/app/layouts/error/error.route.ts -+++ b/src/main/webapp/app/layouts/error/error.route.ts -@@ -1,30 +1,28 @@ - import { Routes } from '@angular/router'; - --import { ErrorComponent } from './error.component'; -+import ErrorComponent from './error.component'; - - export const errorRoute: Routes = [ - { - path: 'error', - component: ErrorComponent, -- data: { -- pageTitle: 'error.title', -- }, -+ title: 'error.title', - }, - { - path: 'accessdenied', - component: ErrorComponent, - data: { -- pageTitle: 'error.title', - errorMessage: 'error.http.403', - }, -+ title: 'error.title', - }, - { - path: '404', - component: ErrorComponent, - data: { -- pageTitle: 'error.title', - errorMessage: 'error.http.404', - }, -+ title: 'error.title', - }, - { - path: '**', -diff --git a/src/main/webapp/app/layouts/footer/footer.component.ts b/src/main/webapp/app/layouts/footer/footer.component.ts -index 7c640ec8..7ab09384 100644 ---- a/src/main/webapp/app/layouts/footer/footer.component.ts -+++ b/src/main/webapp/app/layouts/footer/footer.component.ts -@@ -1,7 +1,8 @@ - import { Component } from '@angular/core'; - - @Component({ -+ standalone: true, - selector: 'jhi-footer', - templateUrl: './footer.component.html', - }) --export class FooterComponent {} -+export default class FooterComponent {} -diff --git a/src/main/webapp/app/layouts/main/main.component.spec.ts b/src/main/webapp/app/layouts/main/main.component.spec.ts -index 4e137b5c..488b91c3 100644 ---- a/src/main/webapp/app/layouts/main/main.component.spec.ts -+++ b/src/main/webapp/app/layouts/main/main.component.spec.ts -@@ -1,14 +1,18 @@ - jest.mock('app/core/auth/account.service'); - --import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; --import { Router, RouterEvent, NavigationEnd, NavigationStart } from '@angular/router'; -+import { waitForAsync, ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; -+import { Router, TitleStrategy } from '@angular/router'; - import { Title } from '@angular/platform-browser'; --import { Subject, of } from 'rxjs'; -+import { RouterTestingModule } from '@angular/router/testing'; -+import { DOCUMENT } from '@angular/common'; -+import { Component } from '@angular/core'; -+import { of } from 'rxjs'; - import { TranslateModule, TranslateService, LangChangeEvent } from '@ngx-translate/core'; - - import { AccountService } from 'app/core/auth/account.service'; - --import { MainComponent } from './main.component'; -+import { AppPageTitleStrategy } from 'app/app-page-title-strategy'; -+import MainComponent from './main.component'; - - describe('MainComponent', () => { - let comp: MainComponent; -@@ -16,25 +20,15 @@ describe('MainComponent', () => { - let titleService: Title; - let translateService: TranslateService; - let mockAccountService: AccountService; -- const routerEventsSubject = new Subject(); - const routerState: any = { snapshot: { root: { data: {} } } }; -- class MockRouter { -- events = routerEventsSubject; -- routerState = routerState; -- } -+ let router: Router; -+ let document: Document; - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- imports: [TranslateModule.forRoot()], -+ imports: [TranslateModule.forRoot(), RouterTestingModule], - declarations: [MainComponent], -- providers: [ -- Title, -- AccountService, -- { -- provide: Router, -- useClass: MockRouter, -- }, -- ], -+ providers: [Title, AccountService, { provide: TitleStrategy, useClass: AppPageTitleStrategy }], - }) - .overrideTemplate(MainComponent, '') - .compileComponents(); -@@ -48,14 +42,14 @@ describe('MainComponent', () => { - mockAccountService = TestBed.inject(AccountService); - mockAccountService.identity = jest.fn(() => of(null)); - mockAccountService.getAuthenticationState = jest.fn(() => of(null)); -+ router = TestBed.inject(Router); -+ document = TestBed.inject(DOCUMENT); - }); - - describe('page title', () => { - const defaultPageTitle = 'global.title'; - const parentRoutePageTitle = 'parentTitle'; - const childRoutePageTitle = 'childTitle'; -- const navigationEnd = new NavigationEnd(1, '', ''); -- const navigationStart = new NavigationStart(1, ''); - const langChangeEvent: LangChangeEvent = { lang: 'en', translations: null }; - - beforeEach(() => { -@@ -67,62 +61,62 @@ describe('MainComponent', () => { - }); - - describe('navigation end', () => { -- it('should set page title to default title if pageTitle is missing on routes', () => { -+ it('should set page title to default title if pageTitle is missing on routes', fakeAsync(() => { - // WHEN -- routerEventsSubject.next(navigationEnd); -+ router.navigateByUrl(''); -+ tick(); - - // THEN -- expect(translateService.get).toHaveBeenCalledWith(defaultPageTitle); -- expect(titleService.setTitle).toHaveBeenCalledWith(defaultPageTitle + ' translated'); -- }); -+ expect(document.title).toBe(defaultPageTitle + ' translated'); -+ })); - -- it('should set page title to root route pageTitle if there is no child routes', () => { -+ it('should set page title to root route pageTitle if there is no child routes', fakeAsync(() => { - // GIVEN -- routerState.snapshot.root.data = { pageTitle: parentRoutePageTitle }; -+ router.resetConfig([{ path: '', title: parentRoutePageTitle, component: BlankComponent }]); - - // WHEN -- routerEventsSubject.next(navigationEnd); -+ router.navigateByUrl(''); -+ tick(); - - // THEN -- expect(translateService.get).toHaveBeenCalledWith(parentRoutePageTitle); -- expect(titleService.setTitle).toHaveBeenCalledWith(parentRoutePageTitle + ' translated'); -- }); -+ expect(document.title).toBe(parentRoutePageTitle + ' translated'); -+ })); - -- it('should set page title to child route pageTitle if child routes exist and pageTitle is set for child route', () => { -+ it('should set page title to child route pageTitle if child routes exist and pageTitle is set for child route', fakeAsync(() => { - // GIVEN -- routerState.snapshot.root.data = { pageTitle: parentRoutePageTitle }; -- routerState.snapshot.root.firstChild = { data: { pageTitle: childRoutePageTitle } }; -+ router.resetConfig([ -+ { -+ path: 'home', -+ title: parentRoutePageTitle, -+ children: [{ path: '', title: childRoutePageTitle, component: BlankComponent }], -+ }, -+ ]); - - // WHEN -- routerEventsSubject.next(navigationEnd); -+ router.navigateByUrl('home'); -+ tick(); - - // THEN -- expect(translateService.get).toHaveBeenCalledWith(childRoutePageTitle); -- expect(titleService.setTitle).toHaveBeenCalledWith(childRoutePageTitle + ' translated'); -- }); -+ expect(document.title).toBe(childRoutePageTitle + ' translated'); -+ })); - -- it('should set page title to parent route pageTitle if child routes exists but pageTitle is not set for child route data', () => { -+ it('should set page title to parent route pageTitle if child routes exists but pageTitle is not set for child route data', fakeAsync(() => { - // GIVEN -- routerState.snapshot.root.data = { pageTitle: parentRoutePageTitle }; -- routerState.snapshot.root.firstChild = { data: {} }; -+ router.resetConfig([ -+ { -+ path: 'home', -+ title: parentRoutePageTitle, -+ children: [{ path: '', component: BlankComponent }], -+ }, -+ ]); - - // WHEN -- routerEventsSubject.next(navigationEnd); -+ router.navigateByUrl('home'); -+ tick(); - - // THEN -- expect(translateService.get).toHaveBeenCalledWith(parentRoutePageTitle); -- expect(titleService.setTitle).toHaveBeenCalledWith(parentRoutePageTitle + ' translated'); -- }); -- }); -- -- describe('navigation start', () => { -- it('should not set page title on navigation start', () => { -- // WHEN -- routerEventsSubject.next(navigationStart); -- -- // THEN -- expect(titleService.setTitle).not.toHaveBeenCalled(); -- }); -+ expect(document.title).toBe(parentRoutePageTitle + ' translated'); -+ })); - }); - - describe('language change', () => { -@@ -131,47 +125,84 @@ describe('MainComponent', () => { - translateService.onLangChange.emit(langChangeEvent); - - // THEN -- expect(translateService.get).toHaveBeenCalledWith(defaultPageTitle); -- expect(titleService.setTitle).toHaveBeenCalledWith(defaultPageTitle + ' translated'); -+ expect(document.title).toBe(defaultPageTitle + ' translated'); - }); - -- it('should set page title to root route pageTitle if there is no child routes', () => { -+ it('should set page title to root route pageTitle if there is no child routes', fakeAsync(() => { - // GIVEN - routerState.snapshot.root.data = { pageTitle: parentRoutePageTitle }; -+ router.resetConfig([{ path: '', title: parentRoutePageTitle, component: BlankComponent }]); -+ -+ // WHEN -+ router.navigateByUrl(''); -+ tick(); -+ -+ // THEN -+ expect(document.title).toBe(parentRoutePageTitle + ' translated'); -+ -+ // GIVEN -+ document.title = 'other title'; - - // WHEN - translateService.onLangChange.emit(langChangeEvent); - - // THEN -- expect(translateService.get).toHaveBeenCalledWith(parentRoutePageTitle); -- expect(titleService.setTitle).toHaveBeenCalledWith(parentRoutePageTitle + ' translated'); -- }); -+ expect(document.title).toBe(parentRoutePageTitle + ' translated'); -+ })); - -- it('should set page title to child route pageTitle if child routes exist and pageTitle is set for child route', () => { -+ it('should set page title to child route pageTitle if child routes exist and pageTitle is set for child route', fakeAsync(() => { - // GIVEN -- routerState.snapshot.root.data = { pageTitle: parentRoutePageTitle }; -- routerState.snapshot.root.firstChild = { data: { pageTitle: childRoutePageTitle } }; -+ router.resetConfig([ -+ { -+ path: 'home', -+ title: parentRoutePageTitle, -+ children: [{ path: '', title: childRoutePageTitle, component: BlankComponent }], -+ }, -+ ]); -+ -+ // WHEN -+ router.navigateByUrl('home'); -+ tick(); -+ -+ // THEN -+ expect(document.title).toBe(childRoutePageTitle + ' translated'); -+ -+ // GIVEN -+ document.title = 'other title'; - - // WHEN - translateService.onLangChange.emit(langChangeEvent); - - // THEN -- expect(translateService.get).toHaveBeenCalledWith(childRoutePageTitle); -- expect(titleService.setTitle).toHaveBeenCalledWith(childRoutePageTitle + ' translated'); -- }); -+ expect(document.title).toBe(childRoutePageTitle + ' translated'); -+ })); - -- it('should set page title to parent route pageTitle if child routes exists but pageTitle is not set for child route data', () => { -+ it('should set page title to parent route pageTitle if child routes exists but pageTitle is not set for child route data', fakeAsync(() => { - // GIVEN -- routerState.snapshot.root.data = { pageTitle: parentRoutePageTitle }; -- routerState.snapshot.root.firstChild = { data: {} }; -+ router.resetConfig([ -+ { -+ path: 'home', -+ title: parentRoutePageTitle, -+ children: [{ path: '', component: BlankComponent }], -+ }, -+ ]); -+ -+ // WHEN -+ router.navigateByUrl('home'); -+ tick(); -+ -+ // THEN -+ expect(document.title).toBe(parentRoutePageTitle + ' translated'); -+ -+ // GIVEN -+ document.title = 'other title'; - - // WHEN - translateService.onLangChange.emit(langChangeEvent); - - // THEN -- expect(translateService.get).toHaveBeenCalledWith(parentRoutePageTitle); -- expect(titleService.setTitle).toHaveBeenCalledWith(parentRoutePageTitle + ' translated'); -- }); -+ expect(document.title).toBe(parentRoutePageTitle + ' translated'); -+ })); - }); - }); - -@@ -194,3 +225,6 @@ describe('MainComponent', () => { - }); - }); - }); -+ -+@Component({ template: '' }) -+export class BlankComponent {} -diff --git a/src/main/webapp/app/layouts/main/main.component.ts b/src/main/webapp/app/layouts/main/main.component.ts -index 2079bc99..e70bd5ac 100644 ---- a/src/main/webapp/app/layouts/main/main.component.ts -+++ b/src/main/webapp/app/layouts/main/main.component.ts -@@ -1,24 +1,25 @@ - import { Component, OnInit, RendererFactory2, Renderer2 } from '@angular/core'; --import { Title } from '@angular/platform-browser'; --import { Router, ActivatedRouteSnapshot, NavigationEnd } from '@angular/router'; - import { TranslateService, LangChangeEvent } from '@ngx-translate/core'; - import dayjs from 'dayjs/esm'; - - import { AccountService } from 'app/core/auth/account.service'; -+import { AppPageTitleStrategy } from 'app/app-page-title-strategy'; -+import { Router } from '@angular/router'; - - @Component({ - selector: 'jhi-main', - templateUrl: './main.component.html', -+ providers: [AppPageTitleStrategy], - }) --export class MainComponent implements OnInit { -+export default class MainComponent implements OnInit { - private renderer: Renderer2; - - constructor( -- private accountService: AccountService, -- private titleService: Title, - private router: Router, -+ private appPageTitleStrategy: AppPageTitleStrategy, -+ private accountService: AccountService, - private translateService: TranslateService, -- rootRenderer: RendererFactory2 -+ rootRenderer: RendererFactory2, - ) { - this.renderer = rootRenderer.createRenderer(document.querySelector('html'), null); - } -@@ -27,32 +28,10 @@ export class MainComponent implements OnInit { - // try to log in automatically - this.accountService.identity().subscribe(); - -- this.router.events.subscribe(event => { -- if (event instanceof NavigationEnd) { -- this.updateTitle(); -- } -- }); -- - this.translateService.onLangChange.subscribe((langChangeEvent: LangChangeEvent) => { -- this.updateTitle(); -+ this.appPageTitleStrategy.updateTitle(this.router.routerState.snapshot); - dayjs.locale(langChangeEvent.lang); - this.renderer.setAttribute(document.querySelector('html'), 'lang', langChangeEvent.lang); - }); - } -- -- private getPageTitle(routeSnapshot: ActivatedRouteSnapshot): string { -- const title: string = routeSnapshot.data['pageTitle'] ?? ''; -- if (routeSnapshot.firstChild) { -- return this.getPageTitle(routeSnapshot.firstChild) || title; -- } -- return title; -- } -- -- private updateTitle(): void { -- let pageTitle = this.getPageTitle(this.router.routerState.snapshot.root); -- if (!pageTitle) { -- pageTitle = 'global.title'; -- } -- this.translateService.get(pageTitle).subscribe(title => this.titleService.setTitle(title)); -- } - } -diff --git a/src/main/webapp/app/layouts/navbar/active-menu.directive.ts b/src/main/webapp/app/layouts/navbar/active-menu.directive.ts -index 6150841e..3b0e48d1 100644 ---- a/src/main/webapp/app/layouts/navbar/active-menu.directive.ts -+++ b/src/main/webapp/app/layouts/navbar/active-menu.directive.ts -@@ -2,12 +2,17 @@ import { Directive, OnInit, ElementRef, Renderer2, Input } from '@angular/core'; - import { TranslateService, LangChangeEvent } from '@ngx-translate/core'; - - @Directive({ -+ standalone: true, - selector: '[jhiActiveMenu]', - }) --export class ActiveMenuDirective implements OnInit { -+export default class ActiveMenuDirective implements OnInit { - @Input() jhiActiveMenu?: string; - -- constructor(private el: ElementRef, private renderer: Renderer2, private translateService: TranslateService) {} -+ constructor( -+ private el: ElementRef, -+ private renderer: Renderer2, -+ private translateService: TranslateService, -+ ) {} - - ngOnInit(): void { - this.translateService.onLangChange.subscribe((event: LangChangeEvent) => { -diff --git a/src/main/webapp/app/layouts/navbar/navbar.component.scss b/src/main/webapp/app/layouts/navbar/navbar.component.scss -index 8ff0a053..90617d40 100644 ---- a/src/main/webapp/app/layouts/navbar/navbar.component.scss -+++ b/src/main/webapp/app/layouts/navbar/navbar.component.scss -@@ -1,5 +1,5 @@ --@import '~bootstrap/scss/functions'; --@import '~bootstrap/scss/variables'; -+@import 'bootstrap/scss/functions'; -+@import 'bootstrap/scss/variables'; - - /* ========================================================================== - Navbar -diff --git a/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts b/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts -index 51885374..983b1c59 100644 ---- a/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts -+++ b/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts -@@ -4,7 +4,6 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; - import { HttpClientTestingModule } from '@angular/common/http/testing'; - import { RouterTestingModule } from '@angular/router/testing'; - import { of } from 'rxjs'; --import { NgxWebstorageModule } from 'ngx-webstorage'; - import { TranslateModule } from '@ngx-translate/core'; - - import { ProfileInfo } from 'app/layouts/profiles/profile-info.model'; -@@ -13,7 +12,7 @@ import { AccountService } from 'app/core/auth/account.service'; - import { ProfileService } from 'app/layouts/profiles/profile.service'; - import { LoginService } from 'app/login/login.service'; - --import { NavbarComponent } from './navbar.component'; -+import NavbarComponent from './navbar.component'; - - describe('Navbar Component', () => { - let comp: NavbarComponent; -@@ -33,8 +32,7 @@ describe('Navbar Component', () => { - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgxWebstorageModule.forRoot()], -- declarations: [NavbarComponent], -+ imports: [NavbarComponent, HttpClientTestingModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot()], - providers: [LoginService], - }) - .overrideTemplate(NavbarComponent, '') -diff --git a/src/main/webapp/app/layouts/navbar/navbar.route.ts b/src/main/webapp/app/layouts/navbar/navbar.route.ts -deleted file mode 100644 -index 82c591f3..00000000 ---- a/src/main/webapp/app/layouts/navbar/navbar.route.ts -+++ /dev/null -@@ -1,9 +0,0 @@ --import { Route } from '@angular/router'; -- --import { NavbarComponent } from './navbar.component'; -- --export const navbarRoute: Route = { -- path: '', -- component: NavbarComponent, -- outlet: 'navbar', --}; -diff --git a/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts b/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts -index 58d99d2c..4d5176cd 100644 ---- a/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts -+++ b/src/main/webapp/app/layouts/profiles/page-ribbon.component.spec.ts -@@ -5,7 +5,7 @@ import { of } from 'rxjs'; - import { ProfileInfo } from 'app/layouts/profiles/profile-info.model'; - import { ProfileService } from 'app/layouts/profiles/profile.service'; - --import { PageRibbonComponent } from './page-ribbon.component'; -+import PageRibbonComponent from './page-ribbon.component'; - - describe('Page Ribbon Component', () => { - let comp: PageRibbonComponent; -@@ -14,8 +14,7 @@ describe('Page Ribbon Component', () => { - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- imports: [HttpClientTestingModule], -- declarations: [PageRibbonComponent], -+ imports: [HttpClientTestingModule, PageRibbonComponent], - }) - .overrideTemplate(PageRibbonComponent, '') - .compileComponents(); -diff --git a/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts b/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts -index 24b87b54..1cd00f64 100644 ---- a/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts -+++ b/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts -@@ -2,18 +2,21 @@ import { Component, OnInit } from '@angular/core'; - import { Observable } from 'rxjs'; - import { map } from 'rxjs/operators'; - -+import SharedModule from 'app/shared/shared.module'; - import { ProfileService } from './profile.service'; - - @Component({ -+ standalone: true, - selector: 'jhi-page-ribbon', - template: ` - - `, - styleUrls: ['./page-ribbon.component.scss'], -+ imports: [SharedModule], - }) --export class PageRibbonComponent implements OnInit { -+export default class PageRibbonComponent implements OnInit { - ribbonEnv$?: Observable; - - constructor(private profileService: ProfileService) {} -diff --git a/src/main/webapp/app/layouts/profiles/profile-info.model.ts b/src/main/webapp/app/layouts/profiles/profile-info.model.ts -index 8c769c74..14e920f1 100644 ---- a/src/main/webapp/app/layouts/profiles/profile-info.model.ts -+++ b/src/main/webapp/app/layouts/profiles/profile-info.model.ts -@@ -10,6 +10,6 @@ export class ProfileInfo { - public activeProfiles?: string[], - public ribbonEnv?: string, - public inProduction?: boolean, -- public openAPIEnabled?: boolean -+ public openAPIEnabled?: boolean, - ) {} - } -diff --git a/src/main/webapp/app/layouts/profiles/profile.service.ts b/src/main/webapp/app/layouts/profiles/profile.service.ts -index b379d3cb..ec11dd34 100644 ---- a/src/main/webapp/app/layouts/profiles/profile.service.ts -+++ b/src/main/webapp/app/layouts/profiles/profile.service.ts -@@ -11,7 +11,10 @@ export class ProfileService { - private infoUrl = this.applicationConfigService.getEndpointFor('management/info'); - private profileInfo$?: Observable; - -- constructor(private http: HttpClient, private applicationConfigService: ApplicationConfigService) {} -+ constructor( -+ private http: HttpClient, -+ private applicationConfigService: ApplicationConfigService, -+ ) {} - - getProfileInfo(): Observable { - if (this.profileInfo$) { -@@ -34,7 +37,7 @@ export class ProfileService { - } - return profileInfo; - }), -- shareReplay() -+ shareReplay(), - ); - return this.profileInfo$; - } -diff --git a/src/main/webapp/app/login/login.service.ts b/src/main/webapp/app/login/login.service.ts -index bd963bae..aa418962 100644 ---- a/src/main/webapp/app/login/login.service.ts -+++ b/src/main/webapp/app/login/login.service.ts -@@ -6,7 +6,10 @@ import { Logout } from './logout.model'; - - @Injectable({ providedIn: 'root' }) - export class LoginService { -- constructor(private location: Location, private authServerProvider: AuthServerProvider) {} -+ constructor( -+ private location: Location, -+ private authServerProvider: AuthServerProvider, -+ ) {} - - login(): void { - // If you have configured multiple OIDC providers, then, you can update this URL to /login. -diff --git a/src/main/webapp/app/shared/alert/alert-error.component.spec.ts b/src/main/webapp/app/shared/alert/alert-error.component.spec.ts -index 72617594..943ca005 100644 ---- a/src/main/webapp/app/shared/alert/alert-error.component.spec.ts -+++ b/src/main/webapp/app/shared/alert/alert-error.component.spec.ts -@@ -15,8 +15,7 @@ describe('Alert Error Component', () => { - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- imports: [TranslateModule.forRoot()], -- declarations: [AlertErrorComponent], -+ imports: [TranslateModule.forRoot(), AlertErrorComponent], - providers: [EventManager, AlertService], - }) - .overrideTemplate(AlertErrorComponent, '') -diff --git a/src/main/webapp/app/shared/alert/alert-error.component.ts b/src/main/webapp/app/shared/alert/alert-error.component.ts -index b741049f..966e4779 100644 ---- a/src/main/webapp/app/shared/alert/alert-error.component.ts -+++ b/src/main/webapp/app/shared/alert/alert-error.component.ts -@@ -1,22 +1,30 @@ - import { Component, OnDestroy } from '@angular/core'; - import { HttpErrorResponse } from '@angular/common/http'; - import { Subscription } from 'rxjs'; -+import { CommonModule } from '@angular/common'; -+import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; - import { TranslateService } from '@ngx-translate/core'; - --import { AlertError } from './alert-error.model'; - import { Alert, AlertService } from 'app/core/util/alert.service'; - import { EventManager, EventWithContent } from 'app/core/util/event-manager.service'; -+import { AlertError } from './alert-error.model'; - - @Component({ -+ standalone: true, - selector: 'jhi-alert-error', - templateUrl: './alert-error.component.html', -+ imports: [CommonModule, NgbModule], - }) - export class AlertErrorComponent implements OnDestroy { - alerts: Alert[] = []; - errorListener: Subscription; - httpErrorListener: Subscription; - -- constructor(private alertService: AlertService, private eventManager: EventManager, translateService: TranslateService) { -+ constructor( -+ private alertService: AlertService, -+ private eventManager: EventManager, -+ translateService: TranslateService, -+ ) { - this.errorListener = eventManager.subscribe('teamDojoApp.error', (response: EventWithContent | string) => { - const errorResponse = (response as EventWithContent).content; - this.addErrorAlert(errorResponse.message, errorResponse.key, errorResponse.params); -@@ -59,7 +67,7 @@ export class AlertErrorComponent implements OnDestroy { - this.addErrorAlert( - httpErrorResponse.error.detail ?? httpErrorResponse.error.message, - httpErrorResponse.error.message, -- httpErrorResponse.error.params -+ httpErrorResponse.error.params, - ); - } else { - this.addErrorAlert(httpErrorResponse.error, httpErrorResponse.error); -@@ -76,7 +84,7 @@ export class AlertErrorComponent implements OnDestroy { - this.addErrorAlert( - httpErrorResponse.error.detail ?? httpErrorResponse.error.message, - httpErrorResponse.error.message, -- httpErrorResponse.error.params -+ httpErrorResponse.error.params, - ); - } else { - this.addErrorAlert(httpErrorResponse.error, httpErrorResponse.error); -diff --git a/src/main/webapp/app/shared/alert/alert-error.model.ts b/src/main/webapp/app/shared/alert/alert-error.model.ts -index 4fca767c..cc8ca7d6 100644 ---- a/src/main/webapp/app/shared/alert/alert-error.model.ts -+++ b/src/main/webapp/app/shared/alert/alert-error.model.ts -@@ -1,3 +1,7 @@ - export class AlertError { -- constructor(public message: string, public key?: string, public params?: { [key: string]: unknown }) {} -+ constructor( -+ public message: string, -+ public key?: string, -+ public params?: { [key: string]: unknown }, -+ ) {} - } -diff --git a/src/main/webapp/app/shared/alert/alert.component.spec.ts b/src/main/webapp/app/shared/alert/alert.component.spec.ts -index 39952d0a..79fe41fa 100644 ---- a/src/main/webapp/app/shared/alert/alert.component.spec.ts -+++ b/src/main/webapp/app/shared/alert/alert.component.spec.ts -@@ -13,7 +13,7 @@ describe('Alert Component', () => { - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- declarations: [AlertComponent], -+ imports: [AlertComponent], - providers: [AlertService], - }) - .overrideTemplate(AlertComponent, '') -diff --git a/src/main/webapp/app/shared/alert/alert.component.ts b/src/main/webapp/app/shared/alert/alert.component.ts -index 2f8461c3..098a90f5 100644 ---- a/src/main/webapp/app/shared/alert/alert.component.ts -+++ b/src/main/webapp/app/shared/alert/alert.component.ts -@@ -1,10 +1,14 @@ - import { Component, OnDestroy, OnInit } from '@angular/core'; -+import { CommonModule } from '@angular/common'; -+import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; - - import { AlertService, Alert } from 'app/core/util/alert.service'; - - @Component({ -+ standalone: true, - selector: 'jhi-alert', - templateUrl: './alert.component.html', -+ imports: [CommonModule, NgbModule], - }) - export class AlertComponent implements OnInit, OnDestroy { - alerts: Alert[] = []; -diff --git a/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts b/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts -index 0fad8baa..3b8c21a2 100644 ---- a/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts -+++ b/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts -@@ -8,7 +8,7 @@ import { Subject } from 'rxjs'; - import { AccountService } from 'app/core/auth/account.service'; - import { Account } from 'app/core/auth/account.model'; - --import { HasAnyAuthorityDirective } from './has-any-authority.directive'; -+import HasAnyAuthorityDirective from './has-any-authority.directive'; - - @Component({ - template: `
`, -@@ -24,7 +24,8 @@ describe('HasAnyAuthorityDirective tests', () => { - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- declarations: [HasAnyAuthorityDirective, TestHasAnyAuthorityDirectiveComponent], -+ imports: [HasAnyAuthorityDirective], -+ declarations: [TestHasAnyAuthorityDirectiveComponent], - providers: [AccountService], - }); - })); -diff --git a/src/main/webapp/app/shared/auth/has-any-authority.directive.ts b/src/main/webapp/app/shared/auth/has-any-authority.directive.ts -index 1e47438b..2cec009e 100644 ---- a/src/main/webapp/app/shared/auth/has-any-authority.directive.ts -+++ b/src/main/webapp/app/shared/auth/has-any-authority.directive.ts -@@ -16,14 +16,19 @@ import { AccountService } from 'app/core/auth/account.service'; - * ``` - */ - @Directive({ -+ standalone: true, - selector: '[jhiHasAnyAuthority]', - }) --export class HasAnyAuthorityDirective implements OnDestroy { -+export default class HasAnyAuthorityDirective implements OnDestroy { - private authorities!: string | string[]; - - private readonly destroy$ = new Subject(); - -- constructor(private accountService: AccountService, private templateRef: TemplateRef, private viewContainerRef: ViewContainerRef) {} -+ constructor( -+ private accountService: AccountService, -+ private templateRef: TemplateRef, -+ private viewContainerRef: ViewContainerRef, -+ ) {} - - @Input() - set jhiHasAnyAuthority(value: string | string[]) { -diff --git a/src/main/webapp/app/shared/date/duration.pipe.ts b/src/main/webapp/app/shared/date/duration.pipe.ts -index a1a583b7..fda99e3a 100644 ---- a/src/main/webapp/app/shared/date/duration.pipe.ts -+++ b/src/main/webapp/app/shared/date/duration.pipe.ts -@@ -3,9 +3,10 @@ import { Pipe, PipeTransform } from '@angular/core'; - import dayjs from 'dayjs/esm'; - - @Pipe({ -+ standalone: true, - name: 'duration', - }) --export class DurationPipe implements PipeTransform { -+export default class DurationPipe implements PipeTransform { - transform(value: any): string { - if (value) { - return dayjs.duration(value).humanize(); -diff --git a/src/main/webapp/app/shared/date/format-medium-date.pipe.spec.ts b/src/main/webapp/app/shared/date/format-medium-date.pipe.spec.ts -index 2d7b22e0..bdb618e4 100644 ---- a/src/main/webapp/app/shared/date/format-medium-date.pipe.spec.ts -+++ b/src/main/webapp/app/shared/date/format-medium-date.pipe.spec.ts -@@ -1,6 +1,6 @@ - import dayjs from 'dayjs/esm'; - --import { FormatMediumDatePipe } from './format-medium-date.pipe'; -+import FormatMediumDatePipe from './format-medium-date.pipe'; - - describe('FormatMediumDatePipe', () => { - const formatMediumDatePipe = new FormatMediumDatePipe(); -diff --git a/src/main/webapp/app/shared/date/format-medium-date.pipe.ts b/src/main/webapp/app/shared/date/format-medium-date.pipe.ts -index fe59b88a..96b679b2 100644 ---- a/src/main/webapp/app/shared/date/format-medium-date.pipe.ts -+++ b/src/main/webapp/app/shared/date/format-medium-date.pipe.ts -@@ -3,9 +3,10 @@ import { Pipe, PipeTransform } from '@angular/core'; - import dayjs from 'dayjs/esm'; - - @Pipe({ -+ standalone: true, - name: 'formatMediumDate', - }) --export class FormatMediumDatePipe implements PipeTransform { -+export default class FormatMediumDatePipe implements PipeTransform { - transform(day: dayjs.Dayjs | null | undefined): string { - return day ? day.format('D MMM YYYY') : ''; - } -diff --git a/src/main/webapp/app/shared/date/format-medium-datetime.pipe.spec.ts b/src/main/webapp/app/shared/date/format-medium-datetime.pipe.spec.ts -index 028cdc9b..c08aa47a 100644 ---- a/src/main/webapp/app/shared/date/format-medium-datetime.pipe.spec.ts -+++ b/src/main/webapp/app/shared/date/format-medium-datetime.pipe.spec.ts -@@ -1,6 +1,6 @@ - import dayjs from 'dayjs/esm'; - --import { FormatMediumDatetimePipe } from './format-medium-datetime.pipe'; -+import FormatMediumDatetimePipe from './format-medium-datetime.pipe'; - - describe('FormatMediumDatePipe', () => { - const formatMediumDatetimePipe = new FormatMediumDatetimePipe(); -diff --git a/src/main/webapp/app/shared/date/format-medium-datetime.pipe.ts b/src/main/webapp/app/shared/date/format-medium-datetime.pipe.ts -index 919be022..bd09cfbf 100644 ---- a/src/main/webapp/app/shared/date/format-medium-datetime.pipe.ts -+++ b/src/main/webapp/app/shared/date/format-medium-datetime.pipe.ts -@@ -3,9 +3,10 @@ import { Pipe, PipeTransform } from '@angular/core'; - import dayjs from 'dayjs/esm'; - - @Pipe({ -+ standalone: true, - name: 'formatMediumDatetime', - }) --export class FormatMediumDatetimePipe implements PipeTransform { -+export default class FormatMediumDatetimePipe implements PipeTransform { - transform(day: dayjs.Dayjs | null | undefined): string { - return day ? day.format('D MMM YYYY HH:mm:ss') : ''; - } -diff --git a/src/main/webapp/app/shared/language/find-language-from-key.pipe.ts b/src/main/webapp/app/shared/language/find-language-from-key.pipe.ts -index d6afce5c..820e3548 100644 ---- a/src/main/webapp/app/shared/language/find-language-from-key.pipe.ts -+++ b/src/main/webapp/app/shared/language/find-language-from-key.pipe.ts -@@ -1,7 +1,10 @@ - import { Pipe, PipeTransform } from '@angular/core'; - --@Pipe({ name: 'findLanguageFromKey' }) --export class FindLanguageFromKeyPipe implements PipeTransform { -+@Pipe({ -+ standalone: true, -+ name: 'findLanguageFromKey', -+}) -+export default class FindLanguageFromKeyPipe implements PipeTransform { - private languages: { [key: string]: { name: string; rtl?: boolean } } = { - en: { name: 'English' }, - de: { name: 'Deutsch' }, -diff --git a/src/main/webapp/app/shared/language/translate.directive.spec.ts b/src/main/webapp/app/shared/language/translate.directive.spec.ts -index 341f6891..b7b5657d 100644 ---- a/src/main/webapp/app/shared/language/translate.directive.spec.ts -+++ b/src/main/webapp/app/shared/language/translate.directive.spec.ts -@@ -2,7 +2,7 @@ import { Component } from '@angular/core'; - import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; - import { TranslateModule, TranslateService } from '@ngx-translate/core'; - --import { TranslateDirective } from './translate.directive'; -+import TranslateDirective from './translate.directive'; - - @Component({ - template: `
`, -@@ -15,8 +15,8 @@ describe('TranslateDirective Tests', () => { - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- imports: [TranslateModule.forRoot()], -- declarations: [TranslateDirective, TestTranslateDirectiveComponent], -+ imports: [TranslateModule.forRoot(), TranslateDirective], -+ declarations: [TestTranslateDirectiveComponent], - }); - })); - -diff --git a/src/main/webapp/app/shared/language/translate.directive.ts b/src/main/webapp/app/shared/language/translate.directive.ts -index 1c3a4098..93f0f2ff 100644 ---- a/src/main/webapp/app/shared/language/translate.directive.ts -+++ b/src/main/webapp/app/shared/language/translate.directive.ts -@@ -9,15 +9,19 @@ import { translationNotFoundMessage } from 'app/config/translation.config'; - * A wrapper directive on top of the translate pipe as the inbuilt translate directive from ngx-translate is too verbose and buggy - */ - @Directive({ -+ standalone: true, - selector: '[jhiTranslate]', - }) --export class TranslateDirective implements OnChanges, OnInit, OnDestroy { -+export default class TranslateDirective implements OnChanges, OnInit, OnDestroy { - @Input() jhiTranslate!: string; - @Input() translateValues?: { [key: string]: unknown }; - - private readonly directiveDestroyed = new Subject(); - -- constructor(private el: ElementRef, private translateService: TranslateService) {} -+ constructor( -+ private el: ElementRef, -+ private translateService: TranslateService, -+ ) {} - - ngOnInit(): void { - this.translateService.onLangChange.pipe(takeUntil(this.directiveDestroyed)).subscribe(() => { -diff --git a/src/main/webapp/app/shared/language/translation.module.ts b/src/main/webapp/app/shared/language/translation.module.ts -index c6fad34d..e6f1a6c7 100644 ---- a/src/main/webapp/app/shared/language/translation.module.ts -+++ b/src/main/webapp/app/shared/language/translation.module.ts -@@ -2,7 +2,7 @@ import { NgModule } from '@angular/core'; - import { HttpClient } from '@angular/common/http'; - import { TranslateModule, TranslateService, TranslateLoader, MissingTranslationHandler } from '@ngx-translate/core'; - import { translatePartialLoader, missingTranslationHandler } from 'app/config/translation.config'; --import { SessionStorageService } from 'ngx-webstorage'; -+import { StateStorageService } from 'app/core/auth/state-storage.service'; - - @NgModule({ - imports: [ -@@ -20,10 +20,13 @@ import { SessionStorageService } from 'ngx-webstorage'; - ], - }) - export class TranslationModule { -- constructor(private translateService: TranslateService, sessionStorageService: SessionStorageService) { -- translateService.setDefaultLang('en'); -+ constructor( -+ private translateService: TranslateService, -+ private stateStorageService: StateStorageService, -+ ) { -+ this.translateService.setDefaultLang('en'); - // if user have changed language and navigates away from the application and back to the application then use previously choosed language -- const langKey = sessionStorageService.retrieve('locale') ?? 'en'; -- translateService.use(langKey); -+ const langKey = this.stateStorageService.getLocale() ?? 'en'; -+ this.translateService.use(langKey); - } - } -diff --git a/src/main/webapp/app/shared/pagination/item-count.component.spec.ts b/src/main/webapp/app/shared/pagination/item-count.component.spec.ts -index 91589bee..9e91b1d4 100644 ---- a/src/main/webapp/app/shared/pagination/item-count.component.spec.ts -+++ b/src/main/webapp/app/shared/pagination/item-count.component.spec.ts -@@ -1,9 +1,9 @@ - import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; - import { TranslateModule } from '@ngx-translate/core'; - --import { TranslateDirective } from 'app/shared/language/translate.directive'; -+import TranslateDirective from 'app/shared/language/translate.directive'; - --import { ItemCountComponent } from './item-count.component'; -+import ItemCountComponent from './item-count.component'; - - describe('ItemCountComponent test', () => { - let comp: ItemCountComponent; -@@ -11,8 +11,7 @@ describe('ItemCountComponent test', () => { - - beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ -- imports: [TranslateModule.forRoot()], -- declarations: [ItemCountComponent, TranslateDirective], -+ imports: [ItemCountComponent, TranslateModule.forRoot(), TranslateDirective], - }).compileComponents(); - })); - -diff --git a/src/main/webapp/app/shared/pagination/item-count.component.ts b/src/main/webapp/app/shared/pagination/item-count.component.ts -index ca05ebb5..0ac35210 100644 ---- a/src/main/webapp/app/shared/pagination/item-count.component.ts -+++ b/src/main/webapp/app/shared/pagination/item-count.component.ts -@@ -1,13 +1,16 @@ - import { Component, Input } from '@angular/core'; -+import TranslateDirective from '../language/translate.directive'; - - /** - * A component that will take care of item count statistics of a pagination. - */ - @Component({ -+ standalone: true, - selector: 'jhi-item-count', - template: `
`, -+ imports: [TranslateDirective], - }) --export class ItemCountComponent { -+export default class ItemCountComponent { - /** - * @param params Contains parameters for component: - * page Current page number -diff --git a/src/main/webapp/app/shared/shared-libs.module.ts b/src/main/webapp/app/shared/shared-libs.module.ts -deleted file mode 100644 -index 368647c3..00000000 ---- a/src/main/webapp/app/shared/shared-libs.module.ts -+++ /dev/null -@@ -1,12 +0,0 @@ --import { NgModule } from '@angular/core'; --import { CommonModule } from '@angular/common'; --import { FormsModule, ReactiveFormsModule } from '@angular/forms'; --import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; --import { InfiniteScrollModule } from 'ngx-infinite-scroll'; --import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; --import { TranslateModule } from '@ngx-translate/core'; -- --@NgModule({ -- exports: [FormsModule, CommonModule, NgbModule, InfiniteScrollModule, FontAwesomeModule, ReactiveFormsModule, TranslateModule], --}) --export class SharedLibsModule {} -diff --git a/src/main/webapp/app/shared/shared.module.ts b/src/main/webapp/app/shared/shared.module.ts -index 22628929..6511f7bc 100644 ---- a/src/main/webapp/app/shared/shared.module.ts -+++ b/src/main/webapp/app/shared/shared.module.ts -@@ -1,46 +1,28 @@ - import { NgModule } from '@angular/core'; -+import { CommonModule } from '@angular/common'; -+import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -+import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; -+import { TranslateModule } from '@ngx-translate/core'; - --import { SharedLibsModule } from './shared-libs.module'; --import { FindLanguageFromKeyPipe } from './language/find-language-from-key.pipe'; --import { TranslateDirective } from './language/translate.directive'; -+import FindLanguageFromKeyPipe from './language/find-language-from-key.pipe'; -+import TranslateDirective from './language/translate.directive'; - import { AlertComponent } from './alert/alert.component'; - import { AlertErrorComponent } from './alert/alert-error.component'; --import { HasAnyAuthorityDirective } from './auth/has-any-authority.directive'; --import { DurationPipe } from './date/duration.pipe'; --import { FormatMediumDatetimePipe } from './date/format-medium-datetime.pipe'; --import { FormatMediumDatePipe } from './date/format-medium-date.pipe'; --import { SortByDirective } from './sort/sort-by.directive'; --import { SortDirective } from './sort/sort.directive'; --import { ItemCountComponent } from './pagination/item-count.component'; - -+/** -+ * Application wide Module -+ */ - @NgModule({ -- imports: [SharedLibsModule], -- declarations: [ -- FindLanguageFromKeyPipe, -- TranslateDirective, -+ imports: [AlertComponent, AlertErrorComponent, FindLanguageFromKeyPipe, TranslateDirective], -+ exports: [ -+ CommonModule, -+ NgbModule, -+ FontAwesomeModule, - AlertComponent, - AlertErrorComponent, -- HasAnyAuthorityDirective, -- DurationPipe, -- FormatMediumDatetimePipe, -- FormatMediumDatePipe, -- SortByDirective, -- SortDirective, -- ItemCountComponent, -- ], -- exports: [ -- SharedLibsModule, -+ TranslateModule, - FindLanguageFromKeyPipe, - TranslateDirective, -- AlertComponent, -- AlertErrorComponent, -- HasAnyAuthorityDirective, -- DurationPipe, -- FormatMediumDatetimePipe, -- FormatMediumDatePipe, -- SortByDirective, -- SortDirective, -- ItemCountComponent, - ], - }) --export class SharedModule {} -+export default class SharedModule {} -diff --git a/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts b/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts -index c9bc01c8..51fef72d 100644 ---- a/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts -+++ b/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts -@@ -4,8 +4,8 @@ import { By } from '@angular/platform-browser'; - import { FaIconComponent, FaIconLibrary } from '@fortawesome/angular-fontawesome'; - import { fas, faSort, faSortDown, faSortUp } from '@fortawesome/free-solid-svg-icons'; - --import { SortByDirective } from './sort-by.directive'; --import { SortDirective } from './sort.directive'; -+import SortByDirective from './sort-by.directive'; -+import SortDirective from './sort.directive'; - - @Component({ - template: ` -@@ -37,7 +37,8 @@ describe('Directive: SortByDirective', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- declarations: [TestSortByDirectiveComponent, SortDirective, SortByDirective, FaIconComponent], -+ imports: [SortDirective, SortByDirective], -+ declarations: [TestSortByDirectiveComponent, FaIconComponent], - }); - fixture = TestBed.createComponent(TestSortByDirectiveComponent); - component = fixture.componentInstance; -diff --git a/src/main/webapp/app/shared/sort/sort-by.directive.ts b/src/main/webapp/app/shared/sort/sort-by.directive.ts -index 8a444f8f..1e8eda6e 100644 ---- a/src/main/webapp/app/shared/sort/sort-by.directive.ts -+++ b/src/main/webapp/app/shared/sort/sort-by.directive.ts -@@ -4,12 +4,13 @@ import { takeUntil } from 'rxjs/operators'; - import { FaIconComponent } from '@fortawesome/angular-fontawesome'; - import { faSort, faSortDown, faSortUp, IconDefinition } from '@fortawesome/free-solid-svg-icons'; - --import { SortDirective } from './sort.directive'; -+import SortDirective from './sort.directive'; - - @Directive({ -+ standalone: true, - selector: '[jhiSortBy]', - }) --export class SortByDirective implements AfterContentInit, OnDestroy { -+export default class SortByDirective implements AfterContentInit, OnDestroy { - @Input() jhiSortBy!: T; - - @ContentChild(FaIconComponent, { static: false }) -diff --git a/src/main/webapp/app/shared/sort/sort.directive.spec.ts b/src/main/webapp/app/shared/sort/sort.directive.spec.ts -index 43017b83..5dc7b875 100644 ---- a/src/main/webapp/app/shared/sort/sort.directive.spec.ts -+++ b/src/main/webapp/app/shared/sort/sort.directive.spec.ts -@@ -2,7 +2,7 @@ import { Component, DebugElement } from '@angular/core'; - import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { By } from '@angular/platform-browser'; - --import { SortDirective } from './sort.directive'; -+import SortDirective from './sort.directive'; - - @Component({ - template: ` -@@ -26,7 +26,8 @@ describe('Directive: SortDirective', () => { - - beforeEach(() => { - TestBed.configureTestingModule({ -- declarations: [TestSortDirectiveComponent, SortDirective], -+ imports: [SortDirective], -+ declarations: [TestSortDirectiveComponent], - }); - fixture = TestBed.createComponent(TestSortDirectiveComponent); - component = fixture.componentInstance; -diff --git a/src/main/webapp/app/shared/sort/sort.directive.ts b/src/main/webapp/app/shared/sort/sort.directive.ts -index c2a069b0..9bc4117e 100644 ---- a/src/main/webapp/app/shared/sort/sort.directive.ts -+++ b/src/main/webapp/app/shared/sort/sort.directive.ts -@@ -1,9 +1,10 @@ - import { Directive, EventEmitter, Input, Output } from '@angular/core'; - - @Directive({ -+ standalone: true, - selector: '[jhiSort]', - }) --export class SortDirective { -+export default class SortDirective { - @Input() - get predicate(): T | undefined { - return this._predicate; -diff --git a/src/main/webapp/content/scss/_bootstrap-variables.scss b/src/main/webapp/content/scss/_bootstrap-variables.scss -index 930daf59..89712f70 100644 ---- a/src/main/webapp/content/scss/_bootstrap-variables.scss -+++ b/src/main/webapp/content/scss/_bootstrap-variables.scss -@@ -34,7 +34,7 @@ $border-radius-sm: 0.1rem; - // Body: - // Settings for the `` element. - --$body-bg: #e4e5e6; -+$body-bg: #ffffff; - - // Typography: - // Font, line-height, and color for body text, headings, and more. -diff --git a/src/main/webapp/favicon.ico b/src/main/webapp/favicon.ico -index 064fca8b..4179874f 100644 -Binary files a/src/main/webapp/favicon.ico and b/src/main/webapp/favicon.ico differ -diff --git a/src/main/webapp/i18n/de/global.json b/src/main/webapp/i18n/de/global.json -index ef00a606..27d59094 100644 ---- a/src/main/webapp/i18n/de/global.json -+++ b/src/main/webapp/i18n/de/global.json -@@ -7,6 +7,7 @@ - "jhipster-needle-menu-add-element": "JHipster will add additional menu entries here (do not translate!)", - "entities": { - "main": "Entitäten", -+ "jhipster-needle-menu-add-entry": "JHipster will add additional entities here (do not translate!)", - "activity": "Activity", - "badge": "Badge", - "badgeSkill": "Badge Skill", -@@ -20,8 +21,7 @@ - "team": "Team", - "teamSkill": "Team Skill", - "training": "Training", -- "teamGroup": "Team Group", -- "jhipster-needle-menu-add-entry": "JHipster will add additional entities here (do not translate!)" -+ "teamGroup": "Team Group" - }, - "account": { - "main": "Zugang", -@@ -111,7 +111,8 @@ - "edit": "Bearbeiten", - "open": "Öffnen", - "save": "Speichern", -- "view": "Details" -+ "view": "Details", -+ "show": "Zeige {{otherEntity}}" - }, - "detail": { - "field": "Feld", -@@ -130,8 +131,12 @@ - "maxbytes": "Dieses Feld sollte nicht mehr als {{max}} bytes haben.", - "pattern": "Dieses Feld muss das Muster {{pattern}} erfüllen.", - "number": "Dieses Feld muss eine Zahl sein.", -- "datetimelocal": "Dieses Feld muss eine Datums- und Zeitangabe enthalten.", -- "expectedPattern": "https://www.foobar.com/" -+ "datetimelocal": "Dieses Feld muss eine Datums- und Zeitangabe enthalten." -+ }, -+ "filters": { -+ "set": "Folgende Filter sind gesetzt", -+ "clear": "Filter entfernen", -+ "clearAll": "Alle Filter entfernen" - } - }, - "error": { -@@ -151,5 +156,5 @@ - "not.image": "Es wird erwartet, dass die Datei ein Bild ist. Die Datei ist jedoch vom Typ \"{{ fileType }}\"" - } - }, -- "footer": "TeamDojo ist ein Open Source Project bereitgestellt durch die iteratec GmbH. Made with ❤️ Version: " -+ "footer": "Dies ist Ihre Fußzeile" - } -diff --git a/src/main/webapp/i18n/de/level.json b/src/main/webapp/i18n/de/level.json -index 221581ce..5f9288ea 100644 ---- a/src/main/webapp/i18n/de/level.json -+++ b/src/main/webapp/i18n/de/level.json -@@ -30,7 +30,8 @@ - "dependsOn": "Depends On", - "skills": "Skills", - "image": "Image", -- "dimension": "Dimension" -+ "dimension": "Dimension", -+ "level": "Level" - } - } - } -diff --git a/src/main/webapp/i18n/de/skill.json b/src/main/webapp/i18n/de/skill.json -index 0304e072..502987e6 100644 ---- a/src/main/webapp/i18n/de/skill.json -+++ b/src/main/webapp/i18n/de/skill.json -@@ -15,28 +15,15 @@ - "question": "Soll Skill {{ id }} wirklich dauerhaft gelöscht werden?" - }, - "detail": { -- "title": "Skill", -- "rateCount": "Stimmen", -- "modalTitle": "Stimme dafür", -- "modalClose": "Schließen", -- "modalSubmit": "Stimme abgeben" -+ "title": "Skill" - }, - "id": "ID", - "titleEN": "Title EN", - "titleDE": "Title DE", -- "titleExplanationShort": "(Was? (Kurzversion <120 Zeichen))", -- "titleExplanationQuestion": "Was ist das Ziel der Fertigkeit?", -- "titleExplanation": "So kurz und klar wie möglich, da diese in den Benachrichtigungen, Chatbeiträgen und in den Übersichtslisten verwendet werden. Da es hier um \"Tun\" geht, sollten Verben verwendet werden, um Missverständnisse zu vermeiden.", - "descriptionEN": "Description EN", - "descriptionDE": "Description DE", -- "descriptionExplanationShort": "(Warum?)", -- "descriptionExplanation": "Warum ist diese Fähigkeit für das Team/die Organisation relevant? Bitte beschreibe die Motivation und den Hintergrund der Fähigkeit!", -- "descriptionExplanationQuestion": "Warum ist diese Fähigkeit für das Team/die Organisation wichtig?", - "implementationEN": "Implementation EN", - "implementationDE": "Implementation DE", -- "implementationExplanationShort": "(Wie?)", -- "implementationExplanation": "Gib hier konkrete Hilfestellung zur Umsetzung dieser Fähigkeit. Bitte beschreibe den Umfang der notwendigen Aktivitäten. Die Beschreibung sollte für jemanden aus dem Fachbereich (Standardentwickler) verständlich sein. Formuliere bitte in ganzen Sätzen.", -- "implementationExplanationQuestion": "Welche Art von Hilfe könnte für die Umsetzung dieser Fähigkeit angeboten werden?", - "validationEN": "Validation EN", - "validationDE": "Validation DE", - "expiryPeriod": "Expiry Period", -@@ -49,8 +36,7 @@ - "badges": "Badges", - "levels": "Levels", - "teams": "Teams", -- "trainings": "Trainings", -- "markdownHint": "Hinweis: Dieses Feld erlaubt Markdown-Syntax." -+ "trainings": "Trainings" - } - } - } -diff --git a/src/main/webapp/i18n/en/global.json b/src/main/webapp/i18n/en/global.json -index 56c262ae..f55d27ca 100644 ---- a/src/main/webapp/i18n/en/global.json -+++ b/src/main/webapp/i18n/en/global.json -@@ -7,6 +7,7 @@ - "jhipster-needle-menu-add-element": "JHipster will add additional menu entries here (do not translate!)", - "entities": { - "main": "Entities", -+ "jhipster-needle-menu-add-entry": "JHipster will add additional entities here (do not translate!)", - "activity": "Activity", - "badge": "Badge", - "badgeSkill": "Badge Skill", -@@ -20,8 +21,7 @@ - "team": "Team", - "teamSkill": "Team Skill", - "training": "Training", -- "teamGroup": "Team Group", -- "jhipster-needle-menu-add-entry": "JHipster will add additional entities here (do not translate!)" -+ "teamGroup": "Team Group" - }, - "account": { - "main": "Account", -@@ -111,7 +111,8 @@ - "edit": "Edit", - "open": "Open", - "save": "Save", -- "view": "View" -+ "view": "View", -+ "show": "Show {{otherEntity}}" - }, - "detail": { - "field": "Field", -@@ -131,8 +132,12 @@ - "pattern": "This field should follow pattern for {{ pattern }}.", - "number": "This field should be a number.", - "datetimelocal": "This field should be a date and time.", -- "patternLogin": "This field can only contain letters, digits and e-mail addresses.", -- "expectedPattern": "https://www.foobar.com/" -+ "patternLogin": "This field can only contain letters, digits and e-mail addresses." -+ }, -+ "filters": { -+ "set": "Following filters are set", -+ "clear": "Clear filter", -+ "clearAll": "Clear all filters" - } - }, - "error": { -@@ -152,5 +157,5 @@ - "not.image": "File was expected to be an image but was found to be \"{{ fileType }}\"" - } - }, -- "footer": "TeamDojo is an Open Source Project provided by iteratec GmbH. Made with ❤️   Version: " -+ "footer": "This is your footer" - } -diff --git a/src/main/webapp/i18n/en/health.json b/src/main/webapp/i18n/en/health.json -index 10f40f00..cbc45bac 100644 ---- a/src/main/webapp/i18n/en/health.json -+++ b/src/main/webapp/i18n/en/health.json -@@ -25,6 +25,7 @@ - "status": { - "UNKNOWN": "UNKNOWN", - "UP": "UP", -+ "OUT_OF_SERVICE": "OUT_OF_SERVICE", - "DOWN": "DOWN" - } - } -diff --git a/src/main/webapp/i18n/en/level.json b/src/main/webapp/i18n/en/level.json -index b278bda5..88ce199a 100644 ---- a/src/main/webapp/i18n/en/level.json -+++ b/src/main/webapp/i18n/en/level.json -@@ -30,7 +30,8 @@ - "dependsOn": "Depends On", - "skills": "Skills", - "image": "Image", -- "dimension": "Dimension" -+ "dimension": "Dimension", -+ "level": "Level" - } - } - } -diff --git a/src/main/webapp/i18n/en/reset.json b/src/main/webapp/i18n/en/reset.json -index 4c35e9a2..062d3e76 100644 ---- a/src/main/webapp/i18n/en/reset.json -+++ b/src/main/webapp/i18n/en/reset.json -@@ -7,7 +7,7 @@ - }, - "messages": { - "info": "Enter the email address you used to register", -- "success": "Check your emails for details on how to reset your password." -+ "success": "Check your email for details on how to reset your password." - } - }, - "finish": { -diff --git a/src/main/webapp/i18n/en/skill.json b/src/main/webapp/i18n/en/skill.json -index 5534ed0d..9ff15757 100644 ---- a/src/main/webapp/i18n/en/skill.json -+++ b/src/main/webapp/i18n/en/skill.json -@@ -15,28 +15,15 @@ - "question": "Are you sure you want to delete Skill {{ id }}?" - }, - "detail": { -- "title": "Skill", -- "rateCount": "Votes", -- "modalTitle": "Vote for it", -- "modalClose": "Close", -- "modalSubmit": "Submit your voting" -+ "title": "Skill" - }, - "id": "ID", - "titleEN": "Title EN", - "titleDE": "Title DE", -- "titleExplanationShort": "(What? (Short version <120 characters))", -- "titleExplanationQuestion": "What is the objective of the skill?", -- "titleExplanation": "As short and clear as possible, since these are used in the notifications, chat posts and in the overview lists. Since this is about \"doing\", verbs should be used to avoid misunderstandings.", - "descriptionEN": "Description EN", - "descriptionDE": "Description DE", -- "descriptionExplanationShort": "(Why?)", -- "descriptionExplanation": "Why is this skill relevant to the team/organization? Please describe the motivation and background of the skill!", -- "descriptionExplanationQuestion": "Why is this skill relevant to the team/organization?", - "implementationEN": "Implementation EN", - "implementationDE": "Implementation DE", -- "implementationExplanationShort": "(How?)", -- "implementationExplanation": "Provide concrete help here to implement this skill. Please describe the scope of necessary activities. The description should be understandable by someone from the subject (default developer). Please formulate whole sentences.", -- "implementationExplanationQuestion": "What kind of help could be provided for this skill's implementation?", - "validationEN": "Validation EN", - "validationDE": "Validation DE", - "expiryPeriod": "Expiry Period", -@@ -49,11 +36,7 @@ - "badges": "Badges", - "levels": "Levels", - "teams": "Teams", -- "trainings": "Trainings", -- "markdownHint": "Hint: This field allows Markdown syntax.", -- "fieldValidation": { -- "expiryPeriod": "The expiry period must be a positive integer." -- } -+ "trainings": "Trainings" - } - } - } -diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html -index c03d2b23..ebbbf81a 100644 ---- a/src/main/webapp/index.html -+++ b/src/main/webapp/index.html -@@ -1,4 +1,4 @@ -- -+ - - - -@@ -110,19 +110,18 @@ - }; - function showError() { - var errorElm = document.getElementById('jhipster-error'); -- if (errorElm && errorElm.style) { -+ if (errorElm?.style) { - errorElm.style.display = 'block'; - } - } - -- - - -diff --git a/src/main/webapp/polyfills.ts b/src/main/webapp/polyfills.ts -deleted file mode 100644 -index a144f00c..00000000 ---- a/src/main/webapp/polyfills.ts -+++ /dev/null -@@ -1,5 +0,0 @@ --import 'zone.js'; --import '@angular/localize/init'; -- --// Fix needed for SockJS, see https://github.com/sockjs/sockjs-client/issues/439 --(window as any).global = window; -diff --git a/src/main/webapp/swagger-ui/index.html b/src/main/webapp/swagger-ui/index.html -index f3d7c7cf..d3d7c0a9 100644 ---- a/src/main/webapp/swagger-ui/index.html -+++ b/src/main/webapp/swagger-ui/index.html -@@ -1,8 +1,9 @@ -- -+ - - - - teamDojo - Swagger UI -+ - - - -@@ -25,6 +26,7 @@ - }; - - window.onload = async function () { -+ const serverBaseUri = document.baseURI.replace('swagger-ui/', ''); - function getCSRF() { - var name = 'XSRF-TOKEN='; - var ca = document.cookie.split(';'); -@@ -35,15 +37,20 @@ - } - return ''; - } -- const axiosConfig = { timeout: 5000 }; -+ const axiosConfig = { -+ timeout: 5000, -+ baseURL: serverBaseUri, -+ }; - -- const baseUrl = '/v3/api-docs'; -+ const baseUrl = 'v3/api-docs'; - let urls; - - if (!urls || urls.length === 0) { - const response = await axios.get('/management/jhiopenapigroups', axiosConfig); - if (Array.isArray(response.data)) { -- urls = response.data.map(({ group, description }) => ({ name: description, url: `${baseUrl}/${group}` })); -+ urls = response.data.map(({ group, description }) => ({ name: description, url: `${serverBaseUri}${baseUrl}/${group}` })); -+ } else { -+ urls = [{ name: 'default', url: `${serverBaseUri}${baseUrl}` }]; - } - } - console.log(`Swagger urls`, urls); -@@ -56,7 +63,8 @@ - if (y.includes('(default)')) return 1; - if (x.includes('(management)')) return -1; - if (y.includes('(management)')) return 1; -- return x < y ? -1 : x > y ? 1 : 0; -+ if (x < y) return -1; -+ return x > y ? 1 : 0; - }); - } - -diff --git a/src/test/java/com/iteratec/teamdojo/IntegrationTest.java b/src/test/java/com/iteratec/teamdojo/IntegrationTest.java -index 0fa877d6..41c830a1 100644 ---- a/src/test/java/com/iteratec/teamdojo/IntegrationTest.java -+++ b/src/test/java/com/iteratec/teamdojo/IntegrationTest.java -@@ -1,19 +1,23 @@ - package com.iteratec.teamdojo; - --import com.iteratec.teamdojo.GeneratedByJHipster; --import com.iteratec.teamdojo.TeamDojoApp; -+import com.iteratec.teamdojo.config.AsyncSyncConfiguration; -+import com.iteratec.teamdojo.config.EmbeddedSQL; - import com.iteratec.teamdojo.config.TestSecurityConfiguration; - import java.lang.annotation.ElementType; - import java.lang.annotation.Retention; - import java.lang.annotation.RetentionPolicy; - import java.lang.annotation.Target; - import org.springframework.boot.test.context.SpringBootTest; -+import org.springframework.test.annotation.DirtiesContext; - - /** - * Base composite annotation for integration tests. - */ - @Target(ElementType.TYPE) - @Retention(RetentionPolicy.RUNTIME) --@SpringBootTest(classes = { TeamDojoApp.class, TestSecurityConfiguration.class }) -+@SpringBootTest(classes = { TeamDojoApp.class, AsyncSyncConfiguration.class, TestSecurityConfiguration.class }) -+@EmbeddedSQL -+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) -+@GeneratedByJHipster - public @interface IntegrationTest { - } -diff --git a/src/test/java/com/iteratec/teamdojo/TechnicalStructureTest.java b/src/test/java/com/iteratec/teamdojo/TechnicalStructureTest.java -index 1516e97e..2c3e8f3c 100644 ---- a/src/test/java/com/iteratec/teamdojo/TechnicalStructureTest.java -+++ b/src/test/java/com/iteratec/teamdojo/TechnicalStructureTest.java -@@ -4,7 +4,6 @@ import static com.tngtech.archunit.base.DescribedPredicate.alwaysTrue; - import static com.tngtech.archunit.core.domain.JavaClass.Predicates.belongToAnyOf; - import static com.tngtech.archunit.library.Architectures.layeredArchitecture; - --import com.iteratec.teamdojo.GeneratedByJHipster; - import com.tngtech.archunit.core.importer.ImportOption.DoNotIncludeTests; - import com.tngtech.archunit.junit.AnalyzeClasses; - import com.tngtech.archunit.junit.ArchTest; -@@ -17,11 +16,12 @@ class TechnicalStructureTest { - // prettier-ignore - @ArchTest - static final ArchRule respectsTechnicalArchitectureLayers = layeredArchitecture() -+ .consideringAllDependencies() - .layer("Config").definedBy("..config..") - .layer("Web").definedBy("..web..") - .optionalLayer("Service").definedBy("..service..") - .layer("Security").definedBy("..security..") -- .layer("Persistence").definedBy("..repository..") -+ .optionalLayer("Persistence").definedBy("..repository..") - .layer("Domain").definedBy("..domain..") - - .whereLayer("Config").mayNotBeAccessedByAnyLayer() -diff --git a/src/test/java/com/iteratec/teamdojo/config/WebConfigurerTest.java b/src/test/java/com/iteratec/teamdojo/config/WebConfigurerTest.java -index 9d8f5a47..8b10a953 100644 ---- a/src/test/java/com/iteratec/teamdojo/config/WebConfigurerTest.java -+++ b/src/test/java/com/iteratec/teamdojo/config/WebConfigurerTest.java -@@ -1,7 +1,6 @@ - package com.iteratec.teamdojo.config; - - import static org.assertj.core.api.Assertions.assertThat; --import static org.assertj.core.api.Assertions.assertThatCode; - import static org.mockito.ArgumentMatchers.any; - import static org.mockito.ArgumentMatchers.anyString; - import static org.mockito.Mockito.*; -@@ -11,10 +10,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. - import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.servlet.*; - import java.io.File; - import java.util.*; --import javax.servlet.*; --import org.h2.server.web.WebServlet; - import org.junit.jupiter.api.BeforeEach; - import org.junit.jupiter.api.Test; - import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; -@@ -52,22 +50,6 @@ class WebConfigurerTest { - webConfigurer = new WebConfigurer(env, props); - } - -- @Test -- void shouldStartUpProdServletContext() throws ServletException { -- env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_PRODUCTION); -- -- assertThatCode(() -> webConfigurer.onStartup(servletContext)).doesNotThrowAnyException(); -- verify(servletContext, never()).addServlet(eq("H2Console"), any(WebServlet.class)); -- } -- -- @Test -- void shouldStartUpDevServletContext() throws ServletException { -- env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT); -- -- assertThatCode(() -> webConfigurer.onStartup(servletContext)).doesNotThrowAnyException(); -- verify(servletContext).addServlet(eq("H2Console"), any(WebServlet.class)); -- } -- - @Test - void shouldCustomizeServletContainer() { - env.setActiveProfiles(JHipsterConstants.SPRING_PROFILE_PRODUCTION); -diff --git a/src/test/java/com/iteratec/teamdojo/config/timezone/HibernateTimeZoneIT.java b/src/test/java/com/iteratec/teamdojo/config/timezone/HibernateTimeZoneIT.java -index c65f4bad..946a1a66 100644 ---- a/src/test/java/com/iteratec/teamdojo/config/timezone/HibernateTimeZoneIT.java -+++ b/src/test/java/com/iteratec/teamdojo/config/timezone/HibernateTimeZoneIT.java -@@ -18,7 +18,13 @@ import org.springframework.jdbc.support.rowset.SqlRowSet; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Integration tests for the ZoneId Hibernate configuration. -+ * Integration tests for verifying the behavior of Hibernate in the context of storing various date and time types across different databases. -+ * The tests focus on ensuring that the stored values are correctly transformed and stored according to the configured timezone. -+ * Timezone is environment specific, and can be adjusted according to your needs. -+ * -+ * For more context, refer to: -+ * - GitHub Issue: https://github.com/jhipster/generator-jhipster/issues/22579 -+ * - Pull Request: https://github.com/jhipster/generator-jhipster/pull/22946 - */ - @IntegrationTest - @GeneratedByJHipster -@@ -36,77 +42,77 @@ class HibernateTimeZoneIT { - private DateTimeWrapper dateTimeWrapper; - private DateTimeFormatter dateTimeFormatter; - private DateTimeFormatter timeFormatter; -+ private DateTimeFormatter offsetTimeFormatter; - private DateTimeFormatter dateFormatter; - - @BeforeEach - public void setup() { - dateTimeWrapper = new DateTimeWrapper(); -- dateTimeWrapper.setInstant(Instant.parse("2014-11-12T05:50:00.0Z")); -- dateTimeWrapper.setLocalDateTime(LocalDateTime.parse("2014-11-12T07:50:00.0")); -+ dateTimeWrapper.setInstant(Instant.parse("2014-11-12T05:10:00.0Z")); -+ dateTimeWrapper.setLocalDateTime(LocalDateTime.parse("2014-11-12T07:20:00.0")); - dateTimeWrapper.setOffsetDateTime(OffsetDateTime.parse("2011-12-14T08:30:00.0Z")); -- dateTimeWrapper.setZonedDateTime(ZonedDateTime.parse("2011-12-14T08:30:00.0Z")); -- dateTimeWrapper.setLocalTime(LocalTime.parse("14:30:00")); -- dateTimeWrapper.setOffsetTime(OffsetTime.parse("14:30:00+02:00")); -+ dateTimeWrapper.setZonedDateTime(ZonedDateTime.parse("2011-12-14T08:40:00.0Z")); -+ dateTimeWrapper.setLocalTime(LocalTime.parse("14:50:00")); -+ dateTimeWrapper.setOffsetTime(OffsetTime.parse("14:00:00+02:00")); - dateTimeWrapper.setLocalDate(LocalDate.parse("2016-09-10")); - - dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S").withZone(ZoneId.of(zoneId)); -- - timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss").withZone(ZoneId.of(zoneId)); -- -+ offsetTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss"); - dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - } - - @Test - @Transactional -- void storeInstantWithZoneIdConfigShouldBeStoredOnGMTTimeZone() { -+ void storeInstantWithZoneIdConfigShouldBeStoredOnConfiguredTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("instant", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeFormatter.format(dateTimeWrapper.getInstant()); - -- assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); -+ assertThatValueFromSqlRowSetIsEqualToExpectedValue(resultSet, expectedValue); - } - - @Test - @Transactional -- void storeLocalDateTimeWithZoneIdConfigShouldBeStoredOnGMTTimeZone() { -+ void storeLocalDateTimeWithZoneIdConfigShouldBeStoredOnConfiguredTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("local_date_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper.getLocalDateTime().atZone(ZoneId.systemDefault()).format(dateTimeFormatter); - -- assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); -+ assertThatValueFromSqlRowSetIsEqualToExpectedValue(resultSet, expectedValue); - } - - @Test - @Transactional -- void storeOffsetDateTimeWithZoneIdConfigShouldBeStoredOnGMTTimeZone() { -+ void storeOffsetDateTimeWithZoneIdConfigShouldBeStoredOnConfiguredTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("offset_date_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper.getOffsetDateTime().format(dateTimeFormatter); - -- assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); -+ assertThatValueFromSqlRowSetIsEqualToExpectedValue(resultSet, expectedValue); - } - - @Test - @Transactional -- void storeZoneDateTimeWithZoneIdConfigShouldBeStoredOnGMTTimeZone() { -+ void storeZoneDateTimeWithZoneIdConfigShouldBeStoredOnConfiguredTimeZone() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("zoned_date_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper.getZonedDateTime().format(dateTimeFormatter); - -- assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); -+ assertThatValueFromSqlRowSetIsEqualToExpectedValue(resultSet, expectedValue); - } - - @Test - @Transactional -- void storeLocalTimeWithZoneIdConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() { -+ void storeLocalTimeWithZoneIdConfigShouldBeStoredOnConfiguredTimeZoneAccordingToHis1stJan1970Value() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("local_time", dateTimeWrapper.getId()); -@@ -117,24 +123,28 @@ class HibernateTimeZoneIT { - .atZone(ZoneId.systemDefault()) - .format(timeFormatter); - -- assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); -+ assertThatValueFromSqlRowSetIsEqualToExpectedValue(resultSet, expectedValue); - } - - @Test - @Transactional -- void storeOffsetTimeWithZoneIdConfigShouldBeStoredOnGMTTimeZoneAccordingToHis1stJan1970Value() { -+ void storeOffsetTimeWithZoneIdConfigShouldBeStoredOnConfiguredTimeZoneAccordingToHis1stJan1970Value() { - dateTimeWrapperRepository.saveAndFlush(dateTimeWrapper); - - String request = generateSqlRequest("offset_time", dateTimeWrapper.getId()); - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper - .getOffsetTime() -- .toLocalTime() -- .atDate(LocalDate.of(1970, Month.JANUARY, 1)) -- .atZone(ZoneId.systemDefault()) -- .format(timeFormatter); -- -- assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); -+ // Convert to configured timezone -+ .withOffsetSameInstant(ZoneId.of(zoneId).getRules().getOffset(Instant.now())) -+ // Normalize to System TimeZone. -+ // TODO this behavior looks a bug, refer to https://github.com/jhipster/generator-jhipster/issues/22579. -+ .withOffsetSameLocal(OffsetDateTime.ofInstant(Instant.EPOCH, ZoneId.systemDefault()).getOffset()) -+ // Convert the normalized value to configured timezone -+ .withOffsetSameInstant(ZoneId.of(zoneId).getRules().getOffset(Instant.EPOCH)) -+ .format(offsetTimeFormatter); -+ -+ assertThatValueFromSqlRowSetIsEqualToExpectedValue(resultSet, expectedValue); - } - - @Test -@@ -146,14 +156,14 @@ class HibernateTimeZoneIT { - SqlRowSet resultSet = jdbcTemplate.queryForRowSet(request); - String expectedValue = dateTimeWrapper.getLocalDate().format(dateFormatter); - -- assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(resultSet, expectedValue); -+ assertThatValueFromSqlRowSetIsEqualToExpectedValue(resultSet, expectedValue); - } - - private String generateSqlRequest(String fieldName, long id) { - return format("SELECT %s FROM jhi_date_time_wrapper where id=%d", fieldName, id); - } - -- private void assertThatDateStoredValueIsEqualToInsertDateValueOnGMTTimeZone(SqlRowSet sqlRowSet, String expectedValue) { -+ private void assertThatValueFromSqlRowSetIsEqualToExpectedValue(SqlRowSet sqlRowSet, String expectedValue) { - while (sqlRowSet.next()) { - String dbValue = sqlRowSet.getString(1); - -diff --git a/src/test/java/com/iteratec/teamdojo/repository/timezone/DateTimeWrapper.java b/src/test/java/com/iteratec/teamdojo/repository/timezone/DateTimeWrapper.java -index 97cc1316..a9c55761 100644 ---- a/src/test/java/com/iteratec/teamdojo/repository/timezone/DateTimeWrapper.java -+++ b/src/test/java/com/iteratec/teamdojo/repository/timezone/DateTimeWrapper.java -@@ -1,10 +1,10 @@ - package com.iteratec.teamdojo.repository.timezone; - - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.*; - import java.io.Serializable; - import java.time.*; - import java.util.Objects; --import javax.persistence.*; - - @Entity - @Table(name = "jhi_date_time_wrapper") -diff --git a/src/test/java/com/iteratec/teamdojo/service/UserServiceIT.java b/src/test/java/com/iteratec/teamdojo/service/UserServiceIT.java -index 6a8d8721..1bb3f04e 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/UserServiceIT.java -+++ b/src/test/java/com/iteratec/teamdojo/service/UserServiceIT.java -@@ -16,8 +16,6 @@ import java.util.Map; - import org.junit.jupiter.api.BeforeEach; - import org.junit.jupiter.api.Test; - import org.springframework.beans.factory.annotation.Autowired; --import org.springframework.data.domain.Page; --import org.springframework.data.domain.PageRequest; - import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; - import org.springframework.security.core.GrantedAuthority; - import org.springframework.security.core.authority.SimpleGrantedAuthority; -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/ActivityMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/ActivityMapperTest.java -index 00cb203c..cfe46a1e 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/ActivityMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/ActivityMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class ActivityMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/BadgeMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/BadgeMapperTest.java -index 5cc931f5..6616a3cf 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/BadgeMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/BadgeMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class BadgeMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/BadgeSkillMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/BadgeSkillMapperTest.java -index 6b105a8a..be2d9a3c 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/BadgeSkillMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/BadgeSkillMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class BadgeSkillMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/CommentMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/CommentMapperTest.java -index 0dea6c58..de517363 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/CommentMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/CommentMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class CommentMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/DimensionMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/DimensionMapperTest.java -index 141e4153..4af33427 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/DimensionMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/DimensionMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class DimensionMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/ImageMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/ImageMapperTest.java -index 524da951..039e6f99 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/ImageMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/ImageMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class ImageMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/LevelMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/LevelMapperTest.java -index a5a70392..0697a0cc 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/LevelMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/LevelMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class LevelMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/LevelSkillMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/LevelSkillMapperTest.java -index 3f5b4244..5d9cdd41 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/LevelSkillMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/LevelSkillMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class LevelSkillMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/ReportMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/ReportMapperTest.java -index 1fb39d86..a0bd4a48 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/ReportMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/ReportMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class ReportMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/SkillMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/SkillMapperTest.java -index f9e7fcbe..71485b0f 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/SkillMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/SkillMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class SkillMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/TeamGroupMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/TeamGroupMapperTest.java -index 254c822d..17f5fde3 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/TeamGroupMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/TeamGroupMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class TeamGroupMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/TeamMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/TeamMapperTest.java -index 0d90a24a..e6870cd1 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/TeamMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/TeamMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class TeamMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/TeamSkillMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/TeamSkillMapperTest.java -index c2e59ea2..d03c7e2d 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/TeamSkillMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/TeamSkillMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class TeamSkillMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/service/mapper/TrainingMapperTest.java b/src/test/java/com/iteratec/teamdojo/service/mapper/TrainingMapperTest.java -index a4389d1a..3d5e2478 100644 ---- a/src/test/java/com/iteratec/teamdojo/service/mapper/TrainingMapperTest.java -+++ b/src/test/java/com/iteratec/teamdojo/service/mapper/TrainingMapperTest.java -@@ -1,10 +1,7 @@ - package com.iteratec.teamdojo.service.mapper; - --import static org.assertj.core.api.Assertions.assertThat; -- - import com.iteratec.teamdojo.GeneratedByJHipster; - import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; - - @GeneratedByJHipster - class TrainingMapperTest { -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/AccountResourceIT.java b/src/test/java/com/iteratec/teamdojo/web/rest/AccountResourceIT.java -index 7af93433..212e634b 100644 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/AccountResourceIT.java -+++ b/src/test/java/com/iteratec/teamdojo/web/rest/AccountResourceIT.java -@@ -24,7 +24,6 @@ import org.springframework.transaction.annotation.Transactional; - * Integration tests for the {@link AccountResource} REST controller. - */ - @AutoConfigureMockMvc --@WithMockUser(value = TEST_USER_LOGIN) - @IntegrationTest - @GeneratedByJHipster - class AccountResourceIT { -@@ -56,7 +55,7 @@ class AccountResourceIT { - - @Test - void testGetUnknownAccount() throws Exception { -- restAccountMockMvc.perform(get("/api/account").accept(MediaType.APPLICATION_JSON)).andExpect(status().isInternalServerError()); -+ restAccountMockMvc.perform(get("/api/account").accept(MediaType.APPLICATION_JSON)).andExpect(status().isUnauthorized()); - } - - @Test -@@ -69,16 +68,10 @@ class AccountResourceIT { - } - - @Test -+ @WithMockUser(TEST_USER_LOGIN) - void testAuthenticatedUser() throws Exception { - restAccountMockMvc -- .perform( -- get("/api/authenticate") -- .with(request -> { -- request.setRemoteUser(TEST_USER_LOGIN); -- return request; -- }) -- .accept(MediaType.APPLICATION_JSON) -- ) -+ .perform(get("/api/authenticate").with(request -> request).accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().string(TEST_USER_LOGIN)); - } -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/BadgeResourceIT.java b/src/test/java/com/iteratec/teamdojo/web/rest/BadgeResourceIT.java -index 1a870004..56cd4097 100644 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/BadgeResourceIT.java -+++ b/src/test/java/com/iteratec/teamdojo/web/rest/BadgeResourceIT.java -@@ -15,12 +15,12 @@ import com.iteratec.teamdojo.domain.Dimension; - import com.iteratec.teamdojo.domain.Image; - import com.iteratec.teamdojo.repository.BadgeRepository; - import com.iteratec.teamdojo.service.BadgeService; --import com.iteratec.teamdojo.service.criteria.BadgeCriteria; - // ### MODIFICATION-START ### - import com.iteratec.teamdojo.service.custom.ExtendedBadgeService; - // ### MODIFICATION-END ### - import com.iteratec.teamdojo.service.dto.BadgeDTO; - import com.iteratec.teamdojo.service.mapper.BadgeMapper; -+import jakarta.persistence.EntityManager; - // ### MODIFICATION-START ### - import com.iteratec.teamdojo.test.util.StaticInstantProvider; - // ### MODIFICATION-END ### -@@ -32,9 +32,6 @@ import java.util.Random; - import java.util.concurrent.atomic.AtomicLong; - import javax.persistence.EntityManager; - import org.junit.jupiter.api.BeforeEach; --// ### MODIFICATION-START ### --import org.junit.jupiter.api.Disabled; --// ### MODIFICATION-END ### - import org.junit.jupiter.api.Test; - import org.junit.jupiter.api.extension.ExtendWith; - import org.mockito.Mock; -@@ -42,7 +39,7 @@ import org.mockito.junit.jupiter.MockitoExtension; - import org.springframework.beans.factory.annotation.Autowired; - import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; - import org.springframework.data.domain.PageImpl; --import org.springframework.data.domain.PageRequest; -+import org.springframework.data.domain.Pageable; - import org.springframework.http.MediaType; - import org.springframework.security.test.context.support.WithMockUser; - import org.springframework.test.web.servlet.MockMvc; -@@ -190,7 +187,7 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) - // ### MODIFICATION-END ### - void createBadge() throws Exception { -@@ -222,12 +219,12 @@ class BadgeResourceIT { - // ### MODIFICATION-START ### - assertThat(testBadge.getCreatedAt()).isEqualTo(CUSTOM_CREATED_AND_UPDATED_AT); - assertThat(testBadge.getUpdatedAt()).isEqualTo(CUSTOM_CREATED_AND_UPDATED_AT); -- // ### MODIFICATION-END ### -+// ### MODIFICATION-END ### - } - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) - // ### MODIFICATION-END ### - void createBadgeWithExistingId() throws Exception { -@@ -323,7 +320,7 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @Disabled("Ignored because we removed the validation for this field in the DTO.") - // ### MODIFICATION-END ### - void checkCreatedAtIsRequired() throws Exception { -@@ -349,7 +346,7 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @Disabled("Ignored because we removed the validation for this field in the DTO.") - // ### MODIFICATION-END ### - void checkUpdatedAtIsRequired() throws Exception { -@@ -411,9 +408,8 @@ class BadgeResourceIT { - void getAllBadgesWithEagerRelationshipsIsNotEnabled() throws Exception { - when(badgeServiceMock.findAllWithEagerRelationships(any())).thenReturn(new PageImpl(new ArrayList<>())); - -- restBadgeMockMvc.perform(get(ENTITY_API_URL + "?eagerload=true")).andExpect(status().isOk()); -- -- verify(badgeServiceMock, times(1)).findAllWithEagerRelationships(any()); -+ restBadgeMockMvc.perform(get(ENTITY_API_URL + "?eagerload=false")).andExpect(status().isOk()); -+ verify(badgeRepositoryMock, times(1)).findAll(any(Pageable.class)); - } - - @Test -@@ -472,19 +468,6 @@ class BadgeResourceIT { - defaultBadgeShouldNotBeFound("titleEN.equals=" + UPDATED_TITLE_EN); - } - -- @Test -- @Transactional -- void getAllBadgesByTitleENIsNotEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); -- -- // Get all the badgeList where titleEN not equals to DEFAULT_TITLE_EN -- defaultBadgeShouldNotBeFound("titleEN.notEquals=" + DEFAULT_TITLE_EN); -- -- // Get all the badgeList where titleEN not equals to UPDATED_TITLE_EN -- defaultBadgeShouldBeFound("titleEN.notEquals=" + UPDATED_TITLE_EN); -- } -- - @Test - @Transactional - void getAllBadgesByTitleENIsInShouldWork() throws Exception { -@@ -550,19 +533,6 @@ class BadgeResourceIT { - defaultBadgeShouldNotBeFound("titleDE.equals=" + UPDATED_TITLE_DE); - } - -- @Test -- @Transactional -- void getAllBadgesByTitleDEIsNotEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); -- -- // Get all the badgeList where titleDE not equals to DEFAULT_TITLE_DE -- defaultBadgeShouldNotBeFound("titleDE.notEquals=" + DEFAULT_TITLE_DE); -- -- // Get all the badgeList where titleDE not equals to UPDATED_TITLE_DE -- defaultBadgeShouldBeFound("titleDE.notEquals=" + UPDATED_TITLE_DE); -- } -- - @Test - @Transactional - void getAllBadgesByTitleDEIsInShouldWork() throws Exception { -@@ -628,19 +598,6 @@ class BadgeResourceIT { - defaultBadgeShouldNotBeFound("descriptionEN.equals=" + UPDATED_DESCRIPTION_EN); - } - -- @Test -- @Transactional -- void getAllBadgesByDescriptionENIsNotEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); -- -- // Get all the badgeList where descriptionEN not equals to DEFAULT_DESCRIPTION_EN -- defaultBadgeShouldNotBeFound("descriptionEN.notEquals=" + DEFAULT_DESCRIPTION_EN); -- -- // Get all the badgeList where descriptionEN not equals to UPDATED_DESCRIPTION_EN -- defaultBadgeShouldBeFound("descriptionEN.notEquals=" + UPDATED_DESCRIPTION_EN); -- } -- - @Test - @Transactional - void getAllBadgesByDescriptionENIsInShouldWork() throws Exception { -@@ -706,19 +663,6 @@ class BadgeResourceIT { - defaultBadgeShouldNotBeFound("descriptionDE.equals=" + UPDATED_DESCRIPTION_DE); - } - -- @Test -- @Transactional -- void getAllBadgesByDescriptionDEIsNotEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); -- -- // Get all the badgeList where descriptionDE not equals to DEFAULT_DESCRIPTION_DE -- defaultBadgeShouldNotBeFound("descriptionDE.notEquals=" + DEFAULT_DESCRIPTION_DE); -- -- // Get all the badgeList where descriptionDE not equals to UPDATED_DESCRIPTION_DE -- defaultBadgeShouldBeFound("descriptionDE.notEquals=" + UPDATED_DESCRIPTION_DE); -- } -- - @Test - @Transactional - void getAllBadgesByDescriptionDEIsInShouldWork() throws Exception { -@@ -784,19 +728,6 @@ class BadgeResourceIT { - defaultBadgeShouldNotBeFound("availableUntil.equals=" + UPDATED_AVAILABLE_UNTIL); - } - -- @Test -- @Transactional -- void getAllBadgesByAvailableUntilIsNotEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); -- -- // Get all the badgeList where availableUntil not equals to DEFAULT_AVAILABLE_UNTIL -- defaultBadgeShouldNotBeFound("availableUntil.notEquals=" + DEFAULT_AVAILABLE_UNTIL); -- -- // Get all the badgeList where availableUntil not equals to UPDATED_AVAILABLE_UNTIL -- defaultBadgeShouldBeFound("availableUntil.notEquals=" + UPDATED_AVAILABLE_UNTIL); -- } -- - @Test - @Transactional - void getAllBadgesByAvailableUntilIsInShouldWork() throws Exception { -@@ -836,19 +767,6 @@ class BadgeResourceIT { - defaultBadgeShouldNotBeFound("availableAmount.equals=" + UPDATED_AVAILABLE_AMOUNT); - } - -- @Test -- @Transactional -- void getAllBadgesByAvailableAmountIsNotEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); -- -- // Get all the badgeList where availableAmount not equals to DEFAULT_AVAILABLE_AMOUNT -- defaultBadgeShouldNotBeFound("availableAmount.notEquals=" + DEFAULT_AVAILABLE_AMOUNT); -- -- // Get all the badgeList where availableAmount not equals to UPDATED_AVAILABLE_AMOUNT -- defaultBadgeShouldBeFound("availableAmount.notEquals=" + UPDATED_AVAILABLE_AMOUNT); -- } -- - @Test - @Transactional - void getAllBadgesByAvailableAmountIsInShouldWork() throws Exception { -@@ -940,19 +858,6 @@ class BadgeResourceIT { - defaultBadgeShouldNotBeFound("requiredScore.equals=" + UPDATED_REQUIRED_SCORE); - } - -- @Test -- @Transactional -- void getAllBadgesByRequiredScoreIsNotEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); -- -- // Get all the badgeList where requiredScore not equals to DEFAULT_REQUIRED_SCORE -- defaultBadgeShouldNotBeFound("requiredScore.notEquals=" + DEFAULT_REQUIRED_SCORE); -- -- // Get all the badgeList where requiredScore not equals to UPDATED_REQUIRED_SCORE -- defaultBadgeShouldBeFound("requiredScore.notEquals=" + UPDATED_REQUIRED_SCORE); -- } -- - @Test - @Transactional - void getAllBadgesByRequiredScoreIsInShouldWork() throws Exception { -@@ -1044,19 +949,6 @@ class BadgeResourceIT { - defaultBadgeShouldNotBeFound("instantMultiplier.equals=" + UPDATED_INSTANT_MULTIPLIER); - } - -- @Test -- @Transactional -- void getAllBadgesByInstantMultiplierIsNotEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); -- -- // Get all the badgeList where instantMultiplier not equals to DEFAULT_INSTANT_MULTIPLIER -- defaultBadgeShouldNotBeFound("instantMultiplier.notEquals=" + DEFAULT_INSTANT_MULTIPLIER); -- -- // Get all the badgeList where instantMultiplier not equals to UPDATED_INSTANT_MULTIPLIER -- defaultBadgeShouldBeFound("instantMultiplier.notEquals=" + UPDATED_INSTANT_MULTIPLIER); -- } -- - @Test - @Transactional - void getAllBadgesByInstantMultiplierIsInShouldWork() throws Exception { -@@ -1148,19 +1040,6 @@ class BadgeResourceIT { - defaultBadgeShouldNotBeFound("completionBonus.equals=" + UPDATED_COMPLETION_BONUS); - } - -- @Test -- @Transactional -- void getAllBadgesByCompletionBonusIsNotEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); -- -- // Get all the badgeList where completionBonus not equals to DEFAULT_COMPLETION_BONUS -- defaultBadgeShouldNotBeFound("completionBonus.notEquals=" + DEFAULT_COMPLETION_BONUS); -- -- // Get all the badgeList where completionBonus not equals to UPDATED_COMPLETION_BONUS -- defaultBadgeShouldBeFound("completionBonus.notEquals=" + UPDATED_COMPLETION_BONUS); -- } -- - @Test - @Transactional - void getAllBadgesByCompletionBonusIsInShouldWork() throws Exception { -@@ -1252,19 +1131,6 @@ class BadgeResourceIT { - defaultBadgeShouldNotBeFound("createdAt.equals=" + UPDATED_CREATED_AT); - } - -- @Test -- @Transactional -- void getAllBadgesByCreatedAtIsNotEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); -- -- // Get all the badgeList where createdAt not equals to DEFAULT_CREATED_AT -- defaultBadgeShouldNotBeFound("createdAt.notEquals=" + DEFAULT_CREATED_AT); -- -- // Get all the badgeList where createdAt not equals to UPDATED_CREATED_AT -- defaultBadgeShouldBeFound("createdAt.notEquals=" + UPDATED_CREATED_AT); -- } -- - @Test - @Transactional - void getAllBadgesByCreatedAtIsInShouldWork() throws Exception { -@@ -1304,19 +1170,6 @@ class BadgeResourceIT { - defaultBadgeShouldNotBeFound("updatedAt.equals=" + UPDATED_UPDATED_AT); - } - -- @Test -- @Transactional -- void getAllBadgesByUpdatedAtIsNotEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); -- -- // Get all the badgeList where updatedAt not equals to DEFAULT_UPDATED_AT -- defaultBadgeShouldNotBeFound("updatedAt.notEquals=" + DEFAULT_UPDATED_AT); -- -- // Get all the badgeList where updatedAt not equals to UPDATED_UPDATED_AT -- defaultBadgeShouldBeFound("updatedAt.notEquals=" + UPDATED_UPDATED_AT); -- } -- - @Test - @Transactional - void getAllBadgesByUpdatedAtIsInShouldWork() throws Exception { -@@ -1346,13 +1199,10 @@ class BadgeResourceIT { - @Test - @Transactional - void getAllBadgesBySkillsIsEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); - BadgeSkill skills; - if (TestUtil.findAll(em, BadgeSkill.class).isEmpty()) { -+ badgeRepository.saveAndFlush(badge); - skills = BadgeSkillResourceIT.createEntity(em); -- em.persist(skills); -- em.flush(); - } else { - skills = TestUtil.findAll(em, BadgeSkill.class).get(0); - } -@@ -1361,7 +1211,6 @@ class BadgeResourceIT { - badge.addSkills(skills); - badgeRepository.saveAndFlush(badge); - Long skillsId = skills.getId(); -- - // Get all the badgeList where skills equals to skillsId - defaultBadgeShouldBeFound("skillsId.equals=" + skillsId); - -@@ -1372,13 +1221,10 @@ class BadgeResourceIT { - @Test - @Transactional - void getAllBadgesByImageIsEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); - Image image; - if (TestUtil.findAll(em, Image.class).isEmpty()) { -+ badgeRepository.saveAndFlush(badge); - image = ImageResourceIT.createEntity(em); -- em.persist(image); -- em.flush(); - } else { - image = TestUtil.findAll(em, Image.class).get(0); - } -@@ -1387,7 +1233,6 @@ class BadgeResourceIT { - badge.setImage(image); - badgeRepository.saveAndFlush(badge); - Long imageId = image.getId(); -- - // Get all the badgeList where image equals to imageId - defaultBadgeShouldBeFound("imageId.equals=" + imageId); - -@@ -1398,13 +1243,10 @@ class BadgeResourceIT { - @Test - @Transactional - void getAllBadgesByDimensionsIsEqualToSomething() throws Exception { -- // Initialize the database -- badgeRepository.saveAndFlush(badge); - Dimension dimensions; - if (TestUtil.findAll(em, Dimension.class).isEmpty()) { -+ badgeRepository.saveAndFlush(badge); - dimensions = DimensionResourceIT.createEntity(em); -- em.persist(dimensions); -- em.flush(); - } else { - dimensions = TestUtil.findAll(em, Dimension.class).get(0); - } -@@ -1413,7 +1255,6 @@ class BadgeResourceIT { - badge.addDimensions(dimensions); - badgeRepository.saveAndFlush(badge); - Long dimensionsId = dimensions.getId(); -- - // Get all the badgeList where dimensions equals to dimensionsId - defaultBadgeShouldBeFound("dimensionsId.equals=" + dimensionsId); - -@@ -1478,17 +1319,14 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -- @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) -- // ### MODIFICATION-END ### -- void putNewBadge() throws Exception { -+ void putExistingBadge() throws Exception { - // Initialize the database - badgeRepository.saveAndFlush(badge); - - int databaseSizeBeforeUpdate = badgeRepository.findAll().size(); - - // Update the badge -- Badge updatedBadge = badgeRepository.findById(badge.getId()).get(); -+ Badge updatedBadge = badgeRepository.findById(badge.getId()).orElseThrow(); - // Disconnect from session so that the updates on updatedBadge are not directly saved in db - em.detach(updatedBadge); - updatedBadge -@@ -1533,7 +1371,7 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) - // ### MODIFICATION-END ### - void putNonExistingBadge() throws Exception { -@@ -1560,9 +1398,6 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -- @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) -- // ### MODIFICATION-END ### - void putWithIdMismatchBadge() throws Exception { - int databaseSizeBeforeUpdate = badgeRepository.findAll().size(); - badge.setId(count.incrementAndGet()); -@@ -1587,7 +1422,10 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### -+ @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) -+ // ### MODIFICATION-END ### -+// ### MODIFICATION-START ### - @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) - // ### MODIFICATION-END ### - void putWithMissingIdPathParamBadge() throws Exception { -@@ -1614,7 +1452,7 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) - // ### MODIFICATION-END ### - void partialUpdateBadgeWithPatch() throws Exception { -@@ -1628,13 +1466,10 @@ class BadgeResourceIT { - partialUpdatedBadge.setId(badge.getId()); - - partialUpdatedBadge -- .titleDE(UPDATED_TITLE_DE) - .descriptionDE(UPDATED_DESCRIPTION_DE) -- .availableUntil(UPDATED_AVAILABLE_UNTIL) - .availableAmount(UPDATED_AVAILABLE_AMOUNT) - .requiredScore(UPDATED_REQUIRED_SCORE) -- .createdAt(UPDATED_CREATED_AT) -- .updatedAt(UPDATED_UPDATED_AT); -+ .instantMultiplier(UPDATED_INSTANT_MULTIPLIER); - - restBadgeMockMvc - .perform( -@@ -1650,21 +1485,21 @@ class BadgeResourceIT { - assertThat(badgeList).hasSize(databaseSizeBeforeUpdate); - Badge testBadge = badgeList.get(badgeList.size() - 1); - assertThat(testBadge.getTitleEN()).isEqualTo(DEFAULT_TITLE_EN); -- assertThat(testBadge.getTitleDE()).isEqualTo(UPDATED_TITLE_DE); -+ assertThat(testBadge.getTitleDE()).isEqualTo(DEFAULT_TITLE_DE); - assertThat(testBadge.getDescriptionEN()).isEqualTo(DEFAULT_DESCRIPTION_EN); - assertThat(testBadge.getDescriptionDE()).isEqualTo(UPDATED_DESCRIPTION_DE); -- assertThat(testBadge.getAvailableUntil()).isEqualTo(UPDATED_AVAILABLE_UNTIL); -+ assertThat(testBadge.getAvailableUntil()).isEqualTo(DEFAULT_AVAILABLE_UNTIL); - assertThat(testBadge.getAvailableAmount()).isEqualTo(UPDATED_AVAILABLE_AMOUNT); - assertThat(testBadge.getRequiredScore()).isEqualTo(UPDATED_REQUIRED_SCORE); -- assertThat(testBadge.getInstantMultiplier()).isEqualTo(DEFAULT_INSTANT_MULTIPLIER); -+ assertThat(testBadge.getInstantMultiplier()).isEqualTo(UPDATED_INSTANT_MULTIPLIER); - assertThat(testBadge.getCompletionBonus()).isEqualTo(DEFAULT_COMPLETION_BONUS); -- assertThat(testBadge.getCreatedAt()).isEqualTo(UPDATED_CREATED_AT); -- assertThat(testBadge.getUpdatedAt()).isEqualTo(UPDATED_UPDATED_AT); -+ assertThat(testBadge.getCreatedAt()).isEqualTo(DEFAULT_CREATED_AT); -+ assertThat(testBadge.getUpdatedAt()).isEqualTo(DEFAULT_UPDATED_AT); - } - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) - // ### MODIFICATION-END ### - void fullUpdateBadgeWithPatch() throws Exception { -@@ -1718,7 +1553,7 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) - // ### MODIFICATION-END ### - void patchNonExistingBadge() throws Exception { -@@ -1745,7 +1580,7 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) - // ### MODIFICATION-END ### - void patchWithIdMismatchBadge() throws Exception { -@@ -1772,7 +1607,7 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) - // ### MODIFICATION-END ### - void patchWithMissingIdPathParamBadge() throws Exception { -@@ -1799,7 +1634,7 @@ class BadgeResourceIT { - - @Test - @Transactional -- // ### MODIFICATION-START ### -+// ### MODIFICATION-START ### - @WithMockUser(username = "admin", authorities = { "ROLE_ADMIN" }) - // ### MODIFICATION-END ### - void deleteBadge() throws Exception { -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/BadgeSkillResourceIT.java b/src/test/java/com/iteratec/teamdojo/web/rest/BadgeSkillResourceIT.java -index 134fde34..f3a92e75 100644 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/BadgeSkillResourceIT.java -+++ b/src/test/java/com/iteratec/teamdojo/web/rest/BadgeSkillResourceIT.java -@@ -14,14 +14,13 @@ import com.iteratec.teamdojo.domain.BadgeSkill; - import com.iteratec.teamdojo.domain.Skill; - import com.iteratec.teamdojo.repository.BadgeSkillRepository; - import com.iteratec.teamdojo.service.BadgeSkillService; --import com.iteratec.teamdojo.service.criteria.BadgeSkillCriteria; - import com.iteratec.teamdojo.service.dto.BadgeSkillDTO; - import com.iteratec.teamdojo.service.mapper.BadgeSkillMapper; -+import jakarta.persistence.EntityManager; - import java.util.ArrayList; - import java.util.List; - import java.util.Random; - import java.util.concurrent.atomic.AtomicLong; --import javax.persistence.EntityManager; - import org.junit.jupiter.api.BeforeEach; - import org.junit.jupiter.api.Test; - import org.junit.jupiter.api.extension.ExtendWith; -@@ -30,7 +29,7 @@ import org.mockito.junit.jupiter.MockitoExtension; - import org.springframework.beans.factory.annotation.Autowired; - import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; - import org.springframework.data.domain.PageImpl; --import org.springframework.data.domain.PageRequest; -+import org.springframework.data.domain.Pageable; - import org.springframework.http.MediaType; - import org.springframework.security.test.context.support.WithMockUser; - import org.springframework.test.web.servlet.MockMvc; -@@ -211,9 +210,8 @@ class BadgeSkillResourceIT { - void getAllBadgeSkillsWithEagerRelationshipsIsNotEnabled() throws Exception { - when(badgeSkillServiceMock.findAllWithEagerRelationships(any())).thenReturn(new PageImpl(new ArrayList<>())); - -- restBadgeSkillMockMvc.perform(get(ENTITY_API_URL + "?eagerload=true")).andExpect(status().isOk()); -- -- verify(badgeSkillServiceMock, times(1)).findAllWithEagerRelationships(any()); -+ restBadgeSkillMockMvc.perform(get(ENTITY_API_URL + "?eagerload=false")).andExpect(status().isOk()); -+ verify(badgeSkillRepositoryMock, times(1)).findAll(any(Pageable.class)); - } - - @Test -@@ -251,13 +249,10 @@ class BadgeSkillResourceIT { - @Test - @Transactional - void getAllBadgeSkillsByBadgeIsEqualToSomething() throws Exception { -- // Initialize the database -- badgeSkillRepository.saveAndFlush(badgeSkill); - Badge badge; - if (TestUtil.findAll(em, Badge.class).isEmpty()) { -+ badgeSkillRepository.saveAndFlush(badgeSkill); - badge = BadgeResourceIT.createEntity(em); -- em.persist(badge); -- em.flush(); - } else { - badge = TestUtil.findAll(em, Badge.class).get(0); - } -@@ -266,7 +261,6 @@ class BadgeSkillResourceIT { - badgeSkill.setBadge(badge); - badgeSkillRepository.saveAndFlush(badgeSkill); - Long badgeId = badge.getId(); -- - // Get all the badgeSkillList where badge equals to badgeId - defaultBadgeSkillShouldBeFound("badgeId.equals=" + badgeId); - -@@ -277,13 +271,10 @@ class BadgeSkillResourceIT { - @Test - @Transactional - void getAllBadgeSkillsBySkillIsEqualToSomething() throws Exception { -- // Initialize the database -- badgeSkillRepository.saveAndFlush(badgeSkill); - Skill skill; - if (TestUtil.findAll(em, Skill.class).isEmpty()) { -+ badgeSkillRepository.saveAndFlush(badgeSkill); - skill = SkillResourceIT.createEntity(em); -- em.persist(skill); -- em.flush(); - } else { - skill = TestUtil.findAll(em, Skill.class).get(0); - } -@@ -292,7 +283,6 @@ class BadgeSkillResourceIT { - badgeSkill.setSkill(skill); - badgeSkillRepository.saveAndFlush(badgeSkill); - Long skillId = skill.getId(); -- - // Get all the badgeSkillList where skill equals to skillId - defaultBadgeSkillShouldBeFound("skillId.equals=" + skillId); - -@@ -346,14 +336,14 @@ class BadgeSkillResourceIT { - - @Test - @Transactional -- void putNewBadgeSkill() throws Exception { -+ void putExistingBadgeSkill() throws Exception { - // Initialize the database - badgeSkillRepository.saveAndFlush(badgeSkill); - - int databaseSizeBeforeUpdate = badgeSkillRepository.findAll().size(); - - // Update the badgeSkill -- BadgeSkill updatedBadgeSkill = badgeSkillRepository.findById(badgeSkill.getId()).get(); -+ BadgeSkill updatedBadgeSkill = badgeSkillRepository.findById(badgeSkill.getId()).orElseThrow(); - // Disconnect from session so that the updates on updatedBadgeSkill are not directly saved in db - em.detach(updatedBadgeSkill); - BadgeSkillDTO badgeSkillDTO = badgeSkillMapper.toDto(updatedBadgeSkill); -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/ClientForwardControllerTest.java b/src/test/java/com/iteratec/teamdojo/web/rest/ClientForwardControllerTest.java -deleted file mode 100644 -index ee206ca0..00000000 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/ClientForwardControllerTest.java -+++ /dev/null -@@ -1,71 +0,0 @@ --package com.iteratec.teamdojo.web.rest; -- --import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; --import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; --import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl; --import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -- --import com.iteratec.teamdojo.GeneratedByJHipster; --import org.junit.jupiter.api.BeforeEach; --import org.junit.jupiter.api.Test; --import org.springframework.http.MediaType; --import org.springframework.test.web.servlet.MockMvc; --import org.springframework.test.web.servlet.ResultActions; --import org.springframework.test.web.servlet.setup.MockMvcBuilders; --import org.springframework.web.bind.annotation.RequestMapping; --import org.springframework.web.bind.annotation.RestController; -- --/** -- * Unit tests for the {@link ClientForwardController} REST controller. -- */ --@GeneratedByJHipster --class ClientForwardControllerTest { -- -- private MockMvc restMockMvc; -- -- @BeforeEach -- public void setup() { -- ClientForwardController clientForwardController = new ClientForwardController(); -- this.restMockMvc = MockMvcBuilders.standaloneSetup(clientForwardController, new TestController()).build(); -- } -- -- @Test -- void getBackendEndpoint() throws Exception { -- restMockMvc -- .perform(get("/test")) -- .andExpect(status().isOk()) -- .andExpect(content().contentTypeCompatibleWith(MediaType.TEXT_PLAIN_VALUE)) -- .andExpect(content().string("test")); -- } -- -- @Test -- void getClientEndpoint() throws Exception { -- ResultActions perform = restMockMvc.perform(get("/non-existant-mapping")); -- perform.andExpect(status().isOk()).andExpect(forwardedUrl("/")); -- } -- -- @Test -- void getNestedClientEndpoint() throws Exception { -- restMockMvc.perform(get("/admin/user-management")).andExpect(status().isOk()).andExpect(forwardedUrl("/")); -- } -- -- @Test -- void getUnmappedDottedEndpoint() throws Exception { -- restMockMvc.perform(get("/foo.js")).andExpect(status().isNotFound()); -- } -- -- @Test -- void getUnmappedNestedDottedEndpoint() throws Exception { -- restMockMvc.perform(get("/foo/bar.js")).andExpect(status().isNotFound()); -- } -- -- @RestController -- @GeneratedByJHipster -- public static class TestController { -- -- @RequestMapping(value = "/test") -- public String test() { -- return "test"; -- } -- } --} -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/LevelSkillResourceIT.java b/src/test/java/com/iteratec/teamdojo/web/rest/LevelSkillResourceIT.java -index ff2eb12a..93ff7f02 100644 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/LevelSkillResourceIT.java -+++ b/src/test/java/com/iteratec/teamdojo/web/rest/LevelSkillResourceIT.java -@@ -14,14 +14,13 @@ import com.iteratec.teamdojo.domain.LevelSkill; - import com.iteratec.teamdojo.domain.Skill; - import com.iteratec.teamdojo.repository.LevelSkillRepository; - import com.iteratec.teamdojo.service.LevelSkillService; --import com.iteratec.teamdojo.service.criteria.LevelSkillCriteria; - import com.iteratec.teamdojo.service.dto.LevelSkillDTO; - import com.iteratec.teamdojo.service.mapper.LevelSkillMapper; -+import jakarta.persistence.EntityManager; - import java.util.ArrayList; - import java.util.List; - import java.util.Random; - import java.util.concurrent.atomic.AtomicLong; --import javax.persistence.EntityManager; - import org.junit.jupiter.api.BeforeEach; - import org.junit.jupiter.api.Test; - import org.junit.jupiter.api.extension.ExtendWith; -@@ -30,7 +29,7 @@ import org.mockito.junit.jupiter.MockitoExtension; - import org.springframework.beans.factory.annotation.Autowired; - import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; - import org.springframework.data.domain.PageImpl; --import org.springframework.data.domain.PageRequest; -+import org.springframework.data.domain.Pageable; - import org.springframework.http.MediaType; - import org.springframework.security.test.context.support.WithMockUser; - import org.springframework.test.web.servlet.MockMvc; -@@ -211,9 +210,8 @@ class LevelSkillResourceIT { - void getAllLevelSkillsWithEagerRelationshipsIsNotEnabled() throws Exception { - when(levelSkillServiceMock.findAllWithEagerRelationships(any())).thenReturn(new PageImpl(new ArrayList<>())); - -- restLevelSkillMockMvc.perform(get(ENTITY_API_URL + "?eagerload=true")).andExpect(status().isOk()); -- -- verify(levelSkillServiceMock, times(1)).findAllWithEagerRelationships(any()); -+ restLevelSkillMockMvc.perform(get(ENTITY_API_URL + "?eagerload=false")).andExpect(status().isOk()); -+ verify(levelSkillRepositoryMock, times(1)).findAll(any(Pageable.class)); - } - - @Test -@@ -251,13 +249,10 @@ class LevelSkillResourceIT { - @Test - @Transactional - void getAllLevelSkillsBySkillIsEqualToSomething() throws Exception { -- // Initialize the database -- levelSkillRepository.saveAndFlush(levelSkill); - Skill skill; - if (TestUtil.findAll(em, Skill.class).isEmpty()) { -+ levelSkillRepository.saveAndFlush(levelSkill); - skill = SkillResourceIT.createEntity(em); -- em.persist(skill); -- em.flush(); - } else { - skill = TestUtil.findAll(em, Skill.class).get(0); - } -@@ -266,7 +261,6 @@ class LevelSkillResourceIT { - levelSkill.setSkill(skill); - levelSkillRepository.saveAndFlush(levelSkill); - Long skillId = skill.getId(); -- - // Get all the levelSkillList where skill equals to skillId - defaultLevelSkillShouldBeFound("skillId.equals=" + skillId); - -@@ -277,13 +271,10 @@ class LevelSkillResourceIT { - @Test - @Transactional - void getAllLevelSkillsByLevelIsEqualToSomething() throws Exception { -- // Initialize the database -- levelSkillRepository.saveAndFlush(levelSkill); - Level level; - if (TestUtil.findAll(em, Level.class).isEmpty()) { -+ levelSkillRepository.saveAndFlush(levelSkill); - level = LevelResourceIT.createEntity(em); -- em.persist(level); -- em.flush(); - } else { - level = TestUtil.findAll(em, Level.class).get(0); - } -@@ -292,7 +283,6 @@ class LevelSkillResourceIT { - levelSkill.setLevel(level); - levelSkillRepository.saveAndFlush(levelSkill); - Long levelId = level.getId(); -- - // Get all the levelSkillList where level equals to levelId - defaultLevelSkillShouldBeFound("levelId.equals=" + levelId); - -@@ -346,14 +336,14 @@ class LevelSkillResourceIT { - - @Test - @Transactional -- void putNewLevelSkill() throws Exception { -+ void putExistingLevelSkill() throws Exception { - // Initialize the database - levelSkillRepository.saveAndFlush(levelSkill); - - int databaseSizeBeforeUpdate = levelSkillRepository.findAll().size(); - - // Update the levelSkill -- LevelSkill updatedLevelSkill = levelSkillRepository.findById(levelSkill.getId()).get(); -+ LevelSkill updatedLevelSkill = levelSkillRepository.findById(levelSkill.getId()).orElseThrow(); - // Disconnect from session so that the updates on updatedLevelSkill are not directly saved in db - em.detach(updatedLevelSkill); - LevelSkillDTO levelSkillDTO = levelSkillMapper.toDto(updatedLevelSkill); -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/PublicUserResourceIT.java b/src/test/java/com/iteratec/teamdojo/web/rest/PublicUserResourceIT.java -index 501063ac..8a3e2226 100644 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/PublicUserResourceIT.java -+++ b/src/test/java/com/iteratec/teamdojo/web/rest/PublicUserResourceIT.java -@@ -7,11 +7,10 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. - - import com.iteratec.teamdojo.GeneratedByJHipster; - import com.iteratec.teamdojo.IntegrationTest; --import com.iteratec.teamdojo.config.TestSecurityConfiguration; - import com.iteratec.teamdojo.domain.User; - import com.iteratec.teamdojo.repository.UserRepository; - import com.iteratec.teamdojo.security.AuthoritiesConstants; --import javax.persistence.EntityManager; -+import jakarta.persistence.EntityManager; - import org.junit.jupiter.api.BeforeEach; - import org.junit.jupiter.api.Test; - import org.springframework.beans.factory.annotation.Autowired; -@@ -23,7 +22,7 @@ import org.springframework.test.web.servlet.MockMvc; - import org.springframework.transaction.annotation.Transactional; - - /** -- * Integration tests for the {@link UserResource} REST controller. -+ * Integration tests for the {@link PublicUserResource} REST controller. - */ - @AutoConfigureMockMvc - @WithMockUser(authorities = AuthoritiesConstants.ADMIN) -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/TeamSkillResourceIT.java b/src/test/java/com/iteratec/teamdojo/web/rest/TeamSkillResourceIT.java -index e64f9d7e..fb2778b6 100644 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/TeamSkillResourceIT.java -+++ b/src/test/java/com/iteratec/teamdojo/web/rest/TeamSkillResourceIT.java -@@ -15,12 +15,12 @@ import com.iteratec.teamdojo.domain.TeamSkill; - import com.iteratec.teamdojo.domain.enumeration.SkillStatus; - import com.iteratec.teamdojo.repository.TeamSkillRepository; - import com.iteratec.teamdojo.service.TeamSkillService; --import com.iteratec.teamdojo.service.criteria.TeamSkillCriteria; - // ### MODIFICATION-START ### - import com.iteratec.teamdojo.service.custom.ExtendedTeamSkillService; - // ### MODIFICATION-END ### - import com.iteratec.teamdojo.service.dto.TeamSkillDTO; - import com.iteratec.teamdojo.service.mapper.TeamSkillMapper; -+import jakarta.persistence.EntityManager; - // ### MODIFICATION-START ### - import com.iteratec.teamdojo.test.util.StaticInstantProvider; - // ### MODIFICATION-END ### -@@ -30,7 +30,6 @@ import java.util.ArrayList; - import java.util.List; - import java.util.Random; - import java.util.concurrent.atomic.AtomicLong; --import javax.persistence.EntityManager; - import org.junit.jupiter.api.BeforeEach; - // ### MODIFICATION-START ### - import org.junit.jupiter.api.Disabled; -@@ -42,7 +41,7 @@ import org.mockito.junit.jupiter.MockitoExtension; - import org.springframework.beans.factory.annotation.Autowired; - import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; - import org.springframework.data.domain.PageImpl; --import org.springframework.data.domain.PageRequest; -+import org.springframework.data.domain.Pageable; - import org.springframework.http.MediaType; - import org.springframework.security.test.context.support.WithMockUser; - import org.springframework.test.web.servlet.MockMvc; -@@ -85,7 +84,7 @@ class TeamSkillResourceIT { - - private static final Instant DEFAULT_UPDATED_AT = Instant.ofEpochMilli(0L); - private static final Instant UPDATED_UPDATED_AT = Instant.now().truncatedTo(ChronoUnit.MILLIS); -- -+ - // ### MODIFICATION-START ### - private static final Instant CUSTOM_CREATED_AND_UPDATED_AT = Instant.now().truncatedTo(ChronoUnit.MILLIS); - // ### MODIFICATION-END ### -@@ -245,7 +244,7 @@ class TeamSkillResourceIT { - assertThat(testTeamSkill.getCreatedAt()).isEqualTo(CUSTOM_CREATED_AND_UPDATED_AT); - assertThat(testTeamSkill.getUpdatedAt()).isEqualTo(CUSTOM_CREATED_AND_UPDATED_AT); - // ### MODIFICATION-END ### -- } -+ } - - @Test - @Transactional -@@ -405,9 +404,8 @@ class TeamSkillResourceIT { - void getAllTeamSkillsWithEagerRelationshipsIsNotEnabled() throws Exception { - when(teamSkillServiceMock.findAllWithEagerRelationships(any())).thenReturn(new PageImpl(new ArrayList<>())); - -- restTeamSkillMockMvc.perform(get(ENTITY_API_URL + "?eagerload=true")).andExpect(status().isOk()); -- -- verify(teamSkillServiceMock, times(1)).findAllWithEagerRelationships(any()); -+ restTeamSkillMockMvc.perform(get(ENTITY_API_URL + "?eagerload=false")).andExpect(status().isOk()); -+ verify(teamSkillRepositoryMock, times(1)).findAll(any(Pageable.class)); - } - - @Test -@@ -464,19 +462,6 @@ class TeamSkillResourceIT { - defaultTeamSkillShouldNotBeFound("completedAt.equals=" + UPDATED_COMPLETED_AT); - } - -- @Test -- @Transactional -- void getAllTeamSkillsByCompletedAtIsNotEqualToSomething() throws Exception { -- // Initialize the database -- teamSkillRepository.saveAndFlush(teamSkill); -- -- // Get all the teamSkillList where completedAt not equals to DEFAULT_COMPLETED_AT -- defaultTeamSkillShouldNotBeFound("completedAt.notEquals=" + DEFAULT_COMPLETED_AT); -- -- // Get all the teamSkillList where completedAt not equals to UPDATED_COMPLETED_AT -- defaultTeamSkillShouldBeFound("completedAt.notEquals=" + UPDATED_COMPLETED_AT); -- } -- - @Test - @Transactional - void getAllTeamSkillsByCompletedAtIsInShouldWork() throws Exception { -@@ -516,19 +501,6 @@ class TeamSkillResourceIT { - defaultTeamSkillShouldNotBeFound("verifiedAt.equals=" + UPDATED_VERIFIED_AT); - } - -- @Test -- @Transactional -- void getAllTeamSkillsByVerifiedAtIsNotEqualToSomething() throws Exception { -- // Initialize the database -- teamSkillRepository.saveAndFlush(teamSkill); -- -- // Get all the teamSkillList where verifiedAt not equals to DEFAULT_VERIFIED_AT -- defaultTeamSkillShouldNotBeFound("verifiedAt.notEquals=" + DEFAULT_VERIFIED_AT); -- -- // Get all the teamSkillList where verifiedAt not equals to UPDATED_VERIFIED_AT -- defaultTeamSkillShouldBeFound("verifiedAt.notEquals=" + UPDATED_VERIFIED_AT); -- } -- - @Test - @Transactional - void getAllTeamSkillsByVerifiedAtIsInShouldWork() throws Exception { -@@ -568,19 +540,6 @@ class TeamSkillResourceIT { - defaultTeamSkillShouldNotBeFound("irrelevant.equals=" + UPDATED_IRRELEVANT); - } - -- @Test -- @Transactional -- void getAllTeamSkillsByIrrelevantIsNotEqualToSomething() throws Exception { -- // Initialize the database -- teamSkillRepository.saveAndFlush(teamSkill); -- -- // Get all the teamSkillList where irrelevant not equals to DEFAULT_IRRELEVANT -- defaultTeamSkillShouldNotBeFound("irrelevant.notEquals=" + DEFAULT_IRRELEVANT); -- -- // Get all the teamSkillList where irrelevant not equals to UPDATED_IRRELEVANT -- defaultTeamSkillShouldBeFound("irrelevant.notEquals=" + UPDATED_IRRELEVANT); -- } -- - @Test - @Transactional - void getAllTeamSkillsByIrrelevantIsInShouldWork() throws Exception { -@@ -620,19 +579,6 @@ class TeamSkillResourceIT { - defaultTeamSkillShouldNotBeFound("skillStatus.equals=" + UPDATED_SKILL_STATUS); - } - -- @Test -- @Transactional -- void getAllTeamSkillsBySkillStatusIsNotEqualToSomething() throws Exception { -- // Initialize the database -- teamSkillRepository.saveAndFlush(teamSkill); -- -- // Get all the teamSkillList where skillStatus not equals to DEFAULT_SKILL_STATUS -- defaultTeamSkillShouldNotBeFound("skillStatus.notEquals=" + DEFAULT_SKILL_STATUS); -- -- // Get all the teamSkillList where skillStatus not equals to UPDATED_SKILL_STATUS -- defaultTeamSkillShouldBeFound("skillStatus.notEquals=" + UPDATED_SKILL_STATUS); -- } -- - @Test - @Transactional - void getAllTeamSkillsBySkillStatusIsInShouldWork() throws Exception { -@@ -672,19 +618,6 @@ class TeamSkillResourceIT { - defaultTeamSkillShouldNotBeFound("note.equals=" + UPDATED_NOTE); - } - -- @Test -- @Transactional -- void getAllTeamSkillsByNoteIsNotEqualToSomething() throws Exception { -- // Initialize the database -- teamSkillRepository.saveAndFlush(teamSkill); -- -- // Get all the teamSkillList where note not equals to DEFAULT_NOTE -- defaultTeamSkillShouldNotBeFound("note.notEquals=" + DEFAULT_NOTE); -- -- // Get all the teamSkillList where note not equals to UPDATED_NOTE -- defaultTeamSkillShouldBeFound("note.notEquals=" + UPDATED_NOTE); -- } -- - @Test - @Transactional - void getAllTeamSkillsByNoteIsInShouldWork() throws Exception { -@@ -750,19 +683,6 @@ class TeamSkillResourceIT { - defaultTeamSkillShouldNotBeFound("vote.equals=" + UPDATED_VOTE); - } - -- @Test -- @Transactional -- void getAllTeamSkillsByVoteIsNotEqualToSomething() throws Exception { -- // Initialize the database -- teamSkillRepository.saveAndFlush(teamSkill); -- -- // Get all the teamSkillList where vote not equals to DEFAULT_VOTE -- defaultTeamSkillShouldNotBeFound("vote.notEquals=" + DEFAULT_VOTE); -- -- // Get all the teamSkillList where vote not equals to UPDATED_VOTE -- defaultTeamSkillShouldBeFound("vote.notEquals=" + UPDATED_VOTE); -- } -- - @Test - @Transactional - void getAllTeamSkillsByVoteIsInShouldWork() throws Exception { -@@ -854,19 +774,6 @@ class TeamSkillResourceIT { - defaultTeamSkillShouldNotBeFound("voters.equals=" + UPDATED_VOTERS); - } - -- @Test -- @Transactional -- void getAllTeamSkillsByVotersIsNotEqualToSomething() throws Exception { -- // Initialize the database -- teamSkillRepository.saveAndFlush(teamSkill); -- -- // Get all the teamSkillList where voters not equals to DEFAULT_VOTERS -- defaultTeamSkillShouldNotBeFound("voters.notEquals=" + DEFAULT_VOTERS); -- -- // Get all the teamSkillList where voters not equals to UPDATED_VOTERS -- defaultTeamSkillShouldBeFound("voters.notEquals=" + UPDATED_VOTERS); -- } -- - @Test - @Transactional - void getAllTeamSkillsByVotersIsInShouldWork() throws Exception { -@@ -932,19 +839,6 @@ class TeamSkillResourceIT { - defaultTeamSkillShouldNotBeFound("createdAt.equals=" + UPDATED_CREATED_AT); - } - -- @Test -- @Transactional -- void getAllTeamSkillsByCreatedAtIsNotEqualToSomething() throws Exception { -- // Initialize the database -- teamSkillRepository.saveAndFlush(teamSkill); -- -- // Get all the teamSkillList where createdAt not equals to DEFAULT_CREATED_AT -- defaultTeamSkillShouldNotBeFound("createdAt.notEquals=" + DEFAULT_CREATED_AT); -- -- // Get all the teamSkillList where createdAt not equals to UPDATED_CREATED_AT -- defaultTeamSkillShouldBeFound("createdAt.notEquals=" + UPDATED_CREATED_AT); -- } -- - @Test - @Transactional - void getAllTeamSkillsByCreatedAtIsInShouldWork() throws Exception { -@@ -984,19 +878,6 @@ class TeamSkillResourceIT { - defaultTeamSkillShouldNotBeFound("updatedAt.equals=" + UPDATED_UPDATED_AT); - } - -- @Test -- @Transactional -- void getAllTeamSkillsByUpdatedAtIsNotEqualToSomething() throws Exception { -- // Initialize the database -- teamSkillRepository.saveAndFlush(teamSkill); -- -- // Get all the teamSkillList where updatedAt not equals to DEFAULT_UPDATED_AT -- defaultTeamSkillShouldNotBeFound("updatedAt.notEquals=" + DEFAULT_UPDATED_AT); -- -- // Get all the teamSkillList where updatedAt not equals to UPDATED_UPDATED_AT -- defaultTeamSkillShouldBeFound("updatedAt.notEquals=" + UPDATED_UPDATED_AT); -- } -- - @Test - @Transactional - void getAllTeamSkillsByUpdatedAtIsInShouldWork() throws Exception { -@@ -1026,13 +907,10 @@ class TeamSkillResourceIT { - @Test - @Transactional - void getAllTeamSkillsBySkillIsEqualToSomething() throws Exception { -- // Initialize the database -- teamSkillRepository.saveAndFlush(teamSkill); - Skill skill; - if (TestUtil.findAll(em, Skill.class).isEmpty()) { -+ teamSkillRepository.saveAndFlush(teamSkill); - skill = SkillResourceIT.createEntity(em); -- em.persist(skill); -- em.flush(); - } else { - skill = TestUtil.findAll(em, Skill.class).get(0); - } -@@ -1041,7 +919,6 @@ class TeamSkillResourceIT { - teamSkill.setSkill(skill); - teamSkillRepository.saveAndFlush(teamSkill); - Long skillId = skill.getId(); -- - // Get all the teamSkillList where skill equals to skillId - defaultTeamSkillShouldBeFound("skillId.equals=" + skillId); - -@@ -1052,13 +929,10 @@ class TeamSkillResourceIT { - @Test - @Transactional - void getAllTeamSkillsByTeamIsEqualToSomething() throws Exception { -- // Initialize the database -- teamSkillRepository.saveAndFlush(teamSkill); - Team team; - if (TestUtil.findAll(em, Team.class).isEmpty()) { -+ teamSkillRepository.saveAndFlush(teamSkill); - team = TeamResourceIT.createEntity(em); -- em.persist(team); -- em.flush(); - } else { - team = TestUtil.findAll(em, Team.class).get(0); - } -@@ -1067,7 +941,6 @@ class TeamSkillResourceIT { - teamSkill.setTeam(team); - teamSkillRepository.saveAndFlush(teamSkill); - Long teamId = team.getId(); -- - // Get all the teamSkillList where team equals to teamId - defaultTeamSkillShouldBeFound("teamId.equals=" + teamId); - -@@ -1130,14 +1003,14 @@ class TeamSkillResourceIT { - - @Test - @Transactional -- void putNewTeamSkill() throws Exception { -+ void putExistingTeamSkill() throws Exception { - // Initialize the database - teamSkillRepository.saveAndFlush(teamSkill); - - int databaseSizeBeforeUpdate = teamSkillRepository.findAll().size(); - - // Update the teamSkill -- TeamSkill updatedTeamSkill = teamSkillRepository.findById(teamSkill.getId()).get(); -+ TeamSkill updatedTeamSkill = teamSkillRepository.findById(teamSkill.getId()).orElseThrow(); - // Disconnect from session so that the updates on updatedTeamSkill are not directly saved in db - em.detach(updatedTeamSkill); - updatedTeamSkill -@@ -1262,9 +1135,7 @@ class TeamSkillResourceIT { - - partialUpdatedTeamSkill - .completedAt(UPDATED_COMPLETED_AT) -- .verifiedAt(UPDATED_VERIFIED_AT) -- .skillStatus(UPDATED_SKILL_STATUS) -- .note(UPDATED_NOTE) -+ .irrelevant(UPDATED_IRRELEVANT) - .vote(UPDATED_VOTE) - .voters(UPDATED_VOTERS) - .updatedAt(UPDATED_UPDATED_AT); -@@ -1283,10 +1154,10 @@ class TeamSkillResourceIT { - assertThat(teamSkillList).hasSize(databaseSizeBeforeUpdate); - TeamSkill testTeamSkill = teamSkillList.get(teamSkillList.size() - 1); - assertThat(testTeamSkill.getCompletedAt()).isEqualTo(UPDATED_COMPLETED_AT); -- assertThat(testTeamSkill.getVerifiedAt()).isEqualTo(UPDATED_VERIFIED_AT); -- assertThat(testTeamSkill.getIrrelevant()).isEqualTo(DEFAULT_IRRELEVANT); -- assertThat(testTeamSkill.getSkillStatus()).isEqualTo(UPDATED_SKILL_STATUS); -- assertThat(testTeamSkill.getNote()).isEqualTo(UPDATED_NOTE); -+ assertThat(testTeamSkill.getVerifiedAt()).isEqualTo(DEFAULT_VERIFIED_AT); -+ assertThat(testTeamSkill.getIrrelevant()).isEqualTo(UPDATED_IRRELEVANT); -+ assertThat(testTeamSkill.getSkillStatus()).isEqualTo(DEFAULT_SKILL_STATUS); -+ assertThat(testTeamSkill.getNote()).isEqualTo(DEFAULT_NOTE); - assertThat(testTeamSkill.getVote()).isEqualTo(UPDATED_VOTE); - assertThat(testTeamSkill.getVoters()).isEqualTo(UPDATED_VOTERS); - assertThat(testTeamSkill.getCreatedAt()).isEqualTo(DEFAULT_CREATED_AT); -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/TestUtil.java b/src/test/java/com/iteratec/teamdojo/web/rest/TestUtil.java -index a64b9154..790c7dd6 100644 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/TestUtil.java -+++ b/src/test/java/com/iteratec/teamdojo/web/rest/TestUtil.java -@@ -7,16 +7,16 @@ import com.fasterxml.jackson.databind.ObjectMapper; - import com.fasterxml.jackson.databind.SerializationFeature; - import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - import com.iteratec.teamdojo.GeneratedByJHipster; -+import jakarta.persistence.EntityManager; -+import jakarta.persistence.TypedQuery; -+import jakarta.persistence.criteria.CriteriaBuilder; -+import jakarta.persistence.criteria.CriteriaQuery; -+import jakarta.persistence.criteria.Root; - import java.io.IOException; - import java.math.BigDecimal; - import java.time.ZonedDateTime; - import java.time.format.DateTimeParseException; - import java.util.List; --import javax.persistence.EntityManager; --import javax.persistence.TypedQuery; --import javax.persistence.criteria.CriteriaBuilder; --import javax.persistence.criteria.CriteriaQuery; --import javax.persistence.criteria.Root; - import org.hamcrest.Description; - import org.hamcrest.TypeSafeDiagnosingMatcher; - import org.hamcrest.TypeSafeMatcher; -@@ -191,16 +191,16 @@ public final class TestUtil { - } - - /** -- * Makes a an executes a query to the EntityManager finding all stored objects. -+ * Executes a query on the EntityManager finding all stored objects. - * @param The type of objects to be searched - * @param em The instance of the EntityManager -- * @param clss The class type to be searched -+ * @param clazz The class type to be searched - * @return A list of all found objects - */ -- public static List findAll(EntityManager em, Class clss) { -+ public static List findAll(EntityManager em, Class clazz) { - CriteriaBuilder cb = em.getCriteriaBuilder(); -- CriteriaQuery cq = cb.createQuery(clss); -- Root rootEntry = cq.from(clss); -+ CriteriaQuery cq = cb.createQuery(clazz); -+ Root rootEntry = cq.from(clazz); - CriteriaQuery all = cq.select(rootEntry); - TypedQuery allQuery = em.createQuery(all); - return allQuery.getResultList(); -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/UserResourceIT.java b/src/test/java/com/iteratec/teamdojo/web/rest/UserResourceIT.java -index 6d8c88a5..c9b436eb 100644 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/UserResourceIT.java -+++ b/src/test/java/com/iteratec/teamdojo/web/rest/UserResourceIT.java -@@ -1,9 +1,6 @@ - package com.iteratec.teamdojo.web.rest; - - import static org.assertj.core.api.Assertions.assertThat; --import static org.hamcrest.Matchers.hasItem; --import static org.hamcrest.Matchers.hasItems; --import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; - import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; - import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -@@ -14,22 +11,19 @@ import com.iteratec.teamdojo.domain.User; - import com.iteratec.teamdojo.repository.UserRepository; - import com.iteratec.teamdojo.security.AuthoritiesConstants; - import com.iteratec.teamdojo.service.dto.AdminUserDTO; --import com.iteratec.teamdojo.service.dto.UserDTO; - import com.iteratec.teamdojo.service.mapper.UserMapper; -+import jakarta.persistence.EntityManager; - import java.time.Instant; - import java.util.*; - import java.util.function.Consumer; --import javax.persistence.EntityManager; - import org.apache.commons.lang3.RandomStringUtils; - import org.junit.jupiter.api.BeforeEach; - import org.junit.jupiter.api.Test; - import org.springframework.beans.factory.annotation.Autowired; - import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; - import org.springframework.cache.CacheManager; --import org.springframework.http.MediaType; - import org.springframework.security.test.context.support.WithMockUser; - import org.springframework.test.web.servlet.MockMvc; --import org.springframework.transaction.annotation.Transactional; - - /** - * Integration tests for the {@link UserResource} REST controller. -@@ -100,6 +94,7 @@ class UserResourceIT { - * Setups the database with one user. - */ - public static User initTestUser(UserRepository userRepository, EntityManager em) { -+ userRepository.deleteAll(); - User user = createEntity(em); - user.setLogin(DEFAULT_LOGIN); - user.setEmail(DEFAULT_EMAIL); -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/WithUnauthenticatedMockUser.java b/src/test/java/com/iteratec/teamdojo/web/rest/WithUnauthenticatedMockUser.java -index 8a6014e1..1bbc03d6 100644 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/WithUnauthenticatedMockUser.java -+++ b/src/test/java/com/iteratec/teamdojo/web/rest/WithUnauthenticatedMockUser.java -@@ -13,6 +13,7 @@ import org.springframework.security.test.context.support.WithSecurityContextFact - @Target({ ElementType.METHOD, ElementType.TYPE }) - @Retention(RetentionPolicy.RUNTIME) - @WithSecurityContext(factory = WithUnauthenticatedMockUser.Factory.class) -+@GeneratedByJHipster - public @interface WithUnauthenticatedMockUser { - @GeneratedByJHipster - class Factory implements WithSecurityContextFactory { -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslatorIT.java b/src/test/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslatorIT.java -index eb828492..21e7bf6d 100644 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslatorIT.java -+++ b/src/test/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslatorIT.java -@@ -12,7 +12,6 @@ import com.iteratec.teamdojo.IntegrationTest; - import org.junit.jupiter.api.Test; - import org.springframework.beans.factory.annotation.Autowired; - import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; --import org.springframework.boot.test.context.SpringBootTest; - import org.springframework.http.MediaType; - import org.springframework.security.test.context.support.WithMockUser; - import org.springframework.test.web.servlet.MockMvc; -@@ -98,7 +97,7 @@ class ExceptionTranslatorIT { - .andExpect(status().isMethodNotAllowed()) - .andExpect(content().contentType(MediaType.APPLICATION_PROBLEM_JSON)) - .andExpect(jsonPath("$.message").value("error.http.405")) -- .andExpect(jsonPath("$.detail").value("Request method 'POST' not supported")); -+ .andExpect(jsonPath("$.detail").value("Request method 'POST' is not supported")); - } - - @Test -diff --git a/src/test/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslatorTestController.java b/src/test/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslatorTestController.java -index 51a31f30..e8428ab8 100644 ---- a/src/test/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslatorTestController.java -+++ b/src/test/java/com/iteratec/teamdojo/web/rest/errors/ExceptionTranslatorTestController.java -@@ -1,8 +1,8 @@ - package com.iteratec.teamdojo.web.rest.errors; - - import com.iteratec.teamdojo.GeneratedByJHipster; --import javax.validation.Valid; --import javax.validation.constraints.NotNull; -+import jakarta.validation.Valid; -+import jakarta.validation.constraints.NotNull; - import org.springframework.dao.ConcurrencyFailureException; - import org.springframework.http.HttpStatus; - import org.springframework.security.access.AccessDeniedException; -diff --git a/src/test/resources/config/application-testcontainers.yml b/src/test/resources/config/application-testcontainers.yml -deleted file mode 100644 -index c07c62e8..00000000 ---- a/src/test/resources/config/application-testcontainers.yml -+++ /dev/null -@@ -1,22 +0,0 @@ --# =================================================================== --# Spring Boot configuration. --# --# This configuration is used for unit/integration tests with testcontainers database containers. --# --# To activate this configuration launch integration tests with the 'testcontainers' profile --# --# More information on database containers: https://www.testcontainers.org/modules/databases/ --# =================================================================== -- --spring: -- datasource: -- type: com.zaxxer.hikari.HikariDataSource -- driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver -- url: jdbc:tc:postgresql:14.2:///teamDojo?TC_TMPFS=/testtmpfs:rw -- username: teamDojo -- password: -- hikari: -- poolName: Hikari -- auto-commit: false -- jpa: -- database-platform: tech.jhipster.domain.util.FixedPostgreSQL10Dialect -diff --git a/src/test/resources/config/application.yml b/src/test/resources/config/application.yml -index c6024b68..947e3ea5 100644 ---- a/src/test/resources/config/application.yml -+++ b/src/test/resources/config/application.yml -@@ -14,48 +14,18 @@ - # =================================================================== - - spring: -- profiles: -- # Uncomment the following line to enable tests against production database type rather than H2, using Testcontainers -- #active: testcontainers - application: - name: teamDojo -- datasource: -- type: com.zaxxer.hikari.HikariDataSource -- url: jdbc:h2:mem:teamdojo;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE -- name: -- username: -- password: -- hikari: -- auto-commit: false -+ # Replace by 'prod, faker' to add the faker context and have sample data loaded in production -+ liquibase: -+ contexts: test - jackson: - serialization: - write-durations-as-timestamps: false -- jpa: -- database-platform: tech.jhipster.domain.util.FixedH2Dialect -- open-in-view: false -- hibernate: -- ddl-auto: none -- naming: -- physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy -- implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy -- properties: -- hibernate.id.new_generator_mappings: true -- hibernate.connection.provider_disables_autocommit: true -- hibernate.cache.use_second_level_cache: false -- hibernate.cache.use_query_cache: false -- hibernate.generate_statistics: false -- hibernate.hbm2ddl.auto: validate -- hibernate.jdbc.time_zone: UTC -- hibernate.query.fail_on_pagination_over_collection_fetch: true -- liquibase: -- contexts: test - mail: - host: localhost - main: - allow-bean-definition-overriding: true -- mvc: -- pathmatch: -- matching-strategy: ant_path_matcher - messages: - basename: i18n/messages - task: -@@ -77,7 +47,7 @@ spring: - client: - provider: - oidc: -- issuer-uri: http://DO_NOT_CALL:9080/auth/realms/jhipster -+ issuer-uri: http://DO_NOT_CALL:9080/realms/jhipster - - server: - port: 10344 -@@ -88,10 +58,12 @@ server: - # - # Full reference is available at: https://www.jhipster.tech/common-application-properties/ - # =================================================================== -- - jhipster: - clientApp: - name: 'teamDojoApp' -+ mail: -+ from: teamDojo@localhost.com -+ base-url: http://127.0.0.1:8080 - logging: - # To test json console appender - use-json-format: false -@@ -99,10 +71,8 @@ jhipster: - enabled: false - host: localhost - port: 5000 -- queue-size: 512 -- mail: -- from: test@localhost -- base-url: http://127.0.0.1:8080 -+ ring-buffer-size: 512 -+ - # =================================================================== - # Application specific properties - # Add your own application properties here, see the ApplicationProperties class -@@ -113,3 +83,7 @@ jhipster: - # =================================================================== - - # application: -+management: -+ health: -+ mail: -+ enabled: false -diff --git a/src/test/resources/junit-platform.properties b/src/test/resources/junit-platform.properties -index d1f8afd9..65cf5086 100644 ---- a/src/test/resources/junit-platform.properties -+++ b/src/test/resources/junit-platform.properties -@@ -1,3 +1,4 @@ - junit.jupiter.execution.timeout.default = 15 s - junit.jupiter.execution.timeout.testable.method.default = 15 s - junit.jupiter.execution.timeout.beforeall.method.default = 60 s -+junit.jupiter.testclass.order.default=com.iteratec.teamdojo.config.SpringBootTestClassOrderer -diff --git a/src/test/resources/logback.xml b/src/test/resources/logback.xml -index e8035b3f..82a2c2ac 100644 ---- a/src/test/resources/logback.xml -+++ b/src/test/resources/logback.xml -@@ -12,9 +12,9 @@ - - - -- -- -- -+ -+ -+ - - - -@@ -38,14 +38,10 @@ - - - -- -- - - -- -- -- WARN -- -- -+ -+ -+ - - -diff --git a/tsconfig.app.json b/tsconfig.app.json -index 8ed73e4c..8feb6da5 100644 ---- a/tsconfig.app.json -+++ b/tsconfig.app.json -@@ -1,9 +1,9 @@ - { - "extends": "./tsconfig.json", - "compilerOptions": { -- "outDir": "./build/resources/main/static/app", -- "types": [] -+ "outDir": "./build/out-tsc/app", -+ "types": ["@angular/localize"] - }, -- "files": ["src/main/webapp/main.ts", "src/main/webapp/polyfills.ts"], -+ "files": ["src/main/webapp/main.ts"], - "include": ["src/main/webapp/**/*.d.ts"] - } -diff --git a/tsconfig.json b/tsconfig.json -index 87a0952d..d44168b5 100644 ---- a/tsconfig.json -+++ b/tsconfig.json -@@ -1,9 +1,10 @@ - { - "compilerOptions": { - "baseUrl": "src/main/webapp/", -- "outDir": "./build/resources/main/static/", -+ "outDir": "./build/out-tsc/root", - "forceConsistentCasingInFileNames": true, - "strict": true, -+ "strictNullChecks": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, -@@ -14,10 +15,17 @@ - "importHelpers": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, -- "target": "es2017", -+ "useDefineForClassFields": false, -+ "target": "es2022", - "module": "es2020", -- "lib": ["es2018", "dom"] -+ "types": [], -+ "lib": ["es2018", "es2020", "dom"] - }, -+ "references": [ -+ { -+ "path": "tsconfig.spec.json" -+ } -+ ], - "angularCompilerOptions": { - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, -diff --git a/tsconfig.spec.json b/tsconfig.spec.json -index 4f65fd41..eb321380 100644 ---- a/tsconfig.spec.json -+++ b/tsconfig.spec.json -@@ -1,9 +1,9 @@ - { - "extends": "./tsconfig.json", -+ "include": ["src/main/webapp/**/*.ts"], - "compilerOptions": { -+ "composite": true, - "outDir": "build/out-tsc/spec", - "types": ["jest", "node"] -- }, -- "files": ["src/main/webapp/polyfills.ts"], -- "include": ["src/main/webapp/**/*.spec.ts", "src/main/webapp/**/*.d.ts"] -+ } - } -diff --git a/webpack/logo-jhipster.png b/webpack/logo-jhipster.png -old mode 100755 -new mode 100644 -diff --git a/webpack/proxy.conf.js b/webpack/proxy.conf.js -index 201ef591..c5a7bff4 100644 ---- a/webpack/proxy.conf.js -+++ b/webpack/proxy.conf.js -@@ -1,7 +1,8 @@ - function setupProxy({ tls }) { -+ const serverResources = ['/api', '/services', '/management', '/v3/api-docs', '/h2-console', '/oauth2', '/login', '/auth', '/health']; - const conf = [ - { -- context: ['/api', '/services', '/management', '/v3/api-docs', '/h2-console', '/oauth2', '/login', '/auth', '/health'], -+ context: serverResources, - target: `http${tls ? 's' : ''}://localhost:8080`, - secure: false, - changeOrigin: tls, -diff --git a/webpack/webpack.custom.js b/webpack/webpack.custom.js -index c1186a90..6c3c0c53 100644 ---- a/webpack/webpack.custom.js -+++ b/webpack/webpack.custom.js -@@ -23,12 +23,16 @@ module.exports = async (config, options, targetOptions) => { - if (config.mode === 'development') { - config.plugins.push( - new ESLintPlugin({ -- extensions: ['js', 'ts'], -+ baseConfig: { -+ parserOptions: { -+ project: ['../tsconfig.app.json'], -+ }, -+ }, - }), - new WebpackNotifierPlugin({ - title: 'Team Dojo', - contentImage: path.join(__dirname, 'logo-jhipster.png'), -- }) -+ }), - ); - } - -@@ -68,8 +72,8 @@ module.exports = async (config, options, targetOptions) => { - }, - { - reload: targetOptions.target === 'build', // enabled for build --watch -- } -- ) -+ }, -+ ), - ); - } - -@@ -78,9 +82,9 @@ module.exports = async (config, options, targetOptions) => { - new BundleAnalyzerPlugin({ - analyzerMode: 'static', - openAnalyzer: false, -- // Webpack statistics in target folder -- reportFilename: '../stats.html', -- }) -+ // Webpack statistics in temporary folder -+ reportFilename: '../../../stats.html', -+ }), - ); - } - -@@ -93,7 +97,7 @@ module.exports = async (config, options, targetOptions) => { - globOptions: { ignore: ['**/index.html'] }, - }, - { -- from: require.resolve('axios/dist/axios.min.js'), -+ from: path.join(path.dirname(require.resolve('axios/package.json')), 'dist/axios.min.js'), - to: 'swagger-ui/', - }, - { from: './src/main/webapp/swagger-ui/', to: 'swagger-ui/' }, -@@ -124,11 +128,11 @@ module.exports = async (config, options, targetOptions) => { - // jhipster-needle-i18n-language-webpack - JHipster will add/remove languages in this array - ], - }, -- }) -+ }), - ); - - config = merge( -- config -+ config, - // jhipster-needle-add-webpack-config - JHipster will add custom config - ); - diff --git a/gradle/swagger.gradle b/gradle/swagger.gradle index e3c1e787..d742ab71 100644 --- a/gradle/swagger.gradle +++ b/gradle/swagger.gradle @@ -26,4 +26,4 @@ sourceSets { } } -compileJava.dependsOn("openApiGenerate") +// compileJava.dependsOn("openApiGenerate") diff --git a/package-lock.json b/package-lock.json index 50167222..69cbd659 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,16 +18,22 @@ "@angular/platform-browser-dynamic": "16.2.9", "@angular/router": "16.2.9", "@fortawesome/angular-fontawesome": "0.13.0", + "@fortawesome/fontawesome-free": "^6.4.2", "@fortawesome/fontawesome-svg-core": "6.4.2", "@fortawesome/free-solid-svg-icons": "6.4.2", + "@ibm/plex": "^6.3.0", "@ng-bootstrap/ng-bootstrap": "15.1.1", "@ngx-translate/core": "15.0.0", "@ngx-translate/http-loader": "8.0.0", "@popperjs/core": "2.11.8", "bootstrap": "5.3.2", "dayjs": "1.11.10", + "moment": "^2.29.4", "ngx-infinite-scroll": "16.0.0", + "ngx-markdown": "^16.0.0", + "ngx-webstorage": "^12.0.0", "rxjs": "7.8.1", + "simplebar": "^6.2.5", "tslib": "2.6.2", "zone.js": "0.13.3" }, @@ -3599,6 +3605,12 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@braintree/sanitize-url": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", + "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==", + "optional": true + }, "node_modules/@chevrotain/cst-dts-gen": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-10.1.2.tgz", @@ -4187,6 +4199,15 @@ "node": ">=6" } }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz", + "integrity": "sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, "node_modules/@fortawesome/fontawesome-svg-core": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", @@ -4277,6 +4298,11 @@ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, + "node_modules/@ibm/plex": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@ibm/plex/-/plex-6.3.0.tgz", + "integrity": "sha512-kb1ATGXrFu/gF2NZY40OlRUAEWCcrq9mIEYkuWqXUPaC6Zrb7iA9wQYTkJdAPP+V6ySfp7NLAyzAnK9c5k90Sg==" + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -6469,6 +6495,25 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/lodash": { + "version": "4.14.200", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.200.tgz", + "integrity": "sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.10.tgz", + "integrity": "sha512-YJP+w/2khSBwbUSFdGsSqmDvmnN3cCKoPOL7Zjle6s30ZtemkkqhjVfFqGwPN7ASil5VyjE2GtyU/yqYY6mC0A==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/marked": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.3.2.tgz", + "integrity": "sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w==", + "peer": true + }, "node_modules/@types/mime": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", @@ -8722,6 +8767,11 @@ "node": ">=6" } }, + "node_modules/can-use-dom": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", + "integrity": "sha512-ceOhN1DL7Y4O6M0j9ICgmTYziV89WMd96SvSl0REd8PMgrY0B/WBOPoed5S1KUmJqXgUXh8gzSe6E3ae27upsQ==" + }, "node_modules/caniuse-lite": { "version": "1.0.30001559", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz", @@ -8974,6 +9024,17 @@ "node": ">= 10" } }, + "node_modules/clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "optional": true, + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -9649,6 +9710,15 @@ "node": ">= 0.10" } }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "optional": true, + "dependencies": { + "layout-base": "^1.0.0" + } + }, "node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -9994,6 +10064,490 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, + "node_modules/cytoscape": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.27.0.tgz", + "integrity": "sha512-pPZJilfX9BxESwujODz5pydeGi+FBrXq1rcaB1mfhFXXFJ9GjE6CNndAk+8jPzoXGD+16LtSS4xlYEIUiW4Abg==", + "optional": true, + "dependencies": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "optional": true, + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "optional": true, + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "optional": true, + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "optional": true + }, + "node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "optional": true, + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "optional": true, + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "optional": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "optional": true, + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "optional": true, + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "optional": true, + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "optional": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "optional": true, + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/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==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "optional": true, + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "optional": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "optional": true, + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "optional": true, + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "optional": true, + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "optional": true, + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "optional": true, + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "optional": true, + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "optional": true, + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "optional": true, + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "optional": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz", + "integrity": "sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w==", + "optional": true, + "dependencies": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, "node_modules/dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", @@ -10317,6 +10871,15 @@ "node": ">=8" } }, + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "optional": true, + "dependencies": { + "robust-predicates": "^3.0.0" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -10326,6 +10889,12 @@ "node": ">=0.4.0" } }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -10527,6 +11096,12 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", + "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==", + "optional": true + }, "node_modules/domutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", @@ -10707,6 +11282,12 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.572.tgz", "integrity": "sha512-RlFobl4D3ieetbnR+2EpxdzFl9h0RAJkPK3pfiwMug2nhBin2ZCsGIAJWdpNniLz43sgXam/CgipOmvTA+rUiA==" }, + "node_modules/elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==", + "optional": true + }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -10724,6 +11305,12 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "node_modules/emoji-toolkit": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/emoji-toolkit/-/emoji-toolkit-7.0.1.tgz", + "integrity": "sha512-l5aJyAhpC5s4mDuoVuqt4SzVjwIsIvakPh4ZGJJE4KWuWFCEHaXacQFkStVdD9zbRR+/BbRXob7u99o0lQFr8A==", + "optional": true + }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -12889,6 +13476,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "optional": true, + "dependencies": { + "delegate": "^3.1.2" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -13061,6 +13657,12 @@ "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", "dev": true }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "optional": true + }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -13968,6 +14570,15 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "optional": true, + "engines": { + "node": ">=12" + } + }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -16766,6 +17377,37 @@ "source-map-support": "^0.5.5" } }, + "node_modules/katex": { + "version": "0.16.9", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.9.tgz", + "integrity": "sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "optional": true, + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==", + "optional": true + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -16809,6 +17451,12 @@ "shell-quote": "^1.8.1" } }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "optional": true + }, "node_modules/lcid": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", @@ -17369,8 +18017,12 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -17800,6 +18452,18 @@ "node": ">=6" } }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "peer": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -17940,6 +18604,43 @@ "node": ">= 8" } }, + "node_modules/mermaid": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.4.3.tgz", + "integrity": "sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw==", + "optional": true, + "dependencies": { + "@braintree/sanitize-url": "^6.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "dagre-d3-es": "7.0.9", + "dayjs": "^1.11.7", + "dompurify": "2.4.3", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.2", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + } + }, + "node_modules/mermaid/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" + ], + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -18181,6 +18882,14 @@ "node": ">=10" } }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, "node_modules/mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", @@ -18332,6 +19041,42 @@ "@angular/core": ">=16.0.0 <17.0.0" } }, + "node_modules/ngx-markdown": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-16.0.0.tgz", + "integrity": "sha512-/rlbXi+HBscJCDdwaTWIUrRkvwJicPnuAgeugOCZa0UbZ4VCWV3U0+uB1Zv6krRDF6FXJNXNLTUrMZV7yH8I6A==", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "clipboard": "^2.0.11", + "emoji-toolkit": "^7.0.0", + "katex": "^0.16.0", + "mermaid": "^9.1.2", + "prismjs": "^1.28.0" + }, + "peerDependencies": { + "@angular/common": "^16.0.0", + "@angular/core": "^16.0.0", + "@angular/platform-browser": "^16.0.0", + "@types/marked": "^4.3.0", + "marked": "^4.3.0", + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/ngx-webstorage": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ngx-webstorage/-/ngx-webstorage-12.0.0.tgz", + "integrity": "sha512-S/EO9QBwfnoHBuj5hhqYKHBsxUmYaSq59ypXP9EUi1lhq7RyD0w2a01EpKXKESbIhsAkop1J/0NubM7kwo394w==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": "^16.0.0", + "@angular/core": "^16.0.0" + } + }, "node_modules/nice-napi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", @@ -18481,6 +19226,12 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, + "node_modules/non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", + "optional": true + }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -20145,6 +20896,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "optional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/proc-log": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", @@ -21079,6 +21839,12 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "optional": true + }, "node_modules/rollup": { "version": "3.29.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", @@ -21141,6 +21907,12 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "optional": true + }, "node_modules/rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", @@ -21173,7 +21945,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "devOptional": true }, "node_modules/sass": { "version": "1.64.1", @@ -21281,6 +22053,12 @@ "node": ">=8" } }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", + "optional": true + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -21906,6 +22684,26 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", "dev": true }, + "node_modules/simplebar": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-6.2.5.tgz", + "integrity": "sha512-vfxKR6KNBsPx7+sZnqO7T8VuCvi4px6OlycrrkNgyjvoHhRW7LIyVkHhUfXxbz33Gw99Wb9UMMsnEZv35wtLSw==", + "dependencies": { + "can-use-dom": "^0.1.0", + "simplebar-core": "^1.2.4" + } + }, + "node_modules/simplebar-core": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/simplebar-core/-/simplebar-core-1.2.4.tgz", + "integrity": "sha512-P+Sqshef4fq3++gQ82TgNYcgl3qZFSCP5jS2/8NMmw18oagXOijMzs1G+vm6RUY3oMvpwH3wGoqh9u6SyDjHfQ==", + "dependencies": { + "@types/lodash-es": "^4.17.6", + "can-use-dom": "^0.1.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" + } + }, "node_modules/sirv": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", @@ -22611,6 +23409,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==", + "optional": true + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -22944,6 +23748,12 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, "node_modules/titleize": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", @@ -23080,6 +23890,15 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "optional": true, + "engines": { + "node": ">=6.10" + } + }, "node_modules/ts-jest": { "version": "29.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", @@ -24092,6 +24911,12 @@ "defaults": "^1.0.3" } }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", + "optional": true + }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -27818,6 +28643,12 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@braintree/sanitize-url": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz", + "integrity": "sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==", + "optional": true + }, "@chevrotain/cst-dts-gen": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-10.1.2.tgz", @@ -28153,6 +28984,11 @@ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==" }, + "@fortawesome/fontawesome-free": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz", + "integrity": "sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==" + }, "@fortawesome/fontawesome-svg-core": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", @@ -28224,6 +29060,11 @@ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, + "@ibm/plex": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@ibm/plex/-/plex-6.3.0.tgz", + "integrity": "sha512-kb1ATGXrFu/gF2NZY40OlRUAEWCcrq9mIEYkuWqXUPaC6Zrb7iA9wQYTkJdAPP+V6ySfp7NLAyzAnK9c5k90Sg==" + }, "@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -30001,6 +30842,25 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/lodash": { + "version": "4.14.200", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.200.tgz", + "integrity": "sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==" + }, + "@types/lodash-es": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.10.tgz", + "integrity": "sha512-YJP+w/2khSBwbUSFdGsSqmDvmnN3cCKoPOL7Zjle6s30ZtemkkqhjVfFqGwPN7ASil5VyjE2GtyU/yqYY6mC0A==", + "requires": { + "@types/lodash": "*" + } + }, + "@types/marked": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.3.2.tgz", + "integrity": "sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w==", + "peer": true + }, "@types/mime": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", @@ -31678,6 +32538,11 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, + "can-use-dom": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", + "integrity": "sha512-ceOhN1DL7Y4O6M0j9ICgmTYziV89WMd96SvSl0REd8PMgrY0B/WBOPoed5S1KUmJqXgUXh8gzSe6E3ae27upsQ==" + }, "caniuse-lite": { "version": "1.0.30001559", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz", @@ -31844,6 +32709,17 @@ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, + "clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -32385,6 +33261,15 @@ "vary": "^1" } }, + "cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "optional": true, + "requires": { + "layout-base": "^1.0.0" + } + }, "cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -32638,6 +33523,372 @@ } } }, + "cytoscape": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.27.0.tgz", + "integrity": "sha512-pPZJilfX9BxESwujODz5pydeGi+FBrXq1rcaB1mfhFXXFJ9GjE6CNndAk+8jPzoXGD+16LtSS4xlYEIUiW4Abg==", + "optional": true, + "requires": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + } + }, + "cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "optional": true, + "requires": { + "cose-base": "^1.0.0" + } + }, + "cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "optional": true, + "requires": { + "cose-base": "^2.2.0" + }, + "dependencies": { + "cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "optional": true, + "requires": { + "layout-base": "^2.0.0" + } + }, + "layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "optional": true + } + } + }, + "d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "optional": true, + "requires": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + } + }, + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "optional": true, + "requires": { + "internmap": "1 - 2" + } + }, + "d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "optional": true + }, + "d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "optional": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + } + }, + "d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "optional": true, + "requires": { + "d3-path": "1 - 3" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "optional": true + }, + "d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "optional": true, + "requires": { + "d3-array": "^3.2.0" + } + }, + "d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "optional": true, + "requires": { + "delaunator": "5" + } + }, + "d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "optional": true + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "optional": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } + }, + "d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "optional": true, + "requires": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "optional": true + }, + "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==", + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "optional": true + }, + "d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "optional": true, + "requires": { + "d3-dsv": "1 - 3" + } + }, + "d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "optional": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "optional": true + }, + "d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "optional": true, + "requires": { + "d3-array": "2.5.0 - 3" + } + }, + "d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "optional": true + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "optional": true, + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "optional": true + }, + "d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "optional": true + }, + "d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "optional": true + }, + "d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "optional": true + }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "optional": true, + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } + }, + "d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "optional": true, + "requires": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + } + }, + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "optional": true + }, + "d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "optional": true, + "requires": { + "d3-path": "^3.1.0" + } + }, + "d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "optional": true, + "requires": { + "d3-array": "2 - 3" + } + }, + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "optional": true, + "requires": { + "d3-time": "1 - 3" + } + }, + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "optional": true + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "optional": true, + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "optional": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } + }, + "dagre-d3-es": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz", + "integrity": "sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w==", + "optional": true, + "requires": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" + } + }, "dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", @@ -32851,12 +34102,27 @@ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true }, + "delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "optional": true, + "requires": { + "robust-predicates": "^3.0.0" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -33009,6 +34275,12 @@ "domelementtype": "^2.3.0" } }, + "dompurify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", + "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==", + "optional": true + }, "domutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", @@ -33146,6 +34418,12 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.572.tgz", "integrity": "sha512-RlFobl4D3ieetbnR+2EpxdzFl9h0RAJkPK3pfiwMug2nhBin2ZCsGIAJWdpNniLz43sgXam/CgipOmvTA+rUiA==" }, + "elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==", + "optional": true + }, "emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -33157,6 +34435,12 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "emoji-toolkit": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/emoji-toolkit/-/emoji-toolkit-7.0.1.tgz", + "integrity": "sha512-l5aJyAhpC5s4mDuoVuqt4SzVjwIsIvakPh4ZGJJE4KWuWFCEHaXacQFkStVdD9zbRR+/BbRXob7u99o0lQFr8A==", + "optional": true + }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -34776,6 +36060,15 @@ "slash": "^3.0.0" } }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -34912,6 +36205,12 @@ "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", "dev": true }, + "heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "optional": true + }, "hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -35608,6 +36907,12 @@ } } }, + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "optional": true + }, "interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -37685,6 +38990,29 @@ "source-map-support": "^0.5.5" } }, + "katex": { + "version": "0.16.9", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.9.tgz", + "integrity": "sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==", + "optional": true, + "requires": { + "commander": "^8.3.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "optional": true + } + } + }, + "khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==", + "optional": true + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -37719,6 +39047,12 @@ "shell-quote": "^1.8.1" } }, + "layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "optional": true + }, "lcid": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", @@ -38099,8 +39433,12 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, "lodash.debounce": { "version": "4.0.8", @@ -38419,6 +39757,12 @@ "p-defer": "^1.0.0" } }, + "marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "peer": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -38533,6 +39877,38 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, + "mermaid": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.4.3.tgz", + "integrity": "sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw==", + "optional": true, + "requires": { + "@braintree/sanitize-url": "^6.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", + "d3": "^7.4.0", + "dagre-d3-es": "7.0.9", + "dayjs": "^1.11.7", + "dompurify": "2.4.3", + "elkjs": "^0.8.2", + "khroma": "^2.0.0", + "lodash-es": "^4.17.21", + "non-layered-tidy-tree-layout": "^2.0.2", + "stylis": "^4.1.2", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.0", + "web-worker": "^1.2.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "optional": true + } + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -38705,6 +40081,11 @@ "mkdirp": "^1.0.3" } }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, "mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", @@ -38818,6 +40199,27 @@ "tslib": "^2.3.0" } }, + "ngx-markdown": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-16.0.0.tgz", + "integrity": "sha512-/rlbXi+HBscJCDdwaTWIUrRkvwJicPnuAgeugOCZa0UbZ4VCWV3U0+uB1Zv6krRDF6FXJNXNLTUrMZV7yH8I6A==", + "requires": { + "clipboard": "^2.0.11", + "emoji-toolkit": "^7.0.0", + "katex": "^0.16.0", + "mermaid": "^9.1.2", + "prismjs": "^1.28.0", + "tslib": "^2.3.0" + } + }, + "ngx-webstorage": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ngx-webstorage/-/ngx-webstorage-12.0.0.tgz", + "integrity": "sha512-S/EO9QBwfnoHBuj5hhqYKHBsxUmYaSq59ypXP9EUi1lhq7RyD0w2a01EpKXKESbIhsAkop1J/0NubM7kwo394w==", + "requires": { + "tslib": "^2.0.0" + } + }, "nice-napi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", @@ -38936,6 +40338,12 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, + "non-layered-tidy-tree-layout": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", + "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", + "optional": true + }, "nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -40155,6 +41563,12 @@ } } }, + "prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "optional": true + }, "proc-log": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", @@ -40869,6 +42283,12 @@ } } }, + "robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "optional": true + }, "rollup": { "version": "3.29.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", @@ -40901,6 +42321,12 @@ "queue-microtask": "^1.2.2" } }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "optional": true + }, "rx": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", @@ -40930,7 +42356,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "devOptional": true }, "sass": { "version": "1.64.1", @@ -40993,6 +42419,12 @@ "integrity": "sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==", "dev": true }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", + "optional": true + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -41502,6 +42934,26 @@ } } }, + "simplebar": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-6.2.5.tgz", + "integrity": "sha512-vfxKR6KNBsPx7+sZnqO7T8VuCvi4px6OlycrrkNgyjvoHhRW7LIyVkHhUfXxbz33Gw99Wb9UMMsnEZv35wtLSw==", + "requires": { + "can-use-dom": "^0.1.0", + "simplebar-core": "^1.2.4" + } + }, + "simplebar-core": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/simplebar-core/-/simplebar-core-1.2.4.tgz", + "integrity": "sha512-P+Sqshef4fq3++gQ82TgNYcgl3qZFSCP5jS2/8NMmw18oagXOijMzs1G+vm6RUY3oMvpwH3wGoqh9u6SyDjHfQ==", + "requires": { + "@types/lodash-es": "^4.17.6", + "can-use-dom": "^0.1.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21" + } + }, "sirv": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", @@ -42029,6 +43481,12 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==", + "optional": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -42277,6 +43735,12 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, "titleize": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", @@ -42377,6 +43841,12 @@ "dev": true, "requires": {} }, + "ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "optional": true + }, "ts-jest": { "version": "29.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", @@ -43108,6 +44578,12 @@ "defaults": "^1.0.3" } }, + "web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", + "optional": true + }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", diff --git a/package.json b/package.json index e2d12077..315f5996 100644 --- a/package.json +++ b/package.json @@ -82,16 +82,22 @@ "@angular/platform-browser-dynamic": "16.2.9", "@angular/router": "16.2.9", "@fortawesome/angular-fontawesome": "0.13.0", + "@fortawesome/fontawesome-free": "^6.4.2", "@fortawesome/fontawesome-svg-core": "6.4.2", "@fortawesome/free-solid-svg-icons": "6.4.2", + "@ibm/plex": "^6.3.0", "@ng-bootstrap/ng-bootstrap": "15.1.1", "@ngx-translate/core": "15.0.0", "@ngx-translate/http-loader": "8.0.0", "@popperjs/core": "2.11.8", "bootstrap": "5.3.2", "dayjs": "1.11.10", + "moment": "^2.29.4", "ngx-infinite-scroll": "16.0.0", + "ngx-markdown": "^16.0.0", + "ngx-webstorage": "^12.0.0", "rxjs": "7.8.1", + "simplebar": "^6.2.5", "tslib": "2.6.2", "zone.js": "0.13.3" }, diff --git a/src/main/java/com/iteratec/teamdojo/service/dto/TeamSkillDTO.java b/src/main/java/com/iteratec/teamdojo/service/dto/TeamSkillDTO.java index b1d04739..389dd9e5 100644 --- a/src/main/java/com/iteratec/teamdojo/service/dto/TeamSkillDTO.java +++ b/src/main/java/com/iteratec/teamdojo/service/dto/TeamSkillDTO.java @@ -3,11 +3,16 @@ import com.iteratec.teamdojo.GeneratedByJHipster; // ### MODIFICATION-START ### import com.iteratec.teamdojo.domain.enumeration.custom.SkillStatus; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; + // ### MODIFICATION-END ### import java.io.Serializable; import java.time.Instant; import java.util.Objects; + /** * A DTO for the {@link com.iteratec.teamdojo.domain.TeamSkill} entity. */ diff --git a/src/main/java/com/iteratec/teamdojo/service/impl/custom/ExtendedSkillQueryServiceImpl.java b/src/main/java/com/iteratec/teamdojo/service/impl/custom/ExtendedSkillQueryServiceImpl.java index cc70b8c9..fe4e4210 100644 --- a/src/main/java/com/iteratec/teamdojo/service/impl/custom/ExtendedSkillQueryServiceImpl.java +++ b/src/main/java/com/iteratec/teamdojo/service/impl/custom/ExtendedSkillQueryServiceImpl.java @@ -9,7 +9,8 @@ import com.iteratec.teamdojo.service.SkillQueryService; import com.iteratec.teamdojo.service.criteria.SkillCriteria; import com.iteratec.teamdojo.service.mapper.SkillMapper; -import javax.persistence.criteria.JoinType; + +import jakarta.persistence.criteria.JoinType; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Primary; import org.springframework.data.jpa.domain.Specification; diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/BadgeResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/BadgeResource.java index daaa1116..fac9bd5a 100644 --- a/src/main/java/com/iteratec/teamdojo/web/rest/BadgeResource.java +++ b/src/main/java/com/iteratec/teamdojo/web/rest/BadgeResource.java @@ -64,7 +64,7 @@ public class BadgeResource { public BadgeResource( BadgeService badgeService, BadgeRepository badgeRepository, - BadgeQueryService badgeQueryService + BadgeQueryService badgeQueryService, // ### MODIFICATION-START ### CustomBadgeResourceExtension extension // ### MODIFICATION-END ### diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/PersistentAuditEventDataResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/PersistentAuditEventDataResource.java new file mode 100644 index 00000000..8094341d --- /dev/null +++ b/src/main/java/com/iteratec/teamdojo/web/rest/PersistentAuditEventDataResource.java @@ -0,0 +1,195 @@ +package com.iteratec.teamdojo.web.rest; + +import com.iteratec.teamdojo.GeneratedByJHipster; +import com.iteratec.teamdojo.domain.PersistentAuditEventData; +import com.iteratec.teamdojo.repository.PersistentAuditEventDataRepository; +import com.iteratec.teamdojo.web.rest.errors.BadRequestAlertException; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import tech.jhipster.web.util.HeaderUtil; +import tech.jhipster.web.util.ResponseUtil; + +/** + * REST controller for managing {@link com.iteratec.teamdojo.domain.PersistentAuditEventData}. + */ +@RestController +@RequestMapping("/api") +@Transactional +@GeneratedByJHipster +public class PersistentAuditEventDataResource { + + private final Logger log = LoggerFactory.getLogger(PersistentAuditEventDataResource.class); + + private static final String ENTITY_NAME = "persistentAuditEventData"; + + @Value("${jhipster.clientApp.name}") + private String applicationName; + + private final PersistentAuditEventDataRepository persistentAuditEventDataRepository; + + public PersistentAuditEventDataResource(PersistentAuditEventDataRepository persistentAuditEventDataRepository) { + this.persistentAuditEventDataRepository = persistentAuditEventDataRepository; + } + + /** + * {@code POST /persistent-audit-event-data} : Create a new persistentAuditEventData. + * + * @param persistentAuditEventData the persistentAuditEventData to create. + * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with body the new persistentAuditEventData, or with status {@code 400 (Bad Request)} if the persistentAuditEventData has already an ID. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PostMapping("/persistent-audit-event-data") + public ResponseEntity createPersistentAuditEventData( + @Valid @RequestBody PersistentAuditEventData persistentAuditEventData + ) throws URISyntaxException { + log.debug("REST request to save PersistentAuditEventData : {}", persistentAuditEventData); + if (persistentAuditEventData.getId() != null) { + throw new BadRequestAlertException("A new persistentAuditEventData cannot already have an ID", ENTITY_NAME, "idexists"); + } + PersistentAuditEventData result = persistentAuditEventDataRepository.save(persistentAuditEventData); + return ResponseEntity + .created(new URI("/api/persistent-audit-event-data/" + result.getId())) + .headers(HeaderUtil.createEntityCreationAlert(applicationName, true, ENTITY_NAME, result.getId().toString())) + .body(result); + } + + /** + * {@code PUT /persistent-audit-event-data/:id} : Updates an existing persistentAuditEventData. + * + * @param id the id of the persistentAuditEventData to save. + * @param persistentAuditEventData the persistentAuditEventData to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the updated persistentAuditEventData, + * or with status {@code 400 (Bad Request)} if the persistentAuditEventData is not valid, + * or with status {@code 500 (Internal Server Error)} if the persistentAuditEventData couldn't be updated. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PutMapping("/persistent-audit-event-data/{id}") + public ResponseEntity updatePersistentAuditEventData( + @PathVariable(value = "id", required = false) final Long id, + @Valid @RequestBody PersistentAuditEventData persistentAuditEventData + ) throws URISyntaxException { + log.debug("REST request to update PersistentAuditEventData : {}, {}", id, persistentAuditEventData); + if (persistentAuditEventData.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + if (!Objects.equals(id, persistentAuditEventData.getId())) { + throw new BadRequestAlertException("Invalid ID", ENTITY_NAME, "idinvalid"); + } + + if (!persistentAuditEventDataRepository.existsById(id)) { + throw new BadRequestAlertException("Entity not found", ENTITY_NAME, "idnotfound"); + } + + PersistentAuditEventData result = persistentAuditEventDataRepository.save(persistentAuditEventData); + return ResponseEntity + .ok() + .headers(HeaderUtil.createEntityUpdateAlert(applicationName, true, ENTITY_NAME, persistentAuditEventData.getId().toString())) + .body(result); + } + + /** + * {@code PATCH /persistent-audit-event-data/:id} : Partial updates given fields of an existing persistentAuditEventData, field will ignore if it is null + * + * @param id the id of the persistentAuditEventData to save. + * @param persistentAuditEventData the persistentAuditEventData to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the updated persistentAuditEventData, + * or with status {@code 400 (Bad Request)} if the persistentAuditEventData is not valid, + * or with status {@code 404 (Not Found)} if the persistentAuditEventData is not found, + * or with status {@code 500 (Internal Server Error)} if the persistentAuditEventData couldn't be updated. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PatchMapping(value = "/persistent-audit-event-data/{id}", consumes = { "application/json", "application/merge-patch+json" }) + public ResponseEntity partialUpdatePersistentAuditEventData( + @PathVariable(value = "id", required = false) final Long id, + @NotNull @RequestBody PersistentAuditEventData persistentAuditEventData + ) throws URISyntaxException { + log.debug("REST request to partial update PersistentAuditEventData partially : {}, {}", id, persistentAuditEventData); + if (persistentAuditEventData.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + if (!Objects.equals(id, persistentAuditEventData.getId())) { + throw new BadRequestAlertException("Invalid ID", ENTITY_NAME, "idinvalid"); + } + + if (!persistentAuditEventDataRepository.existsById(id)) { + throw new BadRequestAlertException("Entity not found", ENTITY_NAME, "idnotfound"); + } + + Optional result = persistentAuditEventDataRepository + .findById(persistentAuditEventData.getId()) + .map(existingPersistentAuditEventData -> { + if (persistentAuditEventData.getName() != null) { + existingPersistentAuditEventData.setName(persistentAuditEventData.getName()); + } + if (persistentAuditEventData.getValue() != null) { + existingPersistentAuditEventData.setValue(persistentAuditEventData.getValue()); + } + + return existingPersistentAuditEventData; + }) + .map(persistentAuditEventDataRepository::save); + + return ResponseUtil.wrapOrNotFound( + result, + HeaderUtil.createEntityUpdateAlert(applicationName, true, ENTITY_NAME, persistentAuditEventData.getId().toString()) + ); + } + + /** + * {@code GET /persistent-audit-event-data} : get all the persistentAuditEventData. + * + * @param eagerload flag to eager load entities from relationships (This is applicable for many-to-many). + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and the list of persistentAuditEventData in body. + */ + @GetMapping("/persistent-audit-event-data") + public List getAllPersistentAuditEventData( + @RequestParam(required = false, defaultValue = "false") boolean eagerload + ) { + log.debug("REST request to get all PersistentAuditEventData"); + if (eagerload) { + return persistentAuditEventDataRepository.findAllWithEagerRelationships(); + } else { + return persistentAuditEventDataRepository.findAll(); + } + } + + /** + * {@code GET /persistent-audit-event-data/:id} : get the "id" persistentAuditEventData. + * + * @param id the id of the persistentAuditEventData to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the persistentAuditEventData, or with status {@code 404 (Not Found)}. + */ + @GetMapping("/persistent-audit-event-data/{id}") + public ResponseEntity getPersistentAuditEventData(@PathVariable Long id) { + log.debug("REST request to get PersistentAuditEventData : {}", id); + Optional persistentAuditEventData = persistentAuditEventDataRepository.findOneWithEagerRelationships(id); + return ResponseUtil.wrapOrNotFound(persistentAuditEventData); + } + + /** + * {@code DELETE /persistent-audit-event-data/:id} : delete the "id" persistentAuditEventData. + * + * @param id the id of the persistentAuditEventData to delete. + * @return the {@link ResponseEntity} with status {@code 204 (NO_CONTENT)}. + */ + @DeleteMapping("/persistent-audit-event-data/{id}") + public ResponseEntity deletePersistentAuditEventData(@PathVariable Long id) { + log.debug("REST request to delete PersistentAuditEventData : {}", id); + persistentAuditEventDataRepository.deleteById(id); + return ResponseEntity + .noContent() + .headers(HeaderUtil.createEntityDeletionAlert(applicationName, true, ENTITY_NAME, id.toString())) + .build(); + } +} diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/PersistentAuditEventResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/PersistentAuditEventResource.java new file mode 100644 index 00000000..1a3cb049 --- /dev/null +++ b/src/main/java/com/iteratec/teamdojo/web/rest/PersistentAuditEventResource.java @@ -0,0 +1,190 @@ +package com.iteratec.teamdojo.web.rest; + +import com.iteratec.teamdojo.GeneratedByJHipster; +import com.iteratec.teamdojo.domain.PersistentAuditEvent; +import com.iteratec.teamdojo.repository.PersistentAuditEventRepository; +import com.iteratec.teamdojo.web.rest.errors.BadRequestAlertException; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import tech.jhipster.web.util.HeaderUtil; +import tech.jhipster.web.util.ResponseUtil; + +/** + * REST controller for managing {@link com.iteratec.teamdojo.domain.PersistentAuditEvent}. + */ +@RestController +@RequestMapping("/api") +@Transactional +@GeneratedByJHipster +public class PersistentAuditEventResource { + + private final Logger log = LoggerFactory.getLogger(PersistentAuditEventResource.class); + + private static final String ENTITY_NAME = "persistentAuditEvent"; + + @Value("${jhipster.clientApp.name}") + private String applicationName; + + private final PersistentAuditEventRepository persistentAuditEventRepository; + + public PersistentAuditEventResource(PersistentAuditEventRepository persistentAuditEventRepository) { + this.persistentAuditEventRepository = persistentAuditEventRepository; + } + + /** + * {@code POST /persistent-audit-events} : Create a new persistentAuditEvent. + * + * @param persistentAuditEvent the persistentAuditEvent to create. + * @return the {@link ResponseEntity} with status {@code 201 (Created)} and with body the new persistentAuditEvent, or with status {@code 400 (Bad Request)} if the persistentAuditEvent has already an ID. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PostMapping("/persistent-audit-events") + public ResponseEntity createPersistentAuditEvent(@Valid @RequestBody PersistentAuditEvent persistentAuditEvent) + throws URISyntaxException { + log.debug("REST request to save PersistentAuditEvent : {}", persistentAuditEvent); + if (persistentAuditEvent.getId() != null) { + throw new BadRequestAlertException("A new persistentAuditEvent cannot already have an ID", ENTITY_NAME, "idexists"); + } + PersistentAuditEvent result = persistentAuditEventRepository.save(persistentAuditEvent); + return ResponseEntity + .created(new URI("/api/persistent-audit-events/" + result.getId())) + .headers(HeaderUtil.createEntityCreationAlert(applicationName, true, ENTITY_NAME, result.getId().toString())) + .body(result); + } + + /** + * {@code PUT /persistent-audit-events/:id} : Updates an existing persistentAuditEvent. + * + * @param id the id of the persistentAuditEvent to save. + * @param persistentAuditEvent the persistentAuditEvent to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the updated persistentAuditEvent, + * or with status {@code 400 (Bad Request)} if the persistentAuditEvent is not valid, + * or with status {@code 500 (Internal Server Error)} if the persistentAuditEvent couldn't be updated. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PutMapping("/persistent-audit-events/{id}") + public ResponseEntity updatePersistentAuditEvent( + @PathVariable(value = "id", required = false) final Long id, + @Valid @RequestBody PersistentAuditEvent persistentAuditEvent + ) throws URISyntaxException { + log.debug("REST request to update PersistentAuditEvent : {}, {}", id, persistentAuditEvent); + if (persistentAuditEvent.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + if (!Objects.equals(id, persistentAuditEvent.getId())) { + throw new BadRequestAlertException("Invalid ID", ENTITY_NAME, "idinvalid"); + } + + if (!persistentAuditEventRepository.existsById(id)) { + throw new BadRequestAlertException("Entity not found", ENTITY_NAME, "idnotfound"); + } + + PersistentAuditEvent result = persistentAuditEventRepository.save(persistentAuditEvent); + return ResponseEntity + .ok() + .headers(HeaderUtil.createEntityUpdateAlert(applicationName, true, ENTITY_NAME, persistentAuditEvent.getId().toString())) + .body(result); + } + + /** + * {@code PATCH /persistent-audit-events/:id} : Partial updates given fields of an existing persistentAuditEvent, field will ignore if it is null + * + * @param id the id of the persistentAuditEvent to save. + * @param persistentAuditEvent the persistentAuditEvent to update. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the updated persistentAuditEvent, + * or with status {@code 400 (Bad Request)} if the persistentAuditEvent is not valid, + * or with status {@code 404 (Not Found)} if the persistentAuditEvent is not found, + * or with status {@code 500 (Internal Server Error)} if the persistentAuditEvent couldn't be updated. + * @throws URISyntaxException if the Location URI syntax is incorrect. + */ + @PatchMapping(value = "/persistent-audit-events/{id}", consumes = { "application/json", "application/merge-patch+json" }) + public ResponseEntity partialUpdatePersistentAuditEvent( + @PathVariable(value = "id", required = false) final Long id, + @NotNull @RequestBody PersistentAuditEvent persistentAuditEvent + ) throws URISyntaxException { + log.debug("REST request to partial update PersistentAuditEvent partially : {}, {}", id, persistentAuditEvent); + if (persistentAuditEvent.getId() == null) { + throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull"); + } + if (!Objects.equals(id, persistentAuditEvent.getId())) { + throw new BadRequestAlertException("Invalid ID", ENTITY_NAME, "idinvalid"); + } + + if (!persistentAuditEventRepository.existsById(id)) { + throw new BadRequestAlertException("Entity not found", ENTITY_NAME, "idnotfound"); + } + + Optional result = persistentAuditEventRepository + .findById(persistentAuditEvent.getId()) + .map(existingPersistentAuditEvent -> { + if (persistentAuditEvent.getPrincipal() != null) { + existingPersistentAuditEvent.setPrincipal(persistentAuditEvent.getPrincipal()); + } + if (persistentAuditEvent.getAuditEventDate() != null) { + existingPersistentAuditEvent.setAuditEventDate(persistentAuditEvent.getAuditEventDate()); + } + if (persistentAuditEvent.getAuditEventType() != null) { + existingPersistentAuditEvent.setAuditEventType(persistentAuditEvent.getAuditEventType()); + } + + return existingPersistentAuditEvent; + }) + .map(persistentAuditEventRepository::save); + + return ResponseUtil.wrapOrNotFound( + result, + HeaderUtil.createEntityUpdateAlert(applicationName, true, ENTITY_NAME, persistentAuditEvent.getId().toString()) + ); + } + + /** + * {@code GET /persistent-audit-events} : get all the persistentAuditEvents. + * + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and the list of persistentAuditEvents in body. + */ + @GetMapping("/persistent-audit-events") + public List getAllPersistentAuditEvents() { + log.debug("REST request to get all PersistentAuditEvents"); + return persistentAuditEventRepository.findAll(); + } + + /** + * {@code GET /persistent-audit-events/:id} : get the "id" persistentAuditEvent. + * + * @param id the id of the persistentAuditEvent to retrieve. + * @return the {@link ResponseEntity} with status {@code 200 (OK)} and with body the persistentAuditEvent, or with status {@code 404 (Not Found)}. + */ + @GetMapping("/persistent-audit-events/{id}") + public ResponseEntity getPersistentAuditEvent(@PathVariable Long id) { + log.debug("REST request to get PersistentAuditEvent : {}", id); + Optional persistentAuditEvent = persistentAuditEventRepository.findById(id); + return ResponseUtil.wrapOrNotFound(persistentAuditEvent); + } + + /** + * {@code DELETE /persistent-audit-events/:id} : delete the "id" persistentAuditEvent. + * + * @param id the id of the persistentAuditEvent to delete. + * @return the {@link ResponseEntity} with status {@code 204 (NO_CONTENT)}. + */ + @DeleteMapping("/persistent-audit-events/{id}") + public ResponseEntity deletePersistentAuditEvent(@PathVariable Long id) { + log.debug("REST request to delete PersistentAuditEvent : {}", id); + persistentAuditEventRepository.deleteById(id); + return ResponseEntity + .noContent() + .headers(HeaderUtil.createEntityDeletionAlert(applicationName, true, ENTITY_NAME, id.toString())) + .build(); + } +} diff --git a/src/main/java/com/iteratec/teamdojo/web/rest/UserResource.java b/src/main/java/com/iteratec/teamdojo/web/rest/UserResource.java index ca8a6f95..a67ca4f5 100644 --- a/src/main/java/com/iteratec/teamdojo/web/rest/UserResource.java +++ b/src/main/java/com/iteratec/teamdojo/web/rest/UserResource.java @@ -8,6 +8,7 @@ import javax.validation.constraints.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springdoc.core.annotations.ParameterObject; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -17,7 +18,6 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; -import tech.jhipster.web.util.HeaderUtil; import tech.jhipster.web.util.PaginationUtil; import tech.jhipster.web.util.ResponseUtil; @@ -68,7 +68,7 @@ public UserResource(UserService userService) { */ @GetMapping("/users") @PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\")") - public ResponseEntity> getAllUsers(@org.springdoc.api.annotations.ParameterObject Pageable pageable) { + public ResponseEntity> getAllUsers(@ParameterObject Pageable pageable) { log.debug("REST request to get all User for an admin"); final Page page = userService.getAllManagedUsers(pageable); diff --git a/src/main/resources/config/liquibase/changelog/20210510110913_added_entity_Skill.xml b/src/main/resources/config/liquibase/changelog/20210510110913_added_entity_Skill.xml index e5b7a53d..308be855 100644 --- a/src/main/resources/config/liquibase/changelog/20210510110913_added_entity_Skill.xml +++ b/src/main/resources/config/liquibase/changelog/20210510110913_added_entity_Skill.xml @@ -20,10 +20,10 @@ - + - + diff --git a/src/main/webapp/app/app.module.ts b/src/main/webapp/app/app.module.ts index ca8b44a7..d2d57934 100644 --- a/src/main/webapp/app/app.module.ts +++ b/src/main/webapp/app/app.module.ts @@ -21,24 +21,13 @@ import MainComponent from './layouts/main/main.component'; import MainModule from './layouts/main/main.module'; import { AppPageTitleStrategy } from './app-page-title-strategy'; // ### Modification-Start ### -import { HomeModule } from './custom/home/home.module'; -import { FooterComponent } from './custom/layouts/footer/footer.component'; -import { TeamsModule } from './custom/teams/teams.module'; -import { OverviewModule } from 'app/custom/overview/overview.module'; -import { CustomSharedModule } from 'app/custom/shared/custom-shared.module'; import { MarkdownModule, MarkedOptions } from 'ngx-markdown'; -import { FeedbackModule } from 'app/custom/feedback/feedback.module'; -import { NavbarExtensionComponent } from 'app/custom/layouts/navbar/extension/navbar-extension.component'; import { customFontAwesomeIcons } from 'app/custom/config/font-awesome-icons'; -import { BreadcrumbTrailComponent } from './custom/layouts/navbar/breadcrumb-trail/breadcrumb-trail.component'; // ### Modification-End ### @NgModule({ imports: [ // ### Modification-Start ### - TeamsModule, - OverviewModule, - CustomSharedModule, MarkdownModule.forRoot({ markedOptions: { provide: MarkedOptions, @@ -48,7 +37,6 @@ import { BreadcrumbTrailComponent } from './custom/layouts/navbar/breadcrumb-tra }, }, }), - FeedbackModule, // ### Modification-End ### BrowserModule, // jhipster-needle-angular-add-module JHipster will add new module here @@ -66,12 +54,6 @@ import { BreadcrumbTrailComponent } from './custom/layouts/navbar/breadcrumb-tra httpInterceptorProviders, { provide: TitleStrategy, useClass: AppPageTitleStrategy }, ], - declarations: [ - // ### Modification-Start ### - NavbarExtensionComponent, - BreadcrumbTrailComponent, - // ### Modification-End ### - ], bootstrap: [MainComponent], }) export class AppModule { diff --git a/src/main/webapp/app/custom/common.resolver.ts b/src/main/webapp/app/custom/common.resolver.ts index 8bcad324..40933c58 100644 --- a/src/main/webapp/app/custom/common.resolver.ts +++ b/src/main/webapp/app/custom/common.resolver.ts @@ -19,7 +19,7 @@ import { CommentService } from 'app/entities/comment/service/comment.service'; import { TeamService } from 'app/entities/team/service/team.service'; import { TrainingService } from 'app/entities/training/service/training.service'; import { DimensionService } from 'app/entities/dimension/service/dimension.service'; -import { ISkill, Skill } from 'app/entities/skill/skill.model'; +import { ISkill } from 'app/entities/skill/skill.model'; import { IDimension } from 'app/entities/dimension/dimension.model'; import { ITeam } from 'app/entities/team/team.model'; import { ILevel } from 'app/entities/level/level.model'; @@ -42,6 +42,7 @@ import { TEAMS_PER_PAGE, TRAININGS_PER_PAGE, } from 'app/config/pagination.constants'; +import { Badge, Dimension, Level, Skill, Team } from './custom.types'; @Injectable() export class AllTeamsResolve implements Resolve { @@ -70,11 +71,11 @@ export class DojoModelResolve implements Resolve { route: ActivatedRouteSnapshot, state: RouterStateSnapshot ): Observable<{ - teams: ITeam[]; + teams: Team[]; teamSkills: ITeamSkill[]; - levels: ILevel[]; + levels: Level[]; levelSkills: ILevelSkill[]; - badges: IBadge[]; + badges: Badge[]; badgeSkills: IBadgeSkill[]; }> { return combineLatest( @@ -148,7 +149,7 @@ export class DojoModelResolve implements Resolve { } }); - badges.forEach(badge => { + badges.forEach((badge: Badge) => { if (badge.id) { badge.skills = groupedBadgeSkills[badge.id] || []; } @@ -167,11 +168,11 @@ export class DojoModelResolve implements Resolve { }); }); - teams.forEach(team => { + teams.forEach((team: Team) => { if (team.id) { team.skills = groupedTeamSkills[team.id] || []; } - team.participations?.forEach(dimension => { + team.participations?.forEach((dimension: Dimension) => { if (dimension.id) { dimension.levels = groupedLevels[dimension.id] || []; dimension.badges = groupedBadges[dimension.id] || []; @@ -275,7 +276,7 @@ export class AllCommentsResolve implements Resolve { export class SkillResolve implements Resolve { constructor(private skillService: SkillService, private router: Router) {} - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | ISkill { + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Skill { const skillId = route.params['skillId'] ? route.params['skillId'] : null; if (skillId) { return this.skillService.query({ 'id.equals': skillId }).pipe( @@ -285,11 +286,11 @@ export class SkillResolve implements Resolve { } // treat the case of body === null the same as missing skillID this.router.navigate(['/error']); - return new Skill(); + return {}; }) ); } - return new Skill(); + return {}; } } diff --git a/src/main/webapp/app/custom/custom.types.ts b/src/main/webapp/app/custom/custom.types.ts new file mode 100644 index 00000000..b2e03edc --- /dev/null +++ b/src/main/webapp/app/custom/custom.types.ts @@ -0,0 +1,35 @@ +import { IBadgeSkill } from "app/entities/badge-skill/badge-skill.model"; +import { IBadge } from "app/entities/badge/badge.model"; +import { IDimension } from "app/entities/dimension/dimension.model"; +import { ILevelSkill } from "app/entities/level-skill/level-skill.model"; +import { ILevel } from "app/entities/level/level.model"; +import { ISkill } from "app/entities/skill/skill.model"; +import { ITeamGroup } from "app/entities/team-group/team-group.model"; +import { ITeamSkill } from "app/entities/team-skill/team-skill.model"; +import { ITeam } from "app/entities/team/team.model"; + +export type Team = Partial & { + skills?: ITeamSkill[] | null +} + +export type Skill = Partial & { + teams?: ITeamSkill[] | null, + badges?: IBadgeSkill[] | null; + levels?: ILevelSkill[] | null; +} + +export type Badge = Partial & { + skills?: IBadgeSkill[] | null; +} + +export type Dimension = Partial & { + levels?: Level[] | null; +} + +export type Level = Partial & { + skills?: ILevelSkill[] | null; +} + +export type TeamGroup = Partial & { + teams?: Team[] | null; +} \ No newline at end of file diff --git a/src/main/webapp/app/custom/feedback/feedback.component.ts b/src/main/webapp/app/custom/feedback/feedback.component.ts index 041b1b74..16e91097 100644 --- a/src/main/webapp/app/custom/feedback/feedback.component.ts +++ b/src/main/webapp/app/custom/feedback/feedback.component.ts @@ -8,7 +8,7 @@ import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; import { Observable } from 'rxjs'; import { FeedbackService } from './feedback.service'; -import { IReport, Report } from 'app/entities/report/report.model'; +import { IReport, NewReport } from 'app/entities/report/report.model'; import { DATE_TIME_FORMAT } from 'app/config/input.constants'; import dayjs from 'dayjs/esm'; @@ -18,7 +18,7 @@ import dayjs from 'dayjs/esm'; }) export class FeedbackComponent implements OnInit { isSubmitting = false; - private _report: IReport = new Report(); + private _report: IReport = { id: 0 }; constructor(private feedbackService: FeedbackService, private route: ActivatedRoute) {} diff --git a/src/main/webapp/app/custom/feedback/feedback.module.ts b/src/main/webapp/app/custom/feedback/feedback.module.ts deleted file mode 100644 index 8d22ae8a..00000000 --- a/src/main/webapp/app/custom/feedback/feedback.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - SPDX-FileCopyrightText: the TeamDojo authors - SPDX-License-Identifier: Apache-2.0 - */ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { FeedbackService } from './feedback.service'; -import { FeedbackComponent } from './feedback.component'; -import { FeedbackResolve, feedbackRoute } from './feedback.route'; -import { SharedModule } from 'app/shared/shared.module'; - -const ENTITY_STATES = [...feedbackRoute]; - -@NgModule({ - imports: [SharedModule, RouterModule.forChild(ENTITY_STATES)], - declarations: [FeedbackComponent], - entryComponents: [FeedbackComponent], - providers: [FeedbackService, FeedbackResolve], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class FeedbackModule {} diff --git a/src/main/webapp/app/custom/feedback/feedback.route.ts b/src/main/webapp/app/custom/feedback/feedback.route.ts index 4f334412..a05b11ec 100644 --- a/src/main/webapp/app/custom/feedback/feedback.route.ts +++ b/src/main/webapp/app/custom/feedback/feedback.route.ts @@ -6,14 +6,8 @@ import { Injectable } from '@angular/core'; import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; import { FeedbackComponent } from './feedback.component'; -import { IReport, Report } from 'app/entities/report/report.model'; +import { IReport } from 'app/entities/report/report.model'; -@Injectable() -export class FeedbackResolve implements Resolve { - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): IReport { - return new Report(); - } -} export const feedbackRoute: Routes = [ { @@ -23,8 +17,5 @@ export const feedbackRoute: Routes = [ authorities: [], pageTitle: 'teamDojoApp.feedback.home.title', }, - resolve: { - report: FeedbackResolve, - }, }, ]; diff --git a/src/main/webapp/app/custom/home/home.module.ts b/src/main/webapp/app/custom/home/home.module.ts deleted file mode 100644 index 0172a40c..00000000 --- a/src/main/webapp/app/custom/home/home.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* - SPDX-FileCopyrightText: the TeamDojo authors - SPDX-License-Identifier: Apache-2.0 - */ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { SharedModule } from 'app/shared/shared.module'; -import { HOME_ROUTE } from './home.route'; -import { HomeComponent } from './home.component'; - -@NgModule({ - imports: [SharedModule, RouterModule.forChild([HOME_ROUTE])], - declarations: [HomeComponent], -}) -export class HomeModule {} diff --git a/src/main/webapp/app/custom/layouts/navbar/breadcrumb-trail/breadcrumb-trail.component.ts b/src/main/webapp/app/custom/layouts/navbar/breadcrumb-trail/breadcrumb-trail.component.ts index b695d7f0..e456bb6c 100644 --- a/src/main/webapp/app/custom/layouts/navbar/breadcrumb-trail/breadcrumb-trail.component.ts +++ b/src/main/webapp/app/custom/layouts/navbar/breadcrumb-trail/breadcrumb-trail.component.ts @@ -3,15 +3,19 @@ SPDX-License-Identifier: Apache-2.0 */ import { Component, OnInit, Input } from '@angular/core'; -import { Router, ActivatedRoute } from '@angular/router'; +import { Router, ActivatedRoute, RouterModule } from '@angular/router'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { TeamsSelectionService } from 'app/custom/teams-selection/teams-selection.service'; import { IBreadcrumb } from 'app/custom/entities/breadcrumb/breadcrumb.model'; import { BreadcrumbService } from '../breadcrumb.service'; +import { TruncateStringPipe } from 'app/custom/shared/pipe/truncate-string.pipe'; +import SharedModule from 'app/shared/shared.module'; @Component({ selector: 'jhi-breadcrumb-trail', templateUrl: './breadcrumb-trail.component.html', styleUrls: ['./breadcrumb-trail.component.scss'], + standalone: true, + imports: [SharedModule, RouterModule, TruncateStringPipe] }) export class BreadcrumbTrailComponent implements OnInit { breadcrumbs: IBreadcrumb[] = []; diff --git a/src/main/webapp/app/custom/layouts/navbar/breadcrumb.service.ts b/src/main/webapp/app/custom/layouts/navbar/breadcrumb.service.ts index 1260758e..0ab84075 100644 --- a/src/main/webapp/app/custom/layouts/navbar/breadcrumb.service.ts +++ b/src/main/webapp/app/custom/layouts/navbar/breadcrumb.service.ts @@ -77,7 +77,7 @@ export class BreadcrumbService { } url = this.router.createUrlTree(path).toString(); - breadcrumbs.push(new Breadcrumb(this.team.shortTitle, url, false)); + breadcrumbs.push(new Breadcrumb(this.team.shortTitle != null ? this.team.shortTitle : "", url, false)); } else { path.push(''); } diff --git a/src/main/webapp/app/custom/layouts/navbar/extension/navbar-extension.component.scss b/src/main/webapp/app/custom/layouts/navbar/extension/navbar-extension.component.scss index 8c34d78f..e4c201d4 100644 --- a/src/main/webapp/app/custom/layouts/navbar/extension/navbar-extension.component.scss +++ b/src/main/webapp/app/custom/layouts/navbar/extension/navbar-extension.component.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; /* ========================================================================== Navbar diff --git a/src/main/webapp/app/custom/layouts/navbar/extension/navbar-extension.component.ts b/src/main/webapp/app/custom/layouts/navbar/extension/navbar-extension.component.ts index 046a4b03..c543be1f 100644 --- a/src/main/webapp/app/custom/layouts/navbar/extension/navbar-extension.component.ts +++ b/src/main/webapp/app/custom/layouts/navbar/extension/navbar-extension.component.ts @@ -7,13 +7,17 @@ import { Component, OnInit } from '@angular/core'; import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; import { TeamsSelectionComponent } from 'app/custom/teams-selection/teams-selection.component'; import { TeamsSelectionService } from 'app/custom/teams-selection/teams-selection.service'; -import { ITeam } from 'app/entities/team/team.model'; -import { TEAMS_PER_PAGE } from '../../../../config/pagination.constants'; +import { TeamImageComponent } from 'app/custom/shared/team-image/team-image.component'; +import { Team } from 'app/custom/custom.types'; +import SharedModule from 'app/shared/shared.module'; +import { RouterModule } from '@angular/router'; @Component({ selector: 'jhi-navbar-extension', templateUrl: './navbar-extension.component.html', - styleUrls: ['./navbar-extension.component.scss'], + // styleUrls: ['./navbar-extension.component.scss'], + standalone: true, + imports: [TeamImageComponent, SharedModule, RouterModule] }) export class NavbarExtensionComponent implements OnInit { isTeamSelectionOpen = false; @@ -41,7 +45,7 @@ export class NavbarExtensionComponent implements OnInit { return modalRef; } - get selectedTeam(): ITeam | undefined { + get selectedTeam(): Team | undefined { return this.teamsSelectionService.selectedTeam; } } diff --git a/src/main/webapp/app/custom/overview/achievements/overview-achievements.scss b/src/main/webapp/app/custom/overview/achievements/overview-achievements.scss index c6cb8bff..633fa952 100644 --- a/src/main/webapp/app/custom/overview/achievements/overview-achievements.scss +++ b/src/main/webapp/app/custom/overview/achievements/overview-achievements.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../content/custom/scss/_colors'; @import '../../../../content/custom/scss/mixins'; diff --git a/src/main/webapp/app/custom/overview/overview.module.ts b/src/main/webapp/app/custom/overview/overview.module.ts deleted file mode 100644 index 9616aaee..00000000 --- a/src/main/webapp/app/custom/overview/overview.module.ts +++ /dev/null @@ -1,68 +0,0 @@ -/* - SPDX-FileCopyrightText: the TeamDojo authors - SPDX-License-Identifier: Apache-2.0 - */ -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { SharedModule } from 'app/shared/shared.module'; -import { OVERVIEW_ROUTE } from 'app/custom/overview/overview.route'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { MarkdownModule } from 'ngx-markdown'; - -import { OverviewComponent } from 'app/custom/overview/overview.component'; -import { OverviewTeamsComponent } from 'app/custom/overview/teams/overview-teams.component'; -import { OverviewAchievementsComponent } from 'app/custom/overview/achievements/overview-achievements.component'; -import { OverviewSkillsComponent } from 'app/custom/overview/skills/overview-skills.component'; - -import { TeamsModule } from 'app/custom/teams/teams.module'; -import { BreadcrumbService } from 'app/custom/layouts/navbar/breadcrumb.service'; -import { - AllCommentsResolve, - AllDimensionsResolve, - AllSkillsResolve, - AllTrainingsResolve, - DojoModelResolve, - SkillResolve, - AllTeamGroupsResolve, -} from 'app/custom/common.resolver'; -import { ServerInfoService } from 'app/custom/server-info/server-info.service'; -import { CustomSharedModule } from 'app/custom/shared/custom-shared.module'; -import { TeamsSelectionResolve } from 'app/custom/teams-selection/teams-selection.resolve'; -import { TeamdojoSharedCommonModule } from 'app/custom/shared/shared-common.module'; -import { SharedLibsModule } from 'app/shared/shared-libs.module'; -import { OverviewSkillDetailsComponent } from 'app/custom/overview/skills/skill-details/overview-skill-details.component'; - -@NgModule({ - imports: [ - SharedModule, - RouterModule.forChild(OVERVIEW_ROUTE), - NgbModule, - TeamsModule, - CustomSharedModule, - TeamdojoSharedCommonModule, - SharedLibsModule, - MarkdownModule.forChild(), - ], - declarations: [ - OverviewComponent, - OverviewTeamsComponent, - OverviewAchievementsComponent, - OverviewSkillsComponent, - OverviewSkillDetailsComponent, - ], - entryComponents: [], - providers: [ - DojoModelResolve, - SkillResolve, - AllSkillsResolve, - AllCommentsResolve, - AllTrainingsResolve, - AllDimensionsResolve, - BreadcrumbService, - ServerInfoService, - TeamsSelectionResolve, - AllTeamGroupsResolve, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class OverviewModule {} diff --git a/src/main/webapp/app/custom/overview/overview.scss b/src/main/webapp/app/custom/overview/overview.scss index 41269b0d..654c0fd6 100644 --- a/src/main/webapp/app/custom/overview/overview.scss +++ b/src/main/webapp/app/custom/overview/overview.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @media only screen and (min-width: map-get($grid-breakpoints, lg)) { .overview { diff --git a/src/main/webapp/app/custom/overview/skills/overview-skills.scss b/src/main/webapp/app/custom/overview/skills/overview-skills.scss index 6119bfbc..44d60975 100644 --- a/src/main/webapp/app/custom/overview/skills/overview-skills.scss +++ b/src/main/webapp/app/custom/overview/skills/overview-skills.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../content/custom/scss/_colors.scss'; @import '../../../../content/custom/scss/mixins'; @import '../../teams/skill-details/skill-details-rating/skill-details-rating'; diff --git a/src/main/webapp/app/custom/overview/skills/skill-details/overview-skill-details.scss b/src/main/webapp/app/custom/overview/skills/skill-details/overview-skill-details.scss index 6265b27b..c7b9ff43 100644 --- a/src/main/webapp/app/custom/overview/skills/skill-details/overview-skill-details.scss +++ b/src/main/webapp/app/custom/overview/skills/skill-details/overview-skill-details.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../../content/custom/scss/_colors'; .skill-title { diff --git a/src/main/webapp/app/custom/overview/teams/overview-teams.scss b/src/main/webapp/app/custom/overview/teams/overview-teams.scss index 57890ca2..a68f464e 100644 --- a/src/main/webapp/app/custom/overview/teams/overview-teams.scss +++ b/src/main/webapp/app/custom/overview/teams/overview-teams.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../content/custom/scss/_colors'; .overviews-teams { diff --git a/src/main/webapp/app/custom/server-info/server-info.module.ts b/src/main/webapp/app/custom/server-info/server-info.module.ts deleted file mode 100644 index 3f6859b1..00000000 --- a/src/main/webapp/app/custom/server-info/server-info.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - SPDX-FileCopyrightText: the TeamDojo authors - SPDX-License-Identifier: Apache-2.0 - */ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; - -import { SharedModule } from 'app/shared/shared.module'; -import { ServerInfoService } from './server-info.service'; - -@NgModule({ - imports: [SharedModule], - declarations: [], - entryComponents: [], - providers: [ServerInfoService], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class ServerInfoModule {} diff --git a/src/main/webapp/app/custom/shared/achievement-item/achievement-item.component.ts b/src/main/webapp/app/custom/shared/achievement-item/achievement-item.component.ts index 41145f03..b9714067 100644 --- a/src/main/webapp/app/custom/shared/achievement-item/achievement-item.component.ts +++ b/src/main/webapp/app/custom/shared/achievement-item/achievement-item.component.ts @@ -10,11 +10,19 @@ import { IBadge } from 'app/entities/badge/badge.model'; import { BadgeService } from 'app/entities/badge/service/badge.service'; import { LevelService } from 'app/entities/level/service/level.service'; import { ISkill } from 'app/entities/skill/skill.model'; +import { TranslateModelPipe } from '../translate-model/translate-model.pipe'; +import { NumberInputComponent } from '../number-input/number-input.component'; +import { TeamImageComponent } from '../team-image/team-image.component'; +import SharedModule from 'app/shared/shared.module'; +import { ImageUrlPipe } from '../pipe/image-url.pipe'; +import { TruncateStringPipe } from '../pipe/truncate-string.pipe'; @Component({ + standalone: true, selector: 'jhi-achievement-item', templateUrl: './achievement-item.component.html', styleUrls: ['./achievement-item.scss'], + imports: [TranslateModelPipe, NumberInputComponent, TeamImageComponent, SharedModule, ImageUrlPipe, TruncateStringPipe] }) export class AchievementItemComponent { @Input() item: any; diff --git a/src/main/webapp/app/custom/shared/achievement-item/achievement-item.scss b/src/main/webapp/app/custom/shared/achievement-item/achievement-item.scss index 97b5011b..6dc8f5e1 100644 --- a/src/main/webapp/app/custom/shared/achievement-item/achievement-item.scss +++ b/src/main/webapp/app/custom/shared/achievement-item/achievement-item.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../content/custom/scss/mixins'; @import '../../../../content/custom/scss/_colors'; diff --git a/src/main/webapp/app/custom/shared/background/background.scss b/src/main/webapp/app/custom/shared/background/background.scss index f8e8ff3b..1206c4f5 100644 --- a/src/main/webapp/app/custom/shared/background/background.scss +++ b/src/main/webapp/app/custom/shared/background/background.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; .background-image { background-size: cover; diff --git a/src/main/webapp/app/custom/shared/custom-shared.module.ts b/src/main/webapp/app/custom/shared/custom-shared.module.ts deleted file mode 100644 index 9abc4ca7..00000000 --- a/src/main/webapp/app/custom/shared/custom-shared.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - SPDX-FileCopyrightText: the TeamDojo authors - SPDX-License-Identifier: Apache-2.0 - */ -import { NgModule } from '@angular/core'; -import { BackgroundComponent } from 'app/custom/shared/background/background.component'; -import { TeamsStatusComponent } from 'app/custom/teams/teams-status/teams-status.component'; -import { SharedLibsModule } from 'app/shared/shared-libs.module'; -import { TeamsSelectionService } from 'app/custom/teams-selection/teams-selection.service'; -import { TeamService } from 'app/entities/team/service/team.service'; -import { TranslateModule } from '@ngx-translate/core'; -import { TeamdojoSharedCommonModule } from 'app/custom/shared/shared-common.module'; -import { TrainingsAddComponent } from 'app/custom/shared/trainings/trainings-add.component'; -import { MarkdownModule } from 'ngx-markdown'; -import { BadgeNotificationService } from '../service/badge-notification.service'; - -@NgModule({ - imports: [SharedLibsModule, TranslateModule, TeamdojoSharedCommonModule, MarkdownModule.forChild()], - declarations: [BackgroundComponent, TeamsStatusComponent, TrainingsAddComponent], - exports: [BackgroundComponent, TeamsStatusComponent, TranslateModule, TeamdojoSharedCommonModule], - providers: [TeamsSelectionService, TeamService, BadgeNotificationService], - entryComponents: [TrainingsAddComponent], -}) -export class CustomSharedModule {} diff --git a/src/main/webapp/app/custom/shared/notification/item/notification-item.component.ts b/src/main/webapp/app/custom/shared/notification/item/notification-item.component.ts index 455cefb3..6811e1b0 100644 --- a/src/main/webapp/app/custom/shared/notification/item/notification-item.component.ts +++ b/src/main/webapp/app/custom/shared/notification/item/notification-item.component.ts @@ -6,28 +6,35 @@ import { Component, Input, OnInit } from '@angular/core'; import { ITeam } from 'app/entities/team/team.model'; import { IBadge } from 'app/entities/badge/badge.model'; import { INotification } from 'app/custom/shared/notification/model/notification.model'; +import { DatePipe } from '@angular/common'; +import SharedModule from 'app/shared/shared.module'; +import { AchievementItemComponent } from '../../achievement-item/achievement-item.component'; +import { TeamImageComponent } from '../../team-image/team-image.component'; +import { Badge, Team } from 'app/custom/custom.types'; @Component({ + standalone: true, selector: 'jhi-notification-item', templateUrl: './notification-item.component.html', styleUrls: ['./notification-item.scss'], + imports: [DatePipe, SharedModule, AchievementItemComponent, TeamImageComponent] }) export class NotificationItemComponent implements OnInit { @Input() notification?: INotification; - @Input() teams?: ITeam[]; - @Input() badges?: IBadge[]; + @Input() teams?: Team[]; + @Input() badges?: Badge[]; picture = ''; - item?: IBadge | ITeam = {}; + item?: Badge | Team = {}; ngOnInit(): void { this.item = {}; const type = this.notification?.activity?.type; if (type?.toString() === 'BADGE_CREATED') { const badgeId = this.notification?.data.badgeId; - this.item = this.badges?.find((b: IBadge) => b.id === badgeId); + this.item = this.badges?.find((b: Badge) => b.id === badgeId); } else if (type?.toString() === 'SKILL_COMPLETED' || type?.toString() === 'BADGE_COMPLETED') { const teamId = this.notification?.data.teamId; - this.item = this.teams?.find((t: ITeam) => t.id === teamId); + this.item = this.teams?.find((t: Team) => t.id === teamId); } } } diff --git a/src/main/webapp/app/custom/shared/notification/menu/notification-menu.component.ts b/src/main/webapp/app/custom/shared/notification/menu/notification-menu.component.ts index 31274552..281fc4a6 100644 --- a/src/main/webapp/app/custom/shared/notification/menu/notification-menu.component.ts +++ b/src/main/webapp/app/custom/shared/notification/menu/notification-menu.component.ts @@ -14,11 +14,19 @@ import { INotification, Notification } from 'app/custom/shared/notification/mode import { ParseLinks } from 'app/core/util/parse-links.service'; import { IActivity } from 'app/entities/activity/activity.model'; import { TEAMS_PER_PAGE } from '../../../../config/pagination.constants'; +import { NotificationItemComponent } from '../item/notification-item.component'; +import SharedModule from 'app/shared/shared.module'; +import { CommonModule } from '@angular/common'; +import { RouterModule } from '@angular/router'; +import { FormsModule } from '@angular/forms'; +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; @Component({ + standalone: true, selector: 'jhi-notification-menu', templateUrl: './notification-menu.component.html', styleUrls: ['./notification-menu.scss'], + imports: [NotificationItemComponent, SharedModule, InfiniteScrollModule] }) export class NotificationMenuComponent implements OnInit { notifications: INotification[] = []; diff --git a/src/main/webapp/app/custom/shared/notification/menu/notification-menu.scss b/src/main/webapp/app/custom/shared/notification/menu/notification-menu.scss index 25cf51b5..d108ad2d 100644 --- a/src/main/webapp/app/custom/shared/notification/menu/notification-menu.scss +++ b/src/main/webapp/app/custom/shared/notification/menu/notification-menu.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../../content/custom/scss/_colors'; .notification-menu { diff --git a/src/main/webapp/app/custom/shared/number-input/number-input.component.ts b/src/main/webapp/app/custom/shared/number-input/number-input.component.ts index 741ee841..1ae2839c 100644 --- a/src/main/webapp/app/custom/shared/number-input/number-input.component.ts +++ b/src/main/webapp/app/custom/shared/number-input/number-input.component.ts @@ -3,11 +3,16 @@ SPDX-License-Identifier: Apache-2.0 */ import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; +import SharedModule from 'app/shared/shared.module'; @Component({ + standalone: true, selector: 'jhi-number-input', templateUrl: './number-input.component.html', styleUrls: ['./number-input.scss'], + imports: [SharedModule, RouterModule, FormsModule] }) export class NumberInputComponent { @Input() value = 0; diff --git a/src/main/webapp/app/custom/shared/pipe/image-url.pipe.ts b/src/main/webapp/app/custom/shared/pipe/image-url.pipe.ts index 3b68338a..f0190a76 100644 --- a/src/main/webapp/app/custom/shared/pipe/image-url.pipe.ts +++ b/src/main/webapp/app/custom/shared/pipe/image-url.pipe.ts @@ -4,7 +4,7 @@ */ import { Pipe, PipeTransform } from '@angular/core'; -@Pipe({ name: 'imageUrl' }) +@Pipe({ name: 'imageUrl', standalone: true}) export class ImageUrlPipe implements PipeTransform { transform(imageId: string | number | undefined, size: string, cacheBuster?: string | null): string { if (imageId) { diff --git a/src/main/webapp/app/custom/shared/pipe/truncate-string.pipe.ts b/src/main/webapp/app/custom/shared/pipe/truncate-string.pipe.ts index f829476b..adc78285 100644 --- a/src/main/webapp/app/custom/shared/pipe/truncate-string.pipe.ts +++ b/src/main/webapp/app/custom/shared/pipe/truncate-string.pipe.ts @@ -4,7 +4,10 @@ */ import { Pipe, PipeTransform } from '@angular/core'; -@Pipe({ name: 'truncateString' }) +@Pipe({ + name: 'truncateString', + standalone: true, +}) export class TruncateStringPipe implements PipeTransform { transform(stringToTruncate: string | undefined | null, truncateLength = 10): string { let truncatedString = ''; diff --git a/src/main/webapp/app/custom/shared/shared-common.module.ts b/src/main/webapp/app/custom/shared/shared-common.module.ts deleted file mode 100644 index 202e4a3f..00000000 --- a/src/main/webapp/app/custom/shared/shared-common.module.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* - SPDX-FileCopyrightText: the TeamDojo authors - SPDX-License-Identifier: Apache-2.0 - */ -import { NgModule } from '@angular/core'; -import { TeamdojoSharedLibsModule } from 'app/custom/shared/shared-libs.module'; - -import { TeamsSelectionService } from 'app/custom/teams-selection/teams-selection.service'; -import { TeamsSelectionResolve } from 'app/custom/teams-selection/teams-selection.resolve'; -import { TeamImageComponent } from 'app/custom/shared/team-image/team-image.component'; -import { SharedModule } from 'app/shared/shared.module'; -import { TruncateStringPipe } from 'app/custom/shared/pipe/truncate-string.pipe'; -import { ImageUrlPipe } from 'app/custom/shared/pipe/image-url.pipe'; -import { AchievementItemComponent } from 'app/custom/shared/achievement-item/achievement-item.component'; -import { NumberInputComponent } from 'app/custom/shared/number-input/number-input.component'; -import { SkillSortPipe } from 'app/custom/shared/pipe/skill-sort.pipe'; -import { SkillFilterPipe } from 'app/custom/shared/pipe/skill-filter.pipe'; -import { AchievableSkillFilterPipe } from 'app/custom/shared/pipe/achievable-skill-filter.pipe'; -import { SkillScoreComponent } from 'app/custom/shared/skill-score/skill-score.component'; -import { NotificationItemComponent } from 'app/custom/shared/notification/item/notification-item.component'; -import { NotificationMenuComponent } from 'app/custom/shared/notification/menu/notification-menu.component'; -import { TableFilterComponent } from 'app/custom/shared/table-filter/table-filter.component'; -import { TeamGroupFilterPipe } from './pipe/team-group-filter.pipe'; -import { TranslateModelPipe } from './translate-model/translate-model.pipe'; -import { SkillCardComponent } from './skill-card/skill-card.component'; - -@NgModule({ - imports: [TeamdojoSharedLibsModule, SharedModule], - declarations: [ - TeamImageComponent, - TruncateStringPipe, - ImageUrlPipe, - AchievementItemComponent, - SkillCardComponent, - NumberInputComponent, - SkillSortPipe, - SkillFilterPipe, - AchievableSkillFilterPipe, - SkillScoreComponent, - NotificationItemComponent, - NotificationMenuComponent, - TableFilterComponent, - TeamGroupFilterPipe, - TranslateModelPipe, - ], - providers: [TeamsSelectionService, TeamsSelectionResolve], - exports: [ - TeamdojoSharedLibsModule, - TeamImageComponent, - TruncateStringPipe, - ImageUrlPipe, - AchievementItemComponent, - SkillCardComponent, - NumberInputComponent, - SkillSortPipe, - SkillFilterPipe, - AchievableSkillFilterPipe, - SharedModule, - SkillScoreComponent, - NotificationMenuComponent, - NotificationItemComponent, - TableFilterComponent, - TeamGroupFilterPipe, - TranslateModelPipe, - ], -}) -export class TeamdojoSharedCommonModule {} diff --git a/src/main/webapp/app/custom/shared/shared-libs.module.ts b/src/main/webapp/app/custom/shared/shared-libs.module.ts deleted file mode 100644 index 66f71843..00000000 --- a/src/main/webapp/app/custom/shared/shared-libs.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* - SPDX-FileCopyrightText: the TeamDojo authors - SPDX-License-Identifier: Apache-2.0 - */ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; -import { TranslateModule } from '@ngx-translate/core'; - -@NgModule({ - imports: [NgbModule, InfiniteScrollModule, FontAwesomeModule], - exports: [FontAwesomeModule, FormsModule, CommonModule, NgbModule, InfiniteScrollModule, ReactiveFormsModule, TranslateModule], -}) -export class TeamdojoSharedLibsModule { - static forRoot(): { ngModule: typeof TeamdojoSharedLibsModule } { - return { - ngModule: TeamdojoSharedLibsModule, - }; - } -} diff --git a/src/main/webapp/app/custom/shared/skill-card/skill-card.component.scss b/src/main/webapp/app/custom/shared/skill-card/skill-card.component.scss index 568c6307..fef7b733 100644 --- a/src/main/webapp/app/custom/shared/skill-card/skill-card.component.scss +++ b/src/main/webapp/app/custom/shared/skill-card/skill-card.component.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../content/custom/scss/_colors'; @import '../../../../content/custom/scss/mixins.scss'; @import '../../teams/skill-details/skill-details-rating/skill-details-rating'; diff --git a/src/main/webapp/app/custom/shared/skill-details/comments/skill-details-comments.scss b/src/main/webapp/app/custom/shared/skill-details/comments/skill-details-comments.scss index 24c727b3..1951e703 100644 --- a/src/main/webapp/app/custom/shared/skill-details/comments/skill-details-comments.scss +++ b/src/main/webapp/app/custom/shared/skill-details/comments/skill-details-comments.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../../content/custom/scss/_colors'; @import '../../../../../content/custom/scss/mixins'; diff --git a/src/main/webapp/app/custom/shared/skill-details/info/skill-details-info.scss b/src/main/webapp/app/custom/shared/skill-details/info/skill-details-info.scss index ee7612fe..5aae53ec 100644 --- a/src/main/webapp/app/custom/shared/skill-details/info/skill-details-info.scss +++ b/src/main/webapp/app/custom/shared/skill-details/info/skill-details-info.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../../content/custom/scss/_colors'; @import '../../../../../content/custom/scss/mixins'; diff --git a/src/main/webapp/app/custom/shared/team-image/team-image.component.html b/src/main/webapp/app/custom/shared/team-image/team-image.component.html index 98ffb76f..accb2df7 100644 --- a/src/main/webapp/app/custom/shared/team-image/team-image.component.html +++ b/src/main/webapp/app/custom/shared/team-image/team-image.component.html @@ -11,8 +11,8 @@
+ >
+ {{ team?.shortTitle | truncateString }} diff --git a/src/main/webapp/app/custom/shared/team-image/team-image.component.ts b/src/main/webapp/app/custom/shared/team-image/team-image.component.ts index 7e5cf789..0b56cbed 100644 --- a/src/main/webapp/app/custom/shared/team-image/team-image.component.ts +++ b/src/main/webapp/app/custom/shared/team-image/team-image.component.ts @@ -6,14 +6,19 @@ import { Component, Input, SimpleChanges, SimpleChange } from '@angular/core'; import { ITeam } from 'app/entities/team/team.model'; import dayjs from 'dayjs/esm'; import { ImageService } from '../../../entities/image/service/image.service'; +import { Team } from 'app/custom/custom.types'; +import { TruncateStringPipe } from '../pipe/truncate-string.pipe'; +import SharedModule from 'app/shared/shared.module'; @Component({ selector: 'jhi-team-image', templateUrl: './team-image.component.html', styleUrls: ['./team-image.scss'], + standalone: true, + imports: [TruncateStringPipe, SharedModule] }) export class TeamImageComponent { - @Input() team?: ITeam; + @Input() team?: Team; @Input() size = '50px'; @Input() imageSize = 'large'; @Input() hasPlaceholder = true; @@ -33,7 +38,7 @@ export class TeamImageComponent { } } - isExpired(team?: ITeam): boolean { + isExpired(team?: Team): boolean { if (team?.expirationDate != null) { return team.expirationDate.isBefore(dayjs(), 'day'); } @@ -41,13 +46,14 @@ export class TeamImageComponent { return false; } - private queryImageHash(team?: ITeam): void { + private queryImageHash(team?: Team): void { if (team?.image?.id) { - this.imageService.getHash(team.image.id).subscribe(response => { - if (this.team?.image) { - this.team.image.hash = response.body; - } - }); + // TODO: getHash method not availible since update + // this.imageService.getHash(team.image.id).subscribe(response => { + // if (this.team?.image) { + // this.team.image.hash = response.body; + // } + // }); } } } diff --git a/src/main/webapp/app/custom/shared/translate-model/translate-model.pipe.ts b/src/main/webapp/app/custom/shared/translate-model/translate-model.pipe.ts index df41f81d..de450509 100644 --- a/src/main/webapp/app/custom/shared/translate-model/translate-model.pipe.ts +++ b/src/main/webapp/app/custom/shared/translate-model/translate-model.pipe.ts @@ -18,6 +18,7 @@ import { TranslatableModels, TranslateModelService } from './translate-model.ser @Pipe({ name: 'translateModel', pure: false, // Must not be pure so that already rendered components will be rendered again after language switch. + standalone: true }) export class TranslateModelPipe implements PipeTransform { constructor(private translation: TranslateModelService) {} diff --git a/src/main/webapp/app/custom/teams-selection/teams-selection.component.ts b/src/main/webapp/app/custom/teams-selection/teams-selection.component.ts index cbcee08e..f0ca9a79 100644 --- a/src/main/webapp/app/custom/teams-selection/teams-selection.component.ts +++ b/src/main/webapp/app/custom/teams-selection/teams-selection.component.ts @@ -12,16 +12,21 @@ import { TeamsEditComponent } from 'app/custom/teams/teams-edit/teams-edit.compo import { TeamExpiration } from '../helper/team-expiration'; import { TeamService } from 'app/entities/team/service/team.service'; import { TEAMS_PER_PAGE } from '../../config/pagination.constants'; +import { Team } from '../custom.types'; +import { TeamImageComponent } from '../shared/team-image/team-image.component'; +import SharedModule from 'app/shared/shared.module'; @Component({ + standalone: true, selector: 'jhi-teams-selection', templateUrl: './teams-selection.component.html', styleUrls: ['./teams-selection.scss'], + imports: [TeamImageComponent, SharedModule] }) export class TeamsSelectionComponent implements OnInit { - highlightedTeam: ITeam | null = null; - selectedTeam: ITeam | null = null; - teams: ITeam[] = []; + highlightedTeam: Team | null = null; + selectedTeam: Team | null = null; + teams: Team[] = []; constructor( private activeModal: NgbActiveModal, @@ -47,7 +52,7 @@ export class TeamsSelectionComponent implements OnInit { return new TeamExpiration().isValidTeam(team); } - selectTeam(team: ITeam): void { + selectTeam(team: Team): void { this.highlightedTeam = team; this.teamsSelectionService.selectedTeam = team; this.activeModal.close('Team selected'); diff --git a/src/main/webapp/app/custom/teams-selection/teams-selection.service.ts b/src/main/webapp/app/custom/teams-selection/teams-selection.service.ts index 088d9eb6..1569f0d7 100644 --- a/src/main/webapp/app/custom/teams-selection/teams-selection.service.ts +++ b/src/main/webapp/app/custom/teams-selection/teams-selection.service.ts @@ -6,23 +6,24 @@ import { Injectable, Output, EventEmitter } from '@angular/core'; import { LocalStorageService } from 'ngx-webstorage'; import { Observable, EMPTY, of } from 'rxjs'; import { catchError, flatMap, map, tap } from 'rxjs/operators'; -import { ITeam, Team } from 'app/entities/team/team.model'; +import { ITeam } from 'app/entities/team/team.model'; import { TeamService } from 'app/entities/team/service/team.service'; import { TeamSkillService } from 'app/entities/team-skill/service/team-skill.service'; import { TEAM_SKILLS_PER_PAGE } from '../../config/pagination.constants'; +import { Team } from '../custom.types'; const TEAM_STORAGE_KEY = 'selectedTeamId'; @Injectable() export class TeamsSelectionService { @Output() teamChanged = new EventEmitter(); - private _selectedTeam?: ITeam; + private _selectedTeam?: Team; constructor(private teamsService: TeamService, private teamSkillService: TeamSkillService, private storage: LocalStorageService) { this.query(); } - query(): Observable { + query(): Observable { const teamIdStr = this.storage.retrieve(TEAM_STORAGE_KEY); if (teamIdStr !== null && !isNaN(Number(teamIdStr))) { return this.teamsService.find(teamIdStr).pipe( @@ -46,14 +47,14 @@ export class TeamsSelectionService { ) ); } - return of(this._selectedTeam ? this._selectedTeam : new Team()); + return of(this._selectedTeam ? this._selectedTeam : { id: 0 }); } - get selectedTeam(): ITeam | undefined { + get selectedTeam(): Team | undefined { return this._selectedTeam; } - set selectedTeam(team: ITeam | undefined) { + set selectedTeam(team: Team | undefined) { this._selectedTeam = team; if (this._selectedTeam?.id !== undefined) { diff --git a/src/main/webapp/app/custom/teams/skill-details/skill-details.scss b/src/main/webapp/app/custom/teams/skill-details/skill-details.scss index af747c38..9f23e634 100644 --- a/src/main/webapp/app/custom/teams/skill-details/skill-details.scss +++ b/src/main/webapp/app/custom/teams/skill-details/skill-details.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../content/custom/scss/_colors'; @media (min-width: 576px) { diff --git a/src/main/webapp/app/custom/teams/skills/teams-skills.scss b/src/main/webapp/app/custom/teams/skills/teams-skills.scss index e4169195..9613d3b4 100644 --- a/src/main/webapp/app/custom/teams/skills/teams-skills.scss +++ b/src/main/webapp/app/custom/teams/skills/teams-skills.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../content/custom/scss/_colors'; @import '../../../../content/custom/scss/mixins'; @import '../skill-details/skill-details-rating/skill-details-rating'; diff --git a/src/main/webapp/app/custom/teams/teams-achievements/teams-achievements.component.scss b/src/main/webapp/app/custom/teams/teams-achievements/teams-achievements.component.scss index 5a51361d..74d7212c 100644 --- a/src/main/webapp/app/custom/teams/teams-achievements/teams-achievements.component.scss +++ b/src/main/webapp/app/custom/teams/teams-achievements/teams-achievements.component.scss @@ -2,8 +2,8 @@ SPDX-FileCopyrightText: the TeamDojo authors SPDX-License-Identifier: Apache-2.0 */ -@import '~bootstrap/scss/functions'; -@import '~bootstrap/scss/variables'; +@import 'bootstap/scss/functions'; +@import 'bootstap/scss/variables'; @import '../../../../content/custom/scss/_colors'; @import '../../../../content/custom/scss/mixins'; diff --git a/src/main/webapp/app/custom/teams/teams-edit/teams-edit.component.ts b/src/main/webapp/app/custom/teams/teams-edit/teams-edit.component.ts index e0364620..830e81f1 100644 --- a/src/main/webapp/app/custom/teams/teams-edit/teams-edit.component.ts +++ b/src/main/webapp/app/custom/teams/teams-edit/teams-edit.component.ts @@ -4,10 +4,10 @@ */ import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; -import { FormBuilder, Validators } from '@angular/forms'; +import { FormBuilder, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; import { Observable } from 'rxjs'; import { filter, map } from 'rxjs/operators'; -import { ITeam, Team } from 'app/entities/team/team.model'; +import { ITeam } from 'app/entities/team/team.model'; import { IImage } from 'app/entities/image/image.model'; import { IDimension } from 'app/entities/dimension/dimension.model'; import { AlertService } from 'app/core/util/alert.service'; @@ -16,7 +16,7 @@ import { DimensionService } from 'app/entities/dimension/service/dimension.servi import { ImageService } from 'app/entities/image/service/image.service'; import { DataUtils, FileLoadError } from 'app/core/util/data-util.service'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { NgbActiveModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { EventManager, EventWithContent } from 'app/core/util/event-manager.service'; import { AlertError } from 'app/shared/alert/alert-error.model'; import { TeamGroupService } from 'app/entities/team-group/service/team-group.service'; @@ -24,14 +24,22 @@ import { ITeamGroup } from '../../../entities/team-group/team-group.model'; import { DIMENSIONS_PER_PAGE, TEAM_GROUPS_PER_PAGE } from '../../../config/pagination.constants'; import dayjs from 'dayjs/esm'; import { DATE_TIME_FORMAT } from '../../../config/input.constants'; +import { Team } from 'app/custom/custom.types'; +import SharedModule from 'app/shared/shared.module'; +import { TranslateModelPipe } from 'app/custom/shared/translate-model/translate-model.pipe'; +import { RouterModule } from '@angular/router'; +import { AlertErrorComponent } from 'app/shared/alert/alert-error.component'; +import { CommonModule } from '@angular/common'; @Component({ + standalone: true, selector: 'jhi-teams-quickedit', templateUrl: './teams-edit.component.html', styleUrls: ['./teams-edit.scss'], + imports: [FormsModule, ReactiveFormsModule, SharedModule, TranslateModelPipe, RouterModule, AlertErrorComponent, CommonModule, NgbModule] }) export class TeamsEditComponent implements OnInit { - team: ITeam; + team: Team; isSaving: boolean; image: IImage | null; editMode: boolean; @@ -61,7 +69,7 @@ export class TeamsEditComponent implements OnInit { private fb: FormBuilder, private eventManager: EventManager ) { - this.team = new Team(); + this.team = {id: 0}; this.isSaving = false; this.image = null; this.editMode = false; @@ -71,7 +79,7 @@ export class TeamsEditComponent implements OnInit { ngOnInit(): void { this.isSaving = false; - this.image = {}; + this.image = {id: 0}; if (this.team.image?.id) { this.imageService.find(this.team.image.id).subscribe( (res: HttpResponse) => (this.image = res.body), @@ -105,7 +113,7 @@ export class TeamsEditComponent implements OnInit { this.team.expirationDate = dayjs(this.expirationDateString, DATE_TIME_FORMAT); if (this.image) { - const title: string | undefined = this.team.shortTitle ? this.team.shortTitle : this.team.title; + const title: string | undefined | null = this.team.shortTitle ? this.team.shortTitle : this.team.title; this.image.title = (title ? title : '') + '-logo-' + String(Date.now()); @@ -113,16 +121,16 @@ export class TeamsEditComponent implements OnInit { if (this.image.id !== undefined) { imageResult = this.imageService.update(this.image); } else { - imageResult = this.imageService.create(this.image); + imageResult = this.imageService.create({...this.image, id: null}); } imageResult.subscribe( (imgRes: HttpResponse) => { this.team.image = imgRes.body; - if (this.team.id !== undefined) { - this.subscribeToSaveResponse(this.teamService.update(this.team)); + if (this.team.id != undefined) { + this.subscribeToSaveResponse(this.teamService.update({...this.team, id: this.team.id})); } else { - this.subscribeToSaveResponse(this.teamService.create(this.team)); + this.subscribeToSaveResponse(this.teamService.create({...this.team, id: null})); } }, (res: HttpErrorResponse) => { diff --git a/src/main/webapp/app/custom/teams/teams.module.ts b/src/main/webapp/app/custom/teams/teams.module.ts deleted file mode 100644 index 12c66ec2..00000000 --- a/src/main/webapp/app/custom/teams/teams.module.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* - SPDX-FileCopyrightText: the TeamDojo authors - SPDX-License-Identifier: Apache-2.0 - */ -import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { MarkdownModule } from 'ngx-markdown'; - -import { TeamAndTeamSkillResolve, TEAMS_ROUTES } from 'app/custom/teams/teams.route'; -import { TeamsComponent } from 'app/custom/teams/teams.component'; -import { TeamsAchievementsComponent } from 'app/custom/teams/teams-achievements/teams-achievements.component'; -import { TeamsEditComponent } from 'app/custom/teams/teams-edit/teams-edit.component'; -import { AllCommentsResolve, AllSkillsResolve, DojoModelResolve, SkillResolve } from 'app/custom/common.resolver'; -import { TeamService } from 'app/entities/team/service/team.service'; -import { CustomSharedModule } from 'app/custom/shared/custom-shared.module'; -import { FormsModule } from '@angular/forms'; -import { SharedLibsModule } from 'app/shared/shared-libs.module'; -import { SkillDetailsRatingComponent } from 'app/custom/teams/skill-details/skill-details-rating/skill-details-rating.component'; -import { TeamsSkillsComponent } from 'app/custom/teams/skills/teams-skills.component'; -import { SkillDetailsInfoComponent } from 'app/custom/shared/skill-details/info/skill-details-info.component'; -import { SkillDetailsCommentsComponent } from 'app/custom/shared/skill-details/comments/skill-details-comments.component'; -import { TeamsSkillsService } from 'app/custom/teams/teams-skills.service'; -import { TeamsAchievementsService } from 'app/custom/teams/services/teams-achievements.service'; -import { SkillDetailsComponent } from 'app/custom/teams/skill-details/skill-details.component'; -import { TeamsSelectionComponent } from 'app/custom/teams-selection/teams-selection.component'; -import { SkillDetailsBaseComponent } from 'app/custom/shared/skill-details/skill-details-base.component'; - -@NgModule({ - imports: [FormsModule, CustomSharedModule, RouterModule.forChild(TEAMS_ROUTES), NgbModule, MarkdownModule.forChild(), SharedLibsModule], - declarations: [ - TeamsComponent, - TeamsAchievementsComponent, - TeamsEditComponent, - SkillDetailsRatingComponent, - TeamsSkillsComponent, - SkillDetailsInfoComponent, - SkillDetailsCommentsComponent, - SkillDetailsBaseComponent, - SkillDetailsComponent, - TeamsSelectionComponent, - ], - entryComponents: [TeamsEditComponent, TeamsSelectionComponent], - providers: [ - DojoModelResolve, - TeamService, - TeamsSkillsService, - TeamsAchievementsService, - TeamAndTeamSkillResolve, - SkillResolve, - AllSkillsResolve, - AllCommentsResolve, - ], - exports: [SkillDetailsInfoComponent, SkillDetailsCommentsComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class TeamsModule {} diff --git a/src/main/webapp/app/custom/teams/teams.route.ts b/src/main/webapp/app/custom/teams/teams.route.ts index 753fe947..3688f724 100644 --- a/src/main/webapp/app/custom/teams/teams.route.ts +++ b/src/main/webapp/app/custom/teams/teams.route.ts @@ -7,19 +7,19 @@ import { Injectable } from '@angular/core'; import { flatMap, map } from 'rxjs/operators'; import { TeamService } from 'app/entities/team/service/team.service'; import { TeamSkillService } from 'app/entities/team-skill/service/team-skill.service'; -import { ITeam, Team } from 'app/entities/team/team.model'; import { TeamsComponent } from 'app/custom/teams/teams.component'; import { AllCommentsResolve, AllSkillsResolve, AllTrainingsResolve, DojoModelResolve, SkillResolve } from 'app/custom/common.resolver'; import { TeamsSelectionResolve } from 'app/custom/teams-selection/teams-selection.resolve'; import { Observable } from 'rxjs'; import { SkillDetailsComponent } from 'app/custom/teams/skill-details/skill-details.component'; import { TEAM_SKILLS_PER_PAGE } from '../../config/pagination.constants'; +import { Team } from '../custom.types'; @Injectable() export class TeamAndTeamSkillResolve implements Resolve { constructor(private teamService: TeamService, private teamSkillService: TeamSkillService, private router: Router) {} - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | ITeam { + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Team { const shortTitle = route.params['shortTitle'] ? route.params['shortTitle'] : null; if (shortTitle) { return this.teamService @@ -31,7 +31,7 @@ export class TeamAndTeamSkillResolve implements Resolve { if (teamResponse.body?.length === 0) { this.router.navigate(['/error']); } - const team: ITeam = teamResponse.body ? teamResponse.body[0] : new Team(); + const team: Team = teamResponse.body ? teamResponse.body[0] : {}; return this.teamSkillService.query({ page: 0, size: TEAM_SKILLS_PER_PAGE, 'teamId.equals': team.id }).pipe( map(teamSkillResponse => { team.skills = teamSkillResponse.body; @@ -41,7 +41,7 @@ export class TeamAndTeamSkillResolve implements Resolve { }) ); } - return new Team(); + return {}; } } diff --git a/src/main/webapp/app/entities/comment/detail/comment-detail.component.ts b/src/main/webapp/app/entities/comment/detail/comment-detail.component.ts index a454135e..c4de1616 100644 --- a/src/main/webapp/app/entities/comment/detail/comment-detail.component.ts +++ b/src/main/webapp/app/entities/comment/detail/comment-detail.component.ts @@ -4,12 +4,22 @@ import { ActivatedRoute, RouterModule } from '@angular/router'; import SharedModule from 'app/shared/shared.module'; import { DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe } from 'app/shared/date'; import { IComment } from '../comment.model'; +import { TranslateModelPipe } from 'app/custom/shared/translate-model/translate-model.pipe'; @Component({ standalone: true, selector: 'jhi-comment-detail', templateUrl: './comment-detail.component.html', - imports: [SharedModule, RouterModule, DurationPipe, FormatMediumDatetimePipe, FormatMediumDatePipe], + imports: [ + SharedModule, + RouterModule, + DurationPipe, + FormatMediumDatetimePipe, + FormatMediumDatePipe, + /// ### MODIFICATION-START ### + TranslateModelPipe + /// ### MODIFICATION-END ### + ], }) export class CommentDetailComponent { @Input() comment: IComment | null = null; diff --git a/src/main/webapp/app/entities/comment/list/comment.component.ts b/src/main/webapp/app/entities/comment/list/comment.component.ts index 0dfdb6de..f732c830 100644 --- a/src/main/webapp/app/entities/comment/list/comment.component.ts +++ b/src/main/webapp/app/entities/comment/list/comment.component.ts @@ -16,6 +16,7 @@ import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { EntityArrayResponseType, CommentService } from '../service/comment.service'; import { CommentDeleteDialogComponent } from '../delete/comment-delete-dialog.component'; import { IComment } from '../comment.model'; +import { TranslateModelPipe } from 'app/custom/shared/translate-model/translate-model.pipe'; @Component({ standalone: true, @@ -31,6 +32,9 @@ import { IComment } from '../comment.model'; FormatMediumDatetimePipe, FormatMediumDatePipe, InfiniteScrollModule, + /// ### MODIFICATION-START ### + TranslateModelPipe + /// ### MODIFICATION-END ### ], }) export class CommentComponent implements OnInit { diff --git a/src/main/webapp/app/entities/comment/update/comment-update.component.ts b/src/main/webapp/app/entities/comment/update/comment-update.component.ts index 1f8db71f..350ea586 100644 --- a/src/main/webapp/app/entities/comment/update/comment-update.component.ts +++ b/src/main/webapp/app/entities/comment/update/comment-update.component.ts @@ -16,13 +16,21 @@ import { IComment } from '../comment.model'; import { CommentFormService, CommentFormGroup } from './comment-form.service'; // ### Modification-Start ### import { SKILLS_PER_PAGE, TEAMS_PER_PAGE } from '../../../config/pagination.constants'; +import { TranslateModelPipe } from 'app/custom/shared/translate-model/translate-model.pipe'; // ### Modification-End### @Component({ standalone: true, selector: 'jhi-comment-update', templateUrl: './comment-update.component.html', - imports: [SharedModule, FormsModule, ReactiveFormsModule], + imports: [ + SharedModule, + FormsModule, + ReactiveFormsModule, + /// ### MODIFICATION-START ### + TranslateModelPipe, + /// ### MODIFICATION-END ### + ], }) export class CommentUpdateComponent implements OnInit { isSaving = false; diff --git a/src/main/webapp/app/layouts/navbar/navbar.component.html b/src/main/webapp/app/layouts/navbar/navbar.component.html index 7d160402..cef92df2 100644 --- a/src/main/webapp/app/layouts/navbar/navbar.component.html +++ b/src/main/webapp/app/layouts/navbar/navbar.component.html @@ -29,7 +29,6 @@ ngbDropdown autoClose="outside" placement="bottom" - (openChange)="notificationMenu.loadNotifications()" class="nav-item dropdown pointer" routerLinkActive="active" [routerLinkActiveOptions]="{ exact: true }" diff --git a/src/main/webapp/app/layouts/navbar/navbar.component.ts b/src/main/webapp/app/layouts/navbar/navbar.component.ts index 07b47ce9..7febb288 100644 --- a/src/main/webapp/app/layouts/navbar/navbar.component.ts +++ b/src/main/webapp/app/layouts/navbar/navbar.component.ts @@ -20,6 +20,9 @@ import { ProfileService } from 'app/layouts/profiles/profile.service'; import { EntityNavbarItems } from 'app/entities/entity-navbar-items'; import ActiveMenuDirective from './active-menu.directive'; import NavbarItem from './navbar-item.model'; +import { BreadcrumbTrailComponent } from 'app/custom/layouts/navbar/breadcrumb-trail/breadcrumb-trail.component'; +import { NotificationMenuComponent } from 'app/custom/shared/notification/menu/notification-menu.component'; +import { NavbarExtensionComponent } from 'app/custom/layouts/navbar/extension/navbar-extension.component'; @Component({ standalone: true, @@ -28,7 +31,17 @@ import NavbarItem from './navbar-item.model'; // ### Modification-Start ### styleUrls: ['./custom/navbar.component.scss'], // ### Modification-End ### - imports: [RouterModule, SharedModule, HasAnyAuthorityDirective, ActiveMenuDirective], + imports: [ + RouterModule, + SharedModule, + HasAnyAuthorityDirective, + ActiveMenuDirective, + /// ### MODIFICATION-START ### + BreadcrumbTrailComponent, + NotificationMenuComponent, + NavbarExtensionComponent + /// ### MODIFICATION-END ### + ], }) export default class NavbarComponent implements OnInit { inProduction?: boolean; diff --git a/src/main/webapp/content/scss/vendor.scss b/src/main/webapp/content/scss/vendor.scss index 84c2ad43..aa3674b6 100644 --- a/src/main/webapp/content/scss/vendor.scss +++ b/src/main/webapp/content/scss/vendor.scss @@ -1,8 +1,8 @@ /* after changing this file run 'npm run webapp:build' */ // ### MODIFICATION-START ### -$fa-font-path: '~font-awesome/fonts'; -$font-prefix: '~@ibm/plex'; +// $fa-font-path: '~font-awesome/fonts'; +// $font-prefix: '~@ibm/plex'; // ### MODIFICATION-END ### /*************************** @@ -17,7 +17,7 @@ eg $input-color: red; /* jhipster-needle-scss-add-vendor JHipster will add new css style */ // ### MODIFICATION-START ### -@import '~simplebar/dist/simplebar.css'; -@import '~@ibm/plex/scss/ibm-plex.scss'; -@import '~@fortawesome/fontawesome-free/css/all.css'; +// @import '~simplebar/dist/simplebar.css'; +// @import '~@ibm/plex/scss/ibm-plex.scss'; +// @import '~@fortawesome/fontawesome-free/css/all.css'; // ### MODIFICATION-END ### diff --git a/tools/wait-for-container.sh b/tools/wait-for-container.sh index ccce69ff..997c146c 100755 --- a/tools/wait-for-container.sh +++ b/tools/wait-for-container.sh @@ -43,7 +43,7 @@ COUNTER=0 while true; do echo -n '.' # The 'true' at the end is to prevent script abortion because grep exits with 1 if nothing matches. - MATCH=$(docker-compose -f "${COMPOSE_FILE}" logs --tail=10 | grep "${NEEDLE}" || true) + MATCH=$(docker compose -f "${COMPOSE_FILE}" logs --tail=10 | grep "${NEEDLE}" || true) if [[ -n "${MATCH}" ]]; then echo