diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100755 index 0000000000..da18360130 --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,36 @@ +#!/bin/bash + +# Define the directory to monitor +WATCHED_DIR="operator/model/src/main/java" + +# Get the list of changed files in the staging area +CHANGED_FILES=$(git diff --cached --name-only) + +# Check if any file in the watched directory has been modified +FILES_TO_CHECK=$(echo "$CHANGED_FILES" | grep "^$WATCHED_DIR") + +# If no changes detected in the directory, exit successfully +if [ -z "$FILES_TO_CHECK" ]; then + echo "No changes detected to Operator Model, skipping install.yaml regen." + exit 0 +fi + +# Run your custom command (e.g., linting, formatting, tests, etc.) +echo "Changes detected to Operator Model. Generating install.yaml file..." + +# Update the install.yaml file (regenerate it) +cd operator +make SKIP_TESTS=true build IMAGE_TAG=latest-snapshot INSTALL_FILE=install/install.yaml dist-install-file > /dev/null 2>&1 + +# Capture the exit code of the command +EXIT_CODE=$? + +# Exit with the appropriate status +if [ $EXIT_CODE -ne 0 ]; then + echo "Failed to regenerate install.yaml file." + exit 1 +fi + +echo "Successfully generated install.yaml." +git add ./install/install.yaml +exit 0 diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index c699748094..0000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,144 +0,0 @@ -version: 2 -updates: - - package-ecosystem: maven - directory: "/" - schedule: - interval: daily - groups: - maven-plugin-dependencies: - patterns: - - "org.apache.maven.plugins:*" - confluent-dependencies: - patterns: - - "io.confluent:*" - kiota-dependencies: - patterns: - - "com.microsoft.kiota:*" - apicurio-common-dependencies: - patterns: - - "io.apicurio:apicurio-common*" - test-dependencies: - patterns: - - "*test*" - - - package-ecosystem: nuget - directory: "/python-sdk" - schedule: - interval: daily - - package-ecosystem: nuget - directory: "/go-sdk" - schedule: - interval: daily - - - package-ecosystem: maven - directory: "/" - target-branch: 2.6.x - schedule: - interval: weekly - groups: - backport-dependencies-2.6.x: - patterns: - - "*" - - - package-ecosystem: npm - directory: "/ui" - schedule: - interval: daily - groups: - ui-dependencies: - patterns: - - "*" - update-types: - - "patch" - - "minor" - open-pull-requests-limit: 10 - versioning-strategy: increase - - - package-ecosystem: npm - directory: "/ui/ui-app" - schedule: - interval: daily - groups: - ui-app-dependencies: - patterns: - - "*" - update-types: - - "patch" - - "minor" - exclude-patterns: - - "@microsoft/*" - ui-app-kiota: - patterns: - - "@microsoft/*" - update-types: - - "patch" - - "minor" - open-pull-requests-limit: 10 - versioning-strategy: increase - - - package-ecosystem: npm - directory: "/ui/ui-docs" - schedule: - interval: daily - groups: - ui-docs-dependencies: - patterns: - - "*" - update-types: - - "patch" - - "minor" - exclude-patterns: - - "eslint" - open-pull-requests-limit: 10 - versioning-strategy: increase - - - package-ecosystem: npm - directory: "/ui/tests" - schedule: - interval: daily - groups: - ui-test-dependencies: - patterns: - - "*" - update-types: - - "patch" - - "minor" - exclude-patterns: - - "eslint" - open-pull-requests-limit: 10 - versioning-strategy: increase - - - package-ecosystem: npm - directory: "/typescript-sdk" - schedule: - interval: daily - groups: - typescript-sdk-dependencies: - patterns: - - "*" - update-types: - - "patch" - - "minor" - exclude-patterns: - - "@microsoft/*" - typescript-sdk-kiota: - patterns: - - "@microsoft/*" - update-types: - - "patch" - - "minor" - open-pull-requests-limit: 10 - versioning-strategy: increase - - - package-ecosystem: npm - directory: "/docs-playbook" - schedule: - interval: weekly - versioning-strategy: increase - groups: - docs-playbook-dependencies: - patterns: - - "*" - update-types: - - "patch" - - "minor" diff --git a/.github/workflows/release-images.yaml b/.github/workflows/release-images.yaml index 057392af23..de99ee4459 100644 --- a/.github/workflows/release-images.yaml +++ b/.github/workflows/release-images.yaml @@ -101,7 +101,7 @@ jobs: - name: Build Registry run: | cd registry - ./mvnw clean package -am --no-transfer-progress -Pprod -DskipTests=true -DskipCommitIdPlugin=false -Dmaven.wagon.httpconnectionManager.maxTotal=30 -Dmaven.wagon.http.retryHandler.count=5 -Dspotless.check.skip=true + ./mvnw clean package -am --no-transfer-progress -Pprod -DskipTests=true -DskipCommitIdPlugin=false -Dmaven.wagon.httpconnectionManager.maxTotal=30 -Dmaven.wagon.http.retryHandler.count=5 - name: Build Registry UI working-directory: registry/ui @@ -168,10 +168,20 @@ jobs: -t quay.io/apicurio/apicurio-registry-native:$RELEASE_VERSION \ app/ - - name: Google Chat Notification - if: ${{ failure() }} - uses: Co-qn/google-chat-notification@b9227d9daa4638c9782a5bd16c4abb86268127a1 - with: - name: ${{ github.job }} - url: ${{ secrets.GOOGLE_CHAT_WEBHOOK }} - status: ${{ job.status }} + - name: Slack Notification (Always) + if: always() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_NOTIFICATION_WEBHOOK }} + + - name: Slack Notification (Error) + if: failure() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_ERROR_WEBHOOK }} diff --git a/.github/workflows/release-maven-artifacts.yaml b/.github/workflows/release-maven-artifacts.yaml index 33932e4b90..de81488941 100644 --- a/.github/workflows/release-maven-artifacts.yaml +++ b/.github/workflows/release-maven-artifacts.yaml @@ -78,12 +78,22 @@ jobs: retry_wait_seconds: 120 command: | cd registry - mvn deploy --batch-mode -Pprod -Prelease -DskipTests -Dspotless.check.skip=true --settings /home/runner/.m2/settings.xml + mvn deploy --batch-mode -Pprod -Prelease -DskipTests --settings /home/runner/.m2/settings.xml - - name: Google Chat Notification - if: ${{ failure() }} - uses: Co-qn/google-chat-notification@b9227d9daa4638c9782a5bd16c4abb86268127a1 - with: - name: ${{ github.job }} - url: ${{ secrets.GOOGLE_CHAT_WEBHOOK }} - status: ${{ job.status }} + - name: Slack Notification (Always) + if: always() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_NOTIFICATION_WEBHOOK }} + + - name: Slack Notification (Error) + if: failure() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_ERROR_WEBHOOK }} diff --git a/.github/workflows/release-sboms.yaml b/.github/workflows/release-sboms.yaml index 60de9753cd..98082e52b9 100644 --- a/.github/workflows/release-sboms.yaml +++ b/.github/workflows/release-sboms.yaml @@ -62,7 +62,7 @@ jobs: - name: Maven Install run: | cd registry - mvn install -Pprod -DskipTests -Dspotless.check.skip=true + mvn install -Pprod -DskipTests - name: Generate Maven SBOMs run: | @@ -89,10 +89,20 @@ jobs: git commit -m 'Generated SBOMs for release $RELEASE_VERSION' git push origin main - - name: Google Chat Notification - if: ${{ failure() }} - uses: Co-qn/google-chat-notification@b9227d9daa4638c9782a5bd16c4abb86268127a1 - with: - name: ${{ github.job }} - url: ${{ secrets.GOOGLE_CHAT_WEBHOOK }} - status: ${{ job.status }} + - name: Slack Notification (Always) + if: always() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_NOTIFICATION_WEBHOOK }} + + - name: Slack Notification (Error) + if: failure() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_ERROR_WEBHOOK }} diff --git a/.github/workflows/release-sdk-go.yaml b/.github/workflows/release-sdk-go.yaml index 4c42340cf6..5ea74b243e 100644 --- a/.github/workflows/release-sdk-go.yaml +++ b/.github/workflows/release-sdk-go.yaml @@ -64,11 +64,20 @@ jobs: git push origin "go-sdk/v$RELEASE_VERSION" GOPROXY=proxy.golang.org go list -m "github.com/apicurio/apicurio-registry@v$RELEASE_VERSION" + - name: Slack Notification (Always) + if: always() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_NOTIFICATION_WEBHOOK }} - - name: Google Chat Notification - if: ${{ failure() }} - uses: Co-qn/google-chat-notification@b9227d9daa4638c9782a5bd16c4abb86268127a1 - with: - name: ${{ github.job }} - url: ${{ secrets.GOOGLE_CHAT_WEBHOOK }} - status: ${{ job.status }} + - name: Slack Notification (Error) + if: failure() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_ERROR_WEBHOOK }} diff --git a/.github/workflows/release-sdk-python.yaml b/.github/workflows/release-sdk-python.yaml index 07dac1abda..397e087b96 100644 --- a/.github/workflows/release-sdk-python.yaml +++ b/.github/workflows/release-sdk-python.yaml @@ -63,10 +63,20 @@ jobs: env: PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} - - name: Google Chat Notification - if: ${{ failure() }} - uses: Co-qn/google-chat-notification@b9227d9daa4638c9782a5bd16c4abb86268127a1 - with: - name: ${{ github.job }} - url: ${{ secrets.GOOGLE_CHAT_WEBHOOK }} - status: ${{ job.status }} + - name: Slack Notification (Always) + if: always() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_NOTIFICATION_WEBHOOK }} + + - name: Slack Notification (Error) + if: failure() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_ERROR_WEBHOOK }} diff --git a/.github/workflows/release-sdk-typescript.yaml b/.github/workflows/release-sdk-typescript.yaml index eea576911a..940b03f75a 100644 --- a/.github/workflows/release-sdk-typescript.yaml +++ b/.github/workflows/release-sdk-typescript.yaml @@ -72,10 +72,20 @@ jobs: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} run: npm publish --access public - - name: Google Chat Notification - if: ${{ failure() }} - uses: Co-qn/google-chat-notification@b9227d9daa4638c9782a5bd16c4abb86268127a1 - with: - name: ${{ github.job }} - url: ${{ secrets.GOOGLE_CHAT_WEBHOOK }} - status: ${{ job.status }} + - name: Slack Notification (Always) + if: always() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_NOTIFICATION_WEBHOOK }} + + - name: Slack Notification (Error) + if: failure() + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_ERROR_WEBHOOK }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index c1b09044aa..bc130fdce3 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -167,18 +167,20 @@ jobs: git commit -m "Automated update to next Snapshot Version: ${{ github.event.inputs.snapshot-version}}" git push - - name: Google Chat Notification (Always) + - name: Slack Notification (Always) if: always() - uses: Co-qn/google-chat-notification@b9227d9daa4638c9782a5bd16c4abb86268127a1 - with: - name: ${{ github.job }} - url: ${{ secrets.GOOGLE_CHAT_WEBHOOK }} - status: ${{ job.status }} + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_NOTIFICATION_WEBHOOK }} - - name: Google Chat Notification (Error) + - name: Slack Notification (Error) if: failure() - uses: Co-qn/google-chat-notification@b9227d9daa4638c9782a5bd16c4abb86268127a1 - with: - name: ${{ github.job }} - url: ${{ secrets.GOOGLE_CHAT_WEBHOOK_ERRORS }} - status: ${{ job.status }} + run: | + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" + REPO="${{ github.repository }}" + LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" + PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" + curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" ${{ secrets.SLACK_ERROR_WEBHOOK }} diff --git a/.github/workflows/verify.yaml b/.github/workflows/verify.yaml index c7f7a105ec..9b568b7bdb 100644 --- a/.github/workflows/verify.yaml +++ b/.github/workflows/verify.yaml @@ -92,7 +92,7 @@ jobs: - name: Slack Notification (Always) if: github.event_name == 'push' && always() run: | - MESSAGE="Registry 'build-verify' job completed with status: ${{ job.status }}" + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" REPO="${{ github.repository }}" LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" @@ -101,7 +101,7 @@ jobs: - name: Slack Notification (Error) if: github.event_name == 'push' && failure() run: | - MESSAGE="Registry 'build-verify' job FAILED" + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" REPO="${{ github.repository }}" LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" @@ -183,7 +183,7 @@ jobs: - name: Slack Notification (Always) if: github.event_name == 'push' && always() run: | - MESSAGE="Registry 'build-verify-ui' job completed with status: ${{ job.status }}" + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" REPO="${{ github.repository }}" LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" @@ -192,7 +192,7 @@ jobs: - name: Slack Notification (Error) if: github.event_name == 'push' && failure() run: | - MESSAGE="Registry 'build-verify-ui' job FAILED" + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" REPO="${{ github.repository }}" LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" @@ -289,7 +289,7 @@ jobs: - name: Slack Notification (Always) if: github.event_name == 'push' && always() run: | - MESSAGE="Registry 'build-native-images' job completed with status: ${{ job.status }}" + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" REPO="${{ github.repository }}" LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" @@ -298,7 +298,7 @@ jobs: - name: Slack Notification (Error) if: github.event_name == 'push' && failure() run: | - MESSAGE="Registry 'build-native-images' job FAILED" + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" REPO="${{ github.repository }}" LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" @@ -344,7 +344,7 @@ jobs: - name: Slack Notification (Always) if: github.event_name == 'push' && always() run: | - MESSAGE="Registry 'build-verify-python-sdk' job completed with status: ${{ job.status }}" + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" REPO="${{ github.repository }}" LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" @@ -353,7 +353,7 @@ jobs: - name: Slack Notification (Error) if: github.event_name == 'push' && failure() run: | - MESSAGE="Registry 'build-verify-python-sdk' job FAILED" + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" REPO="${{ github.repository }}" LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" @@ -389,7 +389,7 @@ jobs: - name: Slack Notification (Always) if: github.event_name == 'push' && always() run: | - MESSAGE="Registry 'build-verify-go-sdk' job completed with status: ${{ job.status }}" + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" REPO="${{ github.repository }}" LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" @@ -398,7 +398,7 @@ jobs: - name: Slack Notification (Error) if: github.event_name == 'push' && failure() run: | - MESSAGE="Registry 'build-verify-go-sdk' job FAILED" + MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" REPO="${{ github.repository }}" LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" diff --git a/app/src/main/java/io/apicurio/registry/rest/v3/SystemResourceImpl.java b/app/src/main/java/io/apicurio/registry/rest/v3/SystemResourceImpl.java index a073db5963..7368b788fe 100644 --- a/app/src/main/java/io/apicurio/registry/rest/v3/SystemResourceImpl.java +++ b/app/src/main/java/io/apicurio/registry/rest/v3/SystemResourceImpl.java @@ -115,6 +115,7 @@ private UserInterfaceConfigAuth uiAuthConfig() { options.put("url", uiConfig.authOidcUrl); options.put("redirectUri", uiConfig.authOidcRedirectUri); options.put("clientId", uiConfig.authOidcClientId); + options.put("scope", uiConfig.scope); if (!"f5".equals(uiConfig.authOidcLogoutUrl)) { options.put("logoutUrl", uiConfig.authOidcLogoutUrl); } diff --git a/app/src/main/java/io/apicurio/registry/ui/UserInterfaceConfigProperties.java b/app/src/main/java/io/apicurio/registry/ui/UserInterfaceConfigProperties.java index ee4ce9f061..2cfd281958 100644 --- a/app/src/main/java/io/apicurio/registry/ui/UserInterfaceConfigProperties.java +++ b/app/src/main/java/io/apicurio/registry/ui/UserInterfaceConfigProperties.java @@ -39,4 +39,8 @@ public class UserInterfaceConfigProperties { @Info(category = "ui", description = "Enabled to show the Settings tab in the UI", availableSince = "3.0.0") public String featureSettings; + @ConfigProperty(name = "apicurio.ui.auth.oidc.scope", defaultValue = "openid profile email") + @Info(category = "ui", description = "UI auth OIDC scope value", availableSince = "3.0.8") + public String scope; + } diff --git a/docs/modules/ROOT/partials/getting-started/ref-registry-all-configs.adoc b/docs/modules/ROOT/partials/getting-started/ref-registry-all-configs.adoc index 3adaa96151..015e30cfa5 100644 --- a/docs/modules/ROOT/partials/getting-started/ref-registry-all-configs.adoc +++ b/docs/modules/ROOT/partials/getting-started/ref-registry-all-configs.adoc @@ -876,6 +876,11 @@ The following {registry} configuration options are available for each component |`/` |`3.0.0` |The OIDC redirectUri +|`apicurio.ui.auth.oidc.scope` +|`string` +|`openid profile email` +|`3.0.8` +|UI auth OIDC scope value |`apicurio.ui.contextPath` |`string` |`/` diff --git a/install-githooks.sh b/install-githooks.sh new file mode 100755 index 0000000000..e12afc3635 --- /dev/null +++ b/install-githooks.sh @@ -0,0 +1,2 @@ +#!/bin/bash +cp .githooks/* .git/hooks/. diff --git a/operator/controller/src/main/deploy/rbac/cluster/cluster-role.yaml b/operator/controller/src/main/deploy/rbac/cluster/cluster-role.yaml index be03887dcc..dc447f3257 100644 --- a/operator/controller/src/main/deploy/rbac/cluster/cluster-role.yaml +++ b/operator/controller/src/main/deploy/rbac/cluster/cluster-role.yaml @@ -29,7 +29,7 @@ rules: - '*' - apiGroups: - - "" + - '' resources: - pods - services @@ -49,4 +49,11 @@ rules: - ingresses - networkpolicies verbs: - - "*" + - '*' + + - apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - '*' diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/ApicurioRegistry3Reconciler.java b/operator/controller/src/main/java/io/apicurio/registry/operator/ApicurioRegistry3Reconciler.java index 0cbc655607..e157a92fc5 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/ApicurioRegistry3Reconciler.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/ApicurioRegistry3Reconciler.java @@ -5,14 +5,17 @@ import io.apicurio.registry.operator.resource.app.AppDeploymentResource; import io.apicurio.registry.operator.resource.app.AppIngressResource; import io.apicurio.registry.operator.resource.app.AppNetworkPolicyResource; +import io.apicurio.registry.operator.resource.app.AppPodDisruptionBudgetResource; import io.apicurio.registry.operator.resource.app.AppServiceResource; import io.apicurio.registry.operator.resource.studioui.StudioUIDeploymentResource; import io.apicurio.registry.operator.resource.studioui.StudioUIIngressResource; import io.apicurio.registry.operator.resource.studioui.StudioUINetworkPolicyResource; +import io.apicurio.registry.operator.resource.studioui.StudioUIPodDisruptionBudgetResource; import io.apicurio.registry.operator.resource.studioui.StudioUIServiceResource; import io.apicurio.registry.operator.resource.ui.UIDeploymentResource; import io.apicurio.registry.operator.resource.ui.UIIngressResource; import io.apicurio.registry.operator.resource.ui.UINetworkPolicyResource; +import io.apicurio.registry.operator.resource.ui.UIPodDisruptionBudgetResource; import io.apicurio.registry.operator.resource.ui.UIServiceResource; import io.apicurio.registry.operator.updater.IngressCRUpdater; import io.apicurio.registry.operator.updater.KafkaSqlCRUpdater; @@ -32,25 +35,30 @@ import static io.apicurio.registry.operator.resource.ActivationConditions.AppIngressActivationCondition; import static io.apicurio.registry.operator.resource.ActivationConditions.AppNetworkPolicyActivationCondition; +import static io.apicurio.registry.operator.resource.ActivationConditions.AppPodDisruptionBudgetActivationCondition; import static io.apicurio.registry.operator.resource.ActivationConditions.StudioUIDeploymentActivationCondition; import static io.apicurio.registry.operator.resource.ActivationConditions.StudioUIIngressActivationCondition; import static io.apicurio.registry.operator.resource.ActivationConditions.StudioUINetworkPolicyActivationCondition; +import static io.apicurio.registry.operator.resource.ActivationConditions.StudioUIPodDisruptionBudgetActivationCondition; import static io.apicurio.registry.operator.resource.ActivationConditions.UIIngressActivationCondition; import static io.apicurio.registry.operator.resource.ActivationConditions.UINetworkPolicyActivationCondition; +import static io.apicurio.registry.operator.resource.ActivationConditions.UIPodDisruptionBudgetActivationCondition; import static io.apicurio.registry.operator.resource.ResourceKey.APP_DEPLOYMENT_ID; import static io.apicurio.registry.operator.resource.ResourceKey.APP_INGRESS_ID; import static io.apicurio.registry.operator.resource.ResourceKey.APP_NETWORK_POLICY_ID; +import static io.apicurio.registry.operator.resource.ResourceKey.APP_POD_DISRUPTION_BUDGET_ID; import static io.apicurio.registry.operator.resource.ResourceKey.APP_SERVICE_ID; import static io.apicurio.registry.operator.resource.ResourceKey.STUDIO_UI_DEPLOYMENT_ID; import static io.apicurio.registry.operator.resource.ResourceKey.STUDIO_UI_INGRESS_ID; import static io.apicurio.registry.operator.resource.ResourceKey.STUDIO_UI_NETWORK_POLICY_ID; +import static io.apicurio.registry.operator.resource.ResourceKey.STUDIO_UI_POD_DISRUPTION_BUDGET_ID; import static io.apicurio.registry.operator.resource.ResourceKey.STUDIO_UI_SERVICE_ID; import static io.apicurio.registry.operator.resource.ResourceKey.UI_DEPLOYMENT_ID; import static io.apicurio.registry.operator.resource.ResourceKey.UI_INGRESS_ID; import static io.apicurio.registry.operator.resource.ResourceKey.UI_NETWORK_POLICY_ID; +import static io.apicurio.registry.operator.resource.ResourceKey.UI_POD_DISRUPTION_BUDGET_ID; import static io.apicurio.registry.operator.resource.ResourceKey.UI_SERVICE_ID; -// spotless:off @ControllerConfiguration( dependents = { // ===== Registry App @@ -69,6 +77,12 @@ dependsOn = {APP_SERVICE_ID}, activationCondition = AppIngressActivationCondition.class ), + @Dependent( + type = AppPodDisruptionBudgetResource.class, + name = APP_POD_DISRUPTION_BUDGET_ID, + dependsOn = {APP_DEPLOYMENT_ID}, + activationCondition = AppPodDisruptionBudgetActivationCondition.class + ), @Dependent( type = AppNetworkPolicyResource.class, name = APP_NETWORK_POLICY_ID, @@ -91,6 +105,12 @@ dependsOn = {UI_SERVICE_ID}, activationCondition = UIIngressActivationCondition.class ), + @Dependent( + type = UIPodDisruptionBudgetResource.class, + name = UI_POD_DISRUPTION_BUDGET_ID, + dependsOn = {UI_DEPLOYMENT_ID}, + activationCondition = UIPodDisruptionBudgetActivationCondition.class + ), @Dependent( type = UINetworkPolicyResource.class, name = UI_NETWORK_POLICY_ID, @@ -114,15 +134,20 @@ dependsOn = {STUDIO_UI_SERVICE_ID}, activationCondition = StudioUIIngressActivationCondition.class ), + @Dependent( + type = StudioUIPodDisruptionBudgetResource.class, + name = STUDIO_UI_POD_DISRUPTION_BUDGET_ID, + dependsOn = {STUDIO_UI_DEPLOYMENT_ID}, + activationCondition = StudioUIPodDisruptionBudgetActivationCondition.class + ), @Dependent( type = StudioUINetworkPolicyResource.class, name = STUDIO_UI_NETWORK_POLICY_ID, dependsOn = {STUDIO_UI_DEPLOYMENT_ID}, activationCondition = StudioUINetworkPolicyActivationCondition.class - ), + ) } ) -// spotless:on // TODO: When renaming, do not forget to update application.properties (until we have a test for this). public class ApicurioRegistry3Reconciler implements Reconciler, ErrorStatusHandler, Cleaner { diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/Configuration.java b/operator/controller/src/main/java/io/apicurio/registry/operator/Configuration.java index aafb5b7e2f..b7655fe47b 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/Configuration.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/Configuration.java @@ -11,41 +11,31 @@ private Configuration() { } public static String getAppImage() { - // spotless:off return config.getOptionalValue("registry.app.image", String.class) .or(() -> config.getOptionalValue("related.image.registry.app.image", String.class)) .orElseThrow(() -> new OperatorException("Required configuration option 'registry.app.image' is not set.")); - // spotless:on } public static String getUIImage() { - // spotless:off return config.getOptionalValue("registry.ui.image", String.class) .or(() -> config.getOptionalValue("related.image.registry.ui.image", String.class)) .orElseThrow(() -> new OperatorException("Required configuration option 'registry.ui.image' is not set.")); - // spotless:on } public static String getStudioUIImage() { - // spotless:off return config.getOptionalValue("studio.ui.image", String.class) .or(() -> config.getOptionalValue("related.image.studio.ui.image", String.class)) .orElseThrow(() -> new OperatorException("Required configuration option 'studio.ui.image' is not set.")); - // spotless:on } public static String getRegistryVersion() { - // spotless:off return config.getOptionalValue("registry.version", String.class) .orElseThrow(() -> new OperatorException("Required configuration option 'registry.version' is not set.")); - // spotless:on } public static String getDefaultBaseHost() { - // spotless:off return config.getOptionalValue("apicurio.operator.default-base-host", String.class) .map(v -> "." + v) .orElse(""); - // spotless:on } } diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/feat/KafkaSqlTLS.java b/operator/controller/src/main/java/io/apicurio/registry/operator/feat/KafkaSqlTLS.java index 4e34f886e9..11a3a2c97d 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/feat/KafkaSqlTLS.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/feat/KafkaSqlTLS.java @@ -25,7 +25,6 @@ public class KafkaSqlTLS { public static boolean configureKafkaSQLTLS(ApicurioRegistry3 primary, Deployment deployment, String containerName, Map env) { - // spotless:off var keystore = new SecretKeyRefTool(getKafkaSqlTLSSpec(primary) .map(KafkaSqlTLSSpec::getKeystoreSecretRef) .orElse(null), "user.p12"); @@ -41,7 +40,6 @@ public static boolean configureKafkaSQLTLS(ApicurioRegistry3 primary, Deployment var truststorePassword = new SecretKeyRefTool(getKafkaSqlTLSSpec(primary) .map(KafkaSqlTLSSpec::getTruststorePasswordSecretRef) .orElse(null), "ca.password"); - // spotless:on if (truststore.isValid() && truststorePassword.isValid() && keystore.isValid() && keystorePassword.isValid()) { @@ -68,13 +66,11 @@ public static boolean configureKafkaSQLTLS(ApicurioRegistry3 primary, Deployment } private static Optional getKafkaSqlTLSSpec(ApicurioRegistry3 primary) { - // spotless:off return ofNullable(primary) .map(ApicurioRegistry3::getSpec) .map(ApicurioRegistry3Spec::getApp) .map(AppSpec::getStorage) .map(StorageSpec::getKafkasql) .map(KafkaSqlSpec::getTls); - // spotless:on } } diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ActivationConditions.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ActivationConditions.java index 81469f2851..27792e84e7 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ActivationConditions.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ActivationConditions.java @@ -6,18 +6,23 @@ import io.apicurio.registry.operator.api.v1.spec.ComponentSpec; import io.apicurio.registry.operator.api.v1.spec.IngressSpec; import io.apicurio.registry.operator.api.v1.spec.NetworkPolicySpec; +import io.apicurio.registry.operator.api.v1.spec.PodDisruptionSpec; import io.apicurio.registry.operator.api.v1.spec.StudioUiSpec; import io.apicurio.registry.operator.api.v1.spec.UiSpec; import io.apicurio.registry.operator.resource.app.AppIngressResource; import io.apicurio.registry.operator.resource.app.AppNetworkPolicyResource; +import io.apicurio.registry.operator.resource.app.AppPodDisruptionBudgetResource; import io.apicurio.registry.operator.resource.studioui.StudioUIDeploymentResource; import io.apicurio.registry.operator.resource.studioui.StudioUIIngressResource; import io.apicurio.registry.operator.resource.studioui.StudioUINetworkPolicyResource; +import io.apicurio.registry.operator.resource.studioui.StudioUIPodDisruptionBudgetResource; import io.apicurio.registry.operator.resource.ui.UIIngressResource; import io.apicurio.registry.operator.resource.ui.UINetworkPolicyResource; +import io.apicurio.registry.operator.resource.ui.UIPodDisruptionBudgetResource; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.networking.v1.Ingress; import io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicy; +import io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition; @@ -48,11 +53,30 @@ public boolean isMet(DependentResource resource, } } + public static class AppPodDisruptionBudgetActivationCondition + implements Condition { + @Override + public boolean isMet(DependentResource resource, + ApicurioRegistry3 primary, Context context) { + boolean isEnabled = ofNullable(primary.getSpec()).map(ApicurioRegistry3Spec::getApp) + .map(ComponentSpec::getPodDisruptionBudget).map(PodDisruptionSpec::getEnabled) + .orElse(Boolean.TRUE); + int numReplicas = ofNullable(primary.getSpec()).map(ApicurioRegistry3Spec::getApp) + .map(ComponentSpec::getReplicas).orElse(1); + + boolean isManaged = isEnabled && numReplicas > 1; + if (!isManaged) { + ((AppPodDisruptionBudgetResource) resource).delete(primary, context); + } + return isManaged; + } + } + public static class AppNetworkPolicyActivationCondition implements Condition { @Override public boolean isMet(DependentResource resource, - ApicurioRegistry3 primary, Context context) { + ApicurioRegistry3 primary, Context context) { Boolean isManaged = ofNullable(primary.getSpec()).map(ApicurioRegistry3Spec::getApp) .map(ComponentSpec::getNetworkPolicy).map(NetworkPolicySpec::getEnabled) .orElse(Boolean.TRUE); @@ -81,11 +105,26 @@ public boolean isMet(DependentResource resource, } } + public static class UIPodDisruptionBudgetActivationCondition + implements Condition { + @Override + public boolean isMet(DependentResource resource, + ApicurioRegistry3 primary, Context context) { + boolean isManaged = ofNullable(primary.getSpec()).map(ApicurioRegistry3Spec::getUi) + .map(ComponentSpec::getPodDisruptionBudget).map(PodDisruptionSpec::getEnabled) + .orElse(Boolean.TRUE); + if (!isManaged) { + ((UIPodDisruptionBudgetResource) resource).delete(primary, context); + } + return isManaged; + } + } + public static class UINetworkPolicyActivationCondition implements Condition { @Override public boolean isMet(DependentResource resource, - ApicurioRegistry3 primary, Context context) { + ApicurioRegistry3 primary, Context context) { Boolean isManaged = ofNullable(primary.getSpec()).map(ApicurioRegistry3Spec::getUi) .map(ComponentSpec::getNetworkPolicy).map(NetworkPolicySpec::getEnabled) .orElse(Boolean.TRUE); @@ -130,11 +169,27 @@ public boolean isMet(DependentResource resource, } } + public static class StudioUIPodDisruptionBudgetActivationCondition + implements Condition { + @Override + public boolean isMet(DependentResource resource, + ApicurioRegistry3 primary, Context context) { + boolean isManaged = ofNullable(primary.getSpec()).map(ApicurioRegistry3Spec::getStudioUi) + .map(ComponentSpec::getPodDisruptionBudget).map(PodDisruptionSpec::getEnabled) + .orElse(Boolean.TRUE); + if (!isManaged) { + ((StudioUIPodDisruptionBudgetResource) resource).delete(primary, context); + } + return isManaged; + } + } + + public static class StudioUINetworkPolicyActivationCondition implements Condition { @Override public boolean isMet(DependentResource resource, - ApicurioRegistry3 primary, Context context) { + ApicurioRegistry3 primary, Context context) { Boolean isManaged = ofNullable(primary.getSpec()).map(ApicurioRegistry3Spec::getStudioUi) .map(ComponentSpec::getNetworkPolicy).map(NetworkPolicySpec::getEnabled) .orElse(Boolean.TRUE); @@ -144,5 +199,4 @@ public boolean isMet(DependentResource resourc return isManaged; } } - } diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/LabelDiscriminators.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/LabelDiscriminators.java index f76f6b14e8..4c6193c7f5 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/LabelDiscriminators.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/LabelDiscriminators.java @@ -5,11 +5,14 @@ import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.networking.v1.Ingress; import io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicy; +import io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget; import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; import java.util.Map; -import static io.apicurio.registry.operator.resource.ResourceFactory.*; +import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_APP; +import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_STUDIO_UI; +import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_UI; public class LabelDiscriminators { @@ -23,12 +26,10 @@ public static class AppDeploymentDiscriminator extends LabelDiscriminator INSTANCE = new AppDeploymentDiscriminator(); public AppDeploymentDiscriminator() { - // spotless:off super(Map.of( "app.kubernetes.io/name", "apicurio-registry", "app.kubernetes.io/component", COMPONENT_APP )); - // spotless:on } } @@ -37,12 +38,10 @@ public static class AppServiceDiscriminator extends LabelDiscriminator public static final ResourceDiscriminator INSTANCE = new AppServiceDiscriminator(); public AppServiceDiscriminator() { - // spotless:off super(Map.of( "app.kubernetes.io/name", "apicurio-registry", "app.kubernetes.io/component", COMPONENT_APP )); - // spotless:on } } @@ -51,6 +50,18 @@ public static class AppIngressDiscriminator extends LabelDiscriminator public static final ResourceDiscriminator INSTANCE = new AppIngressDiscriminator(); public AppIngressDiscriminator() { + super(Map.of( + "app.kubernetes.io/name", "apicurio-registry", + "app.kubernetes.io/component", COMPONENT_APP + )); + } + } + + public static class AppPodDisruptionBudgetDiscriminator extends LabelDiscriminator { + + public static final ResourceDiscriminator INSTANCE = new AppPodDisruptionBudgetDiscriminator(); + + public AppPodDisruptionBudgetDiscriminator() { // spotless:off super(Map.of( "app.kubernetes.io/name", "apicurio-registry", @@ -81,12 +92,10 @@ public static class UIDeploymentDiscriminator extends LabelDiscriminator INSTANCE = new UIDeploymentDiscriminator(); public UIDeploymentDiscriminator() { - // spotless:off super(Map.of( "app.kubernetes.io/name", "apicurio-registry", "app.kubernetes.io/component", COMPONENT_UI )); - // spotless:on } } @@ -95,12 +104,10 @@ public static class UIServiceDiscriminator extends LabelDiscriminator { public static ResourceDiscriminator INSTANCE = new UIServiceDiscriminator(); public UIServiceDiscriminator() { - // spotless:off super(Map.of( "app.kubernetes.io/name", "apicurio-registry", "app.kubernetes.io/component", COMPONENT_UI )); - // spotless:on } } @@ -109,6 +116,18 @@ public static class UIIngressDiscriminator extends LabelDiscriminator { public static ResourceDiscriminator INSTANCE = new UIIngressDiscriminator(); public UIIngressDiscriminator() { + super(Map.of( + "app.kubernetes.io/name", "apicurio-registry", + "app.kubernetes.io/component", COMPONENT_UI + )); + } + } + + public static class UiPodDisruptionBudgetDiscriminator extends LabelDiscriminator { + + public static final ResourceDiscriminator INSTANCE = new AppPodDisruptionBudgetDiscriminator(); + + public UiPodDisruptionBudgetDiscriminator() { // spotless:off super(Map.of( "app.kubernetes.io/name", "apicurio-registry", @@ -139,12 +158,10 @@ public static class StudioUIDeploymentDiscriminator extends LabelDiscriminator INSTANCE = new StudioUIDeploymentDiscriminator(); public StudioUIDeploymentDiscriminator() { - // spotless:off super(Map.of( "app.kubernetes.io/name", "apicurio-registry", "app.kubernetes.io/component", COMPONENT_STUDIO_UI )); - // spotless:on } } @@ -153,12 +170,10 @@ public static class StudioUIServiceDiscriminator extends LabelDiscriminator INSTANCE = new StudioUIServiceDiscriminator(); public StudioUIServiceDiscriminator() { - // spotless:off super(Map.of( "app.kubernetes.io/name", "apicurio-registry", "app.kubernetes.io/component", COMPONENT_STUDIO_UI )); - // spotless:on } } @@ -167,6 +182,19 @@ public static class StudioUIIngressDiscriminator extends LabelDiscriminator INSTANCE = new StudioUIIngressDiscriminator(); public StudioUIIngressDiscriminator() { + super(Map.of( + "app.kubernetes.io/name", "apicurio-registry", + "app.kubernetes.io/component", COMPONENT_STUDIO_UI + )); + } + } + + public static class StudioUiPodDisruptionBudgetDiscriminator + extends LabelDiscriminator { + + public static final ResourceDiscriminator INSTANCE = new AppPodDisruptionBudgetDiscriminator(); + + public StudioUiPodDisruptionBudgetDiscriminator() { // spotless:off super(Map.of( "app.kubernetes.io/name", "apicurio-registry", diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ResourceFactory.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ResourceFactory.java index 3cea5abf73..44b163170f 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ResourceFactory.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ResourceFactory.java @@ -13,6 +13,7 @@ import io.fabric8.kubernetes.api.model.apps.DeploymentSpec; import io.fabric8.kubernetes.api.model.networking.v1.Ingress; import io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicy; +import io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget; import java.nio.charset.Charset; import java.util.ArrayList; @@ -38,6 +39,7 @@ public class ResourceFactory { public static final String RESOURCE_TYPE_DEPLOYMENT = "deployment"; public static final String RESOURCE_TYPE_SERVICE = "service"; public static final String RESOURCE_TYPE_INGRESS = "ingress"; + public static final String RESOURCE_TYPE_POD_DISRUPTION_BUDGET = "poddisruptionbudget"; public static final String RESOURCE_TYPE_NETWORK_POLICY = "networkpolicy"; public Deployment getDefaultAppDeployment(ApicurioRegistry3 primary) { @@ -48,7 +50,6 @@ public Deployment getDefaultAppDeployment(ApicurioRegistry3 primary) { .map(AppSpec::getPodTemplateSpec).orElse(null)); // TODO: // Replicas mergeDeploymentPodTemplateSpec( - // spotless:off r.getSpec().getTemplate(), REGISTRY_APP_CONTAINER_NAME, Configuration.getAppImage(), @@ -57,7 +58,6 @@ public Deployment getDefaultAppDeployment(ApicurioRegistry3 primary) { new ProbeBuilder().withHttpGet(new HTTPGetActionBuilder().withPath("/health/live").withPort(new IntOrString(8080)).withScheme("HTTP").build()).build(), Map.of("cpu", new Quantity("500m"), "memory", new Quantity("512Mi")), Map.of("cpu", new Quantity("1"), "memory", new Quantity("1Gi")) - // spotless:on ); addDefaultLabels(r.getMetadata().getLabels(), primary, COMPONENT_APP); addSelectorLabels(r.getSpec().getSelector().getMatchLabels(), primary, COMPONENT_APP); @@ -73,7 +73,6 @@ public Deployment getDefaultUIDeployment(ApicurioRegistry3 primary) { .map(UiSpec::getPodTemplateSpec).orElse(null)); // TODO: // Replicas mergeDeploymentPodTemplateSpec( - // spotless:off r.getSpec().getTemplate(), REGISTRY_UI_CONTAINER_NAME, Configuration.getUIImage(), @@ -82,7 +81,6 @@ public Deployment getDefaultUIDeployment(ApicurioRegistry3 primary) { new ProbeBuilder().withHttpGet(new HTTPGetActionBuilder().withPath("/config.js").withPort(new IntOrString(8080)).withScheme("HTTP").build()).build(), Map.of("cpu", new Quantity("100m"), "memory", new Quantity("256Mi")), Map.of("cpu", new Quantity("200m"), "memory", new Quantity("512Mi")) - // spotless:on ); addDefaultLabels(r.getMetadata().getLabels(), primary, COMPONENT_UI); addSelectorLabels(r.getSpec().getSelector().getMatchLabels(), primary, COMPONENT_UI); @@ -98,7 +96,6 @@ public Deployment getDefaultStudioUIDeployment(ApicurioRegistry3 primary) { .map(StudioUiSpec::getPodTemplateSpec).orElse(null)); // TODO: // Replicas mergeDeploymentPodTemplateSpec( - // spotless:off r.getSpec().getTemplate(), STUDIO_UI_CONTAINER_NAME, Configuration.getStudioUIImage(), @@ -107,7 +104,6 @@ public Deployment getDefaultStudioUIDeployment(ApicurioRegistry3 primary) { new ProbeBuilder().withHttpGet(new HTTPGetActionBuilder().withPath("/config.js").withPort(new IntOrString(8080)).withScheme("HTTP").build()).build(), Map.of("cpu", new Quantity("100m"), "memory", new Quantity("256Mi")), Map.of("cpu", new Quantity("200m"), "memory", new Quantity("512Mi")) - // spotless:on ); addDefaultLabels(r.getMetadata().getLabels(), primary, COMPONENT_STUDIO_UI); addSelectorLabels(r.getSpec().getSelector().getMatchLabels(), primary, COMPONENT_STUDIO_UI); @@ -137,7 +133,6 @@ private static Deployment initDefaultDeployment(ApicurioRegistry3 primary, Strin * Merge default values for a Deployment into the target PTS (from spec). */ private static void mergeDeploymentPodTemplateSpec( - // spotless:off PodTemplateSpec target, String containerName, String image, @@ -146,7 +141,6 @@ private static void mergeDeploymentPodTemplateSpec( Probe livenessProbe, Map requests, Map limits - // spotless:on ) { if (target.getMetadata() == null) { target.setMetadata(new ObjectMeta()); @@ -233,6 +227,30 @@ public Ingress getDefaultStudioUIIngress(ApicurioRegistry3 primary) { return r; } + public PodDisruptionBudget getDefaultAppPodDisruptionBudget(ApicurioRegistry3 primary) { + var pdb = getDefaultResource(primary, PodDisruptionBudget.class, RESOURCE_TYPE_POD_DISRUPTION_BUDGET, + COMPONENT_APP); + pdb.getSpec().getSelector().getMatchLabels().put("app.kubernetes.io/instance", + primary.getMetadata().getName()); + return pdb; + } + + public PodDisruptionBudget getDefaultUIPodDisruptionBudget(ApicurioRegistry3 primary) { + var pdb = getDefaultResource(primary, PodDisruptionBudget.class, RESOURCE_TYPE_POD_DISRUPTION_BUDGET, + COMPONENT_UI); + pdb.getSpec().getSelector().getMatchLabels().put("app.kubernetes.io/instance", + primary.getMetadata().getName()); + return pdb; + } + + public PodDisruptionBudget getDefaultStudioUIPodDisruptionBudget(ApicurioRegistry3 primary) { + var pdb = getDefaultResource(primary, PodDisruptionBudget.class, RESOURCE_TYPE_POD_DISRUPTION_BUDGET, + COMPONENT_STUDIO_UI); + pdb.getSpec().getSelector().getMatchLabels().put("app.kubernetes.io/instance", + primary.getMetadata().getName()); + return pdb; + } + private T getDefaultResource(ApicurioRegistry3 primary, Class klass, String resourceType, String component) { var r = deserialize("/k8s/default/" + component + "." + resourceType + ".yaml", klass); @@ -267,7 +285,6 @@ public NetworkPolicy getDefaultStudioUINetworkPolicy(ApicurioRegistry3 primary) } private void addDefaultLabels(Map labels, ApicurioRegistry3 primary, String component) { - // spotless:off labels.putAll(Map.of( "app", primary.getMetadata().getName(), "app.kubernetes.io/name", "apicurio-registry", @@ -277,11 +294,9 @@ private void addDefaultLabels(Map labels, ApicurioRegistry3 prim "app.kubernetes.io/part-of", "apicurio-registry", "app.kubernetes.io/managed-by", "apicurio-registry-operator" )); - // spotless:on } private void addSelectorLabels(Map labels, ApicurioRegistry3 primary, String component) { - // spotless:off labels.putAll(Map.of( "app", primary.getMetadata().getName(), "app.kubernetes.io/name", "apicurio-registry", @@ -289,7 +304,6 @@ private void addSelectorLabels(Map labels, ApicurioRegistry3 pri "app.kubernetes.io/instance", primary.getMetadata().getName(), "app.kubernetes.io/part-of", "apicurio-registry" )); - // spotless:on } public static T deserialize(String path, Class klass) { diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ResourceKey.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ResourceKey.java index 04fe31c385..ef1d70aff4 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ResourceKey.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ResourceKey.java @@ -7,6 +7,7 @@ import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.networking.v1.Ingress; import io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicy; +import io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget; import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; @@ -23,22 +24,24 @@ @ToString(onlyExplicitlyIncluded = true) public class ResourceKey { - // spotless:off public static final String REGISTRY_ID = "ApicurioRegistry3Reconciler"; public static final String APP_DEPLOYMENT_ID = "AppDeploymentResource"; public static final String APP_SERVICE_ID = "AppServiceResource"; public static final String APP_INGRESS_ID = "AppIngressResource"; + public static final String APP_POD_DISRUPTION_BUDGET_ID = "AppPodDisruptionBudgetResource"; public static final String APP_NETWORK_POLICY_ID = "AppNetworkPolicyResource"; public static final String UI_DEPLOYMENT_ID = "UIDeploymentResource"; public static final String UI_SERVICE_ID = "UIServiceResource"; public static final String UI_INGRESS_ID = "UIIngressResource"; + public static final String UI_POD_DISRUPTION_BUDGET_ID = "UIPodDisruptionBudgetResource"; public static final String UI_NETWORK_POLICY_ID = "UINetworkPolicyResource"; public static final String STUDIO_UI_DEPLOYMENT_ID = "StudioUIDeploymentResource"; public static final String STUDIO_UI_SERVICE_ID = "StudioUIServiceResource"; public static final String STUDIO_UI_INGRESS_ID = "StudioUIIngressResource"; + public static final String STUDIO_UI_POD_DISRUPTION_BUDGET_ID = "StudioUIPodDisruptionBudgetResource"; public static final String STUDIO_UI_NETWORK_POLICY_ID = "StudioUINetworkPolicyResource"; public static final ResourceKey REGISTRY_KEY = new ResourceKey<>( @@ -68,6 +71,11 @@ public class ResourceKey { AppNetworkPolicyDiscriminator.INSTANCE, ResourceFactory.INSTANCE::getDefaultAppNetworkPolicy ); + public static final ResourceKey APP_POD_DISRUPTION_BUDGET_KEY = new ResourceKey<>( + APP_POD_DISRUPTION_BUDGET_ID, PodDisruptionBudget.class, + AppPodDisruptionBudgetDiscriminator.INSTANCE, ResourceFactory.INSTANCE::getDefaultAppPodDisruptionBudget + ); + // ===== Registry UI public static final ResourceKey UI_DEPLOYMENT_KEY = new ResourceKey<>( @@ -90,6 +98,11 @@ public class ResourceKey { UINetworkPolicyDiscriminator.INSTANCE, ResourceFactory.INSTANCE::getDefaultUINetworkPolicy ); + public static final ResourceKey UI_POD_DISRUPTION_BUDGET_KEY = new ResourceKey<>( + UI_POD_DISRUPTION_BUDGET_ID, PodDisruptionBudget.class, + UiPodDisruptionBudgetDiscriminator.INSTANCE, ResourceFactory.INSTANCE::getDefaultUIPodDisruptionBudget + ); + // ===== Studio UI public static final ResourceKey STUDIO_UI_DEPLOYMENT_KEY = new ResourceKey<>( @@ -112,7 +125,10 @@ public class ResourceKey { StudioUINetworkPolicyDiscriminator.INSTANCE, ResourceFactory.INSTANCE::getDefaultStudioUINetworkPolicy ); - // spotless:on + public static final ResourceKey STUDIO_UI_POD_DISRUPTION_BUDGET_KEY = new ResourceKey<>( + STUDIO_UI_POD_DISRUPTION_BUDGET_ID, PodDisruptionBudget.class, + StudioUiPodDisruptionBudgetDiscriminator.INSTANCE, ResourceFactory.INSTANCE::getDefaultStudioUIPodDisruptionBudget + ); @EqualsAndHashCode.Include @ToString.Include diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppDeploymentResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppDeploymentResource.java index 611147fcf9..8262960615 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppDeploymentResource.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppDeploymentResource.java @@ -28,19 +28,13 @@ import static io.apicurio.registry.operator.api.v1.ContainerNames.REGISTRY_APP_CONTAINER_NAME; import static io.apicurio.registry.operator.resource.LabelDiscriminators.AppDeploymentDiscriminator; -import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_APP; import static io.apicurio.registry.operator.resource.ResourceKey.APP_DEPLOYMENT_KEY; import static io.apicurio.registry.operator.resource.ResourceKey.STUDIO_UI_SERVICE_KEY; import static io.apicurio.registry.operator.utils.Mapper.toYAML; import static java.util.Objects.requireNonNull; import static java.util.Optional.ofNullable; -// spotless:off -@KubernetesDependent( - labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_APP, - resourceDiscriminator = AppDeploymentDiscriminator.class -) -// spotless:on +@KubernetesDependent(resourceDiscriminator = AppDeploymentDiscriminator.class) public class AppDeploymentResource extends CRUDKubernetesDependentResource { private static final Logger log = LoggerFactory.getLogger(AppDeploymentResource.class); @@ -58,7 +52,6 @@ protected Deployment desired(ApicurioRegistry3 primary, Context env.forEach(e -> envVars.put(e.getName(), e))); - // spotless:off addEnvVar(envVars, new EnvVarBuilder().withName(EnvironmentVariables.QUARKUS_PROFILE).withValue("prod").build()); addEnvVar(envVars, new EnvVarBuilder().withName(EnvironmentVariables.QUARKUS_HTTP_ACCESS_LOG_ENABLED).withValue("true").build()); @@ -86,8 +79,6 @@ protected Deployment desired(ApicurioRegistry3 primary, Context { diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppIngressResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppIngressResource.java index e8a3fc8560..727bf40590 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppIngressResource.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppIngressResource.java @@ -16,12 +16,7 @@ import static io.apicurio.registry.operator.utils.IngressUtils.withIngressRule; import static io.apicurio.registry.operator.utils.Mapper.toYAML; -// spotless:off -@KubernetesDependent( - labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_APP, - resourceDiscriminator = AppIngressDiscriminator.class -) -// spotless:on +@KubernetesDependent(resourceDiscriminator = AppIngressDiscriminator.class) public class AppIngressResource extends CRUDKubernetesDependentResource { private static final Logger log = LoggerFactory.getLogger(AppIngressResource.class); diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppPodDisruptionBudgetResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppPodDisruptionBudgetResource.java new file mode 100644 index 0000000000..8d865b396a --- /dev/null +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppPodDisruptionBudgetResource.java @@ -0,0 +1,31 @@ +package io.apicurio.registry.operator.resource.app; + +import io.apicurio.registry.operator.api.v1.ApicurioRegistry3; +import io.apicurio.registry.operator.resource.LabelDiscriminators; +import io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget; +import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; +import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; + +import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_APP; +import static io.apicurio.registry.operator.resource.ResourceKey.APP_POD_DISRUPTION_BUDGET_KEY; + +// spotless:off +@KubernetesDependent( + labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_APP, + resourceDiscriminator = LabelDiscriminators.AppPodDisruptionBudgetDiscriminator.class +) +// spotless:on +public class AppPodDisruptionBudgetResource + extends CRUDKubernetesDependentResource { + + public AppPodDisruptionBudgetResource() { + super(PodDisruptionBudget.class); + } + + @Override + protected PodDisruptionBudget desired(ApicurioRegistry3 primary, Context context) { + PodDisruptionBudget pdb = APP_POD_DISRUPTION_BUDGET_KEY.getFactory().apply(primary); + return pdb; + } +} diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppServiceResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppServiceResource.java index 0e59ad2c3a..d0be4ada00 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppServiceResource.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/app/AppServiceResource.java @@ -8,17 +8,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static io.apicurio.registry.operator.resource.LabelDiscriminators.*; -import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_APP; +import static io.apicurio.registry.operator.resource.LabelDiscriminators.AppServiceDiscriminator; import static io.apicurio.registry.operator.resource.ResourceKey.APP_SERVICE_KEY; import static io.apicurio.registry.operator.utils.Mapper.toYAML; -// spotless:off -@KubernetesDependent( - labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_APP, - resourceDiscriminator = AppServiceDiscriminator.class -) -// spotless:on +@KubernetesDependent(resourceDiscriminator = AppServiceDiscriminator.class) public class AppServiceResource extends CRUDKubernetesDependentResource { private static final Logger log = LoggerFactory.getLogger(AppServiceResource.class); diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIDeploymentResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIDeploymentResource.java index 885366f937..854cdbaf76 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIDeploymentResource.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIDeploymentResource.java @@ -16,7 +16,6 @@ import java.util.LinkedHashMap; import static io.apicurio.registry.operator.api.v1.ContainerNames.STUDIO_UI_CONTAINER_NAME; -import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_STUDIO_UI; import static io.apicurio.registry.operator.resource.ResourceKey.*; import static io.apicurio.registry.operator.resource.app.AppDeploymentResource.addEnvVar; import static io.apicurio.registry.operator.resource.app.AppDeploymentResource.getContainerFromDeployment; @@ -24,12 +23,7 @@ import static io.apicurio.registry.operator.utils.Mapper.toYAML; import static java.util.Optional.ofNullable; -// spotless:off -@KubernetesDependent( - labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_STUDIO_UI, - resourceDiscriminator = StudioUIDeploymentDiscriminator.class -) -// spotless:on +@KubernetesDependent(resourceDiscriminator = StudioUIDeploymentDiscriminator.class) public class StudioUIDeploymentResource extends CRUDKubernetesDependentResource { @@ -54,9 +48,7 @@ protected Deployment desired(ApicurioRegistry3 primary, Context withIngressRule(s, i, rule -> { - // spotless:off addEnvVar(envVars, new EnvVarBuilder().withName("APICURIO_REGISTRY_API_URL").withValue("http://%s/apis/registry/v3".formatted(rule.getHost())).build()); - // spotless:on })); }); @@ -65,9 +57,7 @@ protected Deployment desired(ApicurioRegistry3 primary, Context withIngressRule(s, i, rule -> { - // spotless:off addEnvVar(envVars, new EnvVarBuilder().withName("APICURIO_REGISTRY_UI_URL").withValue("http://%s".formatted(rule.getHost())).build()); - // spotless:on })); }); diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIIngressResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIIngressResource.java index 31a4f397cd..f9162936fa 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIIngressResource.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIIngressResource.java @@ -10,18 +10,13 @@ import org.slf4j.LoggerFactory; import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_STUDIO_UI; -import static io.apicurio.registry.operator.resource.ResourceKey.*; +import static io.apicurio.registry.operator.resource.ResourceKey.STUDIO_UI_INGRESS_KEY; import static io.apicurio.registry.operator.resource.ResourceKey.STUDIO_UI_SERVICE_KEY; import static io.apicurio.registry.operator.utils.IngressUtils.getHost; import static io.apicurio.registry.operator.utils.IngressUtils.withIngressRule; import static io.apicurio.registry.operator.utils.Mapper.toYAML; -// spotless:off -@KubernetesDependent( - labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_STUDIO_UI, - resourceDiscriminator = StudioUIIngressDiscriminator.class -) -// spotless:on +@KubernetesDependent(resourceDiscriminator = StudioUIIngressDiscriminator.class) public class StudioUIIngressResource extends CRUDKubernetesDependentResource { private static final Logger log = LoggerFactory.getLogger(StudioUIIngressResource.class); diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIPodDisruptionBudgetResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIPodDisruptionBudgetResource.java new file mode 100644 index 0000000000..94d7fe8dfa --- /dev/null +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIPodDisruptionBudgetResource.java @@ -0,0 +1,31 @@ +package io.apicurio.registry.operator.resource.studioui; + +import io.apicurio.registry.operator.api.v1.ApicurioRegistry3; +import io.apicurio.registry.operator.resource.LabelDiscriminators; +import io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget; +import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; +import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; + +import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_STUDIO_UI; +import static io.apicurio.registry.operator.resource.ResourceKey.STUDIO_UI_POD_DISRUPTION_BUDGET_KEY; + +// spotless:off +@KubernetesDependent( + labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_STUDIO_UI, + resourceDiscriminator = LabelDiscriminators.StudioUiPodDisruptionBudgetDiscriminator.class +) +// spotless:on +public class StudioUIPodDisruptionBudgetResource + extends CRUDKubernetesDependentResource { + + public StudioUIPodDisruptionBudgetResource() { + super(PodDisruptionBudget.class); + } + + @Override + protected PodDisruptionBudget desired(ApicurioRegistry3 primary, Context context) { + PodDisruptionBudget pdb = STUDIO_UI_POD_DISRUPTION_BUDGET_KEY.getFactory().apply(primary); + return pdb; + } +} diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIServiceResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIServiceResource.java index a4801606b9..b34f4658ed 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIServiceResource.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/studioui/StudioUIServiceResource.java @@ -9,16 +9,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_STUDIO_UI; import static io.apicurio.registry.operator.resource.ResourceKey.STUDIO_UI_SERVICE_KEY; import static io.apicurio.registry.operator.utils.Mapper.toYAML; -// spotless:off -@KubernetesDependent( - labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_STUDIO_UI, - resourceDiscriminator = StudioUIServiceDiscriminator.class -) -// spotless:on +@KubernetesDependent(resourceDiscriminator = StudioUIServiceDiscriminator.class) public class StudioUIServiceResource extends CRUDKubernetesDependentResource { private static final Logger log = LoggerFactory.getLogger(StudioUIServiceResource.class); diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIDeploymentResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIDeploymentResource.java index 6d0854a85a..fb1ca16f81 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIDeploymentResource.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIDeploymentResource.java @@ -16,7 +16,6 @@ import static io.apicurio.registry.operator.api.v1.ContainerNames.REGISTRY_UI_CONTAINER_NAME; import static io.apicurio.registry.operator.resource.LabelDiscriminators.UIDeploymentDiscriminator; -import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_UI; import static io.apicurio.registry.operator.resource.ResourceKey.*; import static io.apicurio.registry.operator.resource.app.AppDeploymentResource.addEnvVar; import static io.apicurio.registry.operator.resource.app.AppDeploymentResource.getContainerFromDeployment; @@ -24,12 +23,7 @@ import static io.apicurio.registry.operator.utils.Mapper.toYAML; import static java.util.Optional.ofNullable; -// spotless:off -@KubernetesDependent( - labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_UI, - resourceDiscriminator = UIDeploymentDiscriminator.class -) -// spotless:on +@KubernetesDependent(resourceDiscriminator = UIDeploymentDiscriminator.class) public class UIDeploymentResource extends CRUDKubernetesDependentResource { private static final Logger log = LoggerFactory.getLogger(UIDeploymentResource.class); @@ -53,9 +47,7 @@ protected Deployment desired(ApicurioRegistry3 primary, Context withIngressRule(s, i, rule -> { - // spotless:off addEnvVar(envVars, new EnvVarBuilder().withName("REGISTRY_API_URL").withValue("http://%s/apis/registry/v3".formatted(rule.getHost())).build()); - // spotless:on })); }); diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIIngressResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIIngressResource.java index f74cc43b39..776d96c4a5 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIIngressResource.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIIngressResource.java @@ -16,12 +16,7 @@ import static io.apicurio.registry.operator.utils.IngressUtils.withIngressRule; import static io.apicurio.registry.operator.utils.Mapper.toYAML; -// spotless:off -@KubernetesDependent( - labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_UI, - resourceDiscriminator = UIIngressDiscriminator.class -) -// spotless:on +@KubernetesDependent(resourceDiscriminator = UIIngressDiscriminator.class) public class UIIngressResource extends CRUDKubernetesDependentResource { private static final Logger log = LoggerFactory.getLogger(UIIngressResource.class); diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIPodDisruptionBudgetResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIPodDisruptionBudgetResource.java new file mode 100644 index 0000000000..3bfb982e09 --- /dev/null +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIPodDisruptionBudgetResource.java @@ -0,0 +1,31 @@ +package io.apicurio.registry.operator.resource.ui; + +import io.apicurio.registry.operator.api.v1.ApicurioRegistry3; +import io.apicurio.registry.operator.resource.LabelDiscriminators; +import io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget; +import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; +import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; + +import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_UI; +import static io.apicurio.registry.operator.resource.ResourceKey.UI_POD_DISRUPTION_BUDGET_KEY; + +// spotless:off +@KubernetesDependent( + labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_UI, + resourceDiscriminator = LabelDiscriminators.UiPodDisruptionBudgetDiscriminator.class +) +// spotless:on +public class UIPodDisruptionBudgetResource + extends CRUDKubernetesDependentResource { + + public UIPodDisruptionBudgetResource() { + super(PodDisruptionBudget.class); + } + + @Override + protected PodDisruptionBudget desired(ApicurioRegistry3 primary, Context context) { + PodDisruptionBudget pdb = UI_POD_DISRUPTION_BUDGET_KEY.getFactory().apply(primary); + return pdb; + } +} diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIServiceResource.java b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIServiceResource.java index 441c1f4732..2b330c36c3 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIServiceResource.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/resource/ui/UIServiceResource.java @@ -8,17 +8,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static io.apicurio.registry.operator.resource.LabelDiscriminators.*; -import static io.apicurio.registry.operator.resource.ResourceFactory.COMPONENT_UI; +import static io.apicurio.registry.operator.resource.LabelDiscriminators.UIServiceDiscriminator; import static io.apicurio.registry.operator.resource.ResourceKey.UI_SERVICE_KEY; import static io.apicurio.registry.operator.utils.Mapper.toYAML; -// spotless:off -@KubernetesDependent( - labelSelector = "app.kubernetes.io/name=apicurio-registry,app.kubernetes.io/component=" + COMPONENT_UI, - resourceDiscriminator = UIServiceDiscriminator.class -) -// spotless:on +@KubernetesDependent(resourceDiscriminator = UIServiceDiscriminator.class) public class UIServiceResource extends CRUDKubernetesDependentResource { private static final Logger log = LoggerFactory.getLogger(UIServiceResource.class); diff --git a/operator/controller/src/main/java/io/apicurio/registry/operator/utils/SecretKeyRefTool.java b/operator/controller/src/main/java/io/apicurio/registry/operator/utils/SecretKeyRefTool.java index 5789e12c62..513ea0260b 100644 --- a/operator/controller/src/main/java/io/apicurio/registry/operator/utils/SecretKeyRefTool.java +++ b/operator/controller/src/main/java/io/apicurio/registry/operator/utils/SecretKeyRefTool.java @@ -86,7 +86,6 @@ public void applySecretVolume(Deployment deployment, String containerName) { */ public void applySecretEnvVar(Map env, String envVarName) { requireValid(); - // spotless:off // @formatter:off addEnvVar(env, new EnvVarBuilder() .withName(envVarName) @@ -99,7 +98,6 @@ public void applySecretEnvVar(Map env, String envVarName) { .build() ); // @formatter:on - // spotless:on } private static void addSecretVolume(Deployment deployment, String secretName, String volumeName) { @@ -107,7 +105,6 @@ private static void addSecretVolume(Deployment deployment, String secretName, St // This assumes there is a bijection between the secret names and volume names. if (deployment.getSpec().getTemplate().getSpec().getVolumes().stream() .filter(v -> v.getName().equals(volumeName)).findAny().isEmpty()) { - // spotless:off // @formatter:off deployment.getSpec().getTemplate().getSpec().getVolumes().add( new VolumeBuilder() @@ -118,7 +115,6 @@ private static void addSecretVolume(Deployment deployment, String secretName, St .build() ); // @formatter:on - // spotless:on } } @@ -128,7 +124,6 @@ private static void addSecretVolumeMount(Deployment deployment, String container // Skip if the volume mount already exists, so we don't have to add it multiple times. // This assumes there is a bijection between the secret names and volume names. if (c.getVolumeMounts().stream().filter(v -> v.getName().equals(volumeName)).findAny().isEmpty()) { - // spotless:off // @formatter:off c.getVolumeMounts().add( new VolumeMountBuilder() @@ -138,7 +133,6 @@ private static void addSecretVolumeMount(Deployment deployment, String container .build() ); // @formatter:on - // spotless:on } } } diff --git a/operator/controller/src/main/resources/k8s/default/app.poddisruptionbudget.yaml b/operator/controller/src/main/resources/k8s/default/app.poddisruptionbudget.yaml new file mode 100644 index 0000000000..54dfe73837 --- /dev/null +++ b/operator/controller/src/main/resources/k8s/default/app.poddisruptionbudget.yaml @@ -0,0 +1,9 @@ +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: { } +spec: + maxUnavailable: 1 + selector: + matchLabels: + app.kubernetes.io/name: apicurio-registry + app.kubernetes.io/component: app diff --git a/operator/controller/src/main/resources/k8s/default/studio-ui.poddisruptionbudget.yaml b/operator/controller/src/main/resources/k8s/default/studio-ui.poddisruptionbudget.yaml new file mode 100644 index 0000000000..aaa6c69e0c --- /dev/null +++ b/operator/controller/src/main/resources/k8s/default/studio-ui.poddisruptionbudget.yaml @@ -0,0 +1,9 @@ +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: { } +spec: + minAvailable: 1 + selector: + matchLabels: + app.kubernetes.io/name: apicurio-registry + app.kubernetes.io/component: studio-ui diff --git a/operator/controller/src/main/resources/k8s/default/ui.poddisruptionbudget.yaml b/operator/controller/src/main/resources/k8s/default/ui.poddisruptionbudget.yaml new file mode 100644 index 0000000000..89ec0508dd --- /dev/null +++ b/operator/controller/src/main/resources/k8s/default/ui.poddisruptionbudget.yaml @@ -0,0 +1,9 @@ +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: { } +spec: + minAvailable: 1 + selector: + matchLabels: + app.kubernetes.io/name: apicurio-registry + app.kubernetes.io/component: ui diff --git a/operator/controller/src/test/java/io/apicurio/registry/operator/it/CRUpdateITTest.java b/operator/controller/src/test/java/io/apicurio/registry/operator/it/CRUpdateITTest.java index a9d04188ea..6df9bfaf52 100644 --- a/operator/controller/src/test/java/io/apicurio/registry/operator/it/CRUpdateITTest.java +++ b/operator/controller/src/test/java/io/apicurio/registry/operator/it/CRUpdateITTest.java @@ -22,7 +22,6 @@ public class CRUpdateITTest extends ITBase { @Test void testCRUpdate() { - // spotless:off var testCases = List.of( List.of( "/k8s/examples/simple-deprecated.apicurioregistry3.yaml", @@ -41,7 +40,6 @@ void testCRUpdate() { "/k8s/examples/kafkasql/plain/example-kafkasql-plain.apicurioregistry3.yaml" ) ); - // spotless:on testCases.forEach(testCase -> { diff --git a/operator/controller/src/test/java/io/apicurio/registry/operator/it/EnvITTest.java b/operator/controller/src/test/java/io/apicurio/registry/operator/it/EnvITTest.java index c890533405..58b541d8f7 100644 --- a/operator/controller/src/test/java/io/apicurio/registry/operator/it/EnvITTest.java +++ b/operator/controller/src/test/java/io/apicurio/registry/operator/it/EnvITTest.java @@ -22,27 +22,22 @@ public class EnvITTest extends ITBase { private static final Logger log = LoggerFactory.getLogger(EnvITTest.class); - // spotless:off private static final String[] defaultAppEnv = new String[]{ "QUARKUS_PROFILE", "QUARKUS_HTTP_ACCESS_LOG_ENABLED", "QUARKUS_HTTP_CORS_ORIGINS", "APICURIO_REST_MUTABILITY_ARTIFACT-VERSION-CONTENT_ENABLED" }; - // spotless:on private static final String[] defaultUIEnv = new String[] { "REGISTRY_API_URL" }; - // spotless:off private static final String[] defaultStudioUIEnv = new String[] { "APICURIO_REGISTRY_API_URL", "APICURIO_REGISTRY_UI_URL" }; - // spotless:on @Test void testEnvVars() { - // spotless:off var registry = ResourceFactory.deserialize("/k8s/examples/simple.apicurioregistry3.yaml", ApicurioRegistry3.class); registry.getMetadata().setNamespace(namespace); @@ -174,6 +169,5 @@ void testEnvVars() { return true; }); - // spotless:on } } diff --git a/operator/controller/src/test/java/io/apicurio/registry/operator/it/ITBase.java b/operator/controller/src/test/java/io/apicurio/registry/operator/it/ITBase.java index 27f8589fcd..d575c54409 100644 --- a/operator/controller/src/test/java/io/apicurio/registry/operator/it/ITBase.java +++ b/operator/controller/src/test/java/io/apicurio/registry/operator/it/ITBase.java @@ -4,8 +4,10 @@ import io.apicurio.registry.operator.api.v1.ApicurioRegistry3; import io.fabric8.kubernetes.api.model.HasMetadata; import io.fabric8.kubernetes.api.model.NamespaceBuilder; +import io.fabric8.kubernetes.api.model.Pod; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicy; +import io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.ConfigBuilder; import io.fabric8.kubernetes.client.KubernetesClient; @@ -13,6 +15,7 @@ import io.fabric8.kubernetes.client.utils.Serialization; import io.javaoperatorsdk.operator.Operator; import io.javaoperatorsdk.operator.api.reconciler.Reconciler; +import io.javaoperatorsdk.operator.processing.event.ResourceID; import io.quarkiverse.operatorsdk.runtime.QuarkusConfigurationService; import jakarta.enterprise.inject.Instance; import jakarta.enterprise.inject.spi.CDI; @@ -27,12 +30,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.FileInputStream; -import java.io.IOException; +import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.time.Duration; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; @@ -59,6 +63,7 @@ public enum OperatorDeployment { protected static Instance> reconcilers; protected static QuarkusConfigurationService configuration; protected static KubernetesClient client; + protected static PodLogManager podLogManager; protected static PortForwardManager portForwardManager; protected static IngressManager ingressManager; protected static String deploymentTarget; @@ -84,9 +89,11 @@ public static void before() throws Exception { portForwardManager = new PortForwardManager(client, namespace); ingressManager = new IngressManager(client, namespace); + podLogManager = new PodLogManager(client); if (operatorDeployment == OperatorDeployment.remote) { createTestResources(); + startOperatorLogs(); } else { createOperator(); registerReconcilers(); @@ -97,7 +104,6 @@ public static void before() throws Exception { @BeforeEach public void beforeEach(TestInfo testInfo) { String testClassName = testInfo.getTestClass().map(c -> c.getSimpleName() + ".").orElse(""); - // spotless:off log.info("\n" + "------- STARTING: {}{}\n" + "------- Namespace: {}\n" + @@ -107,7 +113,6 @@ public void beforeEach(TestInfo testInfo) { namespace, ((operatorDeployment == OperatorDeployment.remote) ? "remote" : "local"), deploymentTarget); - // spotless:on } protected static void checkDeploymentExists(ApicurioRegistry3 primary, String component, int replicas) { @@ -156,6 +161,21 @@ protected static void checkIngressDoesNotExist(ApicurioRegistry3 primary, String }); } + protected static PodDisruptionBudget checkPodDisruptionBudgetExists(ApicurioRegistry3 primary, + String component) { + final ValueOrNull rval = new ValueOrNull<>(); + + await().ignoreExceptions().untilAsserted(() -> { + PodDisruptionBudget pdb = client.policy().v1().podDisruptionBudget() + .withName(primary.getMetadata().getName() + "-" + component + "-poddisruptionbudget") + .get(); + assertThat(pdb).isNotNull(); + rval.setValue(pdb); + }); + + return rval.getValue(); + } + protected static NetworkPolicy checkNetworkPolicyExists(ApicurioRegistry3 primary, String component) { final ValueOrNull rval = new ValueOrNull<>(); @@ -196,6 +216,21 @@ private static void createTestResources() throws Exception { }); } + private static void startOperatorLogs() { + List operatorPods = new ArrayList<>(); + await().ignoreExceptions().untilAsserted(() -> { + operatorPods.clear(); + operatorPods.addAll(client.pods() + .withLabels(Map.of( + "app.kubernetes.io/name", "apicurio-registry-operator", + "app.kubernetes.io/component", "operator", + "app.kubernetes.io/part-of", "apicurio-registry")) + .list().getItems()); + assertThat(operatorPods).hasSize(1); + }); + podLogManager.startPodLog(ResourceID.fromResource(operatorPods.get(0))); + } + private static void cleanTestResources() throws Exception { if (cleanup) { log.info("Deleting generated resources from Namespace {}", namespace); @@ -244,7 +279,7 @@ static void createNamespace(KubernetesClient client, String namespace) { } static String calculateNamespace() { - return ("apicurio-registry-operator-test-" + UUID.randomUUID()).substring(0, 63); + return "test-" + UUID.randomUUID().toString().substring(0, 7); } static void setDefaultAwaitilityTimings() { @@ -278,7 +313,7 @@ public static void after() throws Exception { } else { cleanTestResources(); } - + podLogManager.stopAndWait(); if (cleanup) { log.info("Deleting namespace : {}", namespace); assertThat(client.namespaces().withName(namespace).delete()).isNotNull(); diff --git a/operator/controller/src/test/java/io/apicurio/registry/operator/it/IngressManager.java b/operator/controller/src/test/java/io/apicurio/registry/operator/it/IngressManager.java index 825a4e41de..c8b9a68f52 100644 --- a/operator/controller/src/test/java/io/apicurio/registry/operator/it/IngressManager.java +++ b/operator/controller/src/test/java/io/apicurio/registry/operator/it/IngressManager.java @@ -67,18 +67,14 @@ public RequestSpecification startHttpRequest(String ingressName) { if (host != null) { if (loadBalancerIP != null) { - // spotless:off return given() .baseUri("http://" + loadBalancerIP) .port(80) .header("Host", host); - // spotless:on } else { - // spotless:off return given() .baseUri("http://" + host) .port(80); - // spotless:on } } else { throw new OperatorException("Ingress " + ingressName + " does not have a single host."); diff --git a/operator/controller/src/test/java/io/apicurio/registry/operator/it/PodDisruptionBudgetITTest.java b/operator/controller/src/test/java/io/apicurio/registry/operator/it/PodDisruptionBudgetITTest.java new file mode 100644 index 0000000000..803bd585dc --- /dev/null +++ b/operator/controller/src/test/java/io/apicurio/registry/operator/it/PodDisruptionBudgetITTest.java @@ -0,0 +1,75 @@ +package io.apicurio.registry.operator.it; + +import io.apicurio.registry.operator.api.v1.ApicurioRegistry3; +import io.apicurio.registry.operator.resource.ResourceFactory; +import io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget; +import io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudgetStatus; +import io.quarkus.test.junit.QuarkusTest; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; +import java.util.stream.Collectors; + +@QuarkusTest +public class PodDisruptionBudgetITTest extends ITBase { + + private static final Logger log = LoggerFactory.getLogger(PodDisruptionBudgetITTest.class); + + @Test + void testPodDisruptionBudget() { + ApicurioRegistry3 registry = ResourceFactory.deserialize( + "/k8s/examples/simple-with-studio.apicurioregistry3.yaml", ApicurioRegistry3.class); + registry.getSpec().getApp().setReplicas(2); + client.resource(registry).create(); + + // Wait for the deployment to exist + checkDeploymentExists(registry, ResourceFactory.COMPONENT_APP, 2); + + // Check that the two expected PodDisruptionBudget resources were created + PodDisruptionBudget appPDB = checkPodDisruptionBudgetExists(registry, ResourceFactory.COMPONENT_APP); + PodDisruptionBudget uiPDB = checkPodDisruptionBudgetExists(registry, ResourceFactory.COMPONENT_UI); + PodDisruptionBudget studioPDB = checkPodDisruptionBudgetExists(registry, + ResourceFactory.COMPONENT_STUDIO_UI); + + // Verify the content of the app component's PDB + assertLabelsContains(appPDB.getMetadata().getLabels(), "app.kubernetes.io/component=app", + "app.kubernetes.io/managed-by=apicurio-registry-operator", + "app.kubernetes.io/name=apicurio-registry"); + assertLabelsContains(appPDB.getSpec().getSelector().getMatchLabels(), + "app.kubernetes.io/component=app", "app.kubernetes.io/name=apicurio-registry", + "app.kubernetes.io/instance=" + registry.getMetadata().getName()); + PodDisruptionBudgetStatus appPdbStatus = appPDB.getStatus(); + Assertions.assertThat(appPdbStatus.getExpectedPods()).isEqualTo(2); + Assertions.assertThat(appPdbStatus.getDisruptionsAllowed()).isEqualTo(1); + + // Verify the content of the ui component's PDB + assertLabelsContains(uiPDB.getMetadata().getLabels(), "app.kubernetes.io/component=ui", + "app.kubernetes.io/managed-by=apicurio-registry-operator", + "app.kubernetes.io/name=apicurio-registry"); + assertLabelsContains(uiPDB.getSpec().getSelector().getMatchLabels(), "app.kubernetes.io/component=ui", + "app.kubernetes.io/name=apicurio-registry", + "app.kubernetes.io/instance=" + registry.getMetadata().getName()); + PodDisruptionBudgetStatus uiPdbStatus = uiPDB.getStatus(); + Assertions.assertThat(uiPdbStatus.getExpectedPods()).isEqualTo(1); + Assertions.assertThat(uiPdbStatus.getDisruptionsAllowed()).isEqualTo(0); + + // Verify the content of the studio component's PDB + assertLabelsContains(studioPDB.getMetadata().getLabels(), "app.kubernetes.io/component=studio-ui", + "app.kubernetes.io/managed-by=apicurio-registry-operator", + "app.kubernetes.io/name=apicurio-registry"); + assertLabelsContains(studioPDB.getSpec().getSelector().getMatchLabels(), + "app.kubernetes.io/component=studio-ui", "app.kubernetes.io/name=apicurio-registry", + "app.kubernetes.io/instance=" + registry.getMetadata().getName()); + PodDisruptionBudgetStatus studioPdbStatus = studioPDB.getStatus(); + Assertions.assertThat(studioPdbStatus.getExpectedPods()).isEqualTo(1); + Assertions.assertThat(studioPdbStatus.getDisruptionsAllowed()).isEqualTo(0); + } + + private void assertLabelsContains(Map labels, String... values) { + Assertions.assertThat(labels.entrySet().stream().map(l -> l.getKey() + "=" + l.getValue()) + .collect(Collectors.toSet())).contains(values); + } +} diff --git a/operator/controller/src/test/java/io/apicurio/registry/operator/it/PodLogManager.java b/operator/controller/src/test/java/io/apicurio/registry/operator/it/PodLogManager.java new file mode 100644 index 0000000000..97c27141f3 --- /dev/null +++ b/operator/controller/src/test/java/io/apicurio/registry/operator/it/PodLogManager.java @@ -0,0 +1,79 @@ +package io.apicurio.registry.operator.it; + +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.dsl.LogWatch; +import io.javaoperatorsdk.operator.processing.event.ResourceID; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.time.Duration; +import java.time.Instant; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; + +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.awaitility.Awaitility.await; + +public class PodLogManager { + + private static final Logger log = LoggerFactory.getLogger(PodLogManager.class); + + private final KubernetesClient k8sClient; + + private final Map activePodLogMap = new ConcurrentHashMap<>(); + + public PodLogManager(KubernetesClient k8sClient) { + this.k8sClient = k8sClient; + } + + private String getNamespace(ResourceID id) { + return id.getNamespace().orElse("default"); + } + + public void startPodLog(ResourceID podID) { + k8sClient.pods().inNamespace(getNamespace(podID)).withName(podID.getName()).waitUntilReady(60, + SECONDS); + new Thread(() -> { + StringBuilder chunk = new StringBuilder(); + try ( + LogWatch logWatch = k8sClient.pods().inNamespace(getNamespace(podID)).withName(podID.getName()).watchLog(); + BufferedReader reader = new BufferedReader(new InputStreamReader(logWatch.getOutput())) + ) { + AtomicBoolean stop = new AtomicBoolean(false); + log.debug("START LOG of pod {}/{}", getNamespace(podID), podID.getName()); + activePodLogMap.put(podID, stop); + var lastWriteAt = Instant.now(); + while (!stop.get()) { + var line = reader.readLine(); + if (line != null) { + chunk.append(getNamespace(podID)).append("/").append(podID.getName()).append(" >>> ") + .append(line).append("\n"); + if (lastWriteAt.plus(Duration.ofSeconds(5)).isBefore(Instant.now())) { + log.debug("LOG of pod {}/{}:\n{}", getNamespace(podID), podID.getName(), chunk); + chunk.setLength(0); + lastWriteAt = Instant.now(); + } + } else { + stop.set(true); + } + } + } catch (Exception ex) { + log.error("Error while reading logs of pod {}/{}", getNamespace(podID), podID.getName(), ex); + } finally { + if (chunk.length() > 0) { + log.debug("LOG of pod {}/{}:\n{}", getNamespace(podID), podID.getName(), chunk); + } + log.debug("END LOG of pod {}/{}", getNamespace(podID), podID.getName()); + activePodLogMap.remove(podID); + } + }).start(); + } + + public void stopAndWait() { + activePodLogMap.values().forEach(stop -> stop.set(true)); + await().until(activePodLogMap::isEmpty); + } +} diff --git a/operator/controller/src/test/java/io/apicurio/registry/operator/it/PodTemplateSpecITTest.java b/operator/controller/src/test/java/io/apicurio/registry/operator/it/PodTemplateSpecITTest.java index ed4bb3c590..22212478b1 100644 --- a/operator/controller/src/test/java/io/apicurio/registry/operator/it/PodTemplateSpecITTest.java +++ b/operator/controller/src/test/java/io/apicurio/registry/operator/it/PodTemplateSpecITTest.java @@ -21,7 +21,6 @@ public class PodTemplateSpecITTest extends ITBase { @Test void testPTS() { - // spotless:off var exportData = ResourceFactory .deserialize("/k8s/examples/podtemplatespec/export-data.configmap.yaml", ConfigMap.class); var registry = ResourceFactory.deserialize( diff --git a/operator/controller/src/test/java/io/apicurio/registry/operator/it/SmokeITTest.java b/operator/controller/src/test/java/io/apicurio/registry/operator/it/SmokeITTest.java index 33d69ec956..34007c453a 100644 --- a/operator/controller/src/test/java/io/apicurio/registry/operator/it/SmokeITTest.java +++ b/operator/controller/src/test/java/io/apicurio/registry/operator/it/SmokeITTest.java @@ -241,13 +241,11 @@ void testEmptyHostDisablesIngress() { var uiDeployment = client.apps().deployments().inNamespace(namespace) .withName(registry.getMetadata().getName() + "-ui-deployment").get(); assertThat(uiDeployment).isNotNull(); - // spotless:off assertThat(uiDeployment.getSpec().getTemplate().getSpec().getContainers()) .filteredOn(c -> REGISTRY_UI_CONTAINER_NAME.equals(c.getName())) .flatMap(Container::getEnv) .filteredOn(e -> "REGISTRY_API_URL".equals(e.getName())) .isEmpty(); - // spotless:on // Enable again registry.getSpec().getApp().getIngress().setHost(ingressManager.getIngressHost("app")); @@ -271,7 +269,6 @@ void testEmptyHostDisablesIngress() { } private void verify_REGISTRY_API_URL_isSet(ApicurioRegistry3 registry, Deployment deployment) { - // spotless:off assertThat(deployment).isNotNull(); assertThat(deployment.getSpec().getTemplate().getSpec().getContainers()) .filteredOn(c -> REGISTRY_UI_CONTAINER_NAME.equals(c.getName())) @@ -282,7 +279,6 @@ private void verify_REGISTRY_API_URL_isSet(ApicurioRegistry3 registry, Deploymen .first() .asInstanceOf(InstanceOfAssertFactories.STRING) .startsWith("http://" + registry.getSpec().getApp().getIngress().getHost()); - // spotless:on } static boolean ingressDisabled() { diff --git a/operator/controller/src/test/java/io/apicurio/registry/operator/it/StatusUpdaterTest.java b/operator/controller/src/test/java/io/apicurio/registry/operator/it/StatusUpdaterTest.java index a735d8c3a6..7610353285 100644 --- a/operator/controller/src/test/java/io/apicurio/registry/operator/it/StatusUpdaterTest.java +++ b/operator/controller/src/test/java/io/apicurio/registry/operator/it/StatusUpdaterTest.java @@ -49,7 +49,6 @@ void testErrorStatusIsTriggered() { registry.getMetadata().setNamespace(namespace); // dummy settings to avoid reaching the READY state - // spotless:off registry.getSpec().getApp().setStorage(StorageSpec.builder() .type(StorageType.POSTGRESQL) .sql(SqlSpec.builder() @@ -60,7 +59,6 @@ void testErrorStatusIsTriggered() { .build()) .build()) .build()); - // spotless:on client.resource(registry).create(); diff --git a/operator/controller/src/test/java/io/apicurio/registry/operator/unit/PodTemplateSpecTest.java b/operator/controller/src/test/java/io/apicurio/registry/operator/unit/PodTemplateSpecTest.java index 7ad5e7aa58..6eec49c4b8 100644 --- a/operator/controller/src/test/java/io/apicurio/registry/operator/unit/PodTemplateSpecTest.java +++ b/operator/controller/src/test/java/io/apicurio/registry/operator/unit/PodTemplateSpecTest.java @@ -31,7 +31,6 @@ void testAppPositive(TestCase testCase) { primary.getSpec().getApp().setPodTemplateSpec(testCase.getSpec()); var expected = ResourceFactory.INSTANCE.getDefaultAppDeployment(primary).getSpec().getTemplate(); preprocessTestCaseExpected(testCase.getExpected()); - // spotless:off assertThat(expected) .usingRecursiveComparison() .ignoringCollectionOrderInFields("spec.containers", "spec.containers.ports") @@ -40,7 +39,6 @@ void testAppPositive(TestCase testCase) { .usingRecursiveComparison() .ignoringCollectionOrderInFields("spec.containers", "spec.containers.ports") .isEqualTo(expected); - // spotless:on } @ParameterizedTest @@ -62,7 +60,6 @@ void testUIPositive(TestCase testCase) { primary.getSpec().getUi().setPodTemplateSpec(testCase.getSpec()); var expected = ResourceFactory.INSTANCE.getDefaultUIDeployment(primary).getSpec().getTemplate(); preprocessTestCaseExpected(testCase.getExpected()); - // spotless:off assertThat(expected) .usingRecursiveComparison() .ignoringCollectionOrderInFields("spec.containers", "spec.containers.ports") @@ -71,7 +68,6 @@ void testUIPositive(TestCase testCase) { .usingRecursiveComparison() .ignoringCollectionOrderInFields("spec.containers", "spec.containers.ports") .isEqualTo(expected); - // spotless:on } @ParameterizedTest @@ -93,7 +89,6 @@ void testStudioUIPositive(TestCase testCase) { primary.getSpec().getStudioUi().setPodTemplateSpec(testCase.getSpec()); var expected = ResourceFactory.INSTANCE.getDefaultStudioUIDeployment(primary).getSpec().getTemplate(); preprocessTestCaseExpected(testCase.getExpected()); - // spotless:off assertThat(expected) .usingRecursiveComparison() .ignoringCollectionOrderInFields("spec.containers", "spec.containers.ports") @@ -102,7 +97,6 @@ void testStudioUIPositive(TestCase testCase) { .usingRecursiveComparison() .ignoringCollectionOrderInFields("spec.containers", "spec.containers.ports") .isEqualTo(expected); - // spotless:on } @ParameterizedTest diff --git a/operator/install/install.yaml b/operator/install/install.yaml index b6c97c6e02..def4cdc42f 100644 --- a/operator/install/install.yaml +++ b/operator/install/install.yaml @@ -128,6 +128,17 @@ spec: Set this to 'false' if you want to create your own custom NetworkPolicy. type: boolean type: object + podDisruptionBudget: + description: | + Configuration of a PodDisruptionBudget for the component. + properties: + enabled: + description: | + Whether a PodDisruptionBudget should be managed by the operator. Defaults to 'true'. + + Set this to 'false' if you want to create your own custom PodDisruptionBudget. + type: boolean + type: object podTemplateSpec: description: |- `PodTemplateSpec` describes the data a pod should have when created from a template. @@ -3276,6 +3287,17 @@ spec: Set this to 'false' if you want to create your own custom NetworkPolicy. type: boolean type: object + podDisruptionBudget: + description: | + Configuration of a PodDisruptionBudget for the component. + properties: + enabled: + description: | + Whether a PodDisruptionBudget should be managed by the operator. Defaults to 'true'. + + Set this to 'false' if you want to create your own custom PodDisruptionBudget. + type: boolean + type: object podTemplateSpec: description: |- `PodTemplateSpec` describes the data a pod should have when created from a template. @@ -6276,6 +6298,17 @@ spec: Set this to 'false' if you want to create your own custom NetworkPolicy. type: boolean type: object + podDisruptionBudget: + description: | + Configuration of a PodDisruptionBudget for the component. + properties: + enabled: + description: | + Whether a PodDisruptionBudget should be managed by the operator. Defaults to 'true'. + + Set this to 'false' if you want to create your own custom PodDisruptionBudget. + type: boolean + type: object podTemplateSpec: description: |- `PodTemplateSpec` describes the data a pod should have when created from a template. @@ -9333,6 +9366,12 @@ rules: - networkpolicies verbs: - '*' +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - '*' --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding diff --git a/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/spec/ComponentSpec.java b/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/spec/ComponentSpec.java index 53514581c8..534f72b005 100644 --- a/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/spec/ComponentSpec.java +++ b/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/spec/ComponentSpec.java @@ -29,7 +29,7 @@ @JsonDeserialize(using = None.class) @JsonInclude(NON_NULL) -@JsonPropertyOrder({ "env", "ingress", "host", "podTemplateSpec", "networkPolicy" }) +@JsonPropertyOrder({ "env", "ingress", "host", "podDisruptionBudget", "networkPolicy", "podTemplateSpec" }) @NoArgsConstructor(access = PROTECTED) @AllArgsConstructor(access = PROTECTED) @SuperBuilder(toBuilder = true) @@ -102,6 +102,16 @@ public abstract class ComponentSpec { @JsonSetter(nulls = Nulls.SKIP) private Integer replicas; + /** + * Pod disruption budget config + */ + @JsonProperty("podDisruptionBudget") + @JsonPropertyDescription(""" + Configuration of a PodDisruptionBudget for the component. + """) + @JsonSetter(nulls = Nulls.SKIP) + private PodDisruptionSpec podDisruptionBudget; + /** * Network policy config */ @@ -118,4 +128,5 @@ public IngressSpec withIngress() { } return ingress; } + } diff --git a/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/spec/PodDisruptionSpec.java b/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/spec/PodDisruptionSpec.java new file mode 100644 index 0000000000..0a47106110 --- /dev/null +++ b/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/spec/PodDisruptionSpec.java @@ -0,0 +1,46 @@ +package io.apicurio.registry.operator.api.v1.spec; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyDescription; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonSetter; +import com.fasterxml.jackson.annotation.Nulls; +import com.fasterxml.jackson.databind.JsonDeserializer.None; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.SuperBuilder; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; +import static lombok.AccessLevel.PRIVATE; + +@JsonDeserialize(using = None.class) +@JsonInclude(NON_NULL) +@JsonPropertyOrder({ "enabled" }) +@NoArgsConstructor +@AllArgsConstructor(access = PRIVATE) +@SuperBuilder(toBuilder = true) +@Getter +@Setter +@EqualsAndHashCode +@ToString +public class PodDisruptionSpec { + + /** + * Indicates whether to create and manage a pod disruption budget + */ + @JsonProperty("enabled") + @JsonPropertyDescription(""" + Whether a PodDisruptionBudget should be managed by the operator. Defaults to 'true'. + + Set this to 'false' if you want to create your own custom PodDisruptionBudget. + """) + @JsonSetter(nulls = Nulls.SKIP) + private Boolean enabled; + +} diff --git a/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/spec/StorageType.java b/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/spec/StorageType.java index e0074ee419..c30a390f0c 100644 --- a/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/spec/StorageType.java +++ b/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/spec/StorageType.java @@ -5,12 +5,10 @@ public enum StorageType { - // spotless:off @JsonProperty("postgresql") POSTGRESQL("postgresql"), @JsonProperty("kafkasql") KAFKASQL("kafkasql"); - // spotless:on final String value; diff --git a/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/status/ConditionStatus.java b/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/status/ConditionStatus.java index e3d9baf9ac..ebba8d49fe 100644 --- a/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/status/ConditionStatus.java +++ b/operator/model/src/main/java/io/apicurio/registry/operator/api/v1/status/ConditionStatus.java @@ -5,14 +5,12 @@ public enum ConditionStatus { - // spotless:off @JsonProperty("True") TRUE("True"), @JsonProperty("False") FALSE("False"), @JsonProperty("Unknown") UNKNOWN("Unknown"); - // spotless:on final String value; diff --git a/pom.xml b/pom.xml index 6c9972730a..470eb81afc 100644 --- a/pom.xml +++ b/pom.xml @@ -213,7 +213,7 @@ 1.18.36 1.18.0 0.1.18.Final - 3.6.0 + 3.7.1 2.6.2.Final 3.3.1 1.10.0 @@ -253,7 +253,6 @@ 3.3.1 3.4.0 3.1.0 - 2.43.0 2.5.0 3.5.0 @@ -278,7 +277,7 @@ 3.4.0 2.0.7 0.105.0 - 2.35.2 + 3.0.1 0.107.0 @@ -1152,70 +1151,6 @@ integration-tests - - spotless - - - !skipSpotless - - - - - - com.diffplug.spotless - spotless-maven-plugin - ${version.spotless} - - - - - *.md - .gitignore - - - - - true - 2 - - - - - - **/src/main/java/**/*.java - **/src/test/java/**/*.java - - - ${projectRoot}/ide-config/eclipse-format.xml - - - ${projectRoot}/ide-config/eclipse.importorder - - - - - - - **/pom.xml - - - false - - - - - - format - - check - - process-sources - - - - - - examples diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000000..8c86f85ad7 --- /dev/null +++ b/renovate.json @@ -0,0 +1,301 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ], + "enabledManagers": [ + "npm", + "maven" + ], + "dependencyDashboard": true, + "rangeStrategy": "bump", + "ignorePaths": [ + "ui/deploy-examples/**", + "ui/Dockerfile", + "distro/**", + "docs/**", + "docs-playbook/**", + "examples/**", + "utils/maven-plugin/src/test/resources/test-builds" + ], + "prConcurrentLimit": 5, + "prHourlyLimit": 5, + "packageRules": [ + { + "groupName": "Dependencies: Maven App: All", + "matchFileNames": [ + "**/pom.xml" + ], + "enabled": true, + "matchUpdateTypes": [ + "minor", + "patch" + ] + }, + { + "groupName": "Dependencies: Maven App: All (Major)", + "matchFileNames": [ + "**/pom.xml" + ], + "enabled": true, + "matchUpdateTypes": [ + "major" + ], + "schedule": [ + "* 0 1 * *" + ] + }, + { + "groupName": "Dependencies: Maven App: Quarkus", + "matchFileNames": [ + "**/pom.xml" + ], + "matchPackageNames": [ + "io.quarkus:*" + ], + "enabled": true, + "matchUpdateTypes": [ + "minor", + "patch" + ], + "schedule": [ + "* 0 1 * *" + ] + }, + { + "groupName": "Dependencies: Maven App: Quarkus (Major)", + "matchFileNames": [ + "**/pom.xml" + ], + "matchPackageNames": [ + "io.quarkus:*" + ], + "enabled": false, + "matchUpdateTypes": [ + "major" + ] + }, + { + "groupName": "Dependencies: Maven App: Confluent", + "matchFileNames": [ + "**/pom.xml" + ], + "matchPackageNames": [ + "io.confluent:*" + ], + "enabled": false, + "matchUpdateTypes": [ + "minor", + "patch" + ], + "repositories": [ + { + "url": "https://packages.confluent.io/maven/" + } + ], + "schedule": [ + "* 0 1 * *" + ] + }, + { + "groupName": "Dependencies: Maven App: Confluent (Major)", + "matchFileNames": [ + "**/pom.xml" + ], + "matchPackageNames": [ + "io.confluent:*" + ], + "repositories": [ + { + "url": "https://packages.confluent.io/maven/" + } + ], + "enabled": false, + "matchUpdateTypes": [ + "major" + ] + }, + { + "groupName": "Dependencies: Maven App: Wire Schema", + "matchFileNames": [ + "**/pom.xml" + ], + "matchPackageNames": [ + "com.squareup.wire:*" + ], + "enabled": false, + "matchUpdateTypes": [ + "minor", + "patch" + ], + "schedule": [ + "* 0 1 * *" + ] + }, + { + "groupName": "Dependencies: Maven App: Wire Schema (Major)", + "matchFileNames": [ + "**/pom.xml" + ], + "matchPackageNames": [ + "com.squareup.wire:*" + ], + "enabled": false, + "matchUpdateTypes": [ + "major" + ] + }, + { + "groupName": "Dependencies: Maven App: Maven Plugins", + "matchFileNames": [ + "**/pom.xml" + ], + "matchPackageNames": [ + "org.apache.maven.plugins:*" + ], + "enabled": false, + "matchUpdateTypes": [ + "minor", + "patch" + ] + }, + { + "groupName": "Dependencies: Maven App: Maven Plugins (Major)", + "matchFileNames": [ + "**/pom.xml" + ], + "matchPackageNames": [ + "org.apache.maven.plugins:*" + ], + "enabled": false, + "matchUpdateTypes": [ + "major" + ] + }, + { + "groupName": "Dependencies: Operator: Quarkus Operator SDK", + "matchFileNames": [ + "**/pom.xml" + ], + "matchPackageNames": [ + "io.quarkiverse.operatorsdk:*" + ], + "enabled": false, + "matchUpdateTypes": [ + "minor", + "patch" + ] + }, + + { + "groupName": "Dependencies: UI App", + "matchFileNames": [ + "ui/ui-app/**" + ], + "enabled": true, + "matchUpdateTypes": [ + "minor", + "patch" + ] + }, + { + "groupName": "Dependencies: UI App (Major)", + "matchFileNames": [ + "ui/ui-app/**" + ], + "enabled": true, + "matchUpdateTypes": [ + "major" + ], + "schedule": [ + "* 0 15 * *" + ] + }, + { + "groupName": "Dependencies: Typescript SDK", + "matchFileNames": [ + "typescript-sdk/**" + ], + "enabled": true, + "matchUpdateTypes": [ + "minor", + "patch" + ] + }, + { + "groupName": "Dependencies: Typescript SDK (Major)", + "matchFileNames": [ + "typescript-sdk/**" + ], + "enabled": true, + "matchUpdateTypes": [ + "major" + ], + "schedule": [ + "* 0 15 * *" + ] + }, + { + "groupName": "Dependencies: Kiota (Typescript)", + "matchFileNames": [ + "typescript-sdk/**", + "ui/ui-app/**" + ], + "matchPackageNames": [ + "@microsoft/kiota-*" + ], + "enabled": true, + "schedule": [ + "* 0 15 * *" + ] + }, + { + "groupName": "Dependencies: UI Tests", + "matchFileNames": [ + "ui/tests/**" + ], + "enabled": true, + "matchUpdateTypes": [ + "minor", + "patch" + ] + }, + { + "groupName": "Dependencies: UI Tests (Major)", + "matchFileNames": [ + "ui/tests/**" + ], + "enabled": true, + "matchUpdateTypes": [ + "major" + ], + "schedule": [ + "* 0 15 * *" + ] + }, + { + "groupName": "Dependencies: UI Docs", + "matchFileNames": [ + "ui/ui-docs/**" + ], + "enabled": true, + "matchUpdateTypes": [ + "minor", + "patch" + ] + }, + { + "groupName": "Dependencies: UI Docs (Major)", + "matchFileNames": [ + "ui/ui-docs/**" + ], + "enabled": true, + "matchUpdateTypes": [ + "major" + ], + "schedule": [ + "* 0 15 * *" + ] + } + ] +} diff --git a/schema-util/json/src/main/java/io/apicurio/registry/rules/compatibility/jsonschema/diff/DiffType.java b/schema-util/json/src/main/java/io/apicurio/registry/rules/compatibility/jsonschema/diff/DiffType.java index 1a56dd3148..a60d16d884 100644 --- a/schema-util/json/src/main/java/io/apicurio/registry/rules/compatibility/jsonschema/diff/DiffType.java +++ b/schema-util/json/src/main/java/io/apicurio/registry/rules/compatibility/jsonschema/diff/DiffType.java @@ -2,7 +2,6 @@ public enum DiffType { - // spotless:off SUBSCHEMA_TYPE_CHANGED(false), SUBSCHEMA_TYPE_CHANGED_TO_EMPTY_OR_TRUE(true), @@ -223,7 +222,6 @@ public enum DiffType { NOT_TYPE_SCHEMA_COMPATIBLE_NONE(false), UNDEFINED_UNUSED(false); // Should not be used. - // spotless:on private String description; diff --git a/typescript-sdk/package-lock.json b/typescript-sdk/package-lock.json index f3d513e157..6de3a33534 100644 --- a/typescript-sdk/package-lock.json +++ b/typescript-sdk/package-lock.json @@ -10,25 +10,25 @@ "devDependencies": { "@apicurio/eslint-config": "0.3.0", "@kiota-community/kiota-gen": "1.0.2", - "@types/node": "22.12.0", + "@types/node": "22.13.1", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", - "@typescript-eslint/eslint-plugin": "8.22.0", - "@typescript-eslint/parser": "8.22.0", + "@typescript-eslint/eslint-plugin": "8.24.0", + "@typescript-eslint/parser": "8.24.0", "@vitejs/plugin-react": "4.3.4", "cross-env": "7.0.3", "eslint": "8.57.1", "eslint-plugin-react-hooks": "5.1.0", - "eslint-plugin-react-refresh": "0.4.18", + "eslint-plugin-react-refresh": "0.4.19", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "7.1.3", + "react-router-dom": "7.1.5", "rimraf": "6.0.1", "typescript": "5.7.3", "uuid": "11.0.5", - "vite": "6.0.11", + "vite": "6.1.0", "vite-plugin-dts": "4.5.0", - "vitest": "3.0.4" + "vitest": "3.0.5" }, "peerDependencies": { "@microsoft/kiota-abstractions": "1.0.0-preview.79", @@ -1403,247 +1403,266 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz", - "integrity": "sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz", + "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz", - "integrity": "sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz", + "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz", - "integrity": "sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz", + "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz", - "integrity": "sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz", + "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz", - "integrity": "sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz", + "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz", - "integrity": "sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz", + "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz", - "integrity": "sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz", + "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz", - "integrity": "sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz", + "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz", - "integrity": "sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz", + "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz", - "integrity": "sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz", + "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz", - "integrity": "sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz", + "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz", - "integrity": "sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz", + "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz", - "integrity": "sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz", + "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz", - "integrity": "sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz", + "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz", - "integrity": "sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", + "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz", - "integrity": "sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", + "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz", - "integrity": "sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz", + "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz", - "integrity": "sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz", + "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz", - "integrity": "sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz", + "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -1885,9 +1904,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.12.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz", - "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", + "version": "22.13.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", + "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", "dev": true, "license": "MIT", "dependencies": { @@ -1920,21 +1939,21 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.22.0.tgz", - "integrity": "sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.0.tgz", + "integrity": "sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/type-utils": "8.22.0", - "@typescript-eslint/utils": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/type-utils": "8.24.0", + "@typescript-eslint/utils": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1950,9 +1969,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -1963,16 +1982,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.22.0.tgz", - "integrity": "sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.0.tgz", + "integrity": "sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/typescript-estree": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/typescript-estree": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "debug": "^4.3.4" }, "engines": { @@ -1988,14 +2007,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.22.0.tgz", - "integrity": "sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.0.tgz", + "integrity": "sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0" + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2006,16 +2025,16 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.22.0.tgz", - "integrity": "sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.0.tgz", + "integrity": "sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.22.0", - "@typescript-eslint/utils": "8.22.0", + "@typescript-eslint/typescript-estree": "8.24.0", + "@typescript-eslint/utils": "8.24.0", "debug": "^4.3.4", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2030,9 +2049,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -2043,9 +2062,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.22.0.tgz", - "integrity": "sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.0.tgz", + "integrity": "sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==", "dev": true, "license": "MIT", "engines": { @@ -2057,20 +2076,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.22.0.tgz", - "integrity": "sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.0.tgz", + "integrity": "sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2084,9 +2103,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -2097,16 +2116,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.22.0.tgz", - "integrity": "sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.0.tgz", + "integrity": "sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/typescript-estree": "8.22.0" + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/typescript-estree": "8.24.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2121,13 +2140,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.22.0.tgz", - "integrity": "sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.0.tgz", + "integrity": "sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/types": "8.24.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -2177,14 +2196,14 @@ } }, "node_modules/@vitest/expect": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.4.tgz", - "integrity": "sha512-Nm5kJmYw6P2BxhJPkO3eKKhGYKRsnqJqf+r0yOGRKpEP+bSCBDsjXgiu1/5QFrnPMEgzfC38ZEjvCFgaNBC0Eg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.5.tgz", + "integrity": "sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.4", - "@vitest/utils": "3.0.4", + "@vitest/spy": "3.0.5", + "@vitest/utils": "3.0.5", "chai": "^5.1.2", "tinyrainbow": "^2.0.0" }, @@ -2193,13 +2212,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.4.tgz", - "integrity": "sha512-gEef35vKafJlfQbnyOXZ0Gcr9IBUsMTyTLXsEQwuyYAerpHqvXhzdBnDFuHLpFqth3F7b6BaFr4qV/Cs1ULx5A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.5.tgz", + "integrity": "sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.0.4", + "@vitest/spy": "3.0.5", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -2230,9 +2249,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.4.tgz", - "integrity": "sha512-ts0fba+dEhK2aC9PFuZ9LTpULHpY/nd6jhAQ5IMU7Gaj7crPCTdCFfgvXxruRBLFS+MLraicCuFXxISEq8C93g==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.5.tgz", + "integrity": "sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==", "dev": true, "license": "MIT", "dependencies": { @@ -2243,13 +2262,13 @@ } }, "node_modules/@vitest/runner": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.4.tgz", - "integrity": "sha512-dKHzTQ7n9sExAcWH/0sh1elVgwc7OJ2lMOBrAm73J7AH6Pf9T12Zh3lNE1TETZaqrWFXtLlx3NVrLRb5hCK+iw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.5.tgz", + "integrity": "sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.0.4", + "@vitest/utils": "3.0.5", "pathe": "^2.0.2" }, "funding": { @@ -2264,13 +2283,13 @@ "license": "MIT" }, "node_modules/@vitest/snapshot": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.4.tgz", - "integrity": "sha512-+p5knMLwIk7lTQkM3NonZ9zBewzVp9EVkVpvNta0/PlFWpiqLaRcF4+33L1it3uRUCh0BGLOaXPPGEjNKfWb4w==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.5.tgz", + "integrity": "sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.4", + "@vitest/pretty-format": "3.0.5", "magic-string": "^0.30.17", "pathe": "^2.0.2" }, @@ -2286,9 +2305,9 @@ "license": "MIT" }, "node_modules/@vitest/spy": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.4.tgz", - "integrity": "sha512-sXIMF0oauYyUy2hN49VFTYodzEAu744MmGcPR3ZBsPM20G+1/cSW/n1U+3Yu/zHxX2bIDe1oJASOkml+osTU6Q==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.5.tgz", + "integrity": "sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==", "dev": true, "license": "MIT", "dependencies": { @@ -2299,13 +2318,13 @@ } }, "node_modules/@vitest/utils": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.4.tgz", - "integrity": "sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.5.tgz", + "integrity": "sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.0.4", + "@vitest/pretty-format": "3.0.5", "loupe": "^3.1.2", "tinyrainbow": "^2.0.0" }, @@ -3206,9 +3225,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.18.tgz", - "integrity": "sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw==", + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz", + "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -4534,9 +4553,9 @@ } }, "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", "dev": true, "funding": [ { @@ -4552,8 +4571,9 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", + "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -4640,10 +4660,11 @@ } }, "node_modules/react-router": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.1.3.tgz", - "integrity": "sha512-EezYymLY6Guk/zLQ2vRA8WvdUhWFEj5fcE3RfWihhxXBW7+cd1LsIiA3lmx+KCmneAGQuyBv820o44L2+TtkSA==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.1.5.tgz", + "integrity": "sha512-8BUF+hZEU4/z/JD201yK6S+UYhsf58bzYIDq2NS1iGpwxSXDu7F+DeGSkIXMFBuHZB21FSiCzEcUb18cQNdRkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/cookie": "^0.6.0", "cookie": "^1.0.1", @@ -4664,12 +4685,13 @@ } }, "node_modules/react-router-dom": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.1.3.tgz", - "integrity": "sha512-qQGTE+77hleBzv9SIUIkGRvuFBQGagW+TQKy53UTZAO/3+YFNBYvRsNIZ1GT17yHbc63FylMOdS+m3oUriF1GA==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.1.5.tgz", + "integrity": "sha512-/4f9+up0Qv92D3bB8iN5P1s3oHAepSGa9h5k6tpTFlixTTskJZwKGhJ6vRJ277tLD1zuaZTt95hyGWV1Z37csQ==", "dev": true, + "license": "MIT", "dependencies": { - "react-router": "7.1.3" + "react-router": "7.1.5" }, "engines": { "node": ">=20.0.0" @@ -4778,10 +4800,11 @@ } }, "node_modules/rollup": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.1.tgz", - "integrity": "sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.6.tgz", + "integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.6" }, @@ -4793,25 +4816,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.28.1", - "@rollup/rollup-android-arm64": "4.28.1", - "@rollup/rollup-darwin-arm64": "4.28.1", - "@rollup/rollup-darwin-x64": "4.28.1", - "@rollup/rollup-freebsd-arm64": "4.28.1", - "@rollup/rollup-freebsd-x64": "4.28.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.28.1", - "@rollup/rollup-linux-arm-musleabihf": "4.28.1", - "@rollup/rollup-linux-arm64-gnu": "4.28.1", - "@rollup/rollup-linux-arm64-musl": "4.28.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.28.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.28.1", - "@rollup/rollup-linux-riscv64-gnu": "4.28.1", - "@rollup/rollup-linux-s390x-gnu": "4.28.1", - "@rollup/rollup-linux-x64-gnu": "4.28.1", - "@rollup/rollup-linux-x64-musl": "4.28.1", - "@rollup/rollup-win32-arm64-msvc": "4.28.1", - "@rollup/rollup-win32-ia32-msvc": "4.28.1", - "@rollup/rollup-win32-x64-msvc": "4.28.1", + "@rollup/rollup-android-arm-eabi": "4.34.6", + "@rollup/rollup-android-arm64": "4.34.6", + "@rollup/rollup-darwin-arm64": "4.34.6", + "@rollup/rollup-darwin-x64": "4.34.6", + "@rollup/rollup-freebsd-arm64": "4.34.6", + "@rollup/rollup-freebsd-x64": "4.34.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.6", + "@rollup/rollup-linux-arm-musleabihf": "4.34.6", + "@rollup/rollup-linux-arm64-gnu": "4.34.6", + "@rollup/rollup-linux-arm64-musl": "4.34.6", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.6", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6", + "@rollup/rollup-linux-riscv64-gnu": "4.34.6", + "@rollup/rollup-linux-s390x-gnu": "4.34.6", + "@rollup/rollup-linux-x64-gnu": "4.34.6", + "@rollup/rollup-linux-x64-musl": "4.34.6", + "@rollup/rollup-win32-arm64-msvc": "4.34.6", + "@rollup/rollup-win32-ia32-msvc": "4.34.6", + "@rollup/rollup-win32-x64-msvc": "4.34.6", "fsevents": "~2.3.2" } }, @@ -5453,15 +5476,15 @@ } }, "node_modules/vite": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz", - "integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.0.tgz", + "integrity": "sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.24.2", - "postcss": "^8.4.49", - "rollup": "^4.23.0" + "postcss": "^8.5.1", + "rollup": "^4.30.1" }, "bin": { "vite": "bin/vite.js" @@ -5525,9 +5548,9 @@ } }, "node_modules/vite-node": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.4.tgz", - "integrity": "sha512-7JZKEzcYV2Nx3u6rlvN8qdo3QV7Fxyt6hx+CCKz9fbWxdX5IvUOmTWEAxMrWxaiSf7CKGLJQ5rFu8prb/jBjOA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.5.tgz", + "integrity": "sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==", "dev": true, "license": "MIT", "dependencies": { @@ -5582,19 +5605,19 @@ } }, "node_modules/vitest": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.4.tgz", - "integrity": "sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.5.tgz", + "integrity": "sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "3.0.4", - "@vitest/mocker": "3.0.4", - "@vitest/pretty-format": "^3.0.4", - "@vitest/runner": "3.0.4", - "@vitest/snapshot": "3.0.4", - "@vitest/spy": "3.0.4", - "@vitest/utils": "3.0.4", + "@vitest/expect": "3.0.5", + "@vitest/mocker": "3.0.5", + "@vitest/pretty-format": "^3.0.5", + "@vitest/runner": "3.0.5", + "@vitest/snapshot": "3.0.5", + "@vitest/spy": "3.0.5", + "@vitest/utils": "3.0.5", "chai": "^5.1.2", "debug": "^4.4.0", "expect-type": "^1.1.0", @@ -5606,7 +5629,7 @@ "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.0.4", + "vite-node": "3.0.5", "why-is-node-running": "^2.3.0" }, "bin": { @@ -5622,8 +5645,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.0.4", - "@vitest/ui": "3.0.4", + "@vitest/browser": "3.0.5", + "@vitest/ui": "3.0.5", "happy-dom": "*", "jsdom": "*" }, diff --git a/typescript-sdk/package.json b/typescript-sdk/package.json index 6f32ec82fc..a30da90c4a 100644 --- a/typescript-sdk/package.json +++ b/typescript-sdk/package.json @@ -28,24 +28,24 @@ "devDependencies": { "@apicurio/eslint-config": "0.3.0", "@kiota-community/kiota-gen": "1.0.2", - "@types/node": "22.12.0", + "@types/node": "22.13.1", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", - "@typescript-eslint/eslint-plugin": "8.22.0", - "@typescript-eslint/parser": "8.22.0", + "@typescript-eslint/eslint-plugin": "8.24.0", + "@typescript-eslint/parser": "8.24.0", "@vitejs/plugin-react": "4.3.4", "cross-env": "7.0.3", "eslint": "8.57.1", "eslint-plugin-react-hooks": "5.1.0", - "eslint-plugin-react-refresh": "0.4.18", + "eslint-plugin-react-refresh": "0.4.19", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "7.1.3", + "react-router-dom": "7.1.5", "rimraf": "6.0.1", "typescript": "5.7.3", "uuid": "11.0.5", - "vite": "6.0.11", + "vite": "6.1.0", "vite-plugin-dts": "4.5.0", - "vitest": "3.0.4" + "vitest": "3.0.5" } } diff --git a/ui/tests/package-lock.json b/ui/tests/package-lock.json index 8cba8a42dd..4676e8375f 100644 --- a/ui/tests/package-lock.json +++ b/ui/tests/package-lock.json @@ -10,13 +10,13 @@ "license": "Apache-2.0", "devDependencies": { "@apicurio/eslint-config": "0.3.0", - "@playwright/test": "1.50.0", - "@types/node": "22.12.0", - "@typescript-eslint/eslint-plugin": "8.22.0", - "@typescript-eslint/parser": "8.22.0", + "@playwright/test": "1.50.1", + "@types/node": "22.13.1", + "@typescript-eslint/eslint-plugin": "8.24.0", + "@typescript-eslint/parser": "8.24.0", "eslint": "8.57.1", "eslint-plugin-react-hooks": "5.1.0", - "eslint-plugin-react-refresh": "0.4.18" + "eslint-plugin-react-refresh": "0.4.19" } }, "node_modules/@apicurio/eslint-config": { @@ -309,13 +309,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.50.0.tgz", - "integrity": "sha512-ZGNXbt+d65EGjBORQHuYKj+XhCewlwpnSd/EDuLPZGSiEWmgOJB5RmMCCYGy5aMfTs9wx61RivfDKi8H/hcMvw==", + "version": "1.50.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.50.1.tgz", + "integrity": "sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.50.0" + "playwright": "1.50.1" }, "bin": { "playwright": "cli.js" @@ -325,9 +325,9 @@ } }, "node_modules/@types/node": { - "version": "22.12.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz", - "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", + "version": "22.13.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", + "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", "dev": true, "license": "MIT", "dependencies": { @@ -335,21 +335,21 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.22.0.tgz", - "integrity": "sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.0.tgz", + "integrity": "sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/type-utils": "8.22.0", - "@typescript-eslint/utils": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/type-utils": "8.24.0", + "@typescript-eslint/utils": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -365,10 +365,11 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.12" }, @@ -377,16 +378,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.22.0.tgz", - "integrity": "sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.0.tgz", + "integrity": "sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/typescript-estree": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/typescript-estree": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "debug": "^4.3.4" }, "engines": { @@ -402,14 +403,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.22.0.tgz", - "integrity": "sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.0.tgz", + "integrity": "sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0" + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -420,16 +421,16 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.22.0.tgz", - "integrity": "sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.0.tgz", + "integrity": "sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.22.0", - "@typescript-eslint/utils": "8.22.0", + "@typescript-eslint/typescript-estree": "8.24.0", + "@typescript-eslint/utils": "8.24.0", "debug": "^4.3.4", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -444,9 +445,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -457,9 +458,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.22.0.tgz", - "integrity": "sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.0.tgz", + "integrity": "sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==", "dev": true, "license": "MIT", "engines": { @@ -471,20 +472,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.22.0.tgz", - "integrity": "sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.0.tgz", + "integrity": "sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -498,9 +499,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -511,16 +512,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.22.0.tgz", - "integrity": "sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.0.tgz", + "integrity": "sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/typescript-estree": "8.22.0" + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/typescript-estree": "8.24.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -535,13 +536,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.22.0.tgz", - "integrity": "sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.0.tgz", + "integrity": "sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/types": "8.24.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -865,9 +866,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.18.tgz", - "integrity": "sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw==", + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz", + "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1559,13 +1560,13 @@ } }, "node_modules/playwright": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.50.0.tgz", - "integrity": "sha512-+GinGfGTrd2IfX1TA4N2gNmeIksSb+IAe589ZH+FlmpV3MYTx6+buChGIuDLQwrGNCw2lWibqV50fU510N7S+w==", + "version": "1.50.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.50.1.tgz", + "integrity": "sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.50.0" + "playwright-core": "1.50.1" }, "bin": { "playwright": "cli.js" @@ -1578,9 +1579,9 @@ } }, "node_modules/playwright-core": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.50.0.tgz", - "integrity": "sha512-CXkSSlr4JaZs2tZHI40DsZUN/NIwgaUPsyLuOAaIZp2CyF2sN5MM5NJsyB188lFSSozFxQ5fPT4qM+f0tH/6wQ==", + "version": "1.50.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.50.1.tgz", + "integrity": "sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/ui/tests/package.json b/ui/tests/package.json index de293d1e54..bb5e13bbc2 100644 --- a/ui/tests/package.json +++ b/ui/tests/package.json @@ -12,12 +12,12 @@ }, "devDependencies": { "@apicurio/eslint-config": "0.3.0", - "@playwright/test": "1.50.0", - "@types/node": "22.12.0", - "@typescript-eslint/eslint-plugin": "8.22.0", - "@typescript-eslint/parser": "8.22.0", + "@playwright/test": "1.50.1", + "@types/node": "22.13.1", + "@typescript-eslint/eslint-plugin": "8.24.0", + "@typescript-eslint/parser": "8.24.0", "eslint": "8.57.1", "eslint-plugin-react-hooks": "5.1.0", - "eslint-plugin-react-refresh": "0.4.18" + "eslint-plugin-react-refresh": "0.4.19" } } diff --git a/ui/ui-app/package-lock.json b/ui/ui-app/package-lock.json index b3e59d1429..a22ab62964 100644 --- a/ui/ui-app/package-lock.json +++ b/ui/ui-app/package-lock.json @@ -15,7 +15,7 @@ "dependencies": { "@apicurio/apicurio-registry-sdk": "3.0.7", "@apicurio/common-ui-components": "2.0.7", - "@apicurio/data-models": "1.1.30", + "@apicurio/data-models": "1.1.31", "@microsoft/kiota-abstractions": "1.0.0-preview.79", "@microsoft/kiota-http-fetchlibrary": "1.0.0-preview.79", "@microsoft/kiota-serialization-form": "1.0.0-preview.79", @@ -34,7 +34,7 @@ "pluralize": "8.0.0", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "6.28.2", + "react-router-dom": "6.29.0", "use-resize-observer": "9.1.0", "yaml": "2.7.0" }, @@ -43,20 +43,20 @@ "@kiota-community/kiota-wasm": "0.0.3", "@monaco-editor/react": "4.6.0", "@types/luxon": "3.4.2", - "@types/node": "22.12.0", + "@types/node": "22.13.1", "@types/pluralize": "0.0.33", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", - "@typescript-eslint/eslint-plugin": "8.22.0", - "@typescript-eslint/parser": "8.22.0", - "@vitejs/plugin-react-swc": "3.7.2", + "@typescript-eslint/eslint-plugin": "8.24.0", + "@typescript-eslint/parser": "8.24.0", + "@vitejs/plugin-react-swc": "3.8.0", "copyfiles": "2.4.1", "eslint": "8.57.1", "eslint-plugin-react-hooks": "5.1.0", - "eslint-plugin-react-refresh": "0.4.18", + "eslint-plugin-react-refresh": "0.4.19", "rimraf": "6.0.1", "typescript": "5.7.3", - "vite": "6.0.11", + "vite": "6.1.0", "vite-tsconfig-paths": "5.1.4" } }, @@ -66,11 +66,11 @@ "devDependencies": { "@apicurio/eslint-config": "0.3.0", "@kiota-community/kiota-gen": "1.0.2", - "@types/node": "22.12.0", + "@types/node": "22.13.1", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", - "@typescript-eslint/eslint-plugin": "8.22.0", - "@typescript-eslint/parser": "8.22.0", + "@typescript-eslint/eslint-plugin": "8.23.0", + "@typescript-eslint/parser": "8.23.0", "@vitejs/plugin-react": "4.3.4", "cross-env": "7.0.3", "eslint": "8.57.1", @@ -78,13 +78,13 @@ "eslint-plugin-react-refresh": "0.4.18", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "7.1.3", + "react-router-dom": "7.1.5", "rimraf": "6.0.1", "typescript": "5.7.3", "uuid": "11.0.5", "vite": "6.0.11", "vite-plugin-dts": "4.5.0", - "vitest": "3.0.4" + "vitest": "3.0.5" }, "peerDependencies": { "@microsoft/kiota-abstractions": "1.0.0-preview.79", @@ -117,9 +117,10 @@ } }, "node_modules/@apicurio/data-models": { - "version": "1.1.30", - "resolved": "https://registry.npmjs.org/@apicurio/data-models/-/data-models-1.1.30.tgz", - "integrity": "sha512-6GWSZKRREKiBgqzRfL7QJiTlUaflP0FnFQ02h4W6Jqdtoal247nQRxdyDEPK8s8wmIVJp8MP3zlvWgkLCMOgag==", + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/@apicurio/data-models/-/data-models-1.1.31.tgz", + "integrity": "sha512-dnmLPNwX4j5jY8/I/IjkVaX+75YK4BZ4y2pd2egn/csj7seeYJIeU8SvAEbnceg4WHZZyMICd5H0LC7MQlSdaQ==", + "license": "Apache-2.0", "dependencies": { "core-js": "3.27.2" } @@ -1092,243 +1093,275 @@ "integrity": "sha512-eygdHE7Krta1mijAv/E8RHiKIgysD0eeNTo8EXUYC8/M4e5K6sqpr2p6rQBF8QiRMN8FnbXvZT3K2OQ28pYt9Q==" }, "node_modules/@remix-run/router": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.21.1.tgz", - "integrity": "sha512-KeBYSwohb8g4/wCcnksvKTYlg69O62sQeLynn2YE+5z7JWEj95if27kclW9QqbrlsQ2DINI8fjbV3zyuKfwjKg==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.22.0.tgz", + "integrity": "sha512-MBOl8MeOzpK0HQQQshKB7pABXbmyHizdTpqnrIseTbsv0nAepwC2ENZa1aaBExNQcpLoXmWthhak8SABLzvGPw==", "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.3.tgz", - "integrity": "sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz", + "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.3.tgz", - "integrity": "sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz", + "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.3.tgz", - "integrity": "sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz", + "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.3.tgz", - "integrity": "sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz", + "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.3.tgz", - "integrity": "sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz", + "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.3.tgz", - "integrity": "sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz", + "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.3.tgz", - "integrity": "sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz", + "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.3.tgz", - "integrity": "sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz", + "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.3.tgz", - "integrity": "sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz", + "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.3.tgz", - "integrity": "sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz", + "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz", + "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.3.tgz", - "integrity": "sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz", + "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.3.tgz", - "integrity": "sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz", + "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.3.tgz", - "integrity": "sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz", + "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.3.tgz", - "integrity": "sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", + "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.3.tgz", - "integrity": "sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", + "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.3.tgz", - "integrity": "sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz", + "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.3.tgz", - "integrity": "sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz", + "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.3.tgz", - "integrity": "sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz", + "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -1340,14 +1373,15 @@ "integrity": "sha512-HC5kiXCa7Mxrv7SI7qH4ECfC1H+vFG15COBtX8aUur8EGEWK17RH3QVyBxtyjUXE448O4fGhQHh3kirEvPGWjw==" }, "node_modules/@swc/core": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.42.tgz", - "integrity": "sha512-iQrRk3SKndQZ4ptJv1rzeQSiCYQIhMjiO97QXOlCcCoaazOLKPnLnXzU4Kv0FuBFyYfG2FE94BoR0XI2BN02qw==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.15.tgz", + "integrity": "sha512-/iFeQuNaGdK7mfJbQcObhAhsMqLT7qgMYl7jX2GEIO+VDTejESpzAyKwaMeYXExN8D6e5BRHBCe7M5YlsuzjDA==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.13" + "@swc/types": "^0.1.17" }, "engines": { "node": ">=10" @@ -1357,16 +1391,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.42", - "@swc/core-darwin-x64": "1.7.42", - "@swc/core-linux-arm-gnueabihf": "1.7.42", - "@swc/core-linux-arm64-gnu": "1.7.42", - "@swc/core-linux-arm64-musl": "1.7.42", - "@swc/core-linux-x64-gnu": "1.7.42", - "@swc/core-linux-x64-musl": "1.7.42", - "@swc/core-win32-arm64-msvc": "1.7.42", - "@swc/core-win32-ia32-msvc": "1.7.42", - "@swc/core-win32-x64-msvc": "1.7.42" + "@swc/core-darwin-arm64": "1.10.15", + "@swc/core-darwin-x64": "1.10.15", + "@swc/core-linux-arm-gnueabihf": "1.10.15", + "@swc/core-linux-arm64-gnu": "1.10.15", + "@swc/core-linux-arm64-musl": "1.10.15", + "@swc/core-linux-x64-gnu": "1.10.15", + "@swc/core-linux-x64-musl": "1.10.15", + "@swc/core-win32-arm64-msvc": "1.10.15", + "@swc/core-win32-ia32-msvc": "1.10.15", + "@swc/core-win32-x64-msvc": "1.10.15" }, "peerDependencies": { "@swc/helpers": "*" @@ -1378,13 +1412,14 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.42.tgz", - "integrity": "sha512-fWhaCs2+8GDRIcjExVDEIfbptVrxDqG8oHkESnXgymmvqTWzWei5SOnPNMS8Q+MYsn/b++Y2bDxkcwmq35Bvxg==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.15.tgz", + "integrity": "sha512-zFdZ6/yHqMCPk7OhLFqHy/MQ1EqJhcZMpNHd1gXYT7VRU3FaqvvKETrUlG3VYl65McPC7AhMRfXPyJ0JO/jARQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "darwin" @@ -1394,13 +1429,14 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.42.tgz", - "integrity": "sha512-ZaVHD2bijrlkCyD7NDzLmSK849Jgcx+6DdL4x1dScoz1slJ8GTvLtEu0JOUaaScQwA+cVlhmrmlmi9ssjbRLGQ==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.15.tgz", + "integrity": "sha512-8g4yiQwbr8fxOOjKXdot0dEkE5zgE8uNZudLy/ZyAhiwiZ8pbJ8/wVrDOu6dqbX7FBXAoDnvZ7fwN1jk4C8jdA==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "darwin" @@ -1410,13 +1446,14 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.42.tgz", - "integrity": "sha512-iF0BJj7hVTbY/vmbvyzVTh/0W80+Q4fbOYschdUM3Bsud39TA+lSaPOefOHywkNH58EQ1z3EAxYcJOWNES7GFQ==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.15.tgz", + "integrity": "sha512-rl+eVOltl2+7WXOnvmWBpMgh6aO13G5x0U0g8hjwlmD6ku3Y9iRcThpOhm7IytMEarUp5pQxItNoPq+VUGjVHg==", "cpu": [ "arm" ], "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -1426,13 +1463,14 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.42.tgz", - "integrity": "sha512-xGu8j+DOLYTLkVmsfZPJbNPW1EkiWgSucT0nOlz77bLxImukt/0+HVm2hOwHSKuArQ8C3cjahAMY3b/s4VH2ww==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.15.tgz", + "integrity": "sha512-qxWEQeyAJMWJqjaN4hi58WMpPdt3Tn0biSK9CYRegQtvZWCbewr6v2agtSu5AZ2rudeH6OfCWAMDQQeSgn6PJQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -1442,13 +1480,14 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.42.tgz", - "integrity": "sha512-qtW3JNO7i1yHEko59xxz+jY38+tYmB96JGzj6XzygMbYJYZDYbrOpXQvKbMGNG3YeTDan7Fp2jD0dlKf7NgDPA==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.15.tgz", + "integrity": "sha512-QcELd9/+HjZx0WCxRrKcyKGWTiQ0485kFb5w8waxcSNd0d9Lgk4EFfWWVyvIb5gIHpDQmhrgzI/yRaWQX4YSZQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -1458,13 +1497,14 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.42.tgz", - "integrity": "sha512-F9WY1TN+hhhtiEzZjRQziNLt36M5YprMeOBHjsLVNqwgflzleSI7ulgnlQECS8c8zESaXj3ksGduAoJYtPC1cA==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.15.tgz", + "integrity": "sha512-S1+ZEEn3+a/MiMeQqQypbwTGoBG8/sPoCvpNbk+uValyygT+jSn3U0xVr45FbukpmMB+NhBMqfedMLqKA0QnJA==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -1474,13 +1514,14 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.42.tgz", - "integrity": "sha512-7YMdOaYKLMQ8JGfnmRDwidpLFs/6ka+80zekeM0iCVO48yLrJR36G0QGXzMjKsXI0BPhq+mboZRRENK4JfQnEA==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.15.tgz", + "integrity": "sha512-qW+H9g/2zTJ4jP7NDw4VAALY0ZlNEKzYsEoSj/HKi7k3tYEHjMzsxjfsY9I8WZCft23bBdV3RTCPoxCshaj1CQ==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -1490,13 +1531,14 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.42.tgz", - "integrity": "sha512-C5CYWaIZEyqPl5W/EwcJ/mLBJFHVoUEa/IwWi0b4q2fCXcSCktQGwKXOQ+d67GneiZoiq0HasgcdMmMpGS9YRQ==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.15.tgz", + "integrity": "sha512-AhRB11aA6LxjIqut+mg7qsu/7soQDmbK6MKR9nP3hgBszpqtXbRba58lr24xIbBCMr+dpo6kgEapWt+t5Po6Zg==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -1506,13 +1548,14 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.42.tgz", - "integrity": "sha512-3j47seZ5pO62mbrqvPe1iwhe2BXnM5q7iB+n2xgA38PCGYt0mnaJafqmpCXm/uYZOCMqSNynaoOWCMMZm4sqtA==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.15.tgz", + "integrity": "sha512-UGdh430TQwbDn6KjgvRTg1fO022sbQ4yCCHUev0+5B8uoBwi9a89qAz3emy2m56C8TXxUoihW9Y9OMfaRwPXUw==", "cpu": [ "ia32" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -1522,13 +1565,14 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.42.tgz", - "integrity": "sha512-FXl9MdeUogZLGDcLr6QIRdDVkpG0dkN4MLM4dwQ5kcAk+XfKPrQibX6M2kcfhsCx+jtBqtK7hRFReRXPWJZGbA==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.15.tgz", + "integrity": "sha512-XJzBCqO1m929qbJsOG7FZXQWX26TnEoMctS3QjuCoyBmkHxxQmZsy78KjMes1aomTcKHCyFYgrRGWgVmk7tT4Q==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -1541,13 +1585,15 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@swc/types": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.13.tgz", - "integrity": "sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==", + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", + "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" } @@ -1565,9 +1611,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.12.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz", - "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", + "version": "22.13.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", + "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", "dev": true, "license": "MIT", "dependencies": { @@ -1606,21 +1652,21 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.22.0.tgz", - "integrity": "sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.0.tgz", + "integrity": "sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/type-utils": "8.22.0", - "@typescript-eslint/utils": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/type-utils": "8.24.0", + "@typescript-eslint/utils": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1636,9 +1682,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -1649,16 +1695,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.22.0.tgz", - "integrity": "sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.0.tgz", + "integrity": "sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/typescript-estree": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/typescript-estree": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "debug": "^4.3.4" }, "engines": { @@ -1674,14 +1720,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.22.0.tgz", - "integrity": "sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.0.tgz", + "integrity": "sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0" + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1692,16 +1738,16 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.22.0.tgz", - "integrity": "sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.0.tgz", + "integrity": "sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.22.0", - "@typescript-eslint/utils": "8.22.0", + "@typescript-eslint/typescript-estree": "8.24.0", + "@typescript-eslint/utils": "8.24.0", "debug": "^4.3.4", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1716,9 +1762,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -1729,9 +1775,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.22.0.tgz", - "integrity": "sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.0.tgz", + "integrity": "sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==", "dev": true, "license": "MIT", "engines": { @@ -1743,20 +1789,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.22.0.tgz", - "integrity": "sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.0.tgz", + "integrity": "sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1770,9 +1816,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -1783,16 +1829,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.22.0.tgz", - "integrity": "sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.0.tgz", + "integrity": "sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/typescript-estree": "8.22.0" + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/typescript-estree": "8.24.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1807,13 +1853,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.22.0.tgz", - "integrity": "sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.0.tgz", + "integrity": "sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/types": "8.24.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -1844,12 +1890,13 @@ "dev": true }, "node_modules/@vitejs/plugin-react-swc": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.2.tgz", - "integrity": "sha512-y0byko2b2tSVVf5Gpng1eEhX1OvPC7x8yns1Fx8jDzlJp4LS6CMkCPfLw47cjyoMrshQDoQw4qcgjsU9VvlCew==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.8.0.tgz", + "integrity": "sha512-T4sHPvS+DIqDP51ifPqa9XIRAz/kIvIi8oXcnOZZgHmMotgmmdxe/DD5tMFlt5nuIRzT0/QuiwmKlH0503Aapw==", "dev": true, + "license": "MIT", "dependencies": { - "@swc/core": "^1.7.26" + "@swc/core": "^1.10.15" }, "peerDependencies": { "vite": "^4 || ^5 || ^6" @@ -2368,9 +2415,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.18.tgz", - "integrity": "sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw==", + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz", + "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3383,9 +3430,9 @@ } }, "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", "dev": true, "funding": [ { @@ -3401,8 +3448,9 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", + "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -3514,12 +3562,12 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-router": { - "version": "6.28.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.28.2.tgz", - "integrity": "sha512-BgFY7+wEGVjHCiqaj2XiUBQ1kkzfg6UoKYwEe0wv+FF+HNPCxtS/MVPvLAPH++EsuCMReZl9RYVGqcHLk5ms3A==", + "version": "6.29.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.29.0.tgz", + "integrity": "sha512-DXZJoE0q+KyeVw75Ck6GkPxFak63C4fGqZGNijnWgzB/HzSP1ZfTlBj5COaGWwhrMQ/R8bXiq5Ooy4KG+ReyjQ==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.21.1" + "@remix-run/router": "1.22.0" }, "engines": { "node": ">=14.0.0" @@ -3529,13 +3577,13 @@ } }, "node_modules/react-router-dom": { - "version": "6.28.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.28.2.tgz", - "integrity": "sha512-O81EWqNJWqvlN/a7eTudAdQm0TbI7hw+WIi7OwwMcTn5JMyZ0ibTFNGz+t+Lju0df4LcqowCegcrK22lB1q9Kw==", + "version": "6.29.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.29.0.tgz", + "integrity": "sha512-pkEbJPATRJ2iotK+wUwHfy0xs2T59YPEN8BQxVCPeBZvK7kfPESRc/nyxzdcxR17hXgUPYx2whMwl+eo9cUdnQ==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.21.1", - "react-router": "6.28.2" + "@remix-run/router": "1.22.0", + "react-router": "6.29.0" }, "engines": { "node": ">=14.0.0" @@ -3643,10 +3691,11 @@ } }, "node_modules/rollup": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.3.tgz", - "integrity": "sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.6.tgz", + "integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.6" }, @@ -3658,24 +3707,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.3", - "@rollup/rollup-android-arm64": "4.24.3", - "@rollup/rollup-darwin-arm64": "4.24.3", - "@rollup/rollup-darwin-x64": "4.24.3", - "@rollup/rollup-freebsd-arm64": "4.24.3", - "@rollup/rollup-freebsd-x64": "4.24.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.3", - "@rollup/rollup-linux-arm-musleabihf": "4.24.3", - "@rollup/rollup-linux-arm64-gnu": "4.24.3", - "@rollup/rollup-linux-arm64-musl": "4.24.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.3", - "@rollup/rollup-linux-riscv64-gnu": "4.24.3", - "@rollup/rollup-linux-s390x-gnu": "4.24.3", - "@rollup/rollup-linux-x64-gnu": "4.24.3", - "@rollup/rollup-linux-x64-musl": "4.24.3", - "@rollup/rollup-win32-arm64-msvc": "4.24.3", - "@rollup/rollup-win32-ia32-msvc": "4.24.3", - "@rollup/rollup-win32-x64-msvc": "4.24.3", + "@rollup/rollup-android-arm-eabi": "4.34.6", + "@rollup/rollup-android-arm64": "4.34.6", + "@rollup/rollup-darwin-arm64": "4.34.6", + "@rollup/rollup-darwin-x64": "4.34.6", + "@rollup/rollup-freebsd-arm64": "4.34.6", + "@rollup/rollup-freebsd-x64": "4.34.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.6", + "@rollup/rollup-linux-arm-musleabihf": "4.34.6", + "@rollup/rollup-linux-arm64-gnu": "4.34.6", + "@rollup/rollup-linux-arm64-musl": "4.34.6", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.6", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6", + "@rollup/rollup-linux-riscv64-gnu": "4.34.6", + "@rollup/rollup-linux-s390x-gnu": "4.34.6", + "@rollup/rollup-linux-x64-gnu": "4.34.6", + "@rollup/rollup-linux-x64-musl": "4.34.6", + "@rollup/rollup-win32-arm64-msvc": "4.34.6", + "@rollup/rollup-win32-ia32-msvc": "4.34.6", + "@rollup/rollup-win32-x64-msvc": "4.34.6", "fsevents": "~2.3.2" } }, @@ -4066,15 +4116,15 @@ } }, "node_modules/vite": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz", - "integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.0.tgz", + "integrity": "sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.24.2", - "postcss": "^8.4.49", - "rollup": "^4.23.0" + "postcss": "^8.5.1", + "rollup": "^4.30.1" }, "bin": { "vite": "bin/vite.js" diff --git a/ui/ui-app/package.json b/ui/ui-app/package.json index 99d32c4b91..a0275e1cb7 100644 --- a/ui/ui-app/package.json +++ b/ui/ui-app/package.json @@ -20,26 +20,26 @@ "@kiota-community/kiota-wasm": "0.0.3", "@monaco-editor/react": "4.6.0", "@types/luxon": "3.4.2", - "@types/node": "22.12.0", + "@types/node": "22.13.1", "@types/pluralize": "0.0.33", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", - "@typescript-eslint/eslint-plugin": "8.22.0", - "@typescript-eslint/parser": "8.22.0", - "@vitejs/plugin-react-swc": "3.7.2", + "@typescript-eslint/eslint-plugin": "8.24.0", + "@typescript-eslint/parser": "8.24.0", + "@vitejs/plugin-react-swc": "3.8.0", "copyfiles": "2.4.1", "eslint": "8.57.1", "eslint-plugin-react-hooks": "5.1.0", - "eslint-plugin-react-refresh": "0.4.18", + "eslint-plugin-react-refresh": "0.4.19", "rimraf": "6.0.1", "typescript": "5.7.3", - "vite": "6.0.11", + "vite": "6.1.0", "vite-tsconfig-paths": "5.1.4" }, "dependencies": { "@apicurio/apicurio-registry-sdk": "3.0.7", "@apicurio/common-ui-components": "2.0.7", - "@apicurio/data-models": "1.1.30", + "@apicurio/data-models": "1.1.31", "@microsoft/kiota-abstractions": "1.0.0-preview.79", "@microsoft/kiota-http-fetchlibrary": "1.0.0-preview.79", "@microsoft/kiota-serialization-form": "1.0.0-preview.79", @@ -58,7 +58,7 @@ "pluralize": "8.0.0", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "6.28.2", + "react-router-dom": "6.29.0", "use-resize-observer": "9.1.0", "yaml": "2.7.0" } diff --git a/ui/ui-docs/package-lock.json b/ui/ui-docs/package-lock.json index 8306ec1f13..5d7efc04bd 100644 --- a/ui/ui-docs/package-lock.json +++ b/ui/ui-docs/package-lock.json @@ -10,25 +10,25 @@ "license": "Apache-2.0", "dependencies": { "core-js": "3.40.0", - "mobx": "6.13.5", + "mobx": "6.13.6", "react": "18.3.1", "react-dom": "18.3.1", - "redoc": "2.3.0", - "styled-components": "6.1.14" + "redoc": "2.4.0", + "styled-components": "6.1.15" }, "devDependencies": { "@apicurio/eslint-config": "0.3.0", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", - "@typescript-eslint/eslint-plugin": "8.22.0", - "@typescript-eslint/parser": "8.22.0", - "@vitejs/plugin-react-swc": "3.7.2", + "@typescript-eslint/eslint-plugin": "8.24.0", + "@typescript-eslint/parser": "8.24.0", + "@vitejs/plugin-react-swc": "3.8.0", "eslint": "8.57.1", "eslint-plugin-react-hooks": "5.1.0", - "eslint-plugin-react-refresh": "0.4.18", + "eslint-plugin-react-refresh": "0.4.19", "rimraf": "6.0.1", "typescript": "5.7.3", - "vite": "6.0.11", + "vite": "6.1.0", "vite-tsconfig-paths": "5.1.4" } }, @@ -858,248 +858,281 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.3.tgz", - "integrity": "sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz", + "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.3.tgz", - "integrity": "sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz", + "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.3.tgz", - "integrity": "sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz", + "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.3.tgz", - "integrity": "sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz", + "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.3.tgz", - "integrity": "sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz", + "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.3.tgz", - "integrity": "sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz", + "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.3.tgz", - "integrity": "sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz", + "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.3.tgz", - "integrity": "sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz", + "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.3.tgz", - "integrity": "sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz", + "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.3.tgz", - "integrity": "sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz", + "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz", + "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.3.tgz", - "integrity": "sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz", + "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.3.tgz", - "integrity": "sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz", + "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.3.tgz", - "integrity": "sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz", + "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.3.tgz", - "integrity": "sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", + "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.3.tgz", - "integrity": "sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", + "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.3.tgz", - "integrity": "sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz", + "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.3.tgz", - "integrity": "sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz", + "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.3.tgz", - "integrity": "sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz", + "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@swc/core": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.42.tgz", - "integrity": "sha512-iQrRk3SKndQZ4ptJv1rzeQSiCYQIhMjiO97QXOlCcCoaazOLKPnLnXzU4Kv0FuBFyYfG2FE94BoR0XI2BN02qw==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.15.tgz", + "integrity": "sha512-/iFeQuNaGdK7mfJbQcObhAhsMqLT7qgMYl7jX2GEIO+VDTejESpzAyKwaMeYXExN8D6e5BRHBCe7M5YlsuzjDA==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.13" + "@swc/types": "^0.1.17" }, "engines": { "node": ">=10" @@ -1109,16 +1142,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.42", - "@swc/core-darwin-x64": "1.7.42", - "@swc/core-linux-arm-gnueabihf": "1.7.42", - "@swc/core-linux-arm64-gnu": "1.7.42", - "@swc/core-linux-arm64-musl": "1.7.42", - "@swc/core-linux-x64-gnu": "1.7.42", - "@swc/core-linux-x64-musl": "1.7.42", - "@swc/core-win32-arm64-msvc": "1.7.42", - "@swc/core-win32-ia32-msvc": "1.7.42", - "@swc/core-win32-x64-msvc": "1.7.42" + "@swc/core-darwin-arm64": "1.10.15", + "@swc/core-darwin-x64": "1.10.15", + "@swc/core-linux-arm-gnueabihf": "1.10.15", + "@swc/core-linux-arm64-gnu": "1.10.15", + "@swc/core-linux-arm64-musl": "1.10.15", + "@swc/core-linux-x64-gnu": "1.10.15", + "@swc/core-linux-x64-musl": "1.10.15", + "@swc/core-win32-arm64-msvc": "1.10.15", + "@swc/core-win32-ia32-msvc": "1.10.15", + "@swc/core-win32-x64-msvc": "1.10.15" }, "peerDependencies": { "@swc/helpers": "*" @@ -1130,13 +1163,14 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.42.tgz", - "integrity": "sha512-fWhaCs2+8GDRIcjExVDEIfbptVrxDqG8oHkESnXgymmvqTWzWei5SOnPNMS8Q+MYsn/b++Y2bDxkcwmq35Bvxg==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.15.tgz", + "integrity": "sha512-zFdZ6/yHqMCPk7OhLFqHy/MQ1EqJhcZMpNHd1gXYT7VRU3FaqvvKETrUlG3VYl65McPC7AhMRfXPyJ0JO/jARQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "darwin" @@ -1146,13 +1180,14 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.42.tgz", - "integrity": "sha512-ZaVHD2bijrlkCyD7NDzLmSK849Jgcx+6DdL4x1dScoz1slJ8GTvLtEu0JOUaaScQwA+cVlhmrmlmi9ssjbRLGQ==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.15.tgz", + "integrity": "sha512-8g4yiQwbr8fxOOjKXdot0dEkE5zgE8uNZudLy/ZyAhiwiZ8pbJ8/wVrDOu6dqbX7FBXAoDnvZ7fwN1jk4C8jdA==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "darwin" @@ -1162,13 +1197,14 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.42.tgz", - "integrity": "sha512-iF0BJj7hVTbY/vmbvyzVTh/0W80+Q4fbOYschdUM3Bsud39TA+lSaPOefOHywkNH58EQ1z3EAxYcJOWNES7GFQ==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.15.tgz", + "integrity": "sha512-rl+eVOltl2+7WXOnvmWBpMgh6aO13G5x0U0g8hjwlmD6ku3Y9iRcThpOhm7IytMEarUp5pQxItNoPq+VUGjVHg==", "cpu": [ "arm" ], "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -1178,13 +1214,14 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.42.tgz", - "integrity": "sha512-xGu8j+DOLYTLkVmsfZPJbNPW1EkiWgSucT0nOlz77bLxImukt/0+HVm2hOwHSKuArQ8C3cjahAMY3b/s4VH2ww==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.15.tgz", + "integrity": "sha512-qxWEQeyAJMWJqjaN4hi58WMpPdt3Tn0biSK9CYRegQtvZWCbewr6v2agtSu5AZ2rudeH6OfCWAMDQQeSgn6PJQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -1194,13 +1231,14 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.42.tgz", - "integrity": "sha512-qtW3JNO7i1yHEko59xxz+jY38+tYmB96JGzj6XzygMbYJYZDYbrOpXQvKbMGNG3YeTDan7Fp2jD0dlKf7NgDPA==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.15.tgz", + "integrity": "sha512-QcELd9/+HjZx0WCxRrKcyKGWTiQ0485kFb5w8waxcSNd0d9Lgk4EFfWWVyvIb5gIHpDQmhrgzI/yRaWQX4YSZQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -1210,13 +1248,14 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.42.tgz", - "integrity": "sha512-F9WY1TN+hhhtiEzZjRQziNLt36M5YprMeOBHjsLVNqwgflzleSI7ulgnlQECS8c8zESaXj3ksGduAoJYtPC1cA==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.15.tgz", + "integrity": "sha512-S1+ZEEn3+a/MiMeQqQypbwTGoBG8/sPoCvpNbk+uValyygT+jSn3U0xVr45FbukpmMB+NhBMqfedMLqKA0QnJA==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -1226,13 +1265,14 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.42.tgz", - "integrity": "sha512-7YMdOaYKLMQ8JGfnmRDwidpLFs/6ka+80zekeM0iCVO48yLrJR36G0QGXzMjKsXI0BPhq+mboZRRENK4JfQnEA==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.15.tgz", + "integrity": "sha512-qW+H9g/2zTJ4jP7NDw4VAALY0ZlNEKzYsEoSj/HKi7k3tYEHjMzsxjfsY9I8WZCft23bBdV3RTCPoxCshaj1CQ==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -1242,13 +1282,14 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.42.tgz", - "integrity": "sha512-C5CYWaIZEyqPl5W/EwcJ/mLBJFHVoUEa/IwWi0b4q2fCXcSCktQGwKXOQ+d67GneiZoiq0HasgcdMmMpGS9YRQ==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.15.tgz", + "integrity": "sha512-AhRB11aA6LxjIqut+mg7qsu/7soQDmbK6MKR9nP3hgBszpqtXbRba58lr24xIbBCMr+dpo6kgEapWt+t5Po6Zg==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -1258,13 +1299,14 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.42.tgz", - "integrity": "sha512-3j47seZ5pO62mbrqvPe1iwhe2BXnM5q7iB+n2xgA38PCGYt0mnaJafqmpCXm/uYZOCMqSNynaoOWCMMZm4sqtA==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.15.tgz", + "integrity": "sha512-UGdh430TQwbDn6KjgvRTg1fO022sbQ4yCCHUev0+5B8uoBwi9a89qAz3emy2m56C8TXxUoihW9Y9OMfaRwPXUw==", "cpu": [ "ia32" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -1274,13 +1316,14 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.7.42", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.42.tgz", - "integrity": "sha512-FXl9MdeUogZLGDcLr6QIRdDVkpG0dkN4MLM4dwQ5kcAk+XfKPrQibX6M2kcfhsCx+jtBqtK7hRFReRXPWJZGbA==", + "version": "1.10.15", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.15.tgz", + "integrity": "sha512-XJzBCqO1m929qbJsOG7FZXQWX26TnEoMctS3QjuCoyBmkHxxQmZsy78KjMes1aomTcKHCyFYgrRGWgVmk7tT4Q==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -1293,13 +1336,15 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@swc/types": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.13.tgz", - "integrity": "sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==", + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", + "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" } @@ -1346,21 +1391,21 @@ "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.22.0.tgz", - "integrity": "sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.0.tgz", + "integrity": "sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/type-utils": "8.22.0", - "@typescript-eslint/utils": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/type-utils": "8.24.0", + "@typescript-eslint/utils": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1376,9 +1421,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -1389,16 +1434,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.22.0.tgz", - "integrity": "sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.0.tgz", + "integrity": "sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/typescript-estree": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/typescript-estree": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "debug": "^4.3.4" }, "engines": { @@ -1414,14 +1459,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.22.0.tgz", - "integrity": "sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.0.tgz", + "integrity": "sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0" + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1432,16 +1477,16 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.22.0.tgz", - "integrity": "sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.0.tgz", + "integrity": "sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.22.0", - "@typescript-eslint/utils": "8.22.0", + "@typescript-eslint/typescript-estree": "8.24.0", + "@typescript-eslint/utils": "8.24.0", "debug": "^4.3.4", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1456,9 +1501,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -1469,9 +1514,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.22.0.tgz", - "integrity": "sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.0.tgz", + "integrity": "sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==", "dev": true, "license": "MIT", "engines": { @@ -1483,20 +1528,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.22.0.tgz", - "integrity": "sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.0.tgz", + "integrity": "sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/visitor-keys": "8.22.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/visitor-keys": "8.24.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.0.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1510,9 +1555,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", + "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -1523,16 +1568,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.22.0.tgz", - "integrity": "sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.0.tgz", + "integrity": "sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.22.0", - "@typescript-eslint/types": "8.22.0", - "@typescript-eslint/typescript-estree": "8.22.0" + "@typescript-eslint/scope-manager": "8.24.0", + "@typescript-eslint/types": "8.24.0", + "@typescript-eslint/typescript-estree": "8.24.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1547,13 +1592,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.22.0.tgz", - "integrity": "sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==", + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.0.tgz", + "integrity": "sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.22.0", + "@typescript-eslint/types": "8.24.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -1584,12 +1629,13 @@ "dev": true }, "node_modules/@vitejs/plugin-react-swc": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.2.tgz", - "integrity": "sha512-y0byko2b2tSVVf5Gpng1eEhX1OvPC7x8yns1Fx8jDzlJp4LS6CMkCPfLw47cjyoMrshQDoQw4qcgjsU9VvlCew==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.8.0.tgz", + "integrity": "sha512-T4sHPvS+DIqDP51ifPqa9XIRAz/kIvIi8oXcnOZZgHmMotgmmdxe/DD5tMFlt5nuIRzT0/QuiwmKlH0503Aapw==", "dev": true, + "license": "MIT", "dependencies": { - "@swc/core": "^1.7.26" + "@swc/core": "^1.10.15" }, "peerDependencies": { "vite": "^4 || ^5 || ^6" @@ -2079,9 +2125,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.18.tgz", - "integrity": "sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw==", + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz", + "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2857,9 +2903,10 @@ } }, "node_modules/mobx": { - "version": "6.13.5", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.13.5.tgz", - "integrity": "sha512-/HTWzW2s8J1Gqt+WmUj5Y0mddZk+LInejADc79NJadrWla3rHzmRHki/mnEUH1AvOmbNTZ1BRbKxr8DSgfdjMA==", + "version": "6.13.6", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.13.6.tgz", + "integrity": "sha512-r19KNV0uBN4b+ER8Z0gA4y+MzDYIQ2SvOmn3fUrqPnWXdQfakd9yfbPBDBF/p5I+bd3N5Rk1fHONIvMay+bJGA==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" @@ -3259,9 +3306,10 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -3276,10 +3324,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3387,9 +3436,9 @@ } }, "node_modules/redoc": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.3.0.tgz", - "integrity": "sha512-v9+8ic/jF3CbrBR/N78BDYDkngszEjOfoBWIa9ES4J0c3hysWLIibn5UeBh9SW6EREoNuKeuIZDRlBKdKnBXwQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.4.0.tgz", + "integrity": "sha512-rFlfzFVWS9XJ6aYAs/bHnLhHP5FQEhwAHDBVgwb9L2FqDQ8Hu8rQ1G84iwaWXxZfPP9UWn7JdWkxI6MXr2ZDjw==", "license": "MIT", "dependencies": { "@redocly/openapi-core": "^1.4.0", @@ -3421,8 +3470,8 @@ "peerDependencies": { "core-js": "^3.1.4", "mobx": "^6.0.4", - "react": "^16.8.4 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0", + "react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", "styled-components": "^4.1.1 || ^5.1.1 || ^6.0.5" } }, @@ -3494,10 +3543,11 @@ } }, "node_modules/rollup": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.3.tgz", - "integrity": "sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==", + "version": "4.34.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.6.tgz", + "integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.6" }, @@ -3509,24 +3559,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.3", - "@rollup/rollup-android-arm64": "4.24.3", - "@rollup/rollup-darwin-arm64": "4.24.3", - "@rollup/rollup-darwin-x64": "4.24.3", - "@rollup/rollup-freebsd-arm64": "4.24.3", - "@rollup/rollup-freebsd-x64": "4.24.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.3", - "@rollup/rollup-linux-arm-musleabihf": "4.24.3", - "@rollup/rollup-linux-arm64-gnu": "4.24.3", - "@rollup/rollup-linux-arm64-musl": "4.24.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.3", - "@rollup/rollup-linux-riscv64-gnu": "4.24.3", - "@rollup/rollup-linux-s390x-gnu": "4.24.3", - "@rollup/rollup-linux-x64-gnu": "4.24.3", - "@rollup/rollup-linux-x64-musl": "4.24.3", - "@rollup/rollup-win32-arm64-msvc": "4.24.3", - "@rollup/rollup-win32-ia32-msvc": "4.24.3", - "@rollup/rollup-win32-x64-msvc": "4.24.3", + "@rollup/rollup-android-arm-eabi": "4.34.6", + "@rollup/rollup-android-arm64": "4.34.6", + "@rollup/rollup-darwin-arm64": "4.34.6", + "@rollup/rollup-darwin-x64": "4.34.6", + "@rollup/rollup-freebsd-arm64": "4.34.6", + "@rollup/rollup-freebsd-x64": "4.34.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.6", + "@rollup/rollup-linux-arm-musleabihf": "4.34.6", + "@rollup/rollup-linux-arm64-gnu": "4.34.6", + "@rollup/rollup-linux-arm64-musl": "4.34.6", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.6", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6", + "@rollup/rollup-linux-riscv64-gnu": "4.34.6", + "@rollup/rollup-linux-s390x-gnu": "4.34.6", + "@rollup/rollup-linux-x64-gnu": "4.34.6", + "@rollup/rollup-linux-x64-musl": "4.34.6", + "@rollup/rollup-win32-arm64-msvc": "4.34.6", + "@rollup/rollup-win32-ia32-msvc": "4.34.6", + "@rollup/rollup-win32-x64-msvc": "4.34.6", "fsevents": "~2.3.2" } }, @@ -3791,9 +3842,9 @@ } }, "node_modules/styled-components": { - "version": "6.1.14", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.14.tgz", - "integrity": "sha512-KtfwhU5jw7UoxdM0g6XU9VZQFV4do+KrM8idiVCH5h4v49W+3p3yMe0icYwJgZQZepa5DbH04Qv8P0/RdcLcgg==", + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.15.tgz", + "integrity": "sha512-PpOTEztW87Ua2xbmLa7yssjNyUF9vE7wdldRfn1I2E6RTkqknkBYpj771OxM/xrvRGinLy2oysa7GOd7NcZZIA==", "license": "MIT", "dependencies": { "@emotion/is-prop-valid": "1.2.2", @@ -3801,7 +3852,7 @@ "@types/stylis": "4.2.5", "css-to-react-native": "3.2.0", "csstype": "3.1.3", - "postcss": "8.4.38", + "postcss": "8.4.49", "shallowequal": "1.1.0", "stylis": "4.3.2", "tslib": "2.6.2" @@ -3818,6 +3869,34 @@ "react-dom": ">= 16.8.0" } }, + "node_modules/styled-components/node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/stylis": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", @@ -3995,15 +4074,15 @@ } }, "node_modules/vite": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz", - "integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.0.tgz", + "integrity": "sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.24.2", - "postcss": "^8.4.49", - "rollup": "^4.23.0" + "postcss": "^8.5.1", + "rollup": "^4.30.1" }, "bin": { "vite": "bin/vite.js" @@ -4085,34 +4164,6 @@ } } }, - "node_modules/vite/node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/ui/ui-docs/package.json b/ui/ui-docs/package.json index 8bdfd248fd..30bdc8ac82 100644 --- a/ui/ui-docs/package.json +++ b/ui/ui-docs/package.json @@ -15,23 +15,23 @@ "@apicurio/eslint-config": "0.3.0", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", - "@typescript-eslint/eslint-plugin": "8.22.0", - "@typescript-eslint/parser": "8.22.0", - "@vitejs/plugin-react-swc": "3.7.2", + "@typescript-eslint/eslint-plugin": "8.24.0", + "@typescript-eslint/parser": "8.24.0", + "@vitejs/plugin-react-swc": "3.8.0", "eslint": "8.57.1", "eslint-plugin-react-hooks": "5.1.0", - "eslint-plugin-react-refresh": "0.4.18", + "eslint-plugin-react-refresh": "0.4.19", "rimraf": "6.0.1", "typescript": "5.7.3", - "vite": "6.0.11", + "vite": "6.1.0", "vite-tsconfig-paths": "5.1.4" }, "dependencies": { "react": "18.3.1", "react-dom": "18.3.1", - "mobx": "6.13.5", - "styled-components": "6.1.14", + "mobx": "6.13.6", + "styled-components": "6.1.15", "core-js": "3.40.0", - "redoc": "2.3.0" + "redoc": "2.4.0" } }