diff --git a/.docker-hub/print/Dockerfile b/.docker-hub/print/Dockerfile index 3a6b8126c5..e6944af48c 100644 --- a/.docker-hub/print/Dockerfile +++ b/.docker-hub/print/Dockerfile @@ -1,5 +1,5 @@ # build stage -FROM node:22.5.1 AS build-stage +FROM node:22.9.0 AS build-stage ARG SENTRY_AUTH_TOKEN ARG SENTRY_ORG ARG SENTRY_PRINT_PROJECT @@ -22,7 +22,7 @@ COPY print . RUN npm run build # production stage -FROM node:22.5.1 AS production-stage +FROM node:22.9.0 AS production-stage WORKDIR /app COPY --from=build-stage /app/.output ./.output diff --git a/.docker-hub/varnish/Dockerfile b/.docker-hub/varnish/Dockerfile index e69fd49102..24ef0280cf 100644 --- a/.docker-hub/varnish/Dockerfile +++ b/.docker-hub/varnish/Dockerfile @@ -1,4 +1,4 @@ -ARG VERSION=7.5.0 +ARG VERSION=7.6.0 FROM varnish:${VERSION} diff --git a/.github/workflows/check-dependencies.yml b/.github/workflows/check-dependencies.yml index 9f8d164391..fa5e01cecb 100644 --- a/.github/workflows/check-dependencies.yml +++ b/.github/workflows/check-dependencies.yml @@ -26,7 +26,7 @@ jobs: - uses: shivammathur/setup-php@v2 with: - php-version: '8.3.10' + php-version: '8.3.11' tools: composer:2.7.0 coverage: xdebug diff --git a/.github/workflows/continuous-integration-optional.yml b/.github/workflows/continuous-integration-optional.yml index cee9c8ac8f..9ecbef7e3b 100644 --- a/.github/workflows/continuous-integration-optional.yml +++ b/.github/workflows/continuous-integration-optional.yml @@ -21,7 +21,7 @@ jobs: - uses: shivammathur/setup-php@v2 with: - php-version: '8.3.10' + php-version: '8.3.11' tools: composer:2.7.0 coverage: xdebug @@ -36,7 +36,7 @@ jobs: - uses: shivammathur/setup-php@v2 with: - php-version: '8.3.10' + php-version: '8.3.11' tools: composer:2.7.0 coverage: xdebug @@ -66,7 +66,7 @@ jobs: - uses: shivammathur/setup-php@v2 with: - php-version: '8.3.10' + php-version: '8.3.11' tools: composer:2.7.0 coverage: xdebug @@ -92,7 +92,7 @@ jobs: name: 'API: validate migrations' runs-on: ubuntu-latest env: - TEST_DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3test?serverVersion=15&charset=utf8 + DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3?serverVersion=15&charset=utf8 services: postgres: @@ -114,7 +114,7 @@ jobs: - uses: shivammathur/setup-php@v2 with: - php-version: '8.3.10' + php-version: '8.3.11' tools: composer:2.7.0 coverage: xdebug diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 63eeb5213e..b7e3f8558e 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -75,7 +75,7 @@ jobs: - uses: shivammathur/setup-php@v2 with: - php-version: '8.3.10' + php-version: '8.3.11' tools: composer:2.7.0 coverage: none @@ -105,7 +105,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '22.5.1' + node-version: '22.9.0' - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 with: @@ -134,7 +134,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '22.5.1' + node-version: '22.9.0' - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 with: @@ -163,7 +163,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '22.5.1' + node-version: '22.9.0' - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 with: @@ -195,7 +195,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '22.5.1' + node-version: '22.9.0' - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 with: @@ -223,7 +223,7 @@ jobs: - api-check-needed if: needs.api-check-needed.outputs.should_skip != 'true' env: - TEST_DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3test?serverVersion=15&charset=utf8 + DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3?serverVersion=15&charset=utf8 services: postgres: @@ -245,7 +245,7 @@ jobs: - uses: shivammathur/setup-php@v2 with: - php-version: '8.3.10' + php-version: '8.3.11' extensions: intl-73.1 tools: composer:2.7.0 coverage: pcov @@ -279,7 +279,35 @@ jobs: - run: php bin/console doctrine:migrations:migrate --no-interaction -e test working-directory: api - - run: composer test + - run: | + php bin/console doctrine:database:create --no-interaction -e test + php bin/console doctrine:migrations:migrate --no-interaction -e test + env: + TEST_TOKEN: 1 + working-directory: api + + - run: | + php bin/console doctrine:database:create --no-interaction -e test + php bin/console doctrine:migrations:migrate --no-interaction -e test + env: + TEST_TOKEN: 2 + working-directory: api + + - run: | + php bin/console doctrine:database:create --no-interaction -e test + php bin/console doctrine:migrations:migrate --no-interaction -e test + env: + TEST_TOKEN: 3 + working-directory: api + + - run: | + php bin/console doctrine:database:create --no-interaction -e test + php bin/console doctrine:migrations:migrate --no-interaction -e test + env: + TEST_TOKEN: 4 + working-directory: api + + - run: composer paratest -- -p 4 working-directory: api env: PERFORMANCE_TEST_DEBUG_OUTPUT: ${{ vars.PERFORMANCE_TEST_DEBUG_OUTPUT }} @@ -303,7 +331,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '22.5.1' + node-version: '22.9.0' - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 with: @@ -330,7 +358,7 @@ jobs: - name: replace paths in lcov.info that they reflect repo path run: | sed -i "s|src/|frontend/src/|g" frontend/data/coverage/lcov.info - + - name: Coveralls Parallel uses: coverallsapp/github-action@v2 with: @@ -346,7 +374,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '22.5.1' + node-version: '22.9.0' - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 with: @@ -385,7 +413,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '22.5.1' + node-version: '22.9.0' - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4 with: @@ -442,7 +470,7 @@ jobs: parallel-finished: true carryforward: "api,frontend,print,pdf" fail-on-error: false - + workflow-success: name: workflow-success needs: diff --git a/.github/workflows/pull-request-rules.yml b/.github/workflows/pull-request-rules.yml index 7a87f54a5f..7aba4abef9 100644 --- a/.github/workflows/pull-request-rules.yml +++ b/.github/workflows/pull-request-rules.yml @@ -13,7 +13,7 @@ jobs: name: No "Meeting Discuss" label runs-on: ubuntu-latest steps: - - uses: mheap/github-action-required-labels@5847eef68201219cf0a4643ea7be61e77837bbce # v5 + - uses: mheap/github-action-required-labels@d25134c992b943fb6ad00c25ea00eb5988c0a9dd # v5 if: github.event_name == 'pull_request' with: mode: exactly diff --git a/.github/workflows/reusable-api-performance-test.yml b/.github/workflows/reusable-api-performance-test.yml index d8c87d25be..b23fdd01ef 100644 --- a/.github/workflows/reusable-api-performance-test.yml +++ b/.github/workflows/reusable-api-performance-test.yml @@ -2,13 +2,13 @@ name: '[reusable only] api performance tests' on: workflow_call: - + jobs: api-performance-test: name: 'Tests: API performance tests' runs-on: ubuntu-latest env: - TEST_DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3test?serverVersion=15&charset=utf8 + DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3?serverVersion=15&charset=utf8 services: postgres: @@ -32,7 +32,7 @@ jobs: - uses: shivammathur/setup-php@v2 with: - php-version: '8.3.10' + php-version: '8.3.11' extensions: intl-73.1 tools: composer:2.7.0 coverage: pcov diff --git a/.github/workflows/reusable-dev-deployment.yml b/.github/workflows/reusable-dev-deployment.yml index d0f3ae3abd..8bbb8e40fa 100644 --- a/.github/workflows/reusable-dev-deployment.yml +++ b/.github/workflows/reusable-dev-deployment.yml @@ -94,6 +94,7 @@ jobs: --set ingress.basicAuth.username=${{ secrets.BASIC_AUTH_USERNAME }} \ --set ingress.basicAuth.password='${{ secrets.BASIC_AUTH_PASSWORD }}' \ --set apiCache.enabled=${{ vars.API_CACHE_ENABLED || false }} \ + --set apiCache.sendXKeyHeadersDownstream=${{ vars.SEND_XKEY_HEADERS_DOWNSTREAM != null && format('''{0}''', vars.SEND_XKEY_HEADERS_DOWNSTREAM) || null }} \ --set mail.dummyEnabled=true \ --set postgresql.url='${{ secrets.POSTGRES_URL }}/ecamp3${{ inputs.name }}?sslmode=require' \ --set postgresql.adminUrl='${{ secrets.POSTGRES_ADMIN_URL }}/ecamp3${{ inputs.name }}?sslmode=require' \ @@ -129,7 +130,8 @@ jobs: --set recaptcha.siteKey='${{ secrets.RECAPTCHA_SITE_KEY }}' \ --set recaptcha.secret='${{ secrets.RECAPTCHA_SECRET }}' \ --set frontend.loginInfoTextKey=${{ vars.LOGIN_INFO_TEXT_KEY }} \ - --set featureToggle.developer=true + --set featureToggle.developer=true \ + --set featureToggle.checklist=true - name: Finish the GitHub deployment uses: bobheadxi/deployments@v1.5.0 diff --git a/.github/workflows/reusable-e2e-tests-build.yml b/.github/workflows/reusable-e2e-tests-build.yml index e1e1450d59..6b655bb365 100644 --- a/.github/workflows/reusable-e2e-tests-build.yml +++ b/.github/workflows/reusable-e2e-tests-build.yml @@ -23,7 +23,7 @@ jobs: context: './api' push: false load: true - target: frankenphp_dev + target: frankenphp_prod builder: ${{ steps.buildx.outputs.name }} tags: ecamp/ecamp3-dev-api cache-from: type=gha,scope=api diff --git a/.github/workflows/reusable-e2e-tests-run.yml b/.github/workflows/reusable-e2e-tests-run.yml index fe2c719c41..089f2a3e49 100644 --- a/.github/workflows/reusable-e2e-tests-run.yml +++ b/.github/workflows/reusable-e2e-tests-run.yml @@ -48,9 +48,23 @@ jobs: key: docker-compose-${{ hashFiles('frontend/package-lock.json', 'print/package-lock.json', 'api/composer.lock') }}-${{ matrix.browser }} restore-keys: | docker-compose- + + - run: | + jwt_passphrase=${JWT_PASSPHRASE:-$(grep ''^JWT_PASSPHRASE='' .env | cut -f 2 -d ''='')} + echo "Generating public / private keys for JWT" + mkdir -p config/jwt + echo "$jwt_passphrase" | openssl genpkey -out config/jwt/private.pem -pass stdin -aes256 -algorithm rsa -pkeyopt rsa_keygen_bits:4096 + echo "$jwt_passphrase" | openssl pkey -in config/jwt/private.pem -passin stdin -out config/jwt/public.pem -pubout + setfacl -R -m u:www-data:rX -m u:"$(whoami)":rwX config/jwt + setfacl -dR -m u:www-data:rX -m u:"$(whoami)":rwX config/jwt + working-directory: api + + - run: docker compose up --wait -d database + + - run: docker compose -f docker-compose.yml run --rm api migrate-database # start necessary containers - - run: docker compose up -d api frontend pdf print browserless database docker-host http-cache mail + - run: docker compose -f docker-compose.yml up -d api frontend pdf print browserless database docker-host http-cache mail reverse-proxy # pull cypress while container are starting up - run: docker compose pull e2e diff --git a/.helm/deploy-to-cluster.sh b/.helm/deploy-to-cluster.sh index fcf7c17def..4702dbe0ed 100755 --- a/.helm/deploy-to-cluster.sh +++ b/.helm/deploy-to-cluster.sh @@ -64,6 +64,7 @@ for i in 1; do values="$values --set deploymentTime=$(date -u +%s)" values="$values --set deployedVersion=\"$(git rev-parse --short HEAD)\"" values="$values --set featureToggle.developer=true" + values="$values --set featureToggle.checklist=true" if [ -n "$BACKUP_SCHEDULE" ]; then values="$values --set postgresql.backup.schedule=$BACKUP_SCHEDULE" diff --git a/.helm/ecamp3/files/db-backup-restore-image/Dockerfile b/.helm/ecamp3/files/db-backup-restore-image/Dockerfile index 4fbb47fdbf..6a5cebc6c9 100644 --- a/.helm/ecamp3/files/db-backup-restore-image/Dockerfile +++ b/.helm/ecamp3/files/db-backup-restore-image/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:12.6-slim +FROM debian:12.7-slim ENV DEBIAN_FRONTEND="noninteractive" RUN apt-get update && \ diff --git a/.helm/ecamp3/templates/api_cache_deployment.yaml b/.helm/ecamp3/templates/api_cache_deployment.yaml index 4fc2a179b2..dfd8d994eb 100644 --- a/.helm/ecamp3/templates/api_cache_deployment.yaml +++ b/.helm/ecamp3/templates/api_cache_deployment.yaml @@ -47,6 +47,8 @@ spec: value: "{{ .Values.apiCache.varnishHttpPort }}" - name: COOKIE_PREFIX value: {{ include "api.cookiePrefix" . | quote }} + - name: SEND_XKEY_HEADERS_DOWNSTREAM + value: {{ .Values.apiCache.sendXKeyHeadersDownstream | quote }} args: - -a - {{ printf ":%d,HTTP" (.Values.apiCache.varnishPurgePort | int) }} diff --git a/.helm/ecamp3/templates/api_deployment.yaml b/.helm/ecamp3/templates/api_deployment.yaml index f51ead4c90..86ee7bec43 100644 --- a/.helm/ecamp3/templates/api_deployment.yaml +++ b/.helm/ecamp3/templates/api_deployment.yaml @@ -51,6 +51,8 @@ spec: env: - name: SERVER_NAME value: :3001 + - name: COOKIE_SECURE + value: 'true' - name: APP_SECRET valueFrom: secretKeyRef: diff --git a/.helm/ecamp3/templates/frontend_configmap.yaml b/.helm/ecamp3/templates/frontend_configmap.yaml index 4e18b26ed7..d58504aa32 100644 --- a/.helm/ecamp3/templates/frontend_configmap.yaml +++ b/.helm/ecamp3/templates/frontend_configmap.yaml @@ -29,6 +29,7 @@ data: RECAPTCHA_SITE_KEY: null, {{- end }} FEATURE_DEVELOPER: {{ .Values.featureToggle.developer | default false }}, + FEATURE_CHECKLIST: {{ .Values.featureToggle.checklist | default false }}, LOGIN_INFO_TEXT_KEY: '{{ .Values.frontend.loginInfoTextKey }}', } deployedVersion: {{ .Values.deployedVersion | quote }} diff --git a/.helm/ecamp3/values.yaml b/.helm/ecamp3/values.yaml index e60ab9fcb2..e7ac62d09e 100644 --- a/.helm/ecamp3/values.yaml +++ b/.helm/ecamp3/values.yaml @@ -15,6 +15,7 @@ helpLink: # 'https://ecamp3.ch/faq' # enable/disable feature across the complete deployment featureToggle: developer: false # enables various tools/features foreseen for development deployments (language switcher, form controls view, performance measurement view, etc.) + checklist: false # enables checklist feature in frontend api: subpath: "/api" @@ -225,6 +226,7 @@ apiCache: varnishSize: 50M varnishHttpPort: 8080 varnishPurgePort: 8081 + sendXKeyHeadersDownstream: false resources: requests: cpu: 10m @@ -251,7 +253,7 @@ apiCache: requests: cpu: 10m memory: 20Mi - + autoscaling: enabled: false minReplicas: 1 diff --git a/.nvmrc b/.nvmrc index 1384ff6a1c..728f7de5c2 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.5.1 +22.9.0 diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml index 05587f1079..1e6bd5d695 100644 --- a/.ops/aws-setup/docker-compose.yml +++ b/.ops/aws-setup/docker-compose.yml @@ -1,6 +1,6 @@ services: aws-setup: - image: pulumi/pulumi-nodejs:3.127.0 + image: pulumi/pulumi-nodejs:3.134.1 container_name: 'ecamp3-aws-setup' volumes: - ../../.prettierrc:/.prettierrc:delegated @@ -13,7 +13,7 @@ services: - AWS_DEFAULT_REGION=eu-west-3 aws-cli: - image: amazon/aws-cli:2.17.23 + image: amazon/aws-cli:2.17.60 container_name: 'ecamp3-aws-cli' volumes: - ./.aws:/root/.aws:delegated diff --git a/.ops/aws-setup/eslint.config.mjs b/.ops/aws-setup/eslint.config.mjs new file mode 100644 index 0000000000..97bee214c3 --- /dev/null +++ b/.ops/aws-setup/eslint.config.mjs @@ -0,0 +1,51 @@ +import { includeIgnoreFile } from '@eslint/compat' +import globals from 'globals' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import js from '@eslint/js' +import { FlatCompat } from '@eslint/eslintrc' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}) +const gitignorePath = path.resolve(__dirname, '.gitignore') + +export default [ + { + files: ['**/*.ts'], + }, + ...compat.extends('eslint:recommended', 'plugin:prettier/recommended', 'prettier'), + + includeIgnoreFile(gitignorePath), + + { + languageOptions: { + globals: { + ...globals.node, + }, + + ecmaVersion: 2022, + sourceType: 'module', + + parserOptions: { + parser: '@babel/eslint-parser', + }, + }, + + rules: { + 'prefer-const': 'error', + 'prettier/prettier': 'error', + + 'no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_$', + }, + ], + }, + }, +] diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json index 0968510cc3..09ac05ce2f 100644 --- a/.ops/aws-setup/package-lock.json +++ b/.ops/aws-setup/package-lock.json @@ -6,19 +6,22 @@ "": { "name": "ecamp-core", "dependencies": { - "@pulumi/aws": "6.48.0", - "@pulumi/awsx": "2.13.0", - "@pulumi/pulumi": "3.128.0" + "@pulumi/aws": "6.53.0", + "@pulumi/awsx": "2.16.0", + "@pulumi/pulumi": "3.134.1" }, "devDependencies": { "@babel/eslint-parser": "7.25.1", - "@types/node": "20.14.14", - "eslint": "8.57.0", + "@eslint/compat": "1.1.1", + "@eslint/eslintrc": "3.1.0", + "@eslint/js": "9.11.1", + "@types/node": "20.16.9", + "eslint": "9.11.1", "eslint-config-prettier": "9.1.0", - "eslint-plugin-import": "2.29.1", - "eslint-plugin-n": "17.10.2", + "eslint-plugin-n": "17.10.3", "eslint-plugin-prettier": "5.2.1", "eslint-plugin-promise": "7.1.0", + "globals": "15.9.0", "prettier": "3.3.3" } }, @@ -163,52 +166,52 @@ } }, "node_modules/@aws-sdk/client-ecs": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.620.1.tgz", - "integrity": "sha512-5d24INktG/r5yEX/hlPRTLwoz1KByYBNAKG+BtGw3FRm9C4G7uGE77gPp3MR8Wq5MftmpLlOaFg7MalykYUYuw==", + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.658.1.tgz", + "integrity": "sha512-Azk5Q3PLABKK7C1UgP7eOpmhXIcnA06uETZiwJ1NgfBaeBEm80tcNoKL6HQr3WvwMp1lfUemsVHd8Og8X3PYeQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.620.1", - "@aws-sdk/client-sts": "3.620.1", - "@aws-sdk/core": "3.620.1", - "@aws-sdk/credential-provider-node": "3.620.1", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.0", - "@smithy/fetch-http-handler": "^3.2.3", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.12", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.10", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@aws-sdk/client-sso-oidc": "3.658.1", + "@aws-sdk/client-sts": "3.658.1", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/credential-provider-node": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.12", - "@smithy/util-defaults-mode-node": "^3.0.12", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.2", + "@smithy/util-waiter": "^3.1.5", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -217,47 +220,47 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.620.1.tgz", - "integrity": "sha512-4Ox0BSs+atrAhLvjNHN2uiYvSTdpMv//IS4l4XRoQG0cJKIPLs3OU3PL5H0X1NfZehz9/8FTWl5Lv81uw4j1eA==", + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.658.1.tgz", + "integrity": "sha512-lOuaBtqPTYGn6xpXlQF4LsNDsQ8Ij2kOdnk+i69Kp6yS76TYvtUuukyLL5kx8zE1c8WbYtxj9y8VNw9/6uKl7Q==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.620.1", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.0", - "@smithy/fetch-http-handler": "^3.2.3", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.12", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.10", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.12", - "@smithy/util-defaults-mode-node": "^3.0.12", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -266,48 +269,48 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.620.1.tgz", - "integrity": "sha512-gm69ttbkr7Kbg/Zzr3SczyLWkLgmK3bEZtkvbM/40ZW5ItYhDzJE48Ovs2lyA64h2YsOftDqqwcbJirAAdTgSg==", + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.658.1.tgz", + "integrity": "sha512-RGcZAI3qEA05JszPKwa0cAyp8rnS1nUvs0Sqw4hqLNQ1kD7b7V6CPjRXe7EFQqCOMvM4kGqx0+cEEVTOmBsFLw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.620.1", - "@aws-sdk/credential-provider-node": "3.620.1", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.0", - "@smithy/fetch-http-handler": "^3.2.3", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.12", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.10", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/credential-provider-node": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.12", - "@smithy/util-defaults-mode-node": "^3.0.12", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -315,53 +318,53 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.620.1" + "@aws-sdk/client-sts": "^3.658.1" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.620.1.tgz", - "integrity": "sha512-d+ECGFDg0IsDdmfKU2O0VeMYKZcmbfBaA9HkZnZ39wu1BlXGI73xJe8cfmzbobvu+Ly+bAfHdLCpgIY+pD4D7g==", + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.658.1.tgz", + "integrity": "sha512-yw9hc5blTnbT1V6mR7Cx9HGc9KQpcLQ1QXj8rntiJi6tIYu3aFNVEyy81JHL7NsuBSeQulJTvHO3y6r3O0sfRg==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.620.1", - "@aws-sdk/core": "3.620.1", - "@aws-sdk/credential-provider-node": "3.620.1", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.620.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.3.0", - "@smithy/fetch-http-handler": "^3.2.3", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.12", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.10", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@aws-sdk/client-sso-oidc": "3.658.1", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/credential-provider-node": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.12", - "@smithy/util-defaults-mode-node": "^3.0.12", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -370,19 +373,20 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.620.1.tgz", - "integrity": "sha512-6Ejce93dDlDnovl6oYtxj3I/SJMOQoFdmmtM4+4W/cgMWH+l00T5aszVxDLjjPfu3Ryt7dNhrXaYeK2Ue1ZBmg==", + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.658.1.tgz", + "integrity": "sha512-vJVMoMcSKXK2gBRSu9Ywwv6wQ7tXH8VL1fqB1uVxgCqBZ3IHfqNn4zvpMPWrwgO2/3wv7XFyikGQ5ypPTCw4jA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^2.3.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.1.10", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "fast-xml-parser": "4.2.5", + "@smithy/core": "^2.4.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/property-provider": "^3.1.6", + "@smithy/protocol-http": "^4.1.3", + "@smithy/signature-v4": "^4.1.4", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/util-middleware": "^3.0.6", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { @@ -390,14 +394,14 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", - "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.654.0.tgz", + "integrity": "sha512-kogsx3Ql81JouHS7DkheCDU9MYAvK0AokxjcshDveGmf7BbgbWCA8Fnb9wjQyNDaOXNvkZu8Z8rgkX91z324/w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -405,19 +409,19 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.620.0.tgz", - "integrity": "sha512-BI2BdrSKDmB/2ouB/NJR0PT0x/+5fmoF6XOE78hFBb4F5w/yynGgcJY936dF+oREfpME6ehjB2b0okGg78Scpw==", + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.658.1.tgz", + "integrity": "sha512-4ubkJjEVCZflxkZnV1JDQv8P2pburxk1LrEp55telfJRzXrnowzBKwuV2ED0QMNC448g2B3VCaffS+Ct7c4IWQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/fetch-http-handler": "^3.2.3", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.10", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.2", + "@aws-sdk/types": "3.654.0", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/property-provider": "^3.1.6", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/util-stream": "^3.1.8", "tslib": "^2.6.2" }, "engines": { @@ -425,47 +429,47 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.620.1.tgz", - "integrity": "sha512-m9jwigMPRlRRhoPxCQZMOwQUd6imEJbksF6tSMYNae76DIvrCi4z2Jhp6RJ9Mij8cnewUZCAmvu2FlK9+n9M7A==", + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.658.1.tgz", + "integrity": "sha512-2uwOamQg5ppwfegwen1ddPu5HM3/IBSnaGlaKLFhltkdtZ0jiqTZWUtX2V+4Q+buLnT0hQvLS/frQ+7QUam+0Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.620.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.620.1", - "@aws-sdk/credential-provider-web-identity": "3.609.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/credential-provider-env": "3.654.0", + "@aws-sdk/credential-provider-http": "3.658.1", + "@aws-sdk/credential-provider-process": "3.654.0", + "@aws-sdk/credential-provider-sso": "3.658.1", + "@aws-sdk/credential-provider-web-identity": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@smithy/credential-provider-imds": "^3.2.3", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.620.1" + "@aws-sdk/client-sts": "^3.658.1" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.620.1.tgz", - "integrity": "sha512-KaprIJW2azM+oTIHi7S1ayJ3oQqoFwpMBWFpZM1nvSzaPucrZIUmX2m4uVrMM4LfXsfUsgMkrme2rBI1fGAjCg==", + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.658.1.tgz", + "integrity": "sha512-XwxW6N+uPXPYAuyq+GfOEdfL/MZGAlCSfB5gEWtLBFmFbikhmEuqfWtI6CD60OwudCUOh6argd21BsJf8o1SJA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.620.0", - "@aws-sdk/credential-provider-ini": "3.620.1", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.620.1", - "@aws-sdk/credential-provider-web-identity": "3.609.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/credential-provider-env": "3.654.0", + "@aws-sdk/credential-provider-http": "3.658.1", + "@aws-sdk/credential-provider-ini": "3.658.1", + "@aws-sdk/credential-provider-process": "3.654.0", + "@aws-sdk/credential-provider-sso": "3.658.1", + "@aws-sdk/credential-provider-web-identity": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@smithy/credential-provider-imds": "^3.2.3", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -473,15 +477,15 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", - "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.654.0.tgz", + "integrity": "sha512-PmQoo8sZ9Q2Ow8OMzK++Z9lI7MsRUG7sNq3E72DVA215dhtTICTDQwGlXH2AAmIp7n+G9LLRds+4wo2ehG4mkg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -489,17 +493,17 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.620.1.tgz", - "integrity": "sha512-cFU8e6ctdkWR8BRCnHFzs37N+ilbHf1OT2EeMjt1ZDE9FgTD5L5BTgVWDxnPmyQnEoBs1p4PyNPHkpHY5EmswQ==", + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.658.1.tgz", + "integrity": "sha512-YOagVEsZEk9DmgJEBg+4MBXrPcw/tYas0VQ5OVBqC5XHNbi2OBGJqgmjVPesuu393E7W0VQxtJFDS00O1ewQgA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.620.1", - "@aws-sdk/token-providers": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/client-sso": "3.658.1", + "@aws-sdk/token-providers": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -507,32 +511,32 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz", - "integrity": "sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.654.0.tgz", + "integrity": "sha512-6a2g9gMtZToqSu+CusjNK5zvbLJahQ9di7buO3iXgbizXpLXU1rnawCpWxwslMpT5fLgMSKDnKDrr6wdEk7jSw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.609.0" + "@aws-sdk/client-sts": "^3.654.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", - "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.654.0.tgz", + "integrity": "sha512-rxGgVHWKp8U2ubMv+t+vlIk7QYUaRCHaVpmUlJv0Wv6Q0KeO9a42T9FxHphjOTlCGQOLcjCreL9CF8Qhtb4mdQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.654.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -540,13 +544,13 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", - "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.654.0.tgz", + "integrity": "sha512-OQYb+nWlmASyXfRb989pwkJ9EVUMP1CrKn2eyTk3usl20JZmKo2Vjis6I0tLUkMSxMhnBJJlQKyWkRpD/u1FVg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.654.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -554,14 +558,14 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", - "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.654.0.tgz", + "integrity": "sha512-gKSomgltKVmsT8sC6W7CrADZ4GHwX9epk3GcH6QhebVO3LA9LRbkL3TwOPUXakxxOLLUTYdOZLIOtFf7iH00lg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.654.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -569,15 +573,15 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz", - "integrity": "sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.654.0.tgz", + "integrity": "sha512-liCcqPAyRsr53cy2tYu4qeH4MMN0eh9g6k56XzI5xd4SghXH5YWh4qOYAlQ8T66ZV4nPMtD8GLtLXGzsH8moFg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -585,16 +589,16 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", - "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.654.0.tgz", + "integrity": "sha512-ydGOrXJxj3x0sJhsXyTmvJVLAE0xxuTWFJihTl67RtaO7VRNtd82I3P3bwoMMaDn5WpmV5mPo8fEUDRlBm3fPg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.654.0", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/types": "^3.4.2", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-middleware": "^3.0.6", "tslib": "^2.6.2" }, "engines": { @@ -602,31 +606,31 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", - "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.654.0.tgz", + "integrity": "sha512-D8GeJYmvbfWkQDtTB4owmIobSMexZel0fOoetwvgCQ/7L8VPph3Q2bn1TRRIXvH7wdt6DcDxA3tKMHPBkT3GlA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.614.0" + "@aws-sdk/client-sso-oidc": "^3.654.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.654.0.tgz", + "integrity": "sha512-VWvbED3SV+10QJIcmU/PKjsKilsTV16d1I7/on4bvD/jo1qGeMXqLDBSen3ks/tuvXZF/mFc7ZW/W2DiLVtO7A==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -634,14 +638,14 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz", - "integrity": "sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.654.0.tgz", + "integrity": "sha512-i902fcBknHs0Irgdpi62+QMvzxE+bczvILXigYrlHL4+PiEnlMVpni5L5W1qCkNZXf8AaMrSBuR1NZAGp6UOUw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "@smithy/util-endpoints": "^2.0.5", + "@aws-sdk/types": "3.654.0", + "@smithy/types": "^3.4.2", + "@smithy/util-endpoints": "^2.1.2", "tslib": "^2.6.2" }, "engines": { @@ -661,26 +665,26 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", - "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.654.0.tgz", + "integrity": "sha512-ykYAJqvnxLt7wfrqya28wuH3/7NdrwzfiFd7NqEVQf7dXVxL5RPEpD7DxjcyQo3DsHvvdUvGZVaQhozycn1pzA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.654.0", + "@smithy/types": "^3.4.2", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", - "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.654.0.tgz", + "integrity": "sha512-a0ojjdBN6pqv6gB4H/QPPSfhs7mFtlVwnmKCM/QrTaFzN0U810PJ1BST3lBx5sa23I5jWHGaoFY+5q65C3clLQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.654.0", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -711,9 +715,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "dev": true, "license": "MIT", "peer": true, @@ -773,14 +777,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -891,15 +895,15 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/types": "^7.25.6" }, "engines": { "node": ">=6.9.0" @@ -923,12 +927,15 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", - "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "dev": true, "license": "MIT", "peer": true, + "dependencies": { + "@babel/types": "^7.25.6" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -953,18 +960,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", - "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.0", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -972,10 +979,21 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dev": true, "license": "MIT", "peer": true, @@ -1018,26 +1036,61 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.1.tgz", + "integrity": "sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1045,86 +1098,62 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/@eslint/js": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", + "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", "dev": true, "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "Apache-2.0", "engines": { - "node": "*" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@grpc/grpc-js": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.1.tgz", - "integrity": "sha512-gyt/WayZrVPH2w/UTLansS7F9Nwld472JxxaETamrM8HNlsa+jSLNyKAZmhxI2Me4c3mQHFiS1wWHDY1g1Kthw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.3.tgz", + "integrity": "sha512-i9UraDzFHMR+Iz/MhFLljT+fCpgxZ3O6CxwGJ8YuNYHJItIHUzKJpW2LvoFZNnGPwqc9iWy9RAucxV0JoR9aUQ==", "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.7.13", @@ -1152,46 +1181,6 @@ "node": ">=6" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1206,13 +1195,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -1232,9 +1227,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "license": "MIT", "engines": { "node": ">=12" @@ -1460,12 +1455,36 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@npmcli/arborist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@npmcli/arborist/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, + "node_modules/@npmcli/arborist/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@npmcli/arborist/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -1580,6 +1599,30 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@npmcli/metavuln-calculator": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz", @@ -1627,9 +1670,9 @@ } }, "node_modules/@npmcli/package-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", - "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz", + "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==", "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", @@ -1728,9 +1771,9 @@ } }, "node_modules/@opentelemetry/context-async-hooks": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", - "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.26.0.tgz", + "integrity": "sha512-HedpXXYzzbaoutw6DFLWLDket2FwLkLpil4hGCZ1xYEIMTcivdfwEOISgdbLEWyG3HW52gTq2V9mOVJrONgiwg==", "license": "Apache-2.0", "engines": { "node": ">=14" @@ -1740,12 +1783,12 @@ } }, "node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.26.0.tgz", + "integrity": "sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/semantic-conventions": "1.27.0" }, "engines": { "node": ">=14" @@ -1755,15 +1798,15 @@ } }, "node_modules/@opentelemetry/exporter-zipkin": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", - "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.26.0.tgz", + "integrity": "sha512-PW5R34n3SJHO4t0UetyHKiXL6LixIqWN6lWncg3eRXhKuT30x+b7m5sDJS0kEWRfHeS+kG7uCw2vBzmB2lk3Dw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0" }, "engines": { "node": ">=14" @@ -1808,6 +1851,15 @@ "@opentelemetry/api": "^1.3.0" } }, + "node_modules/@opentelemetry/instrumentation-grpc/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/instrumentation/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -1821,12 +1873,12 @@ } }, "node_modules/@opentelemetry/propagator-b3": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", - "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.26.0.tgz", + "integrity": "sha512-vvVkQLQ/lGGyEy9GT8uFnI047pajSOVnZI2poJqVGD3nJ+B9sFGdlHNnQKophE3lHfnIH0pw2ubrCTjZCgIj+Q==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1" + "@opentelemetry/core": "1.26.0" }, "engines": { "node": ">=14" @@ -1836,12 +1888,12 @@ } }, "node_modules/@opentelemetry/propagator-jaeger": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", - "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.26.0.tgz", + "integrity": "sha512-DelFGkCdaxA1C/QA0Xilszfr0t4YbGd3DjxiCDPh34lfnFr+VkkrjV9S8ZTJvAzfdKERXhfOxIKBoGPJwoSz7Q==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1" + "@opentelemetry/core": "1.26.0" }, "engines": { "node": ">=14" @@ -1851,13 +1903,13 @@ } }, "node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.26.0.tgz", + "integrity": "sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0" }, "engines": { "node": ">=14" @@ -1867,14 +1919,14 @@ } }, "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.26.0.tgz", + "integrity": "sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0" }, "engines": { "node": ">=14" @@ -1884,16 +1936,16 @@ } }, "node_modules/@opentelemetry/sdk-trace-node": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", - "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==", + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.26.0.tgz", + "integrity": "sha512-Fj5IVKrj0yeUwlewCRwzOVcr5avTuNnMHWf7GPc1t6WaT78J6CJyF3saZ/0RkZfdeNO8IcBl/bNcWMVZBMRW8Q==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/context-async-hooks": "1.25.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/propagator-b3": "1.25.1", - "@opentelemetry/propagator-jaeger": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/context-async-hooks": "1.26.0", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/propagator-b3": "1.26.0", + "@opentelemetry/propagator-jaeger": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0", "semver": "^7.5.2" }, "engines": { @@ -1916,9 +1968,9 @@ } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", "license": "Apache-2.0", "engines": { "node": ">=14" @@ -2012,9 +2064,9 @@ "license": "BSD-3-Clause" }, "node_modules/@pulumi/aws": { - "version": "6.48.0", - "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.48.0.tgz", - "integrity": "sha512-Y+raJupp7mtMmDC6C1yDiapE6cPbkH/T+wVovePBKtwggipJ33ezZtZ8n95CseiN9ii9fo5jX0iLIEaOpv5/fw==", + "version": "6.53.0", + "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.53.0.tgz", + "integrity": "sha512-K3PbfoMMHwBztzNfYbDnRFdv9DilV0iDd7IwjnN/bXioRwh67DBXejGDnpeyPB+Ogw/D9VkeMVNiGZPrcejIAg==", "license": "Apache-2.0", "dependencies": { "@pulumi/pulumi": "^3.0.0", @@ -2024,14 +2076,14 @@ } }, "node_modules/@pulumi/awsx": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@pulumi/awsx/-/awsx-2.13.0.tgz", - "integrity": "sha512-wmPw9dsS7H4wM2Qof4RjYIDX+jItFlmNRql2yE2exemHPqY/IJKotKlUh6eoqhIqXdwHNyV2N8bzX5lH/Cla6Q==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/@pulumi/awsx/-/awsx-2.16.0.tgz", + "integrity": "sha512-mXSsddx1Jo8g2y3aClvELWnef/Kg4GLStSPaAaiuoG0JHozkMEDTngMYEkXPMy6LntNPbP9ba4p+A9+UYm53qg==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-ecs": "^3.405.0", - "@pulumi/aws": "^6.37.1", + "@pulumi/aws": "^6.47.0", "@pulumi/docker": "^4.5.1", "@pulumi/pulumi": "^3.0.0", "@types/aws-lambda": "^8.10.23", @@ -2041,9 +2093,9 @@ } }, "node_modules/@pulumi/docker": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/@pulumi/docker/-/docker-4.5.5.tgz", - "integrity": "sha512-+5u0A3H3PTkxGfVuvDafbdyyYT8xLzLJnKdKc2jFEpphwKlXF+lc4YhjsDLBp1cc/5JPfE4hujOxGAxwt/5BUQ==", + "version": "4.5.6", + "resolved": "https://registry.npmjs.org/@pulumi/docker/-/docker-4.5.6.tgz", + "integrity": "sha512-Gj8St9P5O9WQ46mPLWEI+b49ZREEYXu/2QH35c6rgf0NIaZDqDY/pEFWnG9enxmLHoZFaaa22C8te/LBqKP3Ig==", "license": "Apache-2.0", "dependencies": { "@pulumi/pulumi": "^3.0.0", @@ -2060,9 +2112,9 @@ } }, "node_modules/@pulumi/pulumi": { - "version": "3.128.0", - "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.128.0.tgz", - "integrity": "sha512-Xqe5uYp1RpDihK3VbdBFR4q1h+ICg/2Xgg1d7aYWmPqBCIUG4jWddLS0REQO60EsgKBNarXhLeQSmaWXLgiq9w==", + "version": "3.134.1", + "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.134.1.tgz", + "integrity": "sha512-uXUldyEsYbEXkqE3nPfgABnfgnXjQv3YkzkiigeOBzTF2+7rQe7C/9nMnMJHs4k5XMW5183t7bYMU/W4qUUVcA==", "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.10.1", @@ -2112,6 +2164,28 @@ } } }, + "node_modules/@pulumi/pulumi/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@pulumi/pulumi/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@pulumi/pulumi/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -2124,6 +2198,12 @@ "node": ">=10" } }, + "node_modules/@pulumi/pulumi/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, "node_modules/@pulumi/query": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@pulumi/query/-/query-0.3.0.tgz", @@ -2217,12 +2297,12 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.4.tgz", + "integrity": "sha512-VupaALAQlXViW3/enTf/f5l5JZYSAxoJL7f0nanhNNKnww6DGCg1oYIuNP78KDugnkwthBO6iEcym16HhWV8RQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2230,15 +2310,15 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", - "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.8.tgz", + "integrity": "sha512-Tv1obAC18XOd2OnDAjSWmmthzx6Pdeh63FbLin8MlPiuJ2ATpKkq0NcNOJFr0dO+JmZXnwu8FQxKJ3TKJ3Hulw==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/types": "^3.4.2", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-middleware": "^3.0.6", "tslib": "^2.6.2" }, "engines": { @@ -2246,18 +2326,20 @@ } }, "node_modules/@smithy/core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.1.tgz", - "integrity": "sha512-BC7VMXx/1BCmRPCVzzn4HGWAtsrb7/0758EtwOGFJQrlSwJBEjCcDLNZLFoL/68JexYa2s+KmgL/UfmXdG6v1w==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.6.tgz", + "integrity": "sha512-6lQQp99hnyuNNIzeTYSzCUXJHwvvFLY7hfdFGSJM95tjRDJGfzWYFRBXPaM9766LiiTsQ561KErtbufzUFSYUg==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.13", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { @@ -2265,15 +2347,15 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", - "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.3.tgz", + "integrity": "sha512-VoxMzSzdvkkjMJNE38yQgx4CfnmT+Z+5EUXkg4x7yag93eQkVQgZvN3XBSHC/ylfBbLbAtdu7flTCChX9I+mVg==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/property-provider": "^3.1.6", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", "tslib": "^2.6.2" }, "engines": { @@ -2281,25 +2363,25 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.8.tgz", + "integrity": "sha512-Lqe0B8F5RM7zkw//6avq1SJ8AfaRd3ubFUS1eVp5WszV7p6Ne5hQ4dSuMHDpNRPhgTvj4va9Kd/pcVigHEHRow==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/querystring-builder": "^3.0.6", + "@smithy/types": "^3.4.2", "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", - "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.6.tgz", + "integrity": "sha512-c/FHEdKK/7DU2z6ZE91L36ahyXWayR3B+FzELjnYq7wH5YqIseM24V+pWCS9kFn1Ln8OFGTf+pyYPiHZuX0s/Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -2309,12 +2391,12 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", - "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.6.tgz", + "integrity": "sha512-czM7Ioq3s8pIXht7oD+vmgy4Wfb4XavU/k/irO8NdXFFOx7YAlsCCcKOh/lJD1mJSYQqiR7NmpZ9JviryD/7AQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" } }, @@ -2331,13 +2413,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", - "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.8.tgz", + "integrity": "sha512-VuyszlSO49WKh3H9/kIO2kf07VUwGV80QRiaDxUfP8P8UKlokz381ETJvwLhwuypBYhLymCYyNhB3fLAGBX2og==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2345,17 +2427,17 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.3.tgz", + "integrity": "sha512-KeM/OrK8MVFUsoJsmCN0MZMVPjKKLudn13xpgwIMpGTYpA8QZB2Xq5tJ+RE6iu3A6NhOI4VajDTwBsm8pwwrhg==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", + "@smithy/util-middleware": "^3.0.6", "tslib": "^2.6.2" }, "engines": { @@ -2363,18 +2445,18 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.13.tgz", - "integrity": "sha512-zvCLfaRYCaUmjbF2yxShGZdolSHft7NNCTA28HVN9hKcEbOH+g5irr1X9s+in8EpambclGnevZY4A3lYpvDCFw==", + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.21.tgz", + "integrity": "sha512-/h0fElV95LekVVEJuSw+aI11S1Y3zIUwBc6h9ZbUv43Gl2weXsbQwjLoet6j/Qtb0phfrSxS6pNg6FqgJOWZkA==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/service-error-classification": "^3.0.3", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/protocol-http": "^4.1.3", + "@smithy/service-error-classification": "^3.0.6", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -2383,12 +2465,12 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.6.tgz", + "integrity": "sha512-KKTUSl1MzOM0MAjGbudeaVNtIDo+PpekTBkCNwvfZlKndodrnvRo+00USatiyLOc0ujjO9UydMRu3O9dYML7ag==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2396,12 +2478,12 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.6.tgz", + "integrity": "sha512-2c0eSYhTQ8xQqHMcRxLMpadFbTXg6Zla5l0mwNftFCZMQmuhI7EbAJMx6R5eqfuV3YbJ3QGyS3d5uSmrHV8Khg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2409,14 +2491,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.7.tgz", + "integrity": "sha512-g3mfnC3Oo8pOI0dYuPXLtdW1WGVb3bR2tkV21GNkm0ZvQjLTtamXAwCWt/FCb0HGvKt3gHHmF1XerG0ICfalOg==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2424,15 +2506,15 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.3.tgz", + "integrity": "sha512-/gcm5DJ3k1b1zEInzBGAZC8ntJ+jwrz1NcSIu+9dSXd1FfG0G6QgkDI40tt8/WYUbHtLyo8fEqtm2v29koWo/w==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/abort-controller": "^3.1.4", + "@smithy/protocol-http": "^4.1.3", + "@smithy/querystring-builder": "^3.0.6", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2440,12 +2522,12 @@ } }, "node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.6.tgz", + "integrity": "sha512-NK3y/T7Q/Bw+Z8vsVs9MYIQ5v7gOX7clyrXcwhhIBQhbPgRl6JDrZbusO9qWDhcEus75Tg+VCxtIRfo3H76fpw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2453,12 +2535,12 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.3.tgz", + "integrity": "sha512-GcbMmOYpH9iRqtC05RbRnc/0FssxSTHlmaNhYBTgSgNCYpdR3Kt88u5GAZTBmouzv+Zlj/VRv92J9ruuDeJuEw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2466,12 +2548,12 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.6.tgz", + "integrity": "sha512-sQe08RunoObe+Usujn9+R2zrLuQERi3CWvRO3BvnoWSYUaIrLKuAIeY7cMeDax6xGyfIP3x/yFWbEKSXvOnvVg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, @@ -2480,12 +2562,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.6.tgz", + "integrity": "sha512-UJKw4LlEkytzz2Wq+uIdHf6qOtFfee/o7ruH0jF5I6UAuU+19r9QV7nU3P/uI0l6+oElRHmG/5cBBcGJrD7Ozg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2493,24 +2575,24 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", - "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.6.tgz", + "integrity": "sha512-53SpchU3+DUZrN7J6sBx9tBiCVGzsib2e4sc512Q7K9fpC5zkJKs6Z9s+qbMxSYrkEkle6hnMtrts7XNkMJJMg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0" + "@smithy/types": "^3.4.2" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.7.tgz", + "integrity": "sha512-IA4K2qTJYXkF5OfVN4vsY1hfnUZjaslEE8Fsr/gGFza4TAC2A9NfnZuSY2srQIbt9bwtjHiAayrRVgKse4Q7fA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2518,16 +2600,16 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", - "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.4.tgz", + "integrity": "sha512-72MiK7xYukNsnLJI9NqvUHqTu0ziEsfMsYNlWpiJfuGQnCTFKpckThlEatirvcA/LmT1h7rRO+pJD06PYsPu9Q==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-middleware": "^3.0.6", "@smithy/util-uri-escape": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -2537,16 +2619,16 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.11.tgz", - "integrity": "sha512-l0BpyYkciNyMaS+PnFFz4aO5sBcXvGLoJd7mX9xrMBIm2nIQBVvYgp2ZpPDMzwjKCavsXu06iuCm0F6ZJZc6yQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.5.tgz", + "integrity": "sha512-7IZi8J3Dr9n3tX+lcpmJ/5tCYIqoXdblFBaPuv0SEKZFRpCxE+TqIWL6I3t7jLlk9TWu3JSvEZAhtjB9yvB+zA==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", + "@smithy/util-stream": "^3.1.8", "tslib": "^2.6.2" }, "engines": { @@ -2554,9 +2636,9 @@ } }, "node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.4.2.tgz", + "integrity": "sha512-tHiFcfcVedVBHpmHUEUHOCCih8iZbIAYn9NvPsNzaPm/237I3imdDdZoOC8c87H5HBAVEa06tTgb+OcSWV9g5w==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -2566,13 +2648,13 @@ } }, "node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.6.tgz", + "integrity": "sha512-47Op/NU8Opt49KyGpHtVdnmmJMsp2hEwBdyjuFB9M2V5QVOwA7pBhhxKN5z6ztKGrMw76gd8MlbPuzzvaAncuQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/querystring-parser": "^3.0.6", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" } }, @@ -2637,14 +2719,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.13.tgz", - "integrity": "sha512-ZIRSUsnnMRStOP6OKtW+gCSiVFkwnfQF2xtf32QKAbHR6ACjhbAybDvry+3L5qQYdh3H6+7yD/AiUE45n8mTTw==", + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.21.tgz", + "integrity": "sha512-M/FhTBk4c/SsB91dD/M4gMGfJO7z/qJaM9+XQQIqBOf4qzZYMExnP7R4VdGwxxH8IKMGW+8F0I4rNtVRrcfPoA==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -2653,17 +2735,17 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.13.tgz", - "integrity": "sha512-voUa8TFJGfD+U12tlNNLCDlXibt9vRdNzRX45Onk/WxZe7TS+hTOZouEZRa7oARGicdgeXvt1A0W45qLGYdy+g==", + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.21.tgz", + "integrity": "sha512-NiLinPvF86U3S2Pdx/ycqd4bnY5dmFSPNL5KYRwbNjqQFS09M5Wzqk8BNk61/47xCYz1X/6KeiSk9qgYPTtuDw==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^3.0.5", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.11", - "@smithy/types": "^3.3.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/credential-provider-imds": "^3.2.3", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/property-provider": "^3.1.6", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2671,13 +2753,13 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", - "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.2.tgz", + "integrity": "sha512-FEISzffb4H8DLzGq1g4MuDpcv6CIG15fXoQzDH9SjpRJv6h7J++1STFWWinilG0tQh9H1v2UKWG19Jjr2B16zQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2697,12 +2779,12 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.6.tgz", + "integrity": "sha512-BxbX4aBhI1O9p87/xM+zWy0GzT3CEVcXFPBRDoHAM+pV0eSW156pR+PSYEz0DQHDMYDsYAflC2bQNz2uaDBUZQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2710,13 +2792,13 @@ } }, "node_modules/@smithy/util-retry": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", - "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.6.tgz", + "integrity": "sha512-BRZiuF7IwDntAbevqMco67an0Sr9oLQJqqRCsSPZZHYRnehS0LHDAkJk/pSmI7Z8c/1Vet294H7fY2fWUgB+Rg==", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/service-error-classification": "^3.0.6", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2724,14 +2806,14 @@ } }, "node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.8.tgz", + "integrity": "sha512-hoKOqSmb8FD3WLObuB5hwbM7bNIWgcnvkThokTvVq7J5PKjlLUK5qQQcB9zWLHIoSaIlf3VIv2OxZY2wtQjcRQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/types": "^3.4.2", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-hex-encoding": "^3.0.0", @@ -2768,13 +2850,13 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", - "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.5.tgz", + "integrity": "sha512-jYOSvM3H6sZe3CHjzD2VQNCjWBJs+4DbtwBMvUp9y5EnnwNa7NQxTeYeQw0CKCAdGGZ3QvVkyJmvbvs5M/B10A==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/types": "^3.3.0", + "@smithy/abort-controller": "^3.1.4", + "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, "engines": { @@ -2815,10 +2897,34 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@types/aws-lambda": { - "version": "8.10.142", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.142.tgz", - "integrity": "sha512-wy2y/2hQKrS6myOS++koXg3N1Hg+LLyPjaggCFajczSHZPqBnOMuT2sdH3kiASrmdBYyM3pmjyz5SoWraRllCQ==", + "version": "8.10.145", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.145.tgz", + "integrity": "sha512-dtByW6WiFk5W5Jfgz1VM+YPA21xMXTuSFoLYIDY0L44jDLLflVPtZkYuu3/YxpGcvjzKFBZLU+GyKjR0HOYtyw==", "license": "MIT" }, "node_modules/@types/cacheable-request": { @@ -2833,6 +2939,13 @@ "@types/responselike": "^1.0.0" } }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/google-protobuf": { "version": "3.15.12", "resolved": "https://registry.npmjs.org/@types/google-protobuf/-/google-protobuf-3.15.12.tgz", @@ -2845,10 +2958,10 @@ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "license": "MIT" }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, @@ -2862,12 +2975,12 @@ } }, "node_modules/@types/node": { - "version": "20.14.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz", - "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==", + "version": "20.16.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.9.tgz", + "integrity": "sha512-rkvIVJxsOfBejxK7I0FO5sa2WxFmJCzoDwcd88+fq/CUfynNywTo/1/T6hyFz22CyztsnLS9nVlHOnTI36RH5w==", "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/responselike": { @@ -2897,13 +3010,6 @@ "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", "license": "MIT" }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, - "license": "ISC" - }, "node_modules/abbrev": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", @@ -3010,133 +3116,11 @@ } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "Python-2.0" }, "node_modules/available-typed-arrays": { "version": "1.0.7", @@ -3154,9 +3138,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1664.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1664.0.tgz", - "integrity": "sha512-S2IA1cCGz38d8ZKsuQGwlK3LE+9cXFt7OFsSGQtKX1Mc40xFXpiqQy7jX1r0vZIiy9ZMnxeTcBPM28G/yYu2kA==", + "version": "2.1691.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1691.0.tgz", + "integrity": "sha512-/F2YC+DlsY3UBM2Bdnh5RLHOPNibS/+IcjUuhP8XuctyrN+MlL+fWDAiela32LTDk7hMy4rx8MTgvbJ+0blO5g==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -3232,18 +3216,20 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "dev": true, "funding": [ { @@ -3262,9 +3248,9 @@ "license": "MIT", "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, "bin": { @@ -3401,9 +3387,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001644", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz", - "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==", + "version": "1.0.30001663", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", + "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", "dev": true, "funding": [ { @@ -3448,9 +3434,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", "license": "MIT" }, "node_modules/clean-stack": { @@ -3654,67 +3640,13 @@ "node": ">=4" } }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3785,24 +3717,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/docker-classic": { "name": "@pulumi/docker", "version": "3.6.1", @@ -3824,19 +3738,6 @@ "semver": "bin/semver" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3844,9 +3745,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.3.tgz", - "integrity": "sha512-QNdYSS5i8D9axWp/6XIezRObRHqaav/ur9z1VzCDUCH1XIFOr9WQk5xmgunhsTpjjgDy3oLxO/WMOVZlpUQrlA==", + "version": "1.5.28", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz", + "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==", "dev": true, "license": "ISC", "peer": true @@ -3905,67 +3806,6 @@ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "license": "MIT" }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -3987,121 +3827,64 @@ "node": ">= 0.4" } }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, + "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=0.8.0" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "node_modules/eslint": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz", + "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.6.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.11.1", + "@eslint/plugin-kit": "^0.2.0", "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", @@ -4113,10 +3896,18 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-compat-utils": { @@ -4161,56 +3952,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/eslint-plugin-es-x": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", @@ -4233,89 +3974,10 @@ "eslint": ">=8" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-n": { - "version": "17.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.2.tgz", - "integrity": "sha512-e+s4eAf5NtJaxPhTNu3qMO0Iz40WANS93w9LQgYcvuljgvDmWi/a3rh+OrNyMHeng6aOWGJO0rCg5lH4zi8yTw==", + "version": "17.10.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.3.tgz", + "integrity": "sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw==", "dev": true, "license": "MIT", "dependencies": { @@ -4338,17 +4000,30 @@ "eslint": ">=8.23.0" } }, - "node_modules/eslint-plugin-n/node_modules/globals": { - "version": "15.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", - "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/eslint-plugin-n/node_modules/semver": { @@ -4451,24 +4126,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -4520,9 +4177,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4530,20 +4187,20 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4559,22 +4216,6 @@ "node": ">=4.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4585,32 +4226,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4625,31 +4240,31 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4801,17 +4416,17 @@ "license": "MIT" }, "node_modules/fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" } ], "license": "MIT", @@ -4833,9 +4448,9 @@ } }, "node_modules/fdir": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.2.0.tgz", - "integrity": "sha512-9XaWcDl0riOX5j2kYfy0kKdg7skw3IY6kA4LFT8Tk2yF9UdrADUy8D6AJuBLtf7ISm/MksumwAHE3WVbMRyCLw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.3.0.tgz", + "integrity": "sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==", "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" @@ -4847,16 +4462,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/find-up": { @@ -4877,18 +4492,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -4908,9 +4522,9 @@ } }, "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -4947,13 +4561,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -4963,35 +4570,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5043,28 +4621,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-tsconfig": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", - "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dev": true, "license": "MIT", "dependencies": { @@ -5107,32 +4667,41 @@ "node": ">=10.13.0" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "license": "MIT", - "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=4" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "node_modules/globals": { + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", "dev": true, "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/google-protobuf": { @@ -5184,23 +4753,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -5367,9 +4919,9 @@ "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -5388,6 +4940,30 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -5406,9 +4982,9 @@ } }, "node_modules/import-in-the-middle": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.10.0.tgz", - "integrity": "sha512-Z1jumVdF2GwnnYfM0a/y2ts7mZbwFMgt5rRuVmLgobgahC6iKgN5MBuXjzfTIOUpq5LSU10vJIPpVKe0X89fIw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.11.0.tgz", + "integrity": "sha512-5DimNQGoe0pLUHbR9qK84iWaWjjbsxiqXnw6Qz64+azRgleqv9k2kTt5fw7QsOpmaGYtuxxursnPPsnTKEx10Q==", "license": "Apache-2.0", "dependencies": { "acorn": "^8.8.2", @@ -5435,118 +5011,38 @@ "node": ">=8" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ip-address/node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "license": "BSD-3-Clause" - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 12" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -5572,9 +5068,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -5586,38 +5082,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5671,35 +5135,6 @@ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "license": "MIT" }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -5710,39 +5145,6 @@ "node": ">=8" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -5755,38 +5157,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typed-array": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", @@ -5802,19 +5172,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -5863,13 +5220,13 @@ "peer": true }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -6106,18 +5463,16 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, "node_modules/minimist": { @@ -6307,9 +5662,9 @@ "license": "MIT" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/natural-compare": { @@ -6567,100 +5922,6 @@ "node": ">=8" } }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -6833,16 +6094,6 @@ "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -6881,9 +6132,9 @@ "license": "ISC" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", "dev": true, "license": "ISC", "peer": true @@ -7007,9 +6258,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -7086,9 +6337,9 @@ } }, "node_modules/promise-call-limit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.1.tgz", - "integrity": "sha512-utl+0x8gIDasV5X+PI5qWEPqH6fJS0pFtQ/4gZ95xfEFb/89dmh+/b895TbFDBLiafBvxD/PGTKfvxl4kH/pQg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", + "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" @@ -7114,9 +6365,9 @@ } }, "node_modules/protobufjs": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", - "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { @@ -7138,9 +6389,9 @@ } }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -7216,28 +6467,9 @@ "dependencies": { "json-parse-even-better-errors": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/require-directory": { @@ -7347,69 +6579,6 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7434,50 +6603,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -7518,22 +6643,6 @@ "node": ">= 0.4" } }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7561,25 +6670,6 @@ "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", "license": "BSD-2-Clause" }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -7687,15 +6777,15 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", "license": "CC0-1.0" }, "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "license": "BSD-3-Clause" }, "node_modules/ssri": { @@ -7749,9 +6839,9 @@ "license": "MIT" }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "license": "MIT", "engines": { "node": ">=12" @@ -7775,58 +6865,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7852,16 +6890,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -8035,36 +7063,10 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "license": "0BSD" }, "node_modules/tuf-js": { @@ -8094,116 +7096,10 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "license": "MIT" }, "node_modules/unique-filename": { @@ -8370,23 +7266,6 @@ "node": "^16.13.0 || >=18.0.0" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/which-typed-array": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", @@ -8505,9 +7384,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "license": "MIT", "engines": { "node": ">=12" diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json index dde1ea6792..445d5829bb 100644 --- a/.ops/aws-setup/package.json +++ b/.ops/aws-setup/package.json @@ -3,52 +3,29 @@ "main": "index.ts", "scripts": { "lint": "npm run lint:eslint && npm run lint:prettier", - "lint:eslint": "eslint --fix --ext .ts,.js --ignore-path .gitignore .", - "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{json,md}", + "lint:eslint": "eslint --fix .", + "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{json,md,mjs,ts}", "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier", - "lint:check:eslint": "eslint --no-fix --ext .ts,.js --ignore-path .gitignore .", - "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,md}" + "lint:check:eslint": "eslint .", + "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{json,md,mjs,ts}" }, "dependencies": { - "@pulumi/pulumi": "3.128.0", - "@pulumi/aws": "6.48.0", - "@pulumi/awsx": "2.13.0" + "@pulumi/pulumi": "3.134.1", + "@pulumi/aws": "6.53.0", + "@pulumi/awsx": "2.16.0" }, "devDependencies": { "@babel/eslint-parser": "7.25.1", - "@types/node": "20.14.14", - "eslint": "8.57.0", + "@eslint/compat": "1.1.1", + "@eslint/eslintrc": "3.1.0", + "@eslint/js": "9.11.1", + "@types/node": "20.16.9", + "eslint": "9.11.1", "eslint-config-prettier": "9.1.0", - "eslint-plugin-import": "2.29.1", - "eslint-plugin-n": "17.10.2", + "eslint-plugin-n": "17.10.3", "eslint-plugin-prettier": "5.2.1", "eslint-plugin-promise": "7.1.0", + "globals": "15.9.0", "prettier": "3.3.3" - }, - "eslintConfig": { - "root": true, - "env": { - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:prettier/recommended", - "prettier" - ], - "rules": { - "prefer-const": "error", - "prettier/prettier": "error", - "no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_$" - } - ] - }, - "parserOptions": { - "ecmaVersion": 2022, - "sourceType": "module", - "parser": "@babel/eslint-parser" - } } } diff --git a/.ops/ecamp3-logging/Chart.lock b/.ops/ecamp3-logging/Chart.lock index bb470f7f99..8173829f38 100644 --- a/.ops/ecamp3-logging/Chart.lock +++ b/.ops/ecamp3-logging/Chart.lock @@ -1,6 +1,6 @@ dependencies: - name: fluent-operator repository: https://fluent.github.io/helm-charts - version: 3.0.0 -digest: sha256:eb4362eba502d3b6674bb1b5105b3cad87433a8375ada7f148b376e8da131b17 -generated: "2024-07-09T09:28:58.748745351Z" + version: 3.2.0 +digest: sha256:03654b7d64b64ef0dfc672937ad047801203f85ecadd6d11a7614a79ab9f25d3 +generated: "2024-09-24T12:02:34.24397403Z" diff --git a/.ops/ecamp3-logging/Chart.yaml b/.ops/ecamp3-logging/Chart.yaml index 65f49c8714..6b90ebc7d4 100644 --- a/.ops/ecamp3-logging/Chart.yaml +++ b/.ops/ecamp3-logging/Chart.yaml @@ -25,5 +25,5 @@ appVersion: 0.1.0 dependencies: - name: fluent-operator - version: 3.0.0 + version: 3.2.0 repository: https://fluent.github.io/helm-charts diff --git a/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml b/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml index cb3ae73cb5..a6fefcca6f 100644 --- a/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml +++ b/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml @@ -1,6 +1,6 @@ services: remove-old-indexes: - image: node:22.5.1 + image: node:22.9.0 volumes: - ./src:/src command: diff --git a/.ops/ecamp3-logging/values.yaml b/.ops/ecamp3-logging/values.yaml index d52d4450d4..dd0c28a693 100644 --- a/.ops/ecamp3-logging/values.yaml +++ b/.ops/ecamp3-logging/values.yaml @@ -48,7 +48,7 @@ elasticsearch: storage: 10Gi removeOldIndexes: maxIndexAge: 15 - image: node:22.5.1 + image: node:22.9.0 kibana: name: kibana diff --git a/.ops/ops-dashboard/Chart.lock b/.ops/ops-dashboard/Chart.lock index d7c1f24218..202615a9db 100644 --- a/.ops/ops-dashboard/Chart.lock +++ b/.ops/ops-dashboard/Chart.lock @@ -1,15 +1,15 @@ dependencies: - name: oauth2-proxy repository: https://oauth2-proxy.github.io/manifests - version: 7.7.9 + version: 7.7.22 - name: kubernetes-dashboard repository: https://kubernetes.github.io/dashboard/ - version: 7.5.0 + version: 7.6.1 - name: oauth2-proxy repository: https://oauth2-proxy.github.io/manifests - version: 7.7.9 + version: 7.7.22 - name: oauth2-proxy repository: https://oauth2-proxy.github.io/manifests - version: 7.7.9 -digest: sha256:d59fb8f09271eabc1b56d4049ced9d101637b386d59e79b547361d2c6071907d -generated: "2024-07-16T15:09:43.307473692Z" + version: 7.7.22 +digest: sha256:268c62a44e114e20924768f7346568485ef85383ff89a6bedcfacb291e7c27bc +generated: "2024-09-26T14:27:47.045162074Z" diff --git a/.ops/ops-dashboard/Chart.yaml b/.ops/ops-dashboard/Chart.yaml index d6cfb60a10..f66d3e9aca 100644 --- a/.ops/ops-dashboard/Chart.yaml +++ b/.ops/ops-dashboard/Chart.yaml @@ -26,16 +26,16 @@ appVersion: 0.1.0 dependencies: - name: oauth2-proxy alias: grafana-proxy - version: 7.7.9 + version: 7.7.22 repository: https://oauth2-proxy.github.io/manifests - name: kubernetes-dashboard - version: 7.5.0 + version: 7.6.1 repository: https://kubernetes.github.io/dashboard/ - name: oauth2-proxy alias: kubernetes-dashboard-proxy - version: 7.7.9 + version: 7.7.22 repository: https://oauth2-proxy.github.io/manifests - name: oauth2-proxy alias: logging-proxy - version: 7.7.9 + version: 7.7.22 repository: https://oauth2-proxy.github.io/manifests diff --git a/api/.env b/api/.env index c09c3d6eb7..cf58c589b6 100644 --- a/api/.env +++ b/api/.env @@ -17,6 +17,7 @@ TRUSTED_PROXIES=::1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 ADDITIONAL_TRUSTED_HOSTS=localhost COOKIE_PREFIX=localhost_ +COOKIE_SECURE=false VARNISH_API_URL=http://http-cache:8081 API_CACHE_ENABLED=true @@ -31,8 +32,7 @@ APP_SECRET=!ChangeMe! # # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" # DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7" -DATABASE_URL="postgresql://ecamp3:ecamp3@database:5432/ecamp3dev?serverVersion=15&charset=utf8" -TEST_DATABASE_URL="postgresql://ecamp3:ecamp3@database:5432/ecamp3test?serverVersion=15&charset=utf8" +DATABASE_URL="postgresql://ecamp3:ecamp3@database:5432/ecamp3?serverVersion=15&charset=utf8" ###< doctrine/doctrine-bundle ### ###> nelmio/cors-bundle ### diff --git a/api/Dockerfile b/api/Dockerfile index 6178a0dcf1..9052915aec 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -1,9 +1,9 @@ -#syntax=docker/dockerfile:1.9 +#syntax=docker/dockerfile:1.10 # Adapted from https://github.com/api-platform/api-platform/blob/fa1c5808305d7cadbf7b8392e0fddb6e80fb2092/api/Dockerfile # Versions -FROM dunglas/frankenphp:1.2-php8.3.10 AS frankenphp_upstream +FROM dunglas/frankenphp:1.2-php8.3.11 AS frankenphp_upstream # the different stages of this Dockerfile are meant to be built into separate images # https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage @@ -48,6 +48,8 @@ RUN set -eux; \ ###< recipes ### COPY --link docker/php/conf.d/api-platform.ini $PHP_INI_DIR/conf.d/ +ENV LOG_LEVEL=info +COPY --link docker/caddy/Caddyfile /etc/caddy/Caddyfile COPY --link --chmod=755 docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint COPY --link --chmod=755 docker/php/migrate-database.sh /usr/local/bin/migrate-database @@ -63,7 +65,6 @@ ENV APP_ENV=dev XDEBUG_MODE=off RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" COPY --link docker/php/conf.d/api-platform.dev.ini $PHP_INI_DIR/conf.d/ -COPY --link docker/caddy/Caddyfile /etc/caddy/Caddyfile # renovate: datasource=github-tags depName=xdebug/xdebug ARG XDEBUG_VERSION=3.3.2 @@ -84,7 +85,6 @@ ENV APP_ENV=prod RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" COPY --link docker/php/conf.d/api-platform.prod.ini $PHP_INI_DIR/conf.d/ -COPY --link docker/caddy/Caddyfile.prod /etc/caddy/Caddyfile #COPY --link docker/caddy/worker.Caddyfile /etc/caddy/worker.Caddyfile # prevent the reinstallation of vendors at every changes in the source code diff --git a/api/composer.json b/api/composer.json index 1a61aab86a..3221d01983 100644 --- a/api/composer.json +++ b/api/composer.json @@ -5,70 +5,71 @@ "php": ">=8.1.0", "ext-ctype": "*", "ext-iconv": "*", - "api-platform/core": "3.3.11", + "api-platform/core": "3.3.13", "composer/package-versions-deprecated": "1.11.99", "cweagans/composer-patches": "1.7.3", - "doctrine/doctrine-bundle": "2.12.0", + "doctrine/doctrine-bundle": "2.13.0", "doctrine/doctrine-migrations-bundle": "3.3.1", - "doctrine/orm": "2.19.6", + "doctrine/orm": "2.19.7", "exercise/htmlpurifier-bundle": "5.0", "friendsofsymfony/http-cache": "3.1.0", "friendsofsymfony/http-cache-bundle": "3.0.1", "google/recaptcha": "1.3.0", "guzzlehttp/guzzle": "7.9.2", - "knpuniversity/oauth2-client-bundle": "2.18.1", + "knpuniversity/oauth2-client-bundle": "2.18.2", "league/oauth2-google": "4.0.1", "lexik/jwt-authentication-bundle": "3.1.0", "nelmio/cors-bundle": "2.5.0", "phpdocumentor/reflection-docblock": "5.4.1", - "phpmyadmin/sql-parser": "5.9.0", + "phpmyadmin/sql-parser": "5.10.0", "ramsey/uuid": "4.7.6", - "rize/uri-template": "0.3.6", + "rize/uri-template": "0.3.8", "sentry/sentry-symfony": "5.0.1", "stof/doctrine-extensions-bundle": "1.12.0", "swaggest/json-schema": "0.12.42", "symfony/asset": "7.1.1", - "symfony/console": "7.1.3", + "symfony/console": "7.1.4", "symfony/dotenv": "7.1.3", - "symfony/expression-language": "7.1.1", + "symfony/expression-language": "7.1.4", "symfony/flex": "2.4.6", - "symfony/framework-bundle": "7.1.3", - "symfony/http-client": "7.1.3", + "symfony/framework-bundle": "7.1.4", + "symfony/http-client": "7.1.4", "symfony/intl": "7.1.1", "symfony/mailer": "7.1.2", "symfony/monolog-bundle": "3.10.0", - "symfony/property-access": "7.1.1", + "symfony/property-access": "7.1.4", "symfony/property-info": "7.1.3", "symfony/runtime": "7.1.1", - "symfony/security-bundle": "7.1.3", - "symfony/serializer": "7.1.3", + "symfony/security-bundle": "7.1.4", + "symfony/serializer": "7.1.4", "symfony/translation": "7.1.3", "symfony/twig-bundle": "7.1.1", - "symfony/validator": "7.1.3", - "symfony/yaml": "7.1.1", + "symfony/validator": "7.1.4", + "symfony/yaml": "7.1.4", "twig/cssinliner-extra": "^3.4", - "twig/extra-bundle": "^3.4", - "webonyx/graphql-php": "15.12.5" + "twig/extra-bundle": "3.13.0", + "webonyx/graphql-php": "15.14.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "3.61.1", + "brianium/paratest": "7.4.5", + "friendsofphp/php-cs-fixer": "3.64.0", "hautelook/alice-bundle": "2.13.0", "justinrainbow/json-schema": "6.0.0", "php-coveralls/php-coveralls": "2.7.0", "phpspec/prophecy-phpunit": "2.2", - "phpstan/phpstan": "1.11.9", - "phpunit/phpunit": "10.5.29", - "rector/rector": "1.2.2", + "phpstan/phpstan": "1.12.5", + "phpunit/phpunit": "10.5.31", + "rector/rector": "1.2.5", "spatie/phpunit-snapshot-assertions": "5.1.6", "symfony/browser-kit": "7.1.1", "symfony/css-selector": "7.1.1", "symfony/debug-bundle": "7.1.1", - "symfony/maker-bundle": "1.60.0", - "symfony/phpunit-bridge": "7.1.3", + "symfony/maker-bundle": "1.61.0", + "symfony/phpunit-bridge": "7.1.4", "symfony/stopwatch": "7.1.1", - "symfony/var-dumper": "7.1.3", - "symfony/web-profiler-bundle": "7.1.3", - "vimeo/psalm": "5.25.0" + "symfony/var-dumper": "7.1.4", + "symfony/web-profiler-bundle": "7.1.4", + "vimeo/psalm": "5.26.1" }, "config": { "optimize-autoloader": true, @@ -114,6 +115,10 @@ "Composer\\Config::disableProcessTimeout", "bin/phpunit -d memory_limit=-1" ], + "paratest": [ + "Composer\\Config::disableProcessTimeout", + "vendor/bin/paratest --passthru-php=\"-d memory_limit=-1\"" + ], "update-snapshots": [ "Composer\\Config::disableProcessTimeout", "bin/phpunit -d memory_limit=-1 -d --update-snapshots tests/Api/SnapshotTests", diff --git a/api/composer.lock b/api/composer.lock index 60a2fdf760..d61546600d 100644 --- a/api/composer.lock +++ b/api/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c43da401dbe408dede154e8b70c51bdd", + "content-hash": "ec0b2292076f62a2b60fa7d2a2f7e00a", "packages": [ { "name": "api-platform/core", - "version": "v3.3.11", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/api-platform/core.git", - "reference": "ea7d443376dfa1f9a05b53060049e7837d2ec7d4" + "reference": "d08d4dd2227c8f528b15d8d2513a647b1aebabc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/api-platform/core/zipball/ea7d443376dfa1f9a05b53060049e7837d2ec7d4", - "reference": "ea7d443376dfa1f9a05b53060049e7837d2ec7d4", + "url": "https://api.github.com/repos/api-platform/core/zipball/d08d4dd2227c8f528b15d8d2513a647b1aebabc7", + "reference": "d08d4dd2227c8f528b15d8d2513a647b1aebabc7", "shasum": "" }, "require": { @@ -190,9 +190,9 @@ ], "support": { "issues": "https://github.com/api-platform/core/issues", - "source": "https://github.com/api-platform/core/tree/v3.3.11" + "source": "https://github.com/api-platform/core/tree/v3.3.13" }, - "time": "2024-07-20T08:19:33+00:00" + "time": "2024-09-15T08:23:39+00:00" }, { "name": "behat/transliterator", @@ -762,16 +762,16 @@ }, { "name": "doctrine/dbal", - "version": "3.8.6", + "version": "3.9.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "b7411825cf7efb7e51f9791dea19d86e43b399a1" + "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/b7411825cf7efb7e51f9791dea19d86e43b399a1", - "reference": "b7411825cf7efb7e51f9791dea19d86e43b399a1", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", + "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", "shasum": "" }, "require": { @@ -787,12 +787,12 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.11.5", + "phpstan/phpstan": "1.12.0", "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "9.6.19", + "phpunit/phpunit": "9.6.20", "psalm/plugin-phpunit": "0.18.4", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.1", + "squizlabs/php_codesniffer": "3.10.2", "symfony/cache": "^5.4|^6.0|^7.0", "symfony/console": "^4.4|^5.4|^6.0|^7.0", "vimeo/psalm": "4.30.0" @@ -855,7 +855,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.8.6" + "source": "https://github.com/doctrine/dbal/tree/3.9.1" }, "funding": [ { @@ -871,7 +871,7 @@ "type": "tidelift" } ], - "time": "2024-06-19T10:38:17+00:00" + "time": "2024-09-01T13:49:23+00:00" }, { "name": "doctrine/deprecations", @@ -922,16 +922,16 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.12.0", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "5418e811a14724068e95e0ba43353b903ada530f" + "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/5418e811a14724068e95e0ba43353b903ada530f", - "reference": "5418e811a14724068e95e0ba43353b903ada530f", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/ca59d84b8e63143ce1aed90cdb333ba329d71563", + "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563", "shasum": "" }, "require": { @@ -1022,7 +1022,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.12.0" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.0" }, "funding": [ { @@ -1038,7 +1038,7 @@ "type": "tidelift" } ], - "time": "2024-03-19T07:20:37+00:00" + "time": "2024-09-01T09:46:40+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", @@ -1463,16 +1463,16 @@ }, { "name": "doctrine/migrations", - "version": "3.8.0", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "535a70dcbd88b8c6ba945be050977457f4f4c06c" + "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/535a70dcbd88b8c6ba945be050977457f4f4c06c", - "reference": "535a70dcbd88b8c6ba945be050977457f4f4c06c", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/7760fbd0b7cb58bfb50415505a7bab821adf0877", + "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877", "shasum": "" }, "require": { @@ -1495,6 +1495,7 @@ "doctrine/persistence": "^2 || ^3", "doctrine/sql-formatter": "^1.0", "ext-pdo_sqlite": "*", + "fig/log-test": "^1", "phpstan/phpstan": "^1.10", "phpstan/phpstan-deprecation-rules": "^1.1", "phpstan/phpstan-phpunit": "^1.3", @@ -1545,7 +1546,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.8.0" + "source": "https://github.com/doctrine/migrations/tree/3.8.1" }, "funding": [ { @@ -1561,20 +1562,20 @@ "type": "tidelift" } ], - "time": "2024-06-26T14:12:46+00:00" + "time": "2024-08-28T13:17:28+00:00" }, { "name": "doctrine/orm", - "version": "2.19.6", + "version": "2.19.7", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073" + "reference": "168ac31084226f94d42e7461a40ff5607a56bd35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073", - "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073", + "url": "https://api.github.com/repos/doctrine/orm/zipball/168ac31084226f94d42e7461a40ff5607a56bd35", + "reference": "168ac31084226f94d42e7461a40ff5607a56bd35", "shasum": "" }, "require": { @@ -1660,9 +1661,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.19.6" + "source": "https://github.com/doctrine/orm/tree/2.19.7" }, - "time": "2024-06-26T17:24:40+00:00" + "time": "2024-08-23T06:54:57+00:00" }, { "name": "doctrine/persistence", @@ -1763,16 +1764,16 @@ }, { "name": "doctrine/sql-formatter", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc" + "reference": "7f83911cc5eba870de7ebb11283972483f7e2891" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d1ac84aef745c69ea034929eb6d65a6908b675cc", - "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891", + "reference": "7f83911cc5eba870de7ebb11283972483f7e2891", "shasum": "" }, "require": { @@ -1812,9 +1813,9 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.4.0" + "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1" }, - "time": "2024-05-08T08:12:09+00:00" + "time": "2024-08-05T20:32:22+00:00" }, { "name": "egulias/email-validator", @@ -2755,32 +2756,31 @@ }, { "name": "knpuniversity/oauth2-client-bundle", - "version": "v2.18.1", + "version": "v2.18.2", "source": { "type": "git", "url": "https://github.com/knpuniversity/oauth2-client-bundle.git", - "reference": "1d59f49f164805b45f95f92cf743781bc2ba7d2b" + "reference": "0f8db87efa064bc1800315c027a80b53ef935524" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/1d59f49f164805b45f95f92cf743781bc2ba7d2b", - "reference": "1d59f49f164805b45f95f92cf743781bc2ba7d2b", + "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/0f8db87efa064bc1800315c027a80b53ef935524", + "reference": "0f8db87efa064bc1800315c027a80b53ef935524", "shasum": "" }, "require": { "league/oauth2-client": "^2.0", "php": ">=8.1", - "symfony/dependency-injection": "^4.4|^5.0|^6.0|^7.0", - "symfony/framework-bundle": "^4.4|^5.0|^6.0|^7.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0|^7.0", - "symfony/routing": "^4.4|^5.0|^6.0|^7.0" + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/framework-bundle": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0" }, "require-dev": { "league/oauth2-facebook": "^1.1|^2.0", - "phpstan/phpstan": "^1.0", - "symfony/phpunit-bridge": "^5.3.1|^6.0|^7.0", - "symfony/security-guard": "^4.4|^5.0|^6.0|^7.0", - "symfony/yaml": "^4.4|^5.0|^6.0|^7.0" + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", + "symfony/security-guard": "^5.4", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "suggest": { "symfony/security-guard": "For integration with Symfony's Guard Security layer" @@ -2809,40 +2809,40 @@ ], "support": { "issues": "https://github.com/knpuniversity/oauth2-client-bundle/issues", - "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.18.1" + "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.18.2" }, - "time": "2024-02-14T17:41:28+00:00" + "time": "2024-08-12T15:26:07+00:00" }, { "name": "lcobucci/clock", - "version": "3.2.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "6f28b826ea01306b07980cb8320ab30b966cd715" + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715", - "reference": "6f28b826ea01306b07980cb8320ab30b966cd715", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/db3713a61addfffd615b79bf0bc22f0ccc61b86b", + "reference": "db3713a61addfffd615b79bf0bc22f0ccc61b86b", "shasum": "" }, "require": { - "php": "~8.2.0 || ~8.3.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "infection/infection": "^0.27", - "lcobucci/coding-standard": "^11.0.0", + "infection/infection": "^0.29", + "lcobucci/coding-standard": "^11.1.0", "phpstan/extension-installer": "^1.3.1", "phpstan/phpstan": "^1.10.25", "phpstan/phpstan-deprecation-rules": "^1.1.3", "phpstan/phpstan-phpunit": "^1.3.13", "phpstan/phpstan-strict-rules": "^1.5.1", - "phpunit/phpunit": "^10.2.3" + "phpunit/phpunit": "^11.3.6" }, "type": "library", "autoload": { @@ -2863,7 +2863,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/3.2.0" + "source": "https://github.com/lcobucci/clock/tree/3.3.1" }, "funding": [ { @@ -2875,7 +2875,7 @@ "type": "patreon" } ], - "time": "2023-11-17T17:00:27+00:00" + "time": "2024-09-24T20:45:14+00:00" }, { "name": "lcobucci/jwt", @@ -3355,16 +3355,16 @@ }, { "name": "php-http/client-common", - "version": "2.7.1", + "version": "2.7.2", "source": { "type": "git", "url": "https://github.com/php-http/client-common.git", - "reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612" + "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/1e19c059b0e4d5f717bf5d524d616165aeab0612", - "reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612", + "url": "https://api.github.com/repos/php-http/client-common/zipball/0cfe9858ab9d3b213041b947c881d5b19ceeca46", + "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46", "shasum": "" }, "require": { @@ -3418,9 +3418,9 @@ ], "support": { "issues": "https://github.com/php-http/client-common/issues", - "source": "https://github.com/php-http/client-common/tree/2.7.1" + "source": "https://github.com/php-http/client-common/tree/2.7.2" }, - "time": "2023-11-30T10:31:25+00:00" + "time": "2024-09-24T06:21:48+00:00" }, { "name": "php-http/discovery", @@ -3503,16 +3503,16 @@ }, { "name": "php-http/httplug", - "version": "2.4.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/php-http/httplug.git", - "reference": "625ad742c360c8ac580fcc647a1541d29e257f67" + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67", - "reference": "625ad742c360c8ac580fcc647a1541d29e257f67", + "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", "shasum": "" }, "require": { @@ -3554,9 +3554,9 @@ ], "support": { "issues": "https://github.com/php-http/httplug/issues", - "source": "https://github.com/php-http/httplug/tree/2.4.0" + "source": "https://github.com/php-http/httplug/tree/2.4.1" }, - "time": "2023-04-14T15:10:03+00:00" + "time": "2024-09-23T11:39:58+00:00" }, { "name": "php-http/message", @@ -3904,16 +3904,16 @@ }, { "name": "phpmyadmin/sql-parser", - "version": "5.9.0", + "version": "5.10.0", "source": { "type": "git", "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "011fa18a4e55591fac6545a821921dd1d61c6984" + "reference": "91d980ab76c3f152481e367f62b921adc38af451" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/011fa18a4e55591fac6545a821921dd1d61c6984", - "reference": "011fa18a4e55591fac6545a821921dd1d61c6984", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/91d980ab76c3f152481e367f62b921adc38af451", + "reference": "91d980ab76c3f152481e367f62b921adc38af451", "shasum": "" }, "require": { @@ -3931,8 +3931,7 @@ "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.9.12", "phpstan/phpstan-phpunit": "^1.3.3", - "phpunit/php-code-coverage": "*", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "phpunit/phpunit": "^8.5 || ^9.6", "psalm/plugin-phpunit": "^0.16.1", "vimeo/psalm": "^4.11", "zumba/json-serializer": "~3.0.2" @@ -3988,20 +3987,20 @@ "type": "other" } ], - "time": "2024-01-20T20:34:02+00:00" + "time": "2024-08-29T20:56:34+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.29.1", + "version": "1.31.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4" + "reference": "249f15fb843bf240cf058372dad29e100cee6c17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/249f15fb843bf240cf058372dad29e100cee6c17", + "reference": "249f15fb843bf240cf058372dad29e100cee6c17", "shasum": "" }, "require": { @@ -4033,9 +4032,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.31.0" }, - "time": "2024-05-31T08:52:43+00:00" + "time": "2024-09-22T11:32:18+00:00" }, { "name": "psr/cache", @@ -4730,16 +4729,16 @@ }, { "name": "rize/uri-template", - "version": "0.3.6", + "version": "0.3.8", "source": { "type": "git", "url": "https://github.com/rize/UriTemplate.git", - "reference": "34efe65c79710eed0883884f2285ae6d4a0aad19" + "reference": "34a5b96d0b65a5dddb7d20f09b6527a43faede24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rize/UriTemplate/zipball/34efe65c79710eed0883884f2285ae6d4a0aad19", - "reference": "34efe65c79710eed0883884f2285ae6d4a0aad19", + "url": "https://api.github.com/repos/rize/UriTemplate/zipball/34a5b96d0b65a5dddb7d20f09b6527a43faede24", + "reference": "34a5b96d0b65a5dddb7d20f09b6527a43faede24", "shasum": "" }, "require": { @@ -4772,7 +4771,7 @@ ], "support": { "issues": "https://github.com/rize/UriTemplate/issues", - "source": "https://github.com/rize/UriTemplate/tree/0.3.6" + "source": "https://github.com/rize/UriTemplate/tree/0.3.8" }, "funding": [ { @@ -4788,20 +4787,20 @@ "type": "open_collective" } ], - "time": "2024-03-10T08:07:49+00:00" + "time": "2024-08-30T07:09:40+00:00" }, { "name": "sentry/sentry", - "version": "4.8.1", + "version": "4.9.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "61770efd8b7888e0bdd7d234f0ba67b066e47d04" + "reference": "788ec170f51ebb22f2809a1e3f78b19ccd39b70d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/61770efd8b7888e0bdd7d234f0ba67b066e47d04", - "reference": "61770efd8b7888e0bdd7d234f0ba67b066e47d04", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/788ec170f51ebb22f2809a1e3f78b19ccd39b70d", + "reference": "788ec170f51ebb22f2809a1e3f78b19ccd39b70d", "shasum": "" }, "require": { @@ -4865,7 +4864,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.8.1" + "source": "https://github.com/getsentry/sentry-php/tree/4.9.0" }, "funding": [ { @@ -4877,7 +4876,7 @@ "type": "custom" } ], - "time": "2024-07-16T13:45:27+00:00" + "time": "2024-08-08T14:40:50+00:00" }, { "name": "sentry/sentry-symfony", @@ -5226,16 +5225,16 @@ }, { "name": "symfony/cache", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "8ac37acee794372f9732fe8a61a8221f6762148e" + "reference": "86e5296b10e4dec8c8441056ca606aedb8a3be0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/8ac37acee794372f9732fe8a61a8221f6762148e", - "reference": "8ac37acee794372f9732fe8a61a8221f6762148e", + "url": "https://api.github.com/repos/symfony/cache/zipball/86e5296b10e4dec8c8441056ca606aedb8a3be0a", + "reference": "86e5296b10e4dec8c8441056ca606aedb8a3be0a", "shasum": "" }, "require": { @@ -5303,7 +5302,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.3" + "source": "https://github.com/symfony/cache/tree/v7.1.5" }, "funding": [ { @@ -5319,7 +5318,7 @@ "type": "tidelift" } ], - "time": "2024-07-17T06:10:24+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/cache-contracts", @@ -5548,16 +5547,16 @@ }, { "name": "symfony/console", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9" + "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", - "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", + "url": "https://api.github.com/repos/symfony/console/zipball/1eed7af6961d763e7832e874d7f9b21c3ea9c111", + "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111", "shasum": "" }, "require": { @@ -5621,7 +5620,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.3" + "source": "https://github.com/symfony/console/tree/v7.1.4" }, "funding": [ { @@ -5637,7 +5636,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-08-15T22:48:53+00:00" }, { "name": "symfony/css-selector", @@ -5706,16 +5705,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "8126f0be4ff984e4db0140e60917900a53facb49" + "reference": "38465f925ec4e0707b090e9147c65869837d639d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8126f0be4ff984e4db0140e60917900a53facb49", - "reference": "8126f0be4ff984e4db0140e60917900a53facb49", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/38465f925ec4e0707b090e9147c65869837d639d", + "reference": "38465f925ec4e0707b090e9147c65869837d639d", "shasum": "" }, "require": { @@ -5766,7 +5765,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.1.3" + "source": "https://github.com/symfony/dependency-injection/tree/v7.1.5" }, "funding": [ { @@ -5782,7 +5781,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T07:35:39+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/deprecation-contracts", @@ -5853,16 +5852,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "b526822483124b62ff3cda14237418408f444e4d" + "reference": "2568d0adaa5b0018b07beaa90363b880a43cc957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/b526822483124b62ff3cda14237418408f444e4d", - "reference": "b526822483124b62ff3cda14237418408f444e4d", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/2568d0adaa5b0018b07beaa90363b880a43cc957", + "reference": "2568d0adaa5b0018b07beaa90363b880a43cc957", "shasum": "" }, "require": { @@ -5941,7 +5940,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.3" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.5" }, "funding": [ { @@ -5957,7 +5956,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-09-08T12:32:26+00:00" }, { "name": "symfony/dotenv", @@ -6266,16 +6265,16 @@ }, { "name": "symfony/expression-language", - "version": "v7.1.1", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "463cb95f80c14136175f4e03f7f6199b01c6b8b4" + "reference": "b9e4bc6685d513c10235145ed1042a6081635806" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/463cb95f80c14136175f4e03f7f6199b01c6b8b4", - "reference": "463cb95f80c14136175f4e03f7f6199b01c6b8b4", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/b9e4bc6685d513c10235145ed1042a6081635806", + "reference": "b9e4bc6685d513c10235145ed1042a6081635806", "shasum": "" }, "require": { @@ -6310,7 +6309,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v7.1.1" + "source": "https://github.com/symfony/expression-language/tree/v7.1.4" }, "funding": [ { @@ -6326,20 +6325,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-08-12T09:59:40+00:00" }, { "name": "symfony/filesystem", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c" + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/92a91985250c251de9b947a14bb2c9390b1a562c", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/61fe0566189bf32e8cfee78335d8776f64a66f5a", + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a", "shasum": "" }, "require": { @@ -6376,7 +6375,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.1.2" + "source": "https://github.com/symfony/filesystem/tree/v7.1.5" }, "funding": [ { @@ -6392,20 +6391,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-09-17T09:16:35+00:00" }, { "name": "symfony/finder", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "717c6329886f32dc65e27461f80f2a465412fdca" + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca", - "reference": "717c6329886f32dc65e27461f80f2a465412fdca", + "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", "shasum": "" }, "require": { @@ -6440,7 +6439,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.3" + "source": "https://github.com/symfony/finder/tree/v7.1.4" }, "funding": [ { @@ -6456,7 +6455,7 @@ "type": "tidelift" } ], - "time": "2024-07-24T07:08:44+00:00" + "time": "2024-08-13T14:28:19+00:00" }, { "name": "symfony/flex", @@ -6525,16 +6524,16 @@ }, { "name": "symfony/framework-bundle", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "a32ec544bd501eb4619eb977860ad3076ee55061" + "reference": "711af4eefcb4054a9c93e44b403626e1826bcddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/a32ec544bd501eb4619eb977860ad3076ee55061", - "reference": "a32ec544bd501eb4619eb977860ad3076ee55061", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/711af4eefcb4054a9c93e44b403626e1826bcddd", + "reference": "711af4eefcb4054a9c93e44b403626e1826bcddd", "shasum": "" }, "require": { @@ -6652,7 +6651,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.1.3" + "source": "https://github.com/symfony/framework-bundle/tree/v7.1.4" }, "funding": [ { @@ -6668,20 +6667,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T13:24:34+00:00" + "time": "2024-08-11T16:10:02+00:00" }, { "name": "symfony/http-client", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "b79858aa7a051ea791b0d50269a234a0b50cb231" + "reference": "a8f8d60b30b331cf4b743b3632e5acdba3f8285c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/b79858aa7a051ea791b0d50269a234a0b50cb231", - "reference": "b79858aa7a051ea791b0d50269a234a0b50cb231", + "url": "https://api.github.com/repos/symfony/http-client/zipball/a8f8d60b30b331cf4b743b3632e5acdba3f8285c", + "reference": "a8f8d60b30b331cf4b743b3632e5acdba3f8285c", "shasum": "" }, "require": { @@ -6746,7 +6745,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.1.3" + "source": "https://github.com/symfony/http-client/tree/v7.1.4" }, "funding": [ { @@ -6762,7 +6761,7 @@ "type": "tidelift" } ], - "time": "2024-07-17T06:10:24+00:00" + "time": "2024-08-26T06:32:37+00:00" }, { "name": "symfony/http-client-contracts", @@ -6844,16 +6843,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e30ef73b1e44eea7eb37ba69600a354e553f694b", + "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b", "shasum": "" }, "require": { @@ -6901,7 +6900,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.3" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.5" }, "funding": [ { @@ -6917,20 +6916,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186" + "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/db9702f3a04cc471ec8c70e881825db26ac5f186", - "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/44204d96150a9df1fc57601ec933d23fefc2d65b", + "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b", "shasum": "" }, "require": { @@ -7015,7 +7014,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.3" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.5" }, "funding": [ { @@ -7031,7 +7030,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T14:58:15+00:00" + "time": "2024-09-21T06:09:21+00:00" }, { "name": "symfony/intl", @@ -7201,16 +7200,16 @@ }, { "name": "symfony/mime", - "version": "v7.1.2", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc" + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/26a00b85477e69a4bab63b66c5dce64f18b0cbfc", - "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc", + "url": "https://api.github.com/repos/symfony/mime/zipball/711d2e167e8ce65b05aea6b258c449671cdd38ff", + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff", "shasum": "" }, "require": { @@ -7265,7 +7264,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.2" + "source": "https://github.com/symfony/mime/tree/v7.1.5" }, "funding": [ { @@ -7281,7 +7280,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/monolog-bridge", @@ -7583,22 +7582,21 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c" + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", - "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -7647,7 +7645,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" }, "funding": [ { @@ -7663,24 +7661,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9" + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", - "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -7723,7 +7721,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" }, "funding": [ { @@ -7739,20 +7737,20 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:35:24+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/property-access", - "version": "v7.1.1", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "74e39e6a6276b8e384f34c6ddbc10a6c9a60193a" + "reference": "6c709f97103355016e5782d0622437ae381012ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/74e39e6a6276b8e384f34c6ddbc10a6c9a60193a", - "reference": "74e39e6a6276b8e384f34c6ddbc10a6c9a60193a", + "url": "https://api.github.com/repos/symfony/property-access/zipball/6c709f97103355016e5782d0622437ae381012ad", + "reference": "6c709f97103355016e5782d0622437ae381012ad", "shasum": "" }, "require": { @@ -7799,7 +7797,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.1.1" + "source": "https://github.com/symfony/property-access/tree/v7.1.4" }, "funding": [ { @@ -7815,7 +7813,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-08-30T16:12:47+00:00" }, { "name": "symfony/property-info", @@ -7903,16 +7901,16 @@ }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0" + "reference": "405a7bcd872f1563966f64be19f1362d94ce71ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/1365d10f5476f74a27cf9c2d1eee70c069019db0", - "reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/405a7bcd872f1563966f64be19f1362d94ce71ab", + "reference": "405a7bcd872f1563966f64be19f1362d94ce71ab", "shasum": "" }, "require": { @@ -7966,7 +7964,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.3" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.4" }, "funding": [ { @@ -7982,20 +7980,20 @@ "type": "tidelift" } ], - "time": "2024-07-17T06:10:24+00:00" + "time": "2024-08-15T22:48:53+00:00" }, { "name": "symfony/routing", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0" + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", - "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", + "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", "shasum": "" }, "require": { @@ -8047,7 +8045,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.3" + "source": "https://github.com/symfony/routing/tree/v7.1.4" }, "funding": [ { @@ -8063,7 +8061,7 @@ "type": "tidelift" } ], - "time": "2024-07-17T06:10:24+00:00" + "time": "2024-08-29T08:16:25+00:00" }, { "name": "symfony/runtime", @@ -8146,16 +8144,16 @@ }, { "name": "symfony/security-bundle", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "4f77a89e21c2e700b5fbbf3c1eccd71b9a5d69ad" + "reference": "5e10107856ff64d477c61fed7bcbb8a16125ea01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/4f77a89e21c2e700b5fbbf3c1eccd71b9a5d69ad", - "reference": "4f77a89e21c2e700b5fbbf3c1eccd71b9a5d69ad", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/5e10107856ff64d477c61fed7bcbb8a16125ea01", + "reference": "5e10107856ff64d477c61fed7bcbb8a16125ea01", "shasum": "" }, "require": { @@ -8164,7 +8162,7 @@ "php": ">=8.2", "symfony/clock": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4.11|^7.1.4", "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", @@ -8232,7 +8230,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v7.1.3" + "source": "https://github.com/symfony/security-bundle/tree/v7.1.4" }, "funding": [ { @@ -8248,20 +8246,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T07:24:20+00:00" + "time": "2024-08-20T11:38:55+00:00" }, { "name": "symfony/security-core", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "aa4f432586a129017ce0ba34e2b1bfe6babfe8c7" + "reference": "dbeb09f0b786590d126c0da297e2320e66ec353b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/aa4f432586a129017ce0ba34e2b1bfe6babfe8c7", - "reference": "aa4f432586a129017ce0ba34e2b1bfe6babfe8c7", + "url": "https://api.github.com/repos/symfony/security-core/zipball/dbeb09f0b786590d126c0da297e2320e66ec353b", + "reference": "dbeb09f0b786590d126c0da297e2320e66ec353b", "shasum": "" }, "require": { @@ -8318,7 +8316,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v7.1.3" + "source": "https://github.com/symfony/security-core/tree/v7.1.5" }, "funding": [ { @@ -8334,7 +8332,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-09-20T13:35:23+00:00" }, { "name": "symfony/security-csrf", @@ -8406,16 +8404,16 @@ }, { "name": "symfony/security-http", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "19f07b6530dbb82017c38ee7582b154f5c42b179" + "reference": "d47c013bccf4b81a1496826d42dfa05da549131a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/19f07b6530dbb82017c38ee7582b154f5c42b179", - "reference": "19f07b6530dbb82017c38ee7582b154f5c42b179", + "url": "https://api.github.com/repos/symfony/security-http/zipball/d47c013bccf4b81a1496826d42dfa05da549131a", + "reference": "d47c013bccf4b81a1496826d42dfa05da549131a", "shasum": "" }, "require": { @@ -8474,7 +8472,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v7.1.3" + "source": "https://github.com/symfony/security-http/tree/v7.1.5" }, "funding": [ { @@ -8490,20 +8488,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T07:24:20+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/serializer", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09" + "reference": "0158b0e91b7cf7e744a6fb9acaeb613d1ca40dbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09", - "reference": "0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09", + "url": "https://api.github.com/repos/symfony/serializer/zipball/0158b0e91b7cf7e744a6fb9acaeb613d1ca40dbb", + "reference": "0158b0e91b7cf7e744a6fb9acaeb613d1ca40dbb", "shasum": "" }, "require": { @@ -8571,7 +8569,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v7.1.3" + "source": "https://github.com/symfony/serializer/tree/v7.1.4" }, "funding": [ { @@ -8587,7 +8585,7 @@ "type": "tidelift" } ], - "time": "2024-07-17T06:10:24+00:00" + "time": "2024-08-22T09:39:57+00:00" }, { "name": "symfony/service-contracts", @@ -8736,16 +8734,16 @@ }, { "name": "symfony/string", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", - "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", + "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", "shasum": "" }, "require": { @@ -8803,7 +8801,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.3" + "source": "https://github.com/symfony/string/tree/v7.1.5" }, "funding": [ { @@ -8819,7 +8817,7 @@ "type": "tidelift" } ], - "time": "2024-07-22T10:25:37+00:00" + "time": "2024-09-20T08:28:38+00:00" }, { "name": "symfony/translation", @@ -8995,16 +8993,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "96e6e12a63db80bcedefc012042d2cb2d1a015f8" + "reference": "e997e5025b53c0f7b17632802daefdd6a04540ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/96e6e12a63db80bcedefc012042d2cb2d1a015f8", - "reference": "96e6e12a63db80bcedefc012042d2cb2d1a015f8", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/e997e5025b53c0f7b17632802daefdd6a04540ae", + "reference": "e997e5025b53c0f7b17632802daefdd6a04540ae", "shasum": "" }, "require": { @@ -9084,7 +9082,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v7.1.1" + "source": "https://github.com/symfony/twig-bridge/tree/v7.1.5" }, "funding": [ { @@ -9100,7 +9098,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-15T06:48:17+00:00" }, { "name": "symfony/twig-bundle", @@ -9188,16 +9186,16 @@ }, { "name": "symfony/type-info", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "60b28eb733f1453287f1263ed305b96091e0d1dc" + "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/60b28eb733f1453287f1263ed305b96091e0d1dc", - "reference": "60b28eb733f1453287f1263ed305b96091e0d1dc", + "url": "https://api.github.com/repos/symfony/type-info/zipball/9f6094aa900d2c06bd61576a6f279d4ac441515f", + "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f", "shasum": "" }, "require": { @@ -9250,7 +9248,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.1.1" + "source": "https://github.com/symfony/type-info/tree/v7.1.5" }, "funding": [ { @@ -9266,20 +9264,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:59:31+00:00" + "time": "2024-09-19T21:48:23+00:00" }, { "name": "symfony/validator", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "ba711a6cfc008544dad059abb3c1d997f1472237" + "reference": "0d7e0dfd41702d6b9356214b76110421c1e74368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/ba711a6cfc008544dad059abb3c1d997f1472237", - "reference": "ba711a6cfc008544dad059abb3c1d997f1472237", + "url": "https://api.github.com/repos/symfony/validator/zipball/0d7e0dfd41702d6b9356214b76110421c1e74368", + "reference": "0d7e0dfd41702d6b9356214b76110421c1e74368", "shasum": "" }, "require": { @@ -9347,7 +9345,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.1.3" + "source": "https://github.com/symfony/validator/tree/v7.1.4" }, "funding": [ { @@ -9363,20 +9361,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-08-30T15:58:06+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f" + "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/86af4617cca75a6e28598f49ae0690f3b9d4591f", - "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a5fa7481b199090964d6fd5dab6294d5a870c7aa", + "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa", "shasum": "" }, "require": { @@ -9430,7 +9428,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.3" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.4" }, "funding": [ { @@ -9446,7 +9444,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-08-30T16:12:47+00:00" }, { "name": "symfony/var-exporter", @@ -9609,16 +9607,16 @@ }, { "name": "symfony/yaml", - "version": "v7.1.1", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "fa34c77015aa6720469db7003567b9f772492bf2" + "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/fa34c77015aa6720469db7003567b9f772492bf2", - "reference": "fa34c77015aa6720469db7003567b9f772492bf2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/92e080b851c1c655c786a2da77f188f2dccd0f4b", + "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b", "shasum": "" }, "require": { @@ -9660,7 +9658,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.1" + "source": "https://github.com/symfony/yaml/tree/v7.1.4" }, "funding": [ { @@ -9676,7 +9674,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-08-12T09:59:40+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -9733,23 +9731,23 @@ }, { "name": "twig/cssinliner-extra", - "version": "v3.10.0", + "version": "v3.13.0", "source": { "type": "git", "url": "https://github.com/twigphp/cssinliner-extra.git", - "reference": "10e88e9a887b646c58e3d670383208f15295dd22" + "reference": "cef36c444b1cce4c0978d7aebd20427671a918f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/10e88e9a887b646c58e3d670383208f15295dd22", - "reference": "10e88e9a887b646c58e3d670383208f15295dd22", + "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/cef36c444b1cce4c0978d7aebd20427671a918f4", + "reference": "cef36c444b1cce4c0978d7aebd20427671a918f4", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/deprecation-contracts": "^2.5|^3", "tijsverkoyen/css-to-inline-styles": "^2.0", - "twig/twig": "^3.0" + "twig/twig": "^3.13|^4.0" }, "require-dev": { "symfony/phpunit-bridge": "^6.4|^7.0" @@ -9786,7 +9784,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.10.0" + "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.13.0" }, "funding": [ { @@ -9798,27 +9796,27 @@ "type": "tidelift" } ], - "time": "2024-05-11T07:35:57+00:00" + "time": "2024-09-03T13:08:40+00:00" }, { "name": "twig/extra-bundle", - "version": "v3.10.0", + "version": "v3.13.0", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "cdc6e23aeb7f4953c1039568c3439aab60c56454" + "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/cdc6e23aeb7f4953c1039568c3439aab60c56454", - "reference": "cdc6e23aeb7f4953c1039568c3439aab60c56454", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/21a9a7aa9f79d4493bb6fed4eb2794339f9551f5", + "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/framework-bundle": "^5.4|^6.4|^7.0", "symfony/twig-bundle": "^5.4|^6.4|^7.0", - "twig/twig": "^3.0" + "twig/twig": "^3.0|^4.0" }, "require-dev": { "league/commonmark": "^1.0|^2.0", @@ -9860,7 +9858,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.10.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.13.0" }, "funding": [ { @@ -9872,28 +9870,28 @@ "type": "tidelift" } ], - "time": "2024-05-11T07:35:57+00:00" + "time": "2024-09-01T20:39:12+00:00" }, { "name": "twig/twig", - "version": "v3.10.3", + "version": "v3.14.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572" + "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72", + "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.22" + "symfony/polyfill-php81": "^1.29" }, "require-dev": { "psr/container": "^1.0|^2.0", @@ -9939,7 +9937,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.10.3" + "source": "https://github.com/twigphp/Twig/tree/v3.14.0" }, "funding": [ { @@ -9951,7 +9949,7 @@ "type": "tidelift" } ], - "time": "2024-05-16T10:04:27+00:00" + "time": "2024-09-09T17:55:12+00:00" }, { "name": "webmozart/assert", @@ -10013,16 +10011,16 @@ }, { "name": "webonyx/graphql-php", - "version": "v15.12.5", + "version": "v15.14.1", "source": { "type": "git", "url": "https://github.com/webonyx/graphql-php.git", - "reference": "7bcd31d1dcf67781ed5cb493b22c519c539c05e6" + "reference": "73542661e3aeaba6b2c60481e82d6b9ea4196908" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/7bcd31d1dcf67781ed5cb493b22c519c539c05e6", - "reference": "7bcd31d1dcf67781ed5cb493b22c519c539c05e6", + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/73542661e3aeaba6b2c60481e82d6b9ea4196908", + "reference": "73542661e3aeaba6b2c60481e82d6b9ea4196908", "shasum": "" }, "require": { @@ -10035,12 +10033,12 @@ "amphp/http-server": "^2.1", "dms/phpunit-arraysubset-asserts": "dev-master", "ergebnis/composer-normalize": "^2.28", - "friendsofphp/php-cs-fixer": "3.59.3", - "mll-lab/php-cs-fixer-config": "^5", + "friendsofphp/php-cs-fixer": "3.64.0", + "mll-lab/php-cs-fixer-config": "^5.9.2", "nyholm/psr7": "^1.5", "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "1.11.5", + "phpstan/phpstan": "1.12.3", "phpstan/phpstan-phpunit": "1.4.0", "phpstan/phpstan-strict-rules": "1.6.0", "phpunit/phpunit": "^9.5 || ^10.5.21", @@ -10075,7 +10073,7 @@ ], "support": { "issues": "https://github.com/webonyx/graphql-php/issues", - "source": "https://github.com/webonyx/graphql-php/tree/v15.12.5" + "source": "https://github.com/webonyx/graphql-php/tree/v15.14.1" }, "funding": [ { @@ -10083,7 +10081,7 @@ "type": "open_collective" } ], - "time": "2024-06-23T11:30:58+00:00" + "time": "2024-09-26T08:18:11+00:00" }, { "name": "willdurand/negotiation", @@ -10303,6 +10301,100 @@ ], "time": "2024-04-13T18:00:56+00:00" }, + { + "name": "brianium/paratest", + "version": "v7.4.5", + "source": { + "type": "git", + "url": "https://github.com/paratestphp/paratest.git", + "reference": "d4de825332842a7dee1ff350f0fd6caafa930d79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/d4de825332842a7dee1ff350f0fd6caafa930d79", + "reference": "d4de825332842a7dee1ff350f0fd6caafa930d79", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-simplexml": "*", + "fidry/cpu-core-counter": "^1.1.0", + "jean85/pretty-package-versions": "^2.0.6", + "php": "~8.2.0 || ~8.3.0", + "phpunit/php-code-coverage": "^10.1.14 || ^11.0.3", + "phpunit/php-file-iterator": "^4.1.0 || ^5.0.0", + "phpunit/php-timer": "^6.0.0 || ^7.0.0", + "phpunit/phpunit": "^10.5.20 || ^11.1.3", + "sebastian/environment": "^6.1.0 || ^7.1.0", + "symfony/console": "^6.4.7 || ^7.1.0", + "symfony/process": "^6.4.7 || ^7.1.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0.0", + "ext-pcov": "*", + "ext-posix": "*", + "phpstan/phpstan": "^1.11.2", + "phpstan/phpstan-deprecation-rules": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.0", + "squizlabs/php_codesniffer": "^3.10.1", + "symfony/filesystem": "^6.4.3 || ^7.1.0" + }, + "bin": [ + "bin/paratest", + "bin/paratest.bat", + "bin/paratest_for_phpstorm" + ], + "type": "library", + "autoload": { + "psr-4": { + "ParaTest\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Scaturro", + "email": "scaturrob@gmail.com", + "role": "Developer" + }, + { + "name": "Filippo Tessarotto", + "email": "zoeslam@gmail.com", + "role": "Developer" + } + ], + "description": "Parallel testing for PHP", + "homepage": "https://github.com/paratestphp/paratest", + "keywords": [ + "concurrent", + "parallel", + "phpunit", + "testing" + ], + "support": { + "issues": "https://github.com/paratestphp/paratest/issues", + "source": "https://github.com/paratestphp/paratest/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://github.com/sponsors/Slamdunk", + "type": "github" + }, + { + "url": "https://paypal.me/filippotessarotto", + "type": "paypal" + } + ], + "time": "2024-05-31T13:59:20+00:00" + }, { "name": "clue/ndjson-react", "version": "v1.3.0", @@ -10369,26 +10461,26 @@ }, { "name": "composer/pcre", - "version": "3.2.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90" + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90", - "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90", + "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, "conflict": { - "phpstan/phpstan": "<1.11.8" + "phpstan/phpstan": "<1.11.10" }, "require-dev": { - "phpstan/phpstan": "^1.11.8", + "phpstan/phpstan": "^1.11.10", "phpstan/phpstan-strict-rules": "^1.1", "phpunit/phpunit": "^8 || ^9" }, @@ -10428,7 +10520,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.2.0" + "source": "https://github.com/composer/pcre/tree/3.3.1" }, "funding": [ { @@ -10444,28 +10536,28 @@ "type": "tidelift" } ], - "time": "2024-07-25T09:36:02+00:00" + "time": "2024-08-27T18:44:43+00:00" }, { "name": "composer/semver", - "version": "3.4.2", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", - "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -10509,7 +10601,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.2" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -10525,7 +10617,7 @@ "type": "tidelift" } ], - "time": "2024-07-12T11:35:52+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/xdebug-handler", @@ -10871,16 +10963,16 @@ }, { "name": "felixfbecker/language-server-protocol", - "version": "v1.5.2", + "version": "v1.5.3", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/a9e113dbc7d849e35b8776da39edaf4313b7b6c9", + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9", "shasum": "" }, "require": { @@ -10921,22 +11013,22 @@ ], "support": { "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3" }, - "time": "2022-03-02T22:36:06+00:00" + "time": "2024-04-30T00:40:11+00:00" }, { "name": "fidry/cpu-core-counter", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" + "reference": "8520451a140d3f46ac33042715115e290cf5785f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", "shasum": "" }, "require": { @@ -10976,7 +11068,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" }, "funding": [ { @@ -10984,20 +11076,20 @@ "type": "github" } ], - "time": "2024-02-07T09:43:46+00:00" + "time": "2024-08-06T10:04:20+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.61.1", + "version": "v3.64.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "94a87189f55814e6cabca2d9a33b06de384a2ab8" + "reference": "58dd9c931c785a79739310aef5178928305ffa67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/94a87189f55814e6cabca2d9a33b06de384a2ab8", - "reference": "94a87189f55814e6cabca2d9a33b06de384a2ab8", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/58dd9c931c785a79739310aef5178928305ffa67", + "reference": "58dd9c931c785a79739310aef5178928305ffa67", "shasum": "" }, "require": { @@ -11079,7 +11171,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.61.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.64.0" }, "funding": [ { @@ -11087,7 +11179,7 @@ "type": "github" } ], - "time": "2024-07-31T14:33:15+00:00" + "time": "2024-08-30T23:09:38+00:00" }, { "name": "hautelook/alice-bundle", @@ -11647,16 +11739,16 @@ }, { "name": "netresearch/jsonmapper", - "version": "v4.4.1", + "version": "v4.5.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0" + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0", - "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", "shasum": "" }, "require": { @@ -11692,22 +11784,22 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" }, - "time": "2024-01-31T06:18:54+00:00" + "time": "2024-09-08T10:13:13+00:00" }, { "name": "nikic/php-parser", - "version": "v4.19.1", + "version": "v4.19.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" + "reference": "0ed4c8949a32986043e977dbe14776c14d644c45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ed4c8949a32986043e977dbe14776c14d644c45", + "reference": "0ed4c8949a32986043e977dbe14776c14d644c45", "shasum": "" }, "require": { @@ -11748,9 +11840,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.2" }, - "time": "2024-03-17T08:10:35+00:00" + "time": "2024-09-17T19:36:00+00:00" }, { "name": "phar-io/manifest", @@ -12076,16 +12168,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.9", + "version": "1.12.5", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "e370bcddadaede0c1716338b262346f40d296f82" + "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e370bcddadaede0c1716338b262346f40d296f82", - "reference": "e370bcddadaede0c1716338b262346f40d296f82", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17", + "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17", "shasum": "" }, "require": { @@ -12130,36 +12222,36 @@ "type": "github" } ], - "time": "2024-08-01T16:25:18+00:00" + "time": "2024-09-26T12:45:22+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "10.1.15", + "version": "10.1.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae" + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", - "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=8.1", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-text-template": "^3.0", - "sebastian/code-unit-reverse-lookup": "^3.0", - "sebastian/complexity": "^3.0", - "sebastian/environment": "^6.0", - "sebastian/lines-of-code": "^2.0", - "sebastian/version": "^4.0", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { "phpunit/phpunit": "^10.1" @@ -12171,7 +12263,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1-dev" + "dev-main": "10.1.x-dev" } }, "autoload": { @@ -12200,7 +12292,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.15" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" }, "funding": [ { @@ -12208,7 +12300,7 @@ "type": "github" } ], - "time": "2024-06-29T08:25:15+00:00" + "time": "2024-08-22T04:31:57+00:00" }, { "name": "phpunit/php-file-iterator", @@ -12455,16 +12547,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.29", + "version": "10.5.31", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f" + "reference": "43e7c3e6a484e538453f89dfa6a6f308c32792da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e9e80872b4e8064401788ee8a32d40b4455318f", - "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/43e7c3e6a484e538453f89dfa6a6f308c32792da", + "reference": "43e7c3e6a484e538453f89dfa6a6f308c32792da", "shasum": "" }, "require": { @@ -12478,14 +12570,14 @@ "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.15", + "phpunit/php-code-coverage": "^10.1.16", "phpunit/php-file-iterator": "^4.1.0", "phpunit/php-invoker": "^4.0.0", "phpunit/php-text-template": "^3.0.1", "phpunit/php-timer": "^6.0.0", "sebastian/cli-parser": "^2.0.1", "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.1", + "sebastian/comparator": "^5.0.2", "sebastian/diff": "^5.1.1", "sebastian/environment": "^6.1.0", "sebastian/exporter": "^5.1.2", @@ -12536,7 +12628,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.29" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.31" }, "funding": [ { @@ -12552,7 +12644,7 @@ "type": "tidelift" } ], - "time": "2024-07-30T11:08:00+00:00" + "time": "2024-09-03T11:57:55+00:00" }, { "name": "react/cache", @@ -13086,21 +13178,21 @@ }, { "name": "rector/rector", - "version": "1.2.2", + "version": "1.2.5", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "044e6364017882d1e346da8690eeabc154da5495" + "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/044e6364017882d1e346da8690eeabc154da5495", - "reference": "044e6364017882d1e346da8690eeabc154da5495", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/e98aa793ca3fcd17e893cfaf9103ac049775d339", + "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.11" + "phpstan/phpstan": "^1.12.2" }, "conflict": { "rector/rector-doctrine": "*", @@ -13133,7 +13225,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.2.2" + "source": "https://github.com/rectorphp/rector/tree/1.2.5" }, "funding": [ { @@ -13141,7 +13233,7 @@ "type": "github" } ], - "time": "2024-07-25T07:44:34+00:00" + "time": "2024-09-08T17:43:24+00:00" }, { "name": "sebastian/cli-parser", @@ -13313,16 +13405,16 @@ }, { "name": "sebastian/comparator", - "version": "5.0.1", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372" + "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", + "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", "shasum": "" }, "require": { @@ -13333,7 +13425,7 @@ "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^10.3" + "phpunit/phpunit": "^10.4" }, "type": "library", "extra": { @@ -13378,7 +13470,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.2" }, "funding": [ { @@ -13386,7 +13478,7 @@ "type": "github" } ], - "time": "2023-08-14T13:18:12+00:00" + "time": "2024-08-12T06:03:08+00:00" }, { "name": "sebastian/complexity", @@ -14348,16 +14440,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v7.1.1", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "01ce8174447f1f1dd33a5854b01beef79061d9fa" + "reference": "b92af238457a7cdd2738f941cd525d76313e8283" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/01ce8174447f1f1dd33a5854b01beef79061d9fa", - "reference": "01ce8174447f1f1dd33a5854b01beef79061d9fa", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b92af238457a7cdd2738f941cd525d76313e8283", + "reference": "b92af238457a7cdd2738f941cd525d76313e8283", "shasum": "" }, "require": { @@ -14395,7 +14487,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v7.1.1" + "source": "https://github.com/symfony/dom-crawler/tree/v7.1.5" }, "funding": [ { @@ -14411,20 +14503,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-15T06:48:17+00:00" }, { "name": "symfony/maker-bundle", - "version": "v1.60.0", + "version": "v1.61.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "c305a02a22974670f359d4274c9431e1a191f559" + "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c305a02a22974670f359d4274c9431e1a191f559", - "reference": "c305a02a22974670f359d4274c9431e1a191f559", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a3b7f14d349f8f44ed752d4dde2263f77510cc18", + "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18", "shasum": "" }, "require": { @@ -14487,7 +14579,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.60.0" + "source": "https://github.com/symfony/maker-bundle/tree/v1.61.0" }, "funding": [ { @@ -14503,20 +14595,20 @@ "type": "tidelift" } ], - "time": "2024-06-10T06:03:18+00:00" + "time": "2024-08-29T22:50:23+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "e823122d31935eb711e2767c31f3d71cb0b87fb1" + "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e823122d31935eb711e2767c31f3d71cb0b87fb1", - "reference": "e823122d31935eb711e2767c31f3d71cb0b87fb1", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e876eb90e32a8fc4c4911d458e09f88d65877d1c", + "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c", "shasum": "" }, "require": { @@ -14569,7 +14661,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.3" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.4" }, "funding": [ { @@ -14585,20 +14677,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-08-13T14:28:19+00:00" }, { "name": "symfony/process", - "version": "v7.1.3", + "version": "v7.1.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" + "reference": "5c03ee6369281177f07f7c68252a280beccba847" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "url": "https://api.github.com/repos/symfony/process/zipball/5c03ee6369281177f07f7c68252a280beccba847", + "reference": "5c03ee6369281177f07f7c68252a280beccba847", "shasum": "" }, "require": { @@ -14630,7 +14722,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.3" + "source": "https://github.com/symfony/process/tree/v7.1.5" }, "funding": [ { @@ -14646,20 +14738,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:44:47+00:00" + "time": "2024-09-19T21:48:23+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "b9357f73d2c14dcd36783a67386f510654828668" + "reference": "3cfc775277a8f2dacdd0f72d196bc87b272a763f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/b9357f73d2c14dcd36783a67386f510654828668", - "reference": "b9357f73d2c14dcd36783a67386f510654828668", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/3cfc775277a8f2dacdd0f72d196bc87b272a763f", + "reference": "3cfc775277a8f2dacdd0f72d196bc87b272a763f", "shasum": "" }, "require": { @@ -14711,7 +14803,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.3" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.4" }, "funding": [ { @@ -14727,7 +14819,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-08-12T09:59:40+00:00" }, { "name": "theofidry/alice-data-fixtures", @@ -14877,16 +14969,16 @@ }, { "name": "vimeo/psalm", - "version": "5.25.0", + "version": "5.26.1", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "01a8eb06b9e9cc6cfb6a320bf9fb14331919d505" + "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/01a8eb06b9e9cc6cfb6a320bf9fb14331919d505", - "reference": "01a8eb06b9e9cc6cfb6a320bf9fb14331919d505", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/d747f6500b38ac4f7dfc5edbcae6e4b637d7add0", + "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0", "shasum": "" }, "require": { @@ -14907,7 +14999,7 @@ "felixfbecker/language-server-protocol": "^1.5.2", "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.16", + "nikic/php-parser": "^4.17", "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", "sebastian/diff": "^4.0 || ^5.0 || ^6.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", @@ -14983,7 +15075,7 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2024-06-16T15:08:35+00:00" + "time": "2024-09-08T18:53:08+00:00" } ], "aliases": [], diff --git a/api/config/packages/dev/doctrine.yaml b/api/config/packages/dev/doctrine.yaml new file mode 100644 index 0000000000..ac27353d25 --- /dev/null +++ b/api/config/packages/dev/doctrine.yaml @@ -0,0 +1,4 @@ +doctrine: + dbal: + # "TEST_TOKEN" is typically set by ParaTest + dbname_suffix: 'dev' \ No newline at end of file diff --git a/api/config/packages/dev/lexik_jwt_authentication.yaml b/api/config/packages/dev/lexik_jwt_authentication.yaml deleted file mode 100644 index eddc86d492..0000000000 --- a/api/config/packages/dev/lexik_jwt_authentication.yaml +++ /dev/null @@ -1,10 +0,0 @@ -parameters: - env(COOKIE_PREFIX): "" - -lexik_jwt_authentication: - set_cookies: - '%env(COOKIE_PREFIX)%jwt_hp': - secure: false - - '%env(COOKIE_PREFIX)%jwt_s': - secure: false \ No newline at end of file diff --git a/api/config/packages/lexik_jwt_authentication.yaml b/api/config/packages/lexik_jwt_authentication.yaml index 1aa9c3f5a1..9c41d2d8c3 100644 --- a/api/config/packages/lexik_jwt_authentication.yaml +++ b/api/config/packages/lexik_jwt_authentication.yaml @@ -1,5 +1,6 @@ parameters: env(COOKIE_PREFIX): "" + env(COOKIE_SECURE): "true" lexik_jwt_authentication: secret_key: '%env(resolve:JWT_SECRET_KEY)%' @@ -31,6 +32,7 @@ lexik_jwt_authentication: split: - header - payload + secure: '%env(bool:COOKIE_SECURE)%' '%env(COOKIE_PREFIX)%jwt_s': lifetime: null samesite: strict @@ -38,3 +40,4 @@ lexik_jwt_authentication: httpOnly: true split: - signature + secure: '%env(bool:COOKIE_SECURE)%' diff --git a/api/config/packages/test/doctrine.yaml b/api/config/packages/test/doctrine.yaml index 2970b76ee4..c4ccb1853e 100644 --- a/api/config/packages/test/doctrine.yaml +++ b/api/config/packages/test/doctrine.yaml @@ -1,5 +1,4 @@ doctrine: dbal: - url: '%env(resolve:TEST_DATABASE_URL)%' # "TEST_TOKEN" is typically set by ParaTest - #dbname_suffix: '_test%env(default::TEST_TOKEN)%' \ No newline at end of file + dbname_suffix: 'test%env(default::TEST_TOKEN)%' \ No newline at end of file diff --git a/api/docker/caddy/Caddyfile b/api/docker/caddy/Caddyfile index bf5924d1f5..b82e556ae5 100644 --- a/api/docker/caddy/Caddyfile +++ b/api/docker/caddy/Caddyfile @@ -1,4 +1,7 @@ { + log { + level {$LOG_LEVEL} + } {$CADDY_GLOBAL_OPTIONS} frankenphp { @@ -8,7 +11,9 @@ # https://caddyserver.com/docs/caddyfile/directives#sorting-algorithm order php_server before file_server - auto_https disable_redirects + http_port 3001 + https_port 3443 + auto_https off # make it possible to connect from remote host to admin endpoint # https://caddyserver.com/docs/caddyfile/options#admin # note, restricting to specific origins is not possible with the wildcard interface @@ -22,62 +27,35 @@ {$CADDY_EXTRA_CONFIG} -:3000 { - log { - level DEBUG - } - - handle_path /api* { - # rewriting the uri used for php-fcgi did not work - # so we make a hop more to localhost:3001 with the rewritten url where the fcgi happens - # this may slow down the request - - reverse_proxy localhost:3001 { - header_up X-Forwarded-Prefix "/api" +{$SERVER_NAME:localhost} { + log + + root * /app/public + + encode { + zstd + br + gzip + + match { + header Content-Type text/* + header Content-Type application/json* + header Content-Type application/javascript* + header Content-Type application/xhtml+xml* + header Content-Type application/atom+xml* + header Content-Type application/rss+xml* + header Content-Type image/svg+xml* + # Custom formats supported + header Content-Type application/ld+json* + header Content-Type application/hal+json* } } - handle /print* { - reverse_proxy print:3003 - } - - handle /mail* { - reverse_proxy mail:1080 - } - - handle { - reverse_proxy frontend:3000 - } -} + # Add links to the API docs if not set explicitly (e.g. the PWA) + header ?Link `; rel="http://www.w3.org/ns/hydra/core#apiDocumentation"` -:3001 { - route { - root * /app/public + # Disable Topics tracking if not enabled explicitly: https://github.com/jkarlin/topics + header ?Permissions-Policy "browsing-topics=()" - encode { - zstd - br - gzip - - match { - header Content-Type text/* - header Content-Type application/json* - header Content-Type application/javascript* - header Content-Type application/xhtml+xml* - header Content-Type application/atom+xml* - header Content-Type application/rss+xml* - header Content-Type image/svg+xml* - # Custom formats supported - header Content-Type application/ld+json* - } - } - - # Add links to the API docs if not set explicitly (e.g. the PWA) - header ?Link `; rel="www.w3.org/ns/hydra/core#apiDocumentation"` - - # Disable Topics tracking if not enabled explicitly: https://github.com/jkarlin/topics - header ?Permissions-Policy "browsing-topics=()" - - php_server - } + php_server } diff --git a/api/docker/caddy/Caddyfile.prod b/api/docker/caddy/Caddyfile.prod deleted file mode 100644 index 4311891b43..0000000000 --- a/api/docker/caddy/Caddyfile.prod +++ /dev/null @@ -1,59 +0,0 @@ -{ - {$CADDY_GLOBAL_OPTIONS} - - frankenphp { - {$FRANKENPHP_CONFIG} - } - - # https://caddyserver.com/docs/caddyfile/directives#sorting-algorithm - order php_server before file_server - - http_port 3001 - https_port 3443 - auto_https off - # make it possible to connect from remote host to admin endpoint - # https://caddyserver.com/docs/caddyfile/options#admin - # note, restricting to specific origins is not possible with the wildcard interface - # due to https://github.com/caddyserver/caddy/commit/f5ccb904a3db2bffd980feee685afaa762224cb2 - admin 0.0.0.0:2019 - # enable Prometheus metrics endpoint https://caddyserver.com/docs/metrics - servers { - metrics - } -} - -{$CADDY_EXTRA_CONFIG} - - -{$SERVER_NAME:localhost} { - log - - root * /app/public - - encode { - zstd - br - gzip - - match { - header Content-Type text/* - header Content-Type application/json* - header Content-Type application/javascript* - header Content-Type application/xhtml+xml* - header Content-Type application/atom+xml* - header Content-Type application/rss+xml* - header Content-Type image/svg+xml* - # Custom formats supported - header Content-Type application/ld+json* - header Content-Type application/hal+json* - } - } - - # Add links to the API docs if not set explicitly (e.g. the PWA) - header ?Link `; rel="http://www.w3.org/ns/hydra/core#apiDocumentation"` - - # Disable Topics tracking if not enabled explicitly: https://github.com/jkarlin/topics - header ?Permissions-Policy "browsing-topics=()" - - php_server -} diff --git a/api/docker/varnish/vcl/_config.vcl b/api/docker/varnish/vcl/_config.vcl index 980a1cac54..5db396b1a2 100644 --- a/api/docker/varnish/vcl/_config.vcl +++ b/api/docker/varnish/vcl/_config.vcl @@ -1,4 +1,4 @@ backend default { .host = "api"; - .port = "3000"; + .port = "3001"; } \ No newline at end of file diff --git a/api/docker/varnish/vcl/default.vcl b/api/docker/varnish/vcl/default.vcl index 15df5b7472..526d7c1e59 100644 --- a/api/docker/varnish/vcl/default.vcl +++ b/api/docker/varnish/vcl/default.vcl @@ -20,11 +20,6 @@ sub vcl_recv { # Support xkey purge requests # see https://raw.githubusercontent.com/varnish/varnish-modules/master/src/vmod_xkey.vcc call fos_tags_xkey_recv; - - # exclude other services (frontend, print, etc.) - if (var.get("originalUrl") !~ "^/api") { - return(pass); - } # exclude API documentation, profiler and graphql endpoint if (var.get("originalUrl") ~ "^/api/docs" @@ -100,4 +95,3 @@ sub vcl_deliver { set resp.http.Cache-Control = "no-cache, private"; } } - diff --git a/api/docker/varnish/vcl/fos_tags_xkey.vcl b/api/docker/varnish/vcl/fos_tags_xkey.vcl index ea2e468d1e..2f502aae29 100644 --- a/api/docker/varnish/vcl/fos_tags_xkey.vcl +++ b/api/docker/varnish/vcl/fos_tags_xkey.vcl @@ -38,8 +38,8 @@ sub fos_tags_xkey_recv { } sub fos_tags_xkey_deliver { - if (!resp.http.X-Cache-Debug) { - // Remove tag headers when delivering to non debug client + if (std.getenv("SEND_XKEY_HEADERS_DOWNSTREAM") != "true" || !resp.http.X-Cache-Debug) { + // Remove tag headers unset resp.http.xkey; } } diff --git a/api/fixtures/activity1-aside-top.yml b/api/fixtures/activity1-aside-top.yml index be19e66902..5840dcc926 100644 --- a/api/fixtures/activity1-aside-top.yml +++ b/api/fixtures/activity1-aside-top.yml @@ -27,11 +27,11 @@ App\Entity\ContentNode\SingleText: instanceName: 'singleText1' contentType: '@contentTypeNotes' data: { html: } - safetyConcept1: + safetyConsiderations1: root: '@columnLayout1' parent: '@responsiveLayout1' slot: 'aside-top' position: 3 - instanceName: 'safetyConcept1' - contentType: '@contentTypeSafetyConcept' + instanceName: 'safetyConsiderations1' + contentType: '@contentTypeSafetyConsiderations' data: { html: } diff --git a/api/fixtures/camps.yml b/api/fixtures/camps.yml index aae7f18664..aa99082f3d 100644 --- a/api/fixtures/camps.yml +++ b/api/fixtures/camps.yml @@ -1,6 +1,6 @@ App\Entity\Camp: camp1: - name: Camp1 + shortTitle: Camp1 title: motto: addressName: @@ -12,7 +12,7 @@ App\Entity\Camp: isPrototype: false campPrototypeId: null camp2: - name: Camp2 + shortTitle: Camp2 title: motto: addressName: @@ -24,7 +24,7 @@ App\Entity\Camp: isPrototype: false campPrototypeId: null campUnrelated: - name: CampUnrelated + shortTitle: CampUnrelated title: motto: addressName: @@ -36,7 +36,7 @@ App\Entity\Camp: isPrototype: false campPrototypeId: null campPrototype: - name: CampPrototype + shortTitle: CampPrototype title: motto: addressName: diff --git a/api/fixtures/categories.yml b/api/fixtures/categories.yml index 2adac31992..c66effe26f 100644 --- a/api/fixtures/categories.yml +++ b/api/fixtures/categories.yml @@ -7,7 +7,7 @@ App\Entity\Category: numberingStyle: 1 rootContentNode: '@columnLayout2' preferredContentTypes: - - '@contentTypeSafetyConcept' + - '@contentTypeSafetyConsiderations' category2: camp: '@camp1' short: LP diff --git a/api/fixtures/checklistItems.yml b/api/fixtures/checklistItems.yml new file mode 100644 index 0000000000..ffe2553f24 --- /dev/null +++ b/api/fixtures/checklistItems.yml @@ -0,0 +1,20 @@ +App\Entity\ChecklistItem: + checklistItem1_1_1: + checklist: '@checklist1' + text: 'Camp1_List1_Item1' + checklistItem1_1_2: + checklist: '@checklist1' + text: 'Camp1_List1_Item2' + checklistItem1_1_2_3: + checklist: '@checklist1' + parent: '@checklistItem1_1_2' + text: 'Camp1_List1_Item2_Item3' + checklistItem2_1_1: + checklist: '@checklist1camp2' + text: 'Camp2_List1_Item1' + checklistItemUnrelated_1_1: + checklist: '@checklist1campUnrelated' + text: 'CampUnrelated_List1_Item1' + checklistItemPrototype_1_1: + checklist: '@checklist1campPrototype' + text: 'CampPrototype_List1_Item1' diff --git a/api/fixtures/checklistNodes.yml b/api/fixtures/checklistNodes.yml new file mode 100644 index 0000000000..a6af5b9eeb --- /dev/null +++ b/api/fixtures/checklistNodes.yml @@ -0,0 +1,24 @@ +App\Entity\ContentNode\ChecklistNode: + checklistNode1: + root: '@columnLayout1' + parent: '@columnLayout1' + slot: '1' + position: 1 + instanceName: + contentType: '@contentTypeChecklist' + checklistItems: + - '@checklistItem1_1_1' + checklistNode3: + root: '@columnLayout3' + parent: '@columnLayout3' + slot: '1' + position: 1 + instanceName: + contentType: '@contentTypeChecklist' + checklistNodeCampUnrelated: + root: '@columnLayout1campUnrelated' + parent: '@columnLayout1campUnrelated' + slot: '1' + position: 5 + instanceName: + contentType: '@contentTypeChecklist' \ No newline at end of file diff --git a/api/fixtures/checklists.yml b/api/fixtures/checklists.yml new file mode 100644 index 0000000000..e4515cedbd --- /dev/null +++ b/api/fixtures/checklists.yml @@ -0,0 +1,16 @@ +App\Entity\Checklist: + checklist1: + camp: '@camp1' + name: 'J+S Ausbildungsziele' + checklist2WithNoItems: + camp: '@camp1' + name: 'PBS Ausbildungsziele' + checklist1camp2: + camp: '@camp2' + name: 'J+S Ausbildungsziele' + checklist1campUnrelated: + camp: '@campUnrelated' + name: 'J+S Ausbildungsziele' + checklist1campPrototype: + camp: '@campPrototype' + name: 'J+S Ausbildungsziele' diff --git a/api/fixtures/contentTypes.yml b/api/fixtures/contentTypes.yml index a620bf2ee9..8591a2f7a3 100644 --- a/api/fixtures/contentTypes.yml +++ b/api/fixtures/contentTypes.yml @@ -1,6 +1,6 @@ App\Entity\ContentType: - contentTypeSafetyConcept: - name: 'SafetyConcept' + contentTypeSafetyConsiderations: + name: 'SafetyConsiderations' active: true entityClass: 'App\Entity\ContentNode\SingleText' contentTypeStoryContext: @@ -40,3 +40,7 @@ App\Entity\ContentType: active: true entityClass: 'App\Entity\ContentNode\MultiSelect' jsonConfig: { items: [ 'outdoorTechnique', 'security', 'natureAndEnvironment', 'pioneeringTechnique', 'campsiteAndSurroundings', 'preventionAndIntegration' ] } + contentTypeChecklist: + name: 'Checklist' + active: true + entityClass: 'App\Entity\ContentNode\ChecklistNode' diff --git a/api/fixtures/performance_test/activities.yml b/api/fixtures/performance_test/activities.yml index c17f563cce..014e9f6ea5 100644 --- a/api/fixtures/performance_test/activities.yml +++ b/api/fixtures/performance_test/activities.yml @@ -110,13 +110,13 @@ App\Entity\ContentNode\SingleText: instanceName: 'singleText' contentType: '@contentTypeNotes' data: { html: } - additional_safetyConcept1_{1..400}: + additional_safetyConsiderations1_{1..400}: root: '@additional_columnLayout1_' parent: '@additional_responsiveLayout1_' slot: 'aside-top' position: 3 - instanceName: 'safetyConcept' - contentType: '@contentTypeSafetyConcept' + instanceName: 'safetyConsiderations' + contentType: '@contentTypeSafetyConsiderations' data: { html: } additional_singleText_camp1_{1..200}: root: '@additional_columnLayout_camp1_' @@ -126,11 +126,11 @@ App\Entity\ContentNode\SingleText: instanceName: 'singleText' contentType: '@contentTypeNotes' data: { html: } - additional_safetyConcept_camp1_{1..200}: + additional_safetyConsiderations_camp1_{1..200}: root: '@additional_columnLayout_camp1_' parent: '@additional_responsiveLayout_camp1_' slot: 'aside-top' position: 3 - instanceName: 'safetyConcept' - contentType: '@contentTypeSafetyConcept' + instanceName: 'safetyConsiderations' + contentType: '@contentTypeSafetyConsiderations' data: { html: } diff --git a/api/fixtures/performance_test/camps.yml b/api/fixtures/performance_test/camps.yml index 89ec5d7904..2587054ac6 100644 --- a/api/fixtures/performance_test/camps.yml +++ b/api/fixtures/performance_test/camps.yml @@ -1,6 +1,6 @@ App\Entity\Camp: additionalCamp_{1..400}: - name: + shortTitle: title: motto: addressName: diff --git a/api/fixtures/performance_test/categories.yml b/api/fixtures/performance_test/categories.yml index a51bcbc83d..7bd1c17572 100644 --- a/api/fixtures/performance_test/categories.yml +++ b/api/fixtures/performance_test/categories.yml @@ -7,7 +7,7 @@ App\Entity\Category: numberingStyle: 1 rootContentNode: '@additionalColumnLayoutForCampNumber1_' preferredContentTypes: - - '@contentTypeSafetyConcept' + - '@contentTypeSafetyConsiderations' additionalCategoryForCampNumber2_{1..400}: camp: '@additionalCamp_' short: LP diff --git a/api/fixtures/performance_test/checklistItems.yml b/api/fixtures/performance_test/checklistItems.yml new file mode 100644 index 0000000000..623cc12099 --- /dev/null +++ b/api/fixtures/performance_test/checklistItems.yml @@ -0,0 +1,10 @@ +App\Entity\ChecklistItem: + additional_checklistItem1_{1..400}: + checklist: '@additional_checklist1_' + text: 'Item_' + additional_checklistItem2_{1..400}: + checklist: '@additional_checklist2_' + text: 'Item_' + additional_checklistItem_camp1_{1..12}: + checklist: '@additional_checklist_camp1_1' + text: 'Item_' diff --git a/api/fixtures/performance_test/checklists.yml b/api/fixtures/performance_test/checklists.yml new file mode 100644 index 0000000000..43a5cd4d59 --- /dev/null +++ b/api/fixtures/performance_test/checklists.yml @@ -0,0 +1,10 @@ +App\Entity\Checklist: + additional_checklist1_{1..400}: + camp: '@additionalCamp_' + name: 'J+S Ausbildungsziele' + additional_checklist2_{1..400}: + camp: '@additionalCamp_' + name: 'PBS Ausbildungsziele' + additional_checklist_camp1_{1..12}: + camp: '@camp1' + name: diff --git a/api/migrations/schema/Version20240608215345.php b/api/migrations/schema/Version20240608215345.php new file mode 100644 index 0000000000..f5addee3d0 --- /dev/null +++ b/api/migrations/schema/Version20240608215345.php @@ -0,0 +1,33 @@ +addSql('CREATE TABLE checklist (id VARCHAR(16) NOT NULL, createTime TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, updateTime TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, name TEXT NOT NULL, campId VARCHAR(16) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_5C696D2F6D299429 ON checklist (campId)'); + $this->addSql('CREATE INDEX IDX_5C696D2F9D468A55 ON checklist (createTime)'); + $this->addSql('CREATE INDEX IDX_5C696D2F55AA53E2 ON checklist (updateTime)'); + $this->addSql('ALTER TABLE checklist ADD CONSTRAINT FK_5C696D2F6D299429 FOREIGN KEY (campId) REFERENCES camp (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + } + + public function down(Schema $schema): void { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('ALTER TABLE checklist DROP CONSTRAINT FK_5C696D2F6D299429'); + $this->addSql('DROP TABLE checklist'); + } +} diff --git a/api/migrations/schema/Version20240615180024.php b/api/migrations/schema/Version20240615180024.php new file mode 100644 index 0000000000..0b3570cb64 --- /dev/null +++ b/api/migrations/schema/Version20240615180024.php @@ -0,0 +1,36 @@ +addSql('CREATE TABLE checklist_item (id VARCHAR(16) NOT NULL, createTime TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, updateTime TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, text TEXT NOT NULL, position INT NOT NULL, checklistId VARCHAR(16) NOT NULL, parentId VARCHAR(16) DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_99EB20F9BA23A13 ON checklist_item (checklistId)'); + $this->addSql('CREATE INDEX IDX_99EB20F910EE4CEE ON checklist_item (parentId)'); + $this->addSql('CREATE INDEX IDX_99EB20F99D468A55 ON checklist_item (createTime)'); + $this->addSql('CREATE INDEX IDX_99EB20F955AA53E2 ON checklist_item (updateTime)'); + $this->addSql('ALTER TABLE checklist_item ADD CONSTRAINT FK_99EB20F9BA23A13 FOREIGN KEY (checklistId) REFERENCES checklist (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE checklist_item ADD CONSTRAINT FK_99EB20F910EE4CEE FOREIGN KEY (parentId) REFERENCES checklist_item (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + } + + public function down(Schema $schema): void { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('ALTER TABLE checklist_item DROP CONSTRAINT FK_99EB20F9BA23A13'); + $this->addSql('ALTER TABLE checklist_item DROP CONSTRAINT FK_99EB20F910EE4CEE'); + $this->addSql('DROP TABLE checklist_item'); + } +} diff --git a/api/migrations/schema/Version20240620104153.php b/api/migrations/schema/Version20240620104153.php new file mode 100644 index 0000000000..82cfd58b19 --- /dev/null +++ b/api/migrations/schema/Version20240620104153.php @@ -0,0 +1,36 @@ +addSql('CREATE UNIQUE INDEX checklistitem_checklistid_parentid_position_unique ON checklist_item (checklistid, parentid, position)'); + $this->addSql('CREATE TABLE checklistnode_checklistitem (checklistnode_id VARCHAR(16) NOT NULL, checklistitem_id VARCHAR(16) NOT NULL, PRIMARY KEY(checklistnode_id, checklistitem_id))'); + $this->addSql('CREATE INDEX IDX_5A2B5B31DE6B6F00 ON checklistnode_checklistitem (checklistnode_id)'); + $this->addSql('CREATE INDEX IDX_5A2B5B318A09A289 ON checklistnode_checklistitem (checklistitem_id)'); + $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B31DE6B6F00 FOREIGN KEY (checklistnode_id) REFERENCES content_node (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B318A09A289 FOREIGN KEY (checklistitem_id) REFERENCES checklist_item (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + } + + public function down(Schema $schema): void { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('DROP INDEX checklistitem_checklistid_parentid_position_unique'); + $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT FK_5A2B5B31DE6B6F00'); + $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT FK_5A2B5B318A09A289'); + $this->addSql('DROP TABLE checklistnode_checklistitem'); + } +} diff --git a/api/migrations/schema/Version20240620143000.php b/api/migrations/schema/Version20240620143000.php new file mode 100644 index 0000000000..1d61764ed0 --- /dev/null +++ b/api/migrations/schema/Version20240620143000.php @@ -0,0 +1,34 @@ +addSql(" + INSERT INTO public.content_type (id, name, active, entityclass, jsonconfig, createtime, updatetime) + VALUES ( + 'a4211c11211c', + 'Checklist', + true, + 'App\\Entity\\ContentNode\\ChecklistNode', + null, + '2024-06-16 14:30:00', + '2024-06-16 14:30:00' + ); + "); + } + + public function down(Schema $schema): void { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql("DELETE FROM public.content_type WHERE id IN ('a4211c11211c')"); + } +} diff --git a/api/migrations/schema/Version20240817112552.php b/api/migrations/schema/Version20240817112552.php new file mode 100644 index 0000000000..48661f82b3 --- /dev/null +++ b/api/migrations/schema/Version20240817112552.php @@ -0,0 +1,30 @@ +addSql('ALTER TABLE camp RENAME COLUMN name TO shortTitle'); + $this->addSql('ALTER TABLE camp ALTER shortTitle DROP NOT NULL, ALTER shortTitle TYPE TEXT'); + $this->addSql('UPDATE camp SET shortTitle = null WHERE shortTitle = title'); + $this->addSql('UPDATE camp SET shortTitle = title, title = shortTitle WHERE char_length(shortTitle) > 16 AND char_length(title) < char_length(shortTitle);'); + } + + public function down(Schema $schema): void { + $this->addSql("UPDATE camp SET shortTitle = '' WHERE shortTitle IS NULL"); + $this->addSql('ALTER TABLE camp ALTER shortTitle SET NOT NULL, ALTER shortTitle TYPE VARCHAR(32)'); + $this->addSql('ALTER TABLE camp RENAME COLUMN shortTitle TO name'); + } +} diff --git a/api/migrations/schema/Version20240817181500.php b/api/migrations/schema/Version20240817181500.php new file mode 100644 index 0000000000..3b5b724183 --- /dev/null +++ b/api/migrations/schema/Version20240817181500.php @@ -0,0 +1,27 @@ +addSql("UPDATE content_type SET name = 'SafetyConsiderations' WHERE name = 'SafetyConcept';"); + } + + public function down(Schema $schema): void { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql("UPDATE content_type SET name = 'SafetyConcept' WHERE name = 'SafetyConsiderations';"); + } +} diff --git a/api/src/Doctrine/Filter/ExpressionDateTimeFilter.php b/api/src/Doctrine/Filter/ExpressionDateTimeFilter.php index 7b99c5411f..f43f91cafc 100644 --- a/api/src/Doctrine/Filter/ExpressionDateTimeFilter.php +++ b/api/src/Doctrine/Filter/ExpressionDateTimeFilter.php @@ -174,7 +174,7 @@ protected function compileExpression( // Add joins for all {xyz.abc} property references in the expression $matches = []; if (preg_match_all('/\{([^\}]+\.[^\}]+)\}/', $expression, $matches)) { - $relations = array_unique($matches[1] ?? []); + $relations = array_unique($matches[1]); // Replace each instance of {xyz.abc} with its respective joined alias foreach ($relations as $relation) { diff --git a/api/src/Entity/Camp.php b/api/src/Entity/Camp.php index eea7559c5e..1ce30650f9 100644 --- a/api/src/Entity/Camp.php +++ b/api/src/Entity/Camp.php @@ -136,6 +136,15 @@ class Camp extends BaseEntity implements BelongsToCampInterface, CopyFromPrototy #[ORM\OneToMany(targetEntity: MaterialList::class, mappedBy: 'camp', orphanRemoval: true, cascade: ['persist'])] public Collection $materialLists; + /** + * List of all Checklists of this Camp. + * Each Checklist is a List of ChecklistItems. + */ + #[ApiProperty(writable: false, uriTemplate: Checklist::CAMP_SUBRESOURCE_URI_TEMPLATE)] + #[Groups(['read'])] + #[ORM\OneToMany(targetEntity: Checklist::class, mappedBy: 'camp', orphanRemoval: true, cascade: ['persist'])] + public Collection $checklists; + /** * List all CampRootContentNodes of this Camp; * Calculated by the View view_camp_root_content_node. @@ -169,15 +178,15 @@ class Camp extends BaseEntity implements BelongsToCampInterface, CopyFromPrototy public bool $isPrototype = false; /** - * A short name for the camp. + * A short title for the camp. */ #[InputFilter\Trim] #[InputFilter\CleanText] - #[Assert\NotBlank] + #[Assert\Length(max: 32)] #[ApiProperty(example: 'SoLa 2022')] #[Groups(['read', 'write'])] - #[ORM\Column(type: 'string', length: 32)] - public string $name; + #[ORM\Column(type: 'text', nullable: true)] + public ?string $shortTitle; /** * The full title of the camp. @@ -378,6 +387,7 @@ public function __construct() { $this->progressLabels = new ArrayCollection(); $this->activities = new ArrayCollection(); $this->materialLists = new ArrayCollection(); + $this->checklists = new ArrayCollection(); $this->campRootContentNodes = new ArrayCollection(); } @@ -591,6 +601,32 @@ public function removeMaterialList(MaterialList $materialList): self { return $this; } + /** + * @return Checklist[] + */ + public function getChecklists(): array { + return $this->checklists->getValues(); + } + + public function addChecklist(Checklist $checklist): self { + if (!$this->checklists->contains($checklist)) { + $this->checklists[] = $checklist; + $checklist->camp = $this; + } + + return $this; + } + + public function removeChecklist(Checklist $checklist): self { + if ($this->checklists->removeElement($checklist)) { + if ($checklist->camp === $this) { + $checklist->camp = null; + } + } + + return $this; + } + /** * @param Camp $prototype * @param EntityMap $entityMap @@ -608,6 +644,14 @@ public function copyFromPrototype($prototype, $entityMap): void { $materialList->copyFromPrototype($materialListPrototype, $entityMap); } + // copy Checklists + foreach ($prototype->getChecklists() as $checklistPrototype) { + $checklist = new Checklist(); + $this->addChecklist($checklist); + + $checklist->copyFromPrototype($checklistPrototype, $entityMap); + } + // copy Categories foreach ($prototype->getCategories() as $categoryPrototype) { $category = new Category(); diff --git a/api/src/Entity/Category.php b/api/src/Entity/Category.php index 03fccdd46c..b1972babd0 100644 --- a/api/src/Entity/Category.php +++ b/api/src/Entity/Category.php @@ -58,7 +58,6 @@ securityPostDenormalize: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)' ), new GetCollection( - name: 'BelongsToCamp_App\Entity\Category_get_collection', uriTemplate: self::CAMP_SUBRESOURCE_URI_TEMPLATE, uriVariables: [ 'campId' => new Link( @@ -79,7 +78,7 @@ class Category extends BaseEntity implements BelongsToCampInterface, CopyFromPro use ClassInfoTrait; use HasRootContentNodeTrait; - public const CAMP_SUBRESOURCE_URI_TEMPLATE = '/camps/{campId}/categories.{_format}'; + public const CAMP_SUBRESOURCE_URI_TEMPLATE = '/camps/{campId}/categories{._format}'; public const ITEM_NORMALIZATION_CONTEXT = [ 'groups' => [ diff --git a/api/src/Entity/Checklist.php b/api/src/Entity/Checklist.php new file mode 100644 index 0000000000..1746c30021 --- /dev/null +++ b/api/src/Entity/Checklist.php @@ -0,0 +1,162 @@ + ['write', 'create']], + securityPostDenormalize: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)' + ), + new GetCollection( + uriTemplate: self::CAMP_SUBRESOURCE_URI_TEMPLATE, + uriVariables: [ + 'campId' => new Link( + fromClass: Camp::class, + toProperty: 'camp', + security: 'is_granted("CAMP_COLLABORATOR", camp) or is_granted("CAMP_IS_PROTOTYPE", camp)' + ), + ], + ), + ], + denormalizationContext: ['groups' => ['write']], + normalizationContext: ['groups' => ['read']], + order: ['camp.id', 'name'], +)] +#[ApiFilter(filterClass: SearchFilter::class, properties: ['camp'])] +#[ORM\Entity(repositoryClass: ChecklistRepository::class)] +class Checklist extends BaseEntity implements BelongsToCampInterface, CopyFromPrototypeInterface { + public const CAMP_SUBRESOURCE_URI_TEMPLATE = '/camps/{campId}/checklists{._format}'; + + /** + * The camp this checklist belongs to. + */ + #[ApiProperty(example: '/camps/1a2b3c4d')] + #[Groups(['read', 'create'])] + #[ORM\ManyToOne(targetEntity: Camp::class, inversedBy: 'checklists')] + #[ORM\JoinColumn(nullable: false, onDelete: 'cascade')] + public ?Camp $camp = null; + + /** + * Copy contents from this source checklist. + */ + #[ApiProperty(example: '/checklists/1a2b3c4d')] + #[Groups(['create'])] + public ?Checklist $copyChecklistSource; + + /** + * All ChecklistItems that belong to this Checklist. + */ + #[ApiProperty(writable: false, uriTemplate: ChecklistItem::CHECKLIST_SUBRESOURCE_URI_TEMPLATE)] + #[Groups(['read'])] + #[ORM\OneToMany(targetEntity: ChecklistItem::class, mappedBy: 'checklist', cascade: ['persist'])] + public Collection $checklistItems; + + /** + * The human readable name of the checklist. + */ + #[ApiProperty(example: 'PBS Ausbildungsziele')] + #[Groups(['read', 'write'])] + #[InputFilter\Trim] + #[InputFilter\CleanText] + #[Assert\NotBlank] + #[Assert\Length(max: 32)] + #[ORM\Column(type: 'text')] + public string $name; + + public function __construct() { + parent::__construct(); + $this->checklistItems = new ArrayCollection(); + } + + public function getCamp(): ?Camp { + return $this->camp; + } + + /** + * @return ChecklistItem[] + */ + public function getChecklistItems(): array { + return $this->checklistItems->getValues(); + } + + public function addChecklistItem(ChecklistItem $checklistItem): self { + if (!$this->checklistItems->contains($checklistItem)) { + $this->checklistItems[] = $checklistItem; + $checklistItem->checklist = $this; + } + + return $this; + } + + public function removeChecklistItem(ChecklistItem $checklistItem): self { + if ($this->checklistItems->removeElement($checklistItem)) { + // set the owning side to null (unless already changed) + if ($checklistItem->checklist === $this) { + $checklistItem->checklist = null; + } + } + + return $this; + } + + /** + * @param Checklist $prototype + * @param EntityMap $entityMap + */ + public function copyFromPrototype($prototype, $entityMap): void { + $entityMap->add($prototype, $this); + + // copy Checklist base properties + $this->name = $prototype->name; + + // deep copy ChecklistItems + foreach ($prototype->getChecklistItems() as $checklistItemPrototype) { + // deep copy root ChecklistItems + // skip non-root ChecklistItems as these are copyed by there parent + if (null == $checklistItemPrototype->parent) { + $checklistItem = new ChecklistItem(); + $this->addChecklistItem($checklistItem); + + $checklistItem->copyFromPrototype($checklistItemPrototype, $entityMap); + } + } + } +} diff --git a/api/src/Entity/ChecklistItem.php b/api/src/Entity/ChecklistItem.php new file mode 100644 index 0000000000..2f355203dc --- /dev/null +++ b/api/src/Entity/ChecklistItem.php @@ -0,0 +1,192 @@ + ['write', 'create']], + securityPostDenormalize: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)' + ), + new GetCollection( + uriTemplate: self::CHECKLIST_SUBRESOURCE_URI_TEMPLATE, + uriVariables: [ + 'checklistId' => new Link( + fromClass: Checklist::class, + toProperty: 'checklist', + security: 'is_granted("CAMP_COLLABORATOR", checklist) or is_granted("CAMP_IS_PROTOTYPE", checklist)' + ), + ], + ), + ], + denormalizationContext: ['groups' => ['write']], + normalizationContext: ['groups' => ['read']], + order: ['checklist.id', 'id'], +)] +#[ApiFilter(filterClass: SearchFilter::class, properties: ['checklist', 'checklist.camp'])] +#[ORM\Entity(repositoryClass: ChecklistItemRepository::class)] +#[ORM\UniqueConstraint(name: 'checklistitem_checklistid_parentid_position_unique', columns: ['checklistid', 'parentid', 'position'])] +class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFromPrototypeInterface, HasParentInterface { + public const CHECKLIST_SUBRESOURCE_URI_TEMPLATE = '/checklists/{checklistId}/checklist_items{._format}'; + + /** + * The Checklist this Item belongs to. + */ + #[ApiProperty(example: '/checklists/1a2b3c4d')] + #[Gedmo\SortableGroup] + #[Groups(['read', 'create'])] + #[ORM\ManyToOne(targetEntity: Checklist::class, inversedBy: 'checklistItems')] + #[ORM\JoinColumn(nullable: false, onDelete: 'cascade')] + public ?Checklist $checklist = null; + + /** + * The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the + * root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long + * as the new parent is in the same checklist as the old one. + */ + #[AssertBelongsToSameChecklist] + #[AssertNoLoop] + #[ApiProperty(example: '/checklist_items/1a2b3c4d')] + #[Gedmo\SortableGroup] + #[Groups(['read', 'write'])] + #[ORM\ManyToOne(targetEntity: ChecklistItem::class, inversedBy: 'children')] + #[ORM\JoinColumn(onDelete: 'CASCADE')] + public ?ChecklistItem $parent = null; + + /** + * All ChecklistItems that are direct children of this ChecklistItem. + */ + #[ApiProperty(writable: false, example: '["/checklist_items/1a2b3c4d"]')] + #[Groups(['read'])] + #[ORM\OneToMany(targetEntity: ChecklistItem::class, mappedBy: 'parent', cascade: ['persist'])] + public Collection $children; + + /** + * All ChecklistNodes that have selected this ChecklistItem. + */ + #[ORM\ManyToMany(targetEntity: ChecklistNode::class, mappedBy: 'checklistItems')] + public Collection $checklistNodes; + + /** + * The human readable text of the checklist-item. + */ + #[ApiProperty(example: 'Pfaditechnick')] + #[Groups(['read', 'write'])] + #[InputFilter\Trim] + #[InputFilter\CleanText] + #[Assert\NotBlank] + #[Assert\Length(max: 256)] + #[ORM\Column(type: 'text')] + public ?string $text = null; + + /** + * A whole number used for ordering multiple checklist items that are in the same parent. + * The API does not guarantee the uniqueness of parent+position. + */ + #[ApiProperty(example: '0')] + #[Gedmo\SortablePosition] + #[Groups(['read', 'write'])] + #[ORM\Column(type: 'integer', nullable: false)] + public int $position = -1; + + public function __construct() { + parent::__construct(); + $this->children = new ArrayCollection(); + $this->checklistNodes = new ArrayCollection(); + } + + #[ApiProperty(readable: false)] + public function getCamp(): ?Camp { + return $this->checklist?->getCamp(); + } + + public function getParent(): ?HasParentInterface { + return $this->parent; + } + + /** + * @return ChecklistItem[] + */ + public function getChildren(): array { + return $this->children->getValues(); + } + + public function addChild(self $child): self { + if (!$this->children->contains($child)) { + $this->children[] = $child; + $child->parent = $this; + } + + return $this; + } + + public function removeChild(self $child): self { + if ($this->children->removeElement($child)) { + // set the owning side to null (unless already changed) + if ($child->parent === $this) { + $child->parent = null; + } + } + + return $this; + } + + /** + * @param ChecklistItem $prototype + * @param EntityMap $entityMap + */ + public function copyFromPrototype($prototype, $entityMap): void { + $entityMap->add($prototype, $this); + + // copy ChecklistItem base properties + $this->text = $prototype->text; + + // deep copy ChecklistItems + foreach ($prototype->getChildren() as $childPrototype) { + $child = new ChecklistItem(); + $this->addChild($child); + $this->checklist->addChecklistItem($child); + + $child->copyFromPrototype($childPrototype, $entityMap); + } + } +} diff --git a/api/src/Entity/ContentNode.php b/api/src/Entity/ContentNode.php index 0b29d17753..6130076daa 100644 --- a/api/src/Entity/ContentNode.php +++ b/api/src/Entity/ContentNode.php @@ -14,9 +14,9 @@ use App\Util\ClassInfoTrait; use App\Util\EntityMap; use App\Util\JsonMergePatch; +use App\Validator\AssertNoLoop; use App\Validator\ContentNode\AssertAttachedToRoot; use App\Validator\ContentNode\AssertContentTypeCompatible; -use App\Validator\ContentNode\AssertNoLoop; use App\Validator\ContentNode\AssertNoRootChange; use App\Validator\ContentNode\AssertSlotSupportedByParent; use Doctrine\Common\Collections\ArrayCollection; @@ -49,7 +49,7 @@ #[ORM\InheritanceType('SINGLE_TABLE')] #[ORM\DiscriminatorColumn(name: 'strategy', type: 'string')] #[ORM\UniqueConstraint(name: 'contentnode_parentid_slot_position_unique', columns: ['parentid', 'slot', 'position'])] -abstract class ContentNode extends BaseEntity implements BelongsToContentNodeTreeInterface, CopyFromPrototypeInterface { +abstract class ContentNode extends BaseEntity implements BelongsToContentNodeTreeInterface, CopyFromPrototypeInterface, HasParentInterface { use ClassInfoTrait; /** @@ -160,7 +160,7 @@ public function __construct() { /** * The name of the content type of this content node. Read-only, for convenience. */ - #[ApiProperty(example: 'SafetyConcept')] + #[ApiProperty(example: 'SafetyConsiderations')] #[Groups(['read'])] public function getContentTypeName(): string { return $this->contentType?->name; @@ -180,6 +180,10 @@ public function getRoot(): ?ColumnLayout { return $this->root; } + public function getParent(): ?HasParentInterface { + return $this->parent; + } + /** * Holds the actual data of the content node. */ diff --git a/api/src/Entity/ContentNode/ChecklistNode.php b/api/src/Entity/ContentNode/ChecklistNode.php new file mode 100644 index 0000000000..2f6dcc8c39 --- /dev/null +++ b/api/src/Entity/ContentNode/ChecklistNode.php @@ -0,0 +1,110 @@ + ['write', 'update']], + security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)', + validationContext: ['groups' => ['Default', 'update']] + ), + new Delete( + security: '(is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)) and object.parent !== null' + ), + new GetCollection( + security: 'is_authenticated()' + ), + new Post( + processor: ChecklistNodePersistProcessor::class, + denormalizationContext: ['groups' => ['write', 'create']], + securityPostDenormalize: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)', + validationContext: ['groups' => ['Default', 'create']], + ), + ], + denormalizationContext: ['groups' => ['write']], + normalizationContext: ['groups' => ['read']], + routePrefix: '/content_node' +)] +#[ORM\Entity(repositoryClass: ChecklistNodeRepository::class)] +class ChecklistNode extends ContentNode { + /** + * List of selected ChecklistItems. + */ + #[ApiProperty(example: '["/checklist_items/1a2b3c4d"]')] + #[Groups(['read'])] + #[ORM\ManyToMany(targetEntity: ChecklistItem::class, inversedBy: 'checklistNodes')] + #[ORM\JoinTable(name: 'checklistnode_checklistitem')] + #[ORM\JoinColumn(name: 'checklistnode_id', referencedColumnName: 'id', onDelete: 'CASCADE')] + #[ORM\InverseJoinColumn(name: 'checklistitem_id', referencedColumnName: 'id', onDelete: 'CASCADE')] + #[ORM\OrderBy(['position' => 'ASC'])] + public Collection $checklistItems; + + #[AssertBelongsToSameCamp(groups: ['update'])] + #[ApiProperty(example: '["1a2b3c4d"]')] + #[Groups(['write'])] + public ?array $addChecklistItemIds = []; + + #[ApiProperty(example: '["1a2b3c4d"]')] + #[Groups(['write'])] + public ?array $removeChecklistItemIds = []; + + public function __construct() { + parent::__construct(); + $this->checklistItems = new ArrayCollection(); + } + + /** + * @return ChecklistItem[] + */ + public function getChecklistItems(): array { + return $this->checklistItems->getValues(); + } + + public function addChecklistItem(ChecklistItem $checklistItem) { + $this->checklistItems->add($checklistItem); + } + + public function removeChecklistItem(ChecklistItem $checklistItem) { + $this->checklistItems->removeElement($checklistItem); + } + + /** + * @param ChecklistNode $prototype + * @param EntityMap $entityMap + */ + public function copyFromPrototype($prototype, $entityMap): void { + parent::copyFromPrototype($prototype, $entityMap); + + // copy all checklist-items + foreach ($prototype->checklistItems as $itemPrototype) { + /** @var ChecklistItem $itemPrototype */ + /** @var ChecklistItem $checklilstItem */ + $checklilstItem = $entityMap->get($itemPrototype); + $this->addChecklistItem($checklilstItem); + } + } +} diff --git a/api/src/Entity/ContentType.php b/api/src/Entity/ContentType.php index 8da651b0d2..82be444e94 100644 --- a/api/src/Entity/ContentType.php +++ b/api/src/Entity/ContentType.php @@ -33,7 +33,7 @@ class ContentType extends BaseEntity { * A name in UpperCamelCase of the content type. This value may be used as a technical * identifier of this content type, it is guaranteed to stay fixed. */ - #[ApiProperty(writable: false, example: 'SafetyConcept')] + #[ApiProperty(writable: false, example: 'SafetyConsiderations')] #[Groups(['read'])] #[ORM\Column(type: 'string', length: 32, unique: true)] public ?string $name = null; diff --git a/api/src/Entity/HasParentInterface.php b/api/src/Entity/HasParentInterface.php new file mode 100644 index 0000000000..87ec5c2d00 --- /dev/null +++ b/api/src/Entity/HasParentInterface.php @@ -0,0 +1,7 @@ +getEntityManager()->createQueryBuilder(); + $checklistQry->select('c'); + $checklistQry->from(Checklist::class, 'c'); + $checklistQry->join(UserCamp::class, 'uc', Join::WITH, 'c.camp = uc.camp'); + $checklistQry->where('uc.user = :current_user'); + + $rootAlias = $queryBuilder->getRootAliases()[0]; + $queryBuilder->andWhere($queryBuilder->expr()->in("{$rootAlias}.checklist", $checklistQry->getDQL())); + $queryBuilder->setParameter('current_user', $user); + } +} diff --git a/api/src/Repository/ChecklistNodeRepository.php b/api/src/Repository/ChecklistNodeRepository.php new file mode 100644 index 0000000000..c6b9bafe84 --- /dev/null +++ b/api/src/Repository/ChecklistNodeRepository.php @@ -0,0 +1,20 @@ + + */ +class ChecklistNodeRepository extends ContentNodeRepository { + public function __construct(EntityManagerInterface $em) { + parent::__construct($em, ChecklistNode::class); + } +} diff --git a/api/src/Repository/ChecklistRepository.php b/api/src/Repository/ChecklistRepository.php new file mode 100644 index 0000000000..4325bb3a5a --- /dev/null +++ b/api/src/Repository/ChecklistRepository.php @@ -0,0 +1,29 @@ +getRootAliases()[0]; + $this->filterByCampCollaboration($queryBuilder, $user, "{$rootAlias}.camp"); + } +} diff --git a/api/src/Service/MailService.php b/api/src/Service/MailService.php index f0d64b3765..dfaa8c0cff 100644 --- a/api/src/Service/MailService.php +++ b/api/src/Service/MailService.php @@ -29,14 +29,14 @@ public function sendInviteToCampMail(User $byUser, Camp $camp, string $key, stri $email = (new TemplatedEmail()) ->from(new Address($this->senderEmail, $this->senderName)) ->to(new Address($emailToInvite)) - ->subject($this->translator->trans('inviteToCamp.subject', ['campName' => $camp->name], self::TRANSLATE_DOMAIN, $byUser->profile->language)) + ->subject($this->translator->trans('inviteToCamp.subject', ['campTitle' => $camp->title], self::TRANSLATE_DOMAIN, $byUser->profile->language)) ->htmlTemplate($this->getTemplate('emails/campCollaborationInvite.{language}.html.twig', $byUser)) ->textTemplate($this->getTemplate('emails/campCollaborationInvite.{language}.text.twig', $byUser)) ->context([ 'by_user' => $byUser->getDisplayName(), 'url' => "{$this->frontendBaseUrl}/camps/invitation/{$key}", - 'camp_name' => $camp->name, 'camp_title' => $camp->title, + 'camp_organizer' => $camp->organizer, ]) ; diff --git a/api/src/State/ChecklistCreateProcessor.php b/api/src/State/ChecklistCreateProcessor.php new file mode 100644 index 0000000000..bbac6635f5 --- /dev/null +++ b/api/src/State/ChecklistCreateProcessor.php @@ -0,0 +1,31 @@ + + */ +class ChecklistCreateProcessor extends AbstractPersistProcessor { + public function __construct(ProcessorInterface $decorated) { + parent::__construct($decorated); + } + + /** + * @param Checklist $data + */ + public function onBefore($data, Operation $operation, array $uriVariables = [], array $context = []): Checklist { + if (isset($data->copyChecklistSource)) { + // CopyChecklist Source is set -> copy it's content + $entityMap = new EntityMap(); + $data->copyFromPrototype($data->copyChecklistSource, $entityMap); + } + + return $data; + } +} diff --git a/api/src/State/ContentNode/ChecklistNodePersistProcessor.php b/api/src/State/ContentNode/ChecklistNodePersistProcessor.php new file mode 100644 index 0000000000..bdbe6a9f34 --- /dev/null +++ b/api/src/State/ContentNode/ChecklistNodePersistProcessor.php @@ -0,0 +1,46 @@ + + */ +class ChecklistNodePersistProcessor extends ContentNodePersistProcessor { + public function __construct( + ProcessorInterface $decorated, + private ChecklistItemRepository $checklistItemRepository, + ) { + parent::__construct($decorated); + } + + public function onBefore($data, Operation $operation, array $uriVariables = [], array $context = []): ChecklistNode { + /** @var ChecklistNode $data */ + $data = parent::onBefore($data, $operation, $uriVariables, $context); + + if (null !== $data->addChecklistItemIds) { + foreach ($data->addChecklistItemIds as $checklistItemId) { + $checklistItem = $this->checklistItemRepository->find($checklistItemId); + if (null != $checklistItem) { + // if a checklistItem does not exists, do not add it + $data->addChecklistItem($checklistItem); + } + } + } + if (null !== $data->removeChecklistItemIds) { + foreach ($data->removeChecklistItemIds as $checklistItemId) { + $checklistItem = $this->checklistItemRepository->find($checklistItemId); + if (null != $checklistItem) { + // if a checklistItem no longer exists, it does not have to be removed + $data->removeChecklistItem($checklistItem); + } + } + } + + return $data; + } +} diff --git a/api/src/Validator/ContentNode/AssertNoLoop.php b/api/src/Validator/AssertNoLoop.php similarity index 83% rename from api/src/Validator/ContentNode/AssertNoLoop.php rename to api/src/Validator/AssertNoLoop.php index fdfd41bd0e..e6ba7899b6 100644 --- a/api/src/Validator/ContentNode/AssertNoLoop.php +++ b/api/src/Validator/AssertNoLoop.php @@ -1,6 +1,6 @@ context->getObject(); - /** @var ContentNode $parent */ + /** @var HasParentInterface $parent */ $parent = $value; // $seen keeps track of all parents that we have visited. This is for a safety @@ -36,7 +36,7 @@ public function validate($value, Constraint $constraint): void { } $seen[] = $parent->getId(); - $parent = $parent->parent; + $parent = $parent->getParent(); } } } diff --git a/api/src/Validator/ChecklistItem/AssertBelongsToSameCamp.php b/api/src/Validator/ChecklistItem/AssertBelongsToSameCamp.php new file mode 100644 index 0000000000..e27bffc8d6 --- /dev/null +++ b/api/src/Validator/ChecklistItem/AssertBelongsToSameCamp.php @@ -0,0 +1,10 @@ +context->getObject(); + if (!$object instanceof ChecklistNode) { + throw new UnexpectedValueException($object, ChecklistNode::class); + } + + $camp = $this->getCampFromInterface($object, $this->em); + + foreach ($value as $checklistItemId) { + /** @var ?ChecklistItem $checklistItem */ + $checklistItem = $this->checklistItemRepository->find($checklistItemId); + + if ($camp != $checklistItem?->getCamp()) { + $this->context->buildViolation($constraint->message) + ->addViolation() + ; + } + } + } +} diff --git a/api/src/Validator/ChecklistItem/AssertBelongsToSameChecklist.php b/api/src/Validator/ChecklistItem/AssertBelongsToSameChecklist.php new file mode 100644 index 0000000000..a70685628d --- /dev/null +++ b/api/src/Validator/ChecklistItem/AssertBelongsToSameChecklist.php @@ -0,0 +1,10 @@ +context->getObject(); + if (!$object instanceof ChecklistItem) { + throw new UnexpectedValueException($object, ChecklistItem::class); + } + + if ($value->checklist->getId() !== $object->checklist->getId()) { + $this->context->buildViolation($constraint->message) + ->addViolation() + ; + } + } +} diff --git a/api/templates/emails/campCollaborationInvite.de.html.twig b/api/templates/emails/campCollaborationInvite.de.html.twig index 707ff4240b..30382672a7 100644 --- a/api/templates/emails/campCollaborationInvite.de.html.twig +++ b/api/templates/emails/campCollaborationInvite.de.html.twig @@ -1,15 +1,15 @@ -{% set preheader = 'Einladung zur Mitarbeit beim Lager ' ~ camp_name %} +{% set preheader = 'Einladung zur Mitarbeit beim Lager ' ~ camp_title %} {% extends 'emails/baseLayout.twig' %} {% block content %} -

Einladung zur Mitarbeit beim Lager "{{ camp_name }}"

+

Einladung zur Mitarbeit beim Lager "{{ camp_title }}"

Hallo,

Du wurdest von {{ by_user }} eingeladen, bei folgendem Lager mitzuwirken:

- Name: {{ camp_name }}
- Titel: {{ camp_title }} + Lagertitel: {{ camp_title }}
+ Organisator: {{ camp_organizer }}

{% with { title: 'Einladung beantworten', url: url } %} diff --git a/api/templates/emails/campCollaborationInvite.de.text.twig b/api/templates/emails/campCollaborationInvite.de.text.twig index 73dcedf35a..8ac473c84a 100644 --- a/api/templates/emails/campCollaborationInvite.de.text.twig +++ b/api/templates/emails/campCollaborationInvite.de.text.twig @@ -1,9 +1,9 @@ -Einladung zur Mitarbeit beim Lager "{{ camp_name | raw }}" +Einladung zur Mitarbeit beim Lager "{{ camp_title | raw }}" Du wurdest von {{ by_user | raw }} eingeladen, bei folgendem Lager mitzuwirken. -Name: {{ camp_name | raw }} Titel: {{ camp_title | raw }} +Organisator: {{ camp_organizer | raw }} Klicke hier, um die Einladung zu beantworten: {{ url | raw }} diff --git a/api/templates/emails/campCollaborationInvite.en.html.twig b/api/templates/emails/campCollaborationInvite.en.html.twig index dc03914b4c..0c99c4d53b 100644 --- a/api/templates/emails/campCollaborationInvite.en.html.twig +++ b/api/templates/emails/campCollaborationInvite.en.html.twig @@ -1,16 +1,16 @@ -{% set preheader = 'Invitation to camp ' ~ camp_name %} +{% set preheader = 'Invitation to camp ' ~ camp_title %} {% extends 'emails/baseLayout.twig' %} {% block content %} -

Invitation to camp "{{ camp_name }}"

+

Invitation to camp "{{ camp_title }}"

Hi,

- You have been invited by {{ by_user }} to collaborate in the following camp: -

+ You have been invited by {{ by_user }} to collaborate in the following camp: +

- Name: {{ camp_name }}
- Title: {{ camp_title }} + Title: {{ camp_title }}
+ Organizer: {{ camp_organizer }}

{% with { title: 'Answer the invitation', url: url } %} diff --git a/api/templates/emails/campCollaborationInvite.en.text.twig b/api/templates/emails/campCollaborationInvite.en.text.twig index fd9973633d..0e63c649d7 100644 --- a/api/templates/emails/campCollaborationInvite.en.text.twig +++ b/api/templates/emails/campCollaborationInvite.en.text.twig @@ -1,9 +1,9 @@ -Invitation to camp "{{ camp_name | raw }}" +Invitation to camp "{{ camp_title | raw }}" You have been invited by {{ by_user | raw }} to collaborate in the following camp: -Name: {{ camp_name | raw }} Title: {{ camp_title | raw }} +Organizer: {{ camp_organizer | raw }} Answer the invitation: {{ url | raw }} diff --git a/api/tests/Api/Activities/ReadActivityTest.php b/api/tests/Api/Activities/ReadActivityTest.php index 2bccea6aa6..61c7394e24 100644 --- a/api/tests/Api/Activities/ReadActivityTest.php +++ b/api/tests/Api/Activities/ReadActivityTest.php @@ -93,7 +93,7 @@ public function testGetSingleActivityIsAllowedForMember() { $this->assertEquals($this->getIriFor($activity->getRootContentNode()), $data['_embedded']['rootContentNode']['_links']['self']['href']); $this->assertEquals($this->getIriFor($activity->getRootContentNode()), $data['_embedded']['rootContentNode']['_links']['root']['href']); $this->assertContains(['href' => $this->getIriFor('responsiveLayout1')], $data['_embedded']['rootContentNode']['_links']['children']); - $this->assertEquals(11, count($data['_embedded']['contentNodes'])); + $this->assertEquals(12, count($data['_embedded']['contentNodes'])); } public function testGetSingleActivityIsAllowedForManager() { diff --git a/api/tests/Api/Camps/CreateCampTest.php b/api/tests/Api/Camps/CreateCampTest.php index f9a12d5e10..1024815a4c 100644 --- a/api/tests/Api/Camps/CreateCampTest.php +++ b/api/tests/Api/Camps/CreateCampTest.php @@ -215,66 +215,36 @@ public function testCreateCampCreatesPeriodAndDays() { public function testCreateCampTrimsName() { static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([ - 'name' => " So-La\t ", + 'shortTitle' => " So-La\t ", ])]); $this->assertResponseStatusCodeSame(201); $this->assertJsonContains($this->getExampleReadPayload([ - 'name' => 'So-La', + 'shortTitle' => 'So-La', ])); } public function testCreateCampCleansForbiddenCharactersFromName() { static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([ - 'name' => "So-\n\tLa", + 'shortTitle' => "So-\n\tLa", ])]); $this->assertResponseStatusCodeSame(201); $this->assertJsonContains($this->getExampleReadPayload([ - 'name' => 'So-La', + 'shortTitle' => 'So-La', ])); } - public function testCreateCampValidatesMissingName() { - static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([], ['name'])]); - - $this->assertResponseStatusCodeSame(422); - $this->assertJsonContains([ - 'violations' => [ - [ - 'propertyPath' => 'name', - 'message' => 'This value should not be blank.', - ], - ], - ]); - } - - public function testCreateCampValidatesBlankName() { - static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([ - 'name' => '', - ])]); - - $this->assertResponseStatusCodeSame(422); - $this->assertJsonContains([ - 'violations' => [ - [ - 'propertyPath' => 'name', - 'message' => 'This value should not be blank.', - ], - ], - ]); - } - public function testCreateCampValidatesLongName() { static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([ - 'name' => 'A very long camp name which is not really useful', + 'shortTitle' => 'A very long camp name which is not really useful', ])]); $this->assertResponseStatusCodeSame(422); $this->assertJsonContains([ 'violations' => [ [ - 'propertyPath' => 'name', + 'propertyPath' => 'shortTitle', 'message' => 'This value is too long. It should have 32 characters or less.', ], ], @@ -762,7 +732,7 @@ public function testCreateCampReturnsProperDatesInTimezoneBehindUTC() { public function testCreateCampValidatesTooLongNameAndIncludesTranslationInfo() { static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([ - 'name' => 'This camp name has 33 characters!', + 'shortTitle' => 'This camp name has 33 characters!', ])]); $this->assertResponseStatusCodeSame(422); diff --git a/api/tests/Api/Camps/ReadCampTest.php b/api/tests/Api/Camps/ReadCampTest.php index df95ce9973..1742b2c2b0 100644 --- a/api/tests/Api/Camps/ReadCampTest.php +++ b/api/tests/Api/Camps/ReadCampTest.php @@ -49,7 +49,7 @@ public function testGetSingleCampIsAllowedForGuest() { $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ 'id' => $camp->getId(), - 'name' => $camp->name, + 'shortTitle' => $camp->shortTitle, 'title' => $camp->title, 'motto' => $camp->motto, 'addressName' => $camp->addressName, @@ -83,7 +83,7 @@ public function testGetSingleCampIsAllowedForMember() { $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ 'id' => $camp->getId(), - 'name' => $camp->name, + 'shortTitle' => $camp->shortTitle, 'title' => $camp->title, 'motto' => $camp->motto, 'addressName' => $camp->addressName, @@ -110,7 +110,7 @@ public function testGetSingleCampIsAllowedForManager() { $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ 'id' => $camp->getId(), - 'name' => $camp->name, + 'shortTitle' => $camp->shortTitle, 'title' => $camp->title, 'motto' => $camp->motto, 'addressName' => $camp->addressName, @@ -137,7 +137,7 @@ public function testGetSinglePrototypeCampIsAllowedForUnrelatedUser() { $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ 'id' => $camp->getId(), - 'name' => $camp->name, + 'shortTitle' => $camp->shortTitle, 'title' => $camp->title, 'motto' => $camp->motto, 'addressName' => $camp->addressName, @@ -163,7 +163,7 @@ public function testGetSinglePrototypeCampIsAllowedForUnrelatedUserEvenWithoutAn $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ 'id' => $camp->getId(), - 'name' => $camp->name, + 'shortTitle' => $camp->shortTitle, 'title' => $camp->title, 'motto' => $camp->motto, 'addressName' => $camp->addressName, diff --git a/api/tests/Api/Camps/UpdateCampTest.php b/api/tests/Api/Camps/UpdateCampTest.php index c6b83ebcfc..9ccdebd592 100644 --- a/api/tests/Api/Camps/UpdateCampTest.php +++ b/api/tests/Api/Camps/UpdateCampTest.php @@ -125,55 +125,38 @@ public function testPatchCampDisallowsSettingIsPrototype() { public function testPatchCampTrimsName() { $camp = static::getFixture('camp1'); static::createClientWithCredentials()->request('PATCH', '/camps/'.$camp->getId(), ['json' => [ - 'name' => " So-La\t ", + 'shortTitle' => " So-La\t ", ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ - 'name' => 'So-La', + 'shortTitle' => 'So-La', ]); } public function testPatchCampCleansForbiddenCharactersFromName() { $camp = static::getFixture('camp1'); static::createClientWithCredentials()->request('PATCH', '/camps/'.$camp->getId(), ['json' => [ - 'name' => "So-\n\tLa", + 'shortTitle' => "So-\n\tLa", ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ - 'name' => 'So-La', - ]); - } - - public function testPatchCampValidatesBlankName() { - $camp = static::getFixture('camp1'); - static::createClientWithCredentials()->request('PATCH', '/camps/'.$camp->getId(), ['json' => [ - 'name' => '', - ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); - - $this->assertResponseStatusCodeSame(422); - $this->assertJsonContains([ - 'violations' => [ - [ - 'propertyPath' => 'name', - 'message' => 'This value should not be blank.', - ], - ], + 'shortTitle' => 'So-La', ]); } public function testPatchCampValidatesLongName() { $camp = static::getFixture('camp1'); static::createClientWithCredentials()->request('PATCH', '/camps/'.$camp->getId(), ['json' => [ - 'name' => 'A very long camp name which is not really useful', + 'shortTitle' => 'A very long camp name which is not really useful', ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); $this->assertResponseStatusCodeSame(422); $this->assertJsonContains([ 'violations' => [ [ - 'propertyPath' => 'name', + 'propertyPath' => 'shortTitle', 'message' => 'This value is too long. It should have 32 characters or less.', ], ], diff --git a/api/tests/Api/Categories/CreateCategoryTest.php b/api/tests/Api/Categories/CreateCategoryTest.php index 5c29dfe60a..4f0161d917 100644 --- a/api/tests/Api/Categories/CreateCategoryTest.php +++ b/api/tests/Api/Categories/CreateCategoryTest.php @@ -561,7 +561,7 @@ public function testCreateCategoryPurgesCacheTags() { $this->assertResponseStatusCodeSame(201); $camp1 = static::getFixture('camp1'); - $contentType = static::getFixture('contentTypeSafetyConcept'); + $contentType = static::getFixture('contentTypeSafetyConsiderations'); self::assertEqualsCanonicalizing([ '/categories', '/camps/'.$camp1->getId().'/categories', @@ -606,7 +606,7 @@ public function getExampleWritePayload($attributes = [], $except = []) { array_merge([ 'copyCategorySource' => null, 'camp' => $this->getIriFor('camp1'), - 'preferredContentTypes' => [$this->getIriFor('contentTypeSafetyConcept')], + 'preferredContentTypes' => [$this->getIriFor('contentTypeSafetyConsiderations')], ], $attributes), [], $except diff --git a/api/tests/Api/Categories/UpdateCategoryTest.php b/api/tests/Api/Categories/UpdateCategoryTest.php index 92d3429565..df15957861 100644 --- a/api/tests/Api/Categories/UpdateCategoryTest.php +++ b/api/tests/Api/Categories/UpdateCategoryTest.php @@ -17,7 +17,7 @@ public function testPatchCategoryIsDeniedForAnonymousUser() { 'numberingStyle' => 'I', 'preferredContentTypes' => [ $this->getIriFor('contentTypeColumnLayout'), - $this->getIriFor('contentTypeSafetyConcept'), + $this->getIriFor('contentTypeSafetyConsiderations'), ], ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); $this->assertResponseStatusCodeSame(401); @@ -37,7 +37,7 @@ public function testPatchCategoryIsDeniedForUnrelatedUser() { 'numberingStyle' => 'I', 'preferredContentTypes' => [ $this->getIriFor('contentTypeColumnLayout'), - $this->getIriFor('contentTypeSafetyConcept'), + $this->getIriFor('contentTypeSafetyConsiderations'), ], ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) ; @@ -58,7 +58,7 @@ public function testPatchCategoryIsDeniedForInactiveCollaborator() { 'numberingStyle' => 'I', 'preferredContentTypes' => [ $this->getIriFor('contentTypeColumnLayout'), - $this->getIriFor('contentTypeSafetyConcept'), + $this->getIriFor('contentTypeSafetyConsiderations'), ], ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) ; @@ -79,7 +79,7 @@ public function testPatchCategoryIsDeniedForGuest() { 'numberingStyle' => 'I', 'preferredContentTypes' => [ $this->getIriFor('contentTypeColumnLayout'), - $this->getIriFor('contentTypeSafetyConcept'), + $this->getIriFor('contentTypeSafetyConsiderations'), ], ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) ; @@ -100,7 +100,7 @@ public function testPatchCategoryIsAllowedForMember() { 'numberingStyle' => 'I', 'preferredContentTypes' => [ $this->getIriFor('contentTypeColumnLayout'), - $this->getIriFor('contentTypeSafetyConcept'), + $this->getIriFor('contentTypeSafetyConsiderations'), ], ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) ; @@ -127,7 +127,7 @@ public function testPatchCategoryIsAllowedForManager() { 'numberingStyle' => 'I', 'preferredContentTypes' => [ $this->getIriFor('contentTypeColumnLayout'), - $this->getIriFor('contentTypeSafetyConcept'), + $this->getIriFor('contentTypeSafetyConsiderations'), ], ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); $this->assertResponseStatusCodeSame(200); @@ -153,7 +153,7 @@ public function testPatchCategoryInCampPrototypeIsDeniedForUnrelatedUser() { 'numberingStyle' => 'I', 'preferredContentTypes' => [ $this->getIriFor('contentTypeColumnLayout'), - $this->getIriFor('contentTypeSafetyConcept'), + $this->getIriFor('contentTypeSafetyConsiderations'), ], ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); $this->assertResponseStatusCodeSame(403); @@ -529,12 +529,12 @@ public function testPatchCategoryPurgesCacheTags() { $contentTypeColumnLayout = static::getFixture('contentTypeColumnLayout'); $contentTypeNotes = static::getFixture('contentTypeNotes'); - $contentTypeSafetyConcept = static::getFixture('contentTypeSafetyConcept'); + $contentTypeSafetyConsiderations = static::getFixture('contentTypeSafetyConsiderations'); self::assertEqualsCanonicalizing([ $category->getId(), $contentTypeColumnLayout->getId().'#categories', $contentTypeNotes->getId().'#categories', - $contentTypeSafetyConcept->getId().'#categories', // SafetyConcept was previously in the list, so this is purged because it was removed + $contentTypeSafetyConsiderations->getId().'#categories', // SafetyConsiderations was previously in the list, so this is purged because it was removed ], $cacheManager->getInvalidatedTags()); } } diff --git a/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php b/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php new file mode 100644 index 0000000000..6381cc0999 --- /dev/null +++ b/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php @@ -0,0 +1,260 @@ +request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()]); + + $this->assertResponseStatusCodeSame(401); + $this->assertJsonContains([ + 'code' => 401, + 'message' => 'JWT Token not found', + ]); + } + + public function testCreateChecklistItemIsNotPossibleForUnrelatedUserBecauseCampIsNotReadable() { + static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()]) + ; + + $this->assertResponseStatusCodeSame(400); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Item not found for "'.$this->getIriFor('checklist1').'".', + ]); + } + + public function testCreateChecklistItemIsNotPossibleForInactiveCollaboratorBecauseCampIsNotReadable() { + static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()]) + ->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()]) + ; + + $this->assertResponseStatusCodeSame(400); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Item not found for "'.$this->getIriFor('checklist1').'".', + ]); + } + + public function testCreateChecklistItemIsDeniedForGuest() { + static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()]) + ->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()]) + ; + + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testCreateChecklistItemIsAllowedForMember() { + static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()]) + ->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()]) + ; + + $this->assertResponseStatusCodeSame(201); + $this->assertJsonContains($this->getExampleReadPayload(['position' => 2])); + } + + public function testCreateChecklistItemIsAllowedForManager() { + static::createClientWithCredentials()->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()]); + + $this->assertResponseStatusCodeSame(201); + $this->assertJsonContains($this->getExampleReadPayload(['position' => 2])); + } + + public function testCreateChecklistItemInCampPrototypeIsDeniedForUnrelatedUser() { + static::createClientWithCredentials()->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload([ + 'checklist' => $this->getIriFor('checklist1campPrototype'), + ])]); + + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testCreateChecklistItemValidatesMissingChecklist() { + static::createClientWithCredentials()->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload([], ['checklist'])]); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'checklist', + 'message' => 'This value should not be null.', + ], + ], + ]); + } + + public function testCreateChecklistItemValidatesMissingText() { + static::createClientWithCredentials()->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload([], ['text'])]); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'text', + 'message' => 'This value should not be blank.', + ], + ], + ]); + } + + public function testCreateChecklistItemValidatesBlankText() { + static::createClientWithCredentials()->request( + 'POST', + '/checklist_items', + [ + 'json' => $this->getExampleWritePayload( + [ + 'text' => '', + ] + ), + ] + ); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'text', + 'message' => 'This value should not be blank.', + ], + ], + ]); + } + + public function testCreateChecklistItemValidatesTooLongText() { + static::createClientWithCredentials()->request( + 'POST', + '/checklist_items', + [ + 'json' => $this->getExampleWritePayload( + [ + 'text' => str_repeat('l', 257), + ] + ), + ] + ); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'text', + 'message' => 'This value is too long. It should have 256 characters or less.', + ], + ], + ]); + } + + public function testCreateChecklistItemTrimsText() { + static::createClientWithCredentials()->request( + 'POST', + '/checklist_items', + [ + 'json' => $this->getExampleWritePayload( + [ + 'text' => " \t Ziel 1\t ", + ] + ), + ] + ); + + $this->assertResponseStatusCodeSame(201); + $this->assertJsonContains($this->getExampleReadPayload( + [ + 'text' => 'Ziel 1', + 'position' => 2, + ] + )); + } + + public function testCreateChecklistItemCleansForbiddenCharactersFromText() { + static::createClientWithCredentials()->request( + 'POST', + '/checklist_items', + [ + 'json' => $this->getExampleWritePayload( + [ + 'text' => "\n\tZiel 1", + ] + ), + ] + ); + + $this->assertResponseStatusCodeSame(201); + $this->assertJsonContains($this->getExampleReadPayload( + [ + 'text' => 'Ziel 1', + 'position' => 2, + ] + )); + } + + /** + * @throws RedirectionExceptionInterface + * @throws DecodingExceptionInterface + * @throws ClientExceptionInterface + * @throws TransportExceptionInterface + * @throws ServerExceptionInterface + */ + public function testCreateResponseStructureMatchesReadResponseStructure() { + $client = static::createClientWithCredentials(); + $client->disableReboot(); + $createResponse = $client->request( + 'POST', + '/checklist_items', + [ + 'json' => $this->getExampleWritePayload(), + ] + ); + + $this->assertResponseStatusCodeSame(201); + + $createArray = $createResponse->toArray(); + $newItemLink = $createArray['_links']['self']['href']; + $getItemResponse = $client->request('GET', $newItemLink); + + assertThat($createArray, CompatibleHalResponse::isHalCompatibleWith($getItemResponse->toArray())); + } + + public function getExampleWritePayload($attributes = [], $except = []) { + return $this->getExamplePayload( + ChecklistItem::class, + Post::class, + array_merge([ + 'parent' => null, + 'checklist' => $this->getIriFor('checklist1'), + ], $attributes), + [], + $except + ); + } + + public function getExampleReadPayload($attributes = [], $except = []) { + return $this->getExamplePayload( + ChecklistItem::class, + Get::class, + $attributes, + ['parent', 'checklist'], + $except + ); + } +} diff --git a/api/tests/Api/ChecklistItems/DeleteChecklistItemTest.php b/api/tests/Api/ChecklistItems/DeleteChecklistItemTest.php new file mode 100644 index 0000000000..262ef91457 --- /dev/null +++ b/api/tests/Api/ChecklistItems/DeleteChecklistItemTest.php @@ -0,0 +1,87 @@ +request('DELETE', '/checklist_items/'.$checklistItem->getId()); + $this->assertResponseStatusCodeSame(401); + $this->assertJsonContains([ + 'code' => 401, + 'message' => 'JWT Token not found', + ]); + } + + public function testDeleteChecklistItemIsDeniedForUnrelatedUser() { + $checklistItem = static::getFixture('checklistItem1_1_2_3'); + static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('DELETE', '/checklist_items/'.$checklistItem->getId()) + ; + + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testDeleteChecklistItemIsDeniedForInactiveCollaborator() { + $checklistItem = static::getFixture('checklistItem1_1_2_3'); + static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()]) + ->request('DELETE', '/checklist_items/'.$checklistItem->getId()) + ; + + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testDeleteChecklistItemIsDeniedForGuest() { + $checklistItem = static::getFixture('checklistItem1_1_2_3'); + static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()]) + ->request('DELETE', '/checklist_items/'.$checklistItem->getId()) + ; + + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testDeleteChecklistItemIsAllowedForMember() { + $checklistItem = static::getFixture('checklistItem1_1_2_3'); + static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()]) + ->request('DELETE', '/checklist_items/'.$checklistItem->getId()) + ; + $this->assertResponseStatusCodeSame(204); + $this->assertNull($this->getEntityManager()->getRepository(ChecklistItem::class)->find($checklistItem->getId())); + } + + public function testDeleteChecklistItemIsAllowedForManager() { + $checklistItem = static::getFixture('checklistItem1_1_2_3'); + static::createClientWithCredentials()->request('DELETE', '/checklist_items/'.$checklistItem->getId()); + $this->assertResponseStatusCodeSame(204); + $this->assertNull($this->getEntityManager()->getRepository(ChecklistItem::class)->find($checklistItem->getId())); + } + + public function testDeleteChecklistItemFromCampPrototypeIsDeniedForUnrelatedUser() { + $checklistItem = static::getFixture('checklistItemPrototype_1_1'); + static::createClientWithCredentials()->request('DELETE', '/checklist_items/'.$checklistItem->getId()); + + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } +} diff --git a/api/tests/Api/ChecklistItems/ListChecklistItemTest.php b/api/tests/Api/ChecklistItems/ListChecklistItemTest.php new file mode 100644 index 0000000000..cbffa0d0a5 --- /dev/null +++ b/api/tests/Api/ChecklistItems/ListChecklistItemTest.php @@ -0,0 +1,128 @@ +request('GET', '/checklist_items'); + $this->assertResponseStatusCodeSame(401); + $this->assertJsonContains([ + 'code' => 401, + 'message' => 'JWT Token not found', + ]); + } + + public function testListChecklistItemsIsAllowedForLoggedInUserButFiltered() { + // precondition: There is a checklist-item that the user doesn't have access to + $this->assertNotEmpty(static::$fixtures['checklistItemUnrelated_1_1']); + + $response = static::createClientWithCredentials()->request('GET', '/checklist_items'); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'totalItems' => 5, + '_links' => [ + 'items' => [], + ], + '_embedded' => [ + 'items' => [], + ], + ]); + $this->assertEqualsCanonicalizing([ + ['href' => $this->getIriFor('checklistItem1_1_1')], + ['href' => $this->getIriFor('checklistItem1_1_2')], + ['href' => $this->getIriFor('checklistItem1_1_2_3')], + ['href' => $this->getIriFor('checklistItem2_1_1')], + ['href' => $this->getIriFor('checklistItemPrototype_1_1')], + ], $response->toArray()['_links']['items']); + } + + public function testListChecklistItemsFilteredByChecklistIsAllowedForCollaborator() { + $checklist = static::getFixture('checklist1'); + $response = static::createClientWithCredentials()->request('GET', '/checklist_items?checklist=%2Fchecklists%2F'.$checklist->getId()); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'totalItems' => 3, + '_links' => [ + 'items' => [], + ], + '_embedded' => [ + 'items' => [], + ], + ]); + $this->assertEqualsCanonicalizing([ + ['href' => $this->getIriFor('checklistItem1_1_1')], + ['href' => $this->getIriFor('checklistItem1_1_2')], + ['href' => $this->getIriFor('checklistItem1_1_2_3')], + ], $response->toArray()['_links']['items']); + } + + public function testListChecklistItemsFilteredByChecklistIsDeniedForUnrelatedUser() { + $checklist = static::getFixture('checklist1'); + $response = static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('GET', '/checklist_items?checklist=%2Fchecklists%2F'.$checklist->getId()) + ; + + $this->assertResponseStatusCodeSame(200); + + $this->assertJsonContains(['totalItems' => 0]); + $this->assertArrayNotHasKey('items', $response->toArray()['_links']); + } + + public function testListChecklistItemsFilteredByChecklistIsDeniedForInactiveCollaborator() { + $checklist = static::getFixture('checklist1'); + $response = static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()]) + ->request('GET', '/checklist_items?checklist=%2Fchecklists%2F'.$checklist->getId()) + ; + + $this->assertResponseStatusCodeSame(200); + + $this->assertJsonContains(['totalItems' => 0]); + $this->assertArrayNotHasKey('items', $response->toArray()['_links']); + } + + public function testListChecklistItemsFilteredByChecklistPrototypeIsAllowedForUnrelatedUser() { + $checklist = static::getFixture('checklist1campPrototype'); + $response = static::createClientWithCredentials()->request('GET', '/checklist_items?checklist=%2Fchecklists%2F'.$checklist->getId()); + + $this->assertResponseStatusCodeSame(200); + + $this->assertJsonContains(['totalItems' => 1]); + $this->assertEqualsCanonicalizing([ + ['href' => $this->getIriFor('checklistItemPrototype_1_1')], + ], $response->toArray()['_links']['items']); + } + + public function testListChecklistItemsAsChecklistSubresourceIsAllowedForCollaborator() { + $checklist = static::getFixture('checklist1'); + $response = static::createClientWithCredentials()->request('GET', '/checklists/'.$checklist->getId().'/checklist_items'); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'totalItems' => 3, + '_links' => [ + 'items' => [], + ], + '_embedded' => [ + 'items' => [], + ], + ]); + $this->assertEqualsCanonicalizing([ + ['href' => $this->getIriFor('checklistItem1_1_1')], + ['href' => $this->getIriFor('checklistItem1_1_2')], + ['href' => $this->getIriFor('checklistItem1_1_2_3')], + ], $response->toArray()['_links']['items']); + } + + public function testListChecklistItemsAsChecklistSubresourceIsDeniedForUnrelatedUser() { + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('GET', '/checklists/'.$checklist->getId().'/checklist_items') + ; + + $this->assertResponseStatusCodeSame(404); + } +} diff --git a/api/tests/Api/ChecklistItems/ReadChecklistItemTest.php b/api/tests/Api/ChecklistItems/ReadChecklistItemTest.php new file mode 100644 index 0000000000..9e362711a8 --- /dev/null +++ b/api/tests/Api/ChecklistItems/ReadChecklistItemTest.php @@ -0,0 +1,108 @@ +request('GET', '/checklist_items/'.$checklistItem->getId()); + $this->assertResponseStatusCodeSame(401); + $this->assertJsonContains([ + 'code' => 401, + 'message' => 'JWT Token not found', + ]); + } + + public function testGetSingleChecklistItemIsDeniedForUnrelatedUser() { + /** @var ChecklistItem $checklistItem */ + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('GET', '/checklist_items/'.$checklistItem->getId()) + ; + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testGetSingleChecklistItemIsDeniedForInactiveCollaborator() { + /** @var ChecklistItem $checklistItem */ + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()]) + ->request('GET', '/checklist_items/'.$checklistItem->getId()) + ; + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testGetSingleChecklistItemIsAllowedForGuest() { + /** @var ChecklistItem $checklistItem */ + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()]) + ->request('GET', '/checklist_items/'.$checklistItem->getId()) + ; + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'id' => $checklistItem->getId(), + 'text' => $checklistItem->text, + '_links' => [ + 'checklist' => ['href' => $this->getIriFor('checklist1')], + ], + ]); + } + + public function testGetSingleChecklistItemIsAllowedForMember() { + /** @var ChecklistItem $checklistItem */ + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()]) + ->request('GET', '/checklist_items/'.$checklistItem->getId()) + ; + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'id' => $checklistItem->getId(), + 'text' => $checklistItem->text, + '_links' => [ + 'checklist' => ['href' => $this->getIriFor('checklist1')], + ], + ]); + } + + public function testGetSingleChecklistItemIsAllowedForManager() { + /** @var ChecklistItem $checklistItem */ + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials()->request('GET', '/checklist_items/'.$checklistItem->getId()); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'id' => $checklistItem->getId(), + 'text' => $checklistItem->text, + '_links' => [ + 'checklist' => ['href' => $this->getIriFor('checklist1')], + ], + ]); + } + + public function testGetSingleChecklistItemFromCampPrototypeIsAllowedForUnrelatedUser() { + /** @var ChecklistItem $checklistItem */ + $checklistItem = static::getFixture('checklistItemPrototype_1_1'); + static::createClientWithCredentials()->request('GET', '/checklist_items/'.$checklistItem->getId()); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'id' => $checklistItem->getId(), + 'text' => $checklistItem->text, + '_links' => [ + 'checklist' => ['href' => $this->getIriFor('checklist1campPrototype')], + ], + ]); + } +} diff --git a/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php b/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php new file mode 100644 index 0000000000..24462d3c0e --- /dev/null +++ b/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php @@ -0,0 +1,242 @@ +request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [ + 'text' => 'Ziel 2', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); + $this->assertResponseStatusCodeSame(401); + $this->assertJsonContains([ + 'code' => 401, + 'message' => 'JWT Token not found', + ]); + } + + public function testPatchChecklistItemIsDeniedForUnrelatedUser() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [ + 'text' => 'Ziel 2', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testPatchChecklistItemIsDeniedForInactiveCollaborator() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()]) + ->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [ + 'text' => 'Ziel 2', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testPatchChecklistItemIsDeniedForGuest() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()]) + ->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [ + 'text' => 'Ziel 2', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testPatchChecklistItemIsAllowedForMember() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + $response = static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()]) + ->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [ + 'text' => 'Ziel 2', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'text' => 'Ziel 2', + ]); + } + + public function testPatchChecklistItemIsAllowedForManager() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + $response = static::createClientWithCredentials()->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [ + 'text' => 'Ziel 2', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'text' => 'Ziel 2', + ]); + } + + public function testPatchChecklistItemInCampPrototypeIsDeniedForUnrelatedUser() { + $checklistItem = static::getFixture('checklistItemPrototype_1_1'); + $response = static::createClientWithCredentials()->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [ + 'text' => 'Ziel 2', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testPatchChecklistItemDisallowsChangingChecklist() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials()->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [ + 'checklist' => $this->getIriFor('checklistItem2_1_1'), + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); + + $this->assertResponseStatusCodeSame(400); + $this->assertJsonContains([ + 'detail' => 'Extra attributes are not allowed ("checklist" is unknown).', + ]); + } + + public function testPatchhChecklistItemValidatesNoParentLoop() { + $checklistItemParent = static::getFixture('checklistItem1_1_2'); + $checklistItemChild = static::getFixture('checklistItem1_1_2_3'); + + static::createClientWithCredentials()->request( + 'PATCH', + '/checklist_items/'.$checklistItemParent->getId(), + [ + 'json' => [ + 'parent' => '/checklist_items/'.$checklistItemChild->getId(), + ], + 'headers' => ['Content-Type' => 'application/merge-patch+json'], + ] + ); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'parent: Must not form a loop of parent-child relations.', + ]); + } + + public function testPatchChecklistItemValidatesNullText() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials()->request( + 'PATCH', + '/checklist_items/'.$checklistItem->getId(), + [ + 'json' => [ + 'text' => null, + ], + 'headers' => ['Content-Type' => 'application/merge-patch+json'], + ] + ); + + $this->assertResponseStatusCodeSame(400); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'The type of the "text" attribute must be "string", "NULL" given.', + ]); + } + + public function testPatchChecklistItemValidatesBlankText() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials()->request( + 'PATCH', + '/checklist_items/'.$checklistItem->getId(), + [ + 'json' => [ + 'text' => ' ', + ], + 'headers' => ['Content-Type' => 'application/merge-patch+json'], + ] + ); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'text', + 'message' => 'This value should not be blank.', + ], + ], + ]); + } + + public function testPatchChecklistItemValidatesTooLongText() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials()->request( + 'PATCH', + '/checklist_items/'.$checklistItem->getId(), + [ + 'json' => [ + 'text' => str_repeat('l', 257), + ], + 'headers' => ['Content-Type' => 'application/merge-patch+json'], + ] + ); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'text', + 'message' => 'This value is too long. It should have 256 characters or less.', + ], + ], + ]); + } + + public function testPatchChecklistItemTrimsText() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials()->request( + 'PATCH', + '/checklist_items/'.$checklistItem->getId(), + [ + 'json' => [ + 'text' => " \t Ziel 2\t ", + ], + 'headers' => ['Content-Type' => 'application/merge-patch+json'], ] + ); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains( + [ + 'text' => 'Ziel 2', + ] + ); + } + + public function testPatchChecklistItemCleansForbiddenCharactersFromText() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + $client = static::createClientWithCredentials(); + $client->disableReboot(); + $client->request( + 'PATCH', + '/checklist_items/'.$checklistItem->getId(), + [ + 'json' => [ + 'text' => "Ziel2\n\t", + ], + 'headers' => ['Content-Type' => 'application/merge-patch+json'], ] + ); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains( + [ + 'text' => 'Ziel2', + ] + ); + } +} diff --git a/api/tests/Api/Checklists/CreateChecklistTest.php b/api/tests/Api/Checklists/CreateChecklistTest.php new file mode 100644 index 0000000000..12392aca9d --- /dev/null +++ b/api/tests/Api/Checklists/CreateChecklistTest.php @@ -0,0 +1,311 @@ +request('POST', '/checklists', ['json' => $this->getExampleWritePayload()]); + + $this->assertResponseStatusCodeSame(401); + $this->assertJsonContains([ + 'code' => 401, + 'message' => 'JWT Token not found', + ]); + } + + public function testCreateChecklistIsNotPossibleForUnrelatedUserBecauseCampIsNotReadable() { + static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('POST', '/checklists', ['json' => $this->getExampleWritePayload()]) + ; + + $this->assertResponseStatusCodeSame(400); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Item not found for "'.$this->getIriFor('camp1').'".', + ]); + } + + public function testCreateChecklistIsNotPossibleForInactiveCollaboratorBecauseCampIsNotReadable() { + static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()]) + ->request('POST', '/checklists', ['json' => $this->getExampleWritePayload()]) + ; + + $this->assertResponseStatusCodeSame(400); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Item not found for "'.$this->getIriFor('camp1').'".', + ]); + } + + public function testCreateChecklistIsDeniedForGuest() { + static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()]) + ->request('POST', '/checklists', ['json' => $this->getExampleWritePayload()]) + ; + + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testCreateChecklistIsAllowedForMember() { + static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()]) + ->request('POST', '/checklists', ['json' => $this->getExampleWritePayload()]) + ; + + $this->assertResponseStatusCodeSame(201); + $this->assertJsonContains($this->getExampleReadPayload()); + } + + public function testCreateChecklistIsAllowedForManager() { + static::createClientWithCredentials()->request('POST', '/checklists', ['json' => $this->getExampleWritePayload()]); + + $this->assertResponseStatusCodeSame(201); + $this->assertJsonContains($this->getExampleReadPayload()); + } + + public function testCreateChecklistInCampPrototypeIsDeniedForUnrelatedUser() { + static::createClientWithCredentials()->request('POST', '/checklists', ['json' => $this->getExampleWritePayload([ + 'camp' => $this->getIriFor('campPrototype'), + ])]); + + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testCreateChecklistValidatesMissingCamp() { + static::createClientWithCredentials()->request('POST', '/checklists', ['json' => $this->getExampleWritePayload([], ['camp'])]); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'camp', + 'message' => 'This value should not be null.', + ], + ], + ]); + } + + public function testCreateChecklistValidatesMissingName() { + static::createClientWithCredentials()->request('POST', '/checklists', ['json' => $this->getExampleWritePayload([], ['name'])]); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'name', + 'message' => 'This value should not be blank.', + ], + ], + ]); + } + + public function testCreateChecklistValidatesBlankName() { + static::createClientWithCredentials()->request( + 'POST', + '/checklists', + [ + 'json' => $this->getExampleWritePayload( + [ + 'name' => '', + ] + ), + ] + ); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'name', + 'message' => 'This value should not be blank.', + ], + ], + ]); + } + + public function testCreateChecklistValidatesTooLongName() { + static::createClientWithCredentials()->request( + 'POST', + '/checklists', + [ + 'json' => $this->getExampleWritePayload( + [ + 'name' => str_repeat('l', 33), + ] + ), + ] + ); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'name', + 'message' => 'This value is too long. It should have 32 characters or less.', + ], + ], + ]); + } + + public function testCreateChecklistTrimsName() { + static::createClientWithCredentials()->request( + 'POST', + '/checklists', + [ + 'json' => $this->getExampleWritePayload( + [ + 'name' => " \t Ausbildungsziele\t ", + ] + ), + ] + ); + + $this->assertResponseStatusCodeSame(201); + $this->assertJsonContains($this->getExampleReadPayload( + [ + 'name' => 'Ausbildungsziele', + ] + )); + } + + public function testCreateChecklistCleansForbiddenCharactersFromName() { + static::createClientWithCredentials()->request( + 'POST', + '/checklists', + [ + 'json' => $this->getExampleWritePayload( + [ + 'name' => "\n\tAusbildungsziele", + ] + ), + ] + ); + + $this->assertResponseStatusCodeSame(201); + $this->assertJsonContains($this->getExampleReadPayload( + [ + 'name' => 'Ausbildungsziele', + ] + )); + } + + public function testCreateChecklistFromCopySourceValidatesAccess() { + static::createClientWithCredentials(['email' => static::$fixtures['user8memberOnlyInCamp2']->getEmail()])->request( + 'POST', + '/checklists', + ['json' => $this->getExampleWritePayload( + [ + 'camp' => $this->getIriFor('camp2'), + 'copyChecklistSource' => $this->getIriFor('checklist1'), + ] + )] + ); + + // No Access on checklist1 -> BadRequest + $this->assertResponseStatusCodeSame(400); + } + + public function testCreateChecklistFromCopySourceWithinSameCamp() { + static::createClientWithCredentials()->request( + 'POST', + '/checklists', + ['json' => $this->getExampleWritePayload( + [ + 'camp' => $this->getIriFor('camp1'), + 'copyChecklistSource' => $this->getIriFor('checklist1'), + ], + )] + ); + + // Checklist created + $this->assertResponseStatusCodeSame(201); + } + + public function testCreateChecklistFromCopySourceAcrossCamp() { + static::createClientWithCredentials()->request( + 'POST', + '/checklists', + ['json' => $this->getExampleWritePayload( + [ + 'camp' => $this->getIriFor('camp2'), + 'copyChecklistSource' => $this->getIriFor('checklist1'), + ], + )] + ); + + // Checklist created + $this->assertResponseStatusCodeSame(201); + } + + /** + * @throws RedirectionExceptionInterface + * @throws DecodingExceptionInterface + * @throws ClientExceptionInterface + * @throws TransportExceptionInterface + * @throws ServerExceptionInterface + */ + public function testCreateResponseStructureMatchesReadResponseStructure() { + $client = static::createClientWithCredentials(); + $client->disableReboot(); + $createResponse = $client->request( + 'POST', + '/checklists', + [ + 'json' => $this->getExampleWritePayload(), + ] + ); + + $this->assertResponseStatusCodeSame(201); + + $createArray = $createResponse->toArray(); + $newItemLink = $createArray['_links']['self']['href']; + $getItemResponse = $client->request('GET', $newItemLink); + + assertThat($createArray, CompatibleHalResponse::isHalCompatibleWith($getItemResponse->toArray())); + } + + public function getExampleWritePayload($attributes = [], $except = []) { + return $this->getExamplePayload( + Checklist::class, + Post::class, + array_merge([ + 'copyChecklistSource' => null, + 'camp' => $this->getIriFor('camp1'), + ], $attributes), + [], + $except + ); + } + + public function getExampleReadPayload($attributes = [], $except = []) { + return $this->getExamplePayload( + Checklist::class, + Get::class, + $attributes, + ['camp', 'preferredContentTypes'], + $except + ); + } +} diff --git a/api/tests/Api/Checklists/DeleteChecklistTest.php b/api/tests/Api/Checklists/DeleteChecklistTest.php new file mode 100644 index 0000000000..f2033769e3 --- /dev/null +++ b/api/tests/Api/Checklists/DeleteChecklistTest.php @@ -0,0 +1,87 @@ +request('DELETE', '/checklists/'.$checklist->getId()); + $this->assertResponseStatusCodeSame(401); + $this->assertJsonContains([ + 'code' => 401, + 'message' => 'JWT Token not found', + ]); + } + + public function testDeleteChecklistIsDeniedForUnrelatedUser() { + $Checklist = static::getFixture('checklist2WithNoItems'); + static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('DELETE', '/checklists/'.$Checklist->getId()) + ; + + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testDeleteChecklistIsDeniedForInactiveCollaborator() { + $Checklist = static::getFixture('checklist2WithNoItems'); + static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()]) + ->request('DELETE', '/checklists/'.$Checklist->getId()) + ; + + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testDeleteChecklistIsDeniedForGuest() { + $Checklist = static::getFixture('checklist2WithNoItems'); + static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()]) + ->request('DELETE', '/checklists/'.$Checklist->getId()) + ; + + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testDeleteChecklistIsAllowedForMember() { + $Checklist = static::getFixture('checklist2WithNoItems'); + static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()]) + ->request('DELETE', '/checklists/'.$Checklist->getId()) + ; + $this->assertResponseStatusCodeSame(204); + $this->assertNull($this->getEntityManager()->getRepository(Checklist::class)->find($Checklist->getId())); + } + + public function testDeleteChecklistIsAllowedForManager() { + $Checklist = static::getFixture('checklist2WithNoItems'); + static::createClientWithCredentials()->request('DELETE', '/checklists/'.$Checklist->getId()); + $this->assertResponseStatusCodeSame(204); + $this->assertNull($this->getEntityManager()->getRepository(Checklist::class)->find($Checklist->getId())); + } + + public function testDeleteChecklistFromCampPrototypeIsDeniedForUnrelatedUser() { + $Checklist = static::getFixture('checklist1campPrototype'); + static::createClientWithCredentials()->request('DELETE', '/checklists/'.$Checklist->getId()); + + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } +} diff --git a/api/tests/Api/Checklists/ListChecklistTest.php b/api/tests/Api/Checklists/ListChecklistTest.php new file mode 100644 index 0000000000..ef75a68b01 --- /dev/null +++ b/api/tests/Api/Checklists/ListChecklistTest.php @@ -0,0 +1,125 @@ +request('GET', '/checklists'); + $this->assertResponseStatusCodeSame(401); + $this->assertJsonContains([ + 'code' => 401, + 'message' => 'JWT Token not found', + ]); + } + + public function testListChecklistsIsAllowedForLoggedInUserButFiltered() { + // precondition: There is a checklist that the user doesn't have access to + $this->assertNotEmpty(static::$fixtures['checklist1campUnrelated']); + + $response = static::createClientWithCredentials()->request('GET', '/checklists'); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'totalItems' => 4, + '_links' => [ + 'items' => [], + ], + '_embedded' => [ + 'items' => [], + ], + ]); + $this->assertEqualsCanonicalizing([ + ['href' => $this->getIriFor('checklist1')], + ['href' => $this->getIriFor('checklist2WithNoItems')], + ['href' => $this->getIriFor('checklist1camp2')], + ['href' => $this->getIriFor('checklist1campPrototype')], + ], $response->toArray()['_links']['items']); + } + + public function testListChecklistsFilteredByCampIsAllowedForCollaborator() { + $camp = static::getFixture('camp1'); + $response = static::createClientWithCredentials()->request('GET', '/checklists?camp=%2Fcamps%2F'.$camp->getId()); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'totalItems' => 2, + '_links' => [ + 'items' => [], + ], + '_embedded' => [ + 'items' => [], + ], + ]); + $this->assertEqualsCanonicalizing([ + ['href' => $this->getIriFor('checklist1')], + ['href' => $this->getIriFor('checklist2WithNoItems')], + ], $response->toArray()['_links']['items']); + } + + public function testListChecklistsFilteredByCampIsDeniedForUnrelatedUser() { + $camp = static::getFixture('camp1'); + $response = static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('GET', '/checklists?camp=%2Fcamps%2F'.$camp->getId()) + ; + + $this->assertResponseStatusCodeSame(200); + + $this->assertJsonContains(['totalItems' => 0]); + $this->assertArrayNotHasKey('items', $response->toArray()['_links']); + } + + public function testListChecklistsFilteredByCampIsDeniedForInactiveCollaborator() { + $camp = static::getFixture('camp1'); + $response = static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()]) + ->request('GET', '/checklists?camp=%2Fcamps%2F'.$camp->getId()) + ; + + $this->assertResponseStatusCodeSame(200); + + $this->assertJsonContains(['totalItems' => 0]); + $this->assertArrayNotHasKey('items', $response->toArray()['_links']); + } + + public function testListChecklistsFilteredByCampPrototypeIsAllowedForUnrelatedUser() { + $camp = static::getFixture('campPrototype'); + $response = static::createClientWithCredentials()->request('GET', '/checklists?camp=%2Fcamps%2F'.$camp->getId()); + + $this->assertResponseStatusCodeSame(200); + + $this->assertJsonContains(['totalItems' => 1]); + $this->assertEqualsCanonicalizing([ + ['href' => $this->getIriFor('checklist1campPrototype')], + ], $response->toArray()['_links']['items']); + } + + public function testListChecklistsAsCampSubresourceIsAllowedForCollaborator() { + $camp = static::getFixture('camp1'); + $response = static::createClientWithCredentials()->request('GET', '/camps/'.$camp->getId().'/checklists'); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'totalItems' => 2, + '_links' => [ + 'items' => [], + ], + '_embedded' => [ + 'items' => [], + ], + ]); + $this->assertEqualsCanonicalizing([ + ['href' => $this->getIriFor('checklist1')], + ['href' => $this->getIriFor('checklist2WithNoItems')], + ], $response->toArray()['_links']['items']); + } + + public function testListChecklistsAsCampSubresourceIsDeniedForUnrelatedUser() { + $camp = static::getFixture('camp1'); + static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('GET', '/camps/'.$camp->getId().'/checklists') + ; + + $this->assertResponseStatusCodeSame(404); + } +} diff --git a/api/tests/Api/Checklists/ReadChecklistTest.php b/api/tests/Api/Checklists/ReadChecklistTest.php new file mode 100644 index 0000000000..1857746c1c --- /dev/null +++ b/api/tests/Api/Checklists/ReadChecklistTest.php @@ -0,0 +1,108 @@ +request('GET', '/checklists/'.$checklist->getId()); + $this->assertResponseStatusCodeSame(401); + $this->assertJsonContains([ + 'code' => 401, + 'message' => 'JWT Token not found', + ]); + } + + public function testGetSingleChecklistIsDeniedForUnrelatedUser() { + /** @var Checklist $checklist */ + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('GET', '/checklists/'.$checklist->getId()) + ; + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testGetSingleChecklistIsDeniedForInactiveCollaborator() { + /** @var Checklist $checklist */ + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()]) + ->request('GET', '/checklists/'.$checklist->getId()) + ; + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testGetSingleChecklistIsAllowedForGuest() { + /** @var Checklist $checklist */ + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()]) + ->request('GET', '/checklists/'.$checklist->getId()) + ; + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'id' => $checklist->getId(), + 'name' => $checklist->name, + '_links' => [ + 'camp' => ['href' => $this->getIriFor('camp1')], + ], + ]); + } + + public function testGetSingleChecklistIsAllowedForMember() { + /** @var Checklist $checklist */ + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()]) + ->request('GET', '/checklists/'.$checklist->getId()) + ; + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'id' => $checklist->getId(), + 'name' => $checklist->name, + '_links' => [ + 'camp' => ['href' => $this->getIriFor('camp1')], + ], + ]); + } + + public function testGetSingleChecklistIsAllowedForManager() { + /** @var Checklist $checklist */ + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials()->request('GET', '/checklists/'.$checklist->getId()); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'id' => $checklist->getId(), + 'name' => $checklist->name, + '_links' => [ + 'camp' => ['href' => $this->getIriFor('camp1')], + ], + ]); + } + + public function testGetSingleChecklistFromCampPrototypeIsAllowedForUnrelatedUser() { + /** @var Checklist $checklist */ + $checklist = static::getFixture('checklist1campPrototype'); + static::createClientWithCredentials()->request('GET', '/checklists/'.$checklist->getId()); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'id' => $checklist->getId(), + 'name' => $checklist->name, + '_links' => [ + 'camp' => ['href' => $this->getIriFor('campPrototype')], + ], + ]); + } +} diff --git a/api/tests/Api/Checklists/UpdateChecklistTest.php b/api/tests/Api/Checklists/UpdateChecklistTest.php new file mode 100644 index 0000000000..3006e3a38e --- /dev/null +++ b/api/tests/Api/Checklists/UpdateChecklistTest.php @@ -0,0 +1,220 @@ +request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [ + 'name' => 'ChecklistName', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); + $this->assertResponseStatusCodeSame(401); + $this->assertJsonContains([ + 'code' => 401, + 'message' => 'JWT Token not found', + ]); + } + + public function testPatchChecklistIsDeniedForUnrelatedUser() { + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()]) + ->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [ + 'name' => 'ChecklistName', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testPatchChecklistIsDeniedForInactiveCollaborator() { + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()]) + ->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [ + 'name' => 'ChecklistName', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(404); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Not Found', + ]); + } + + public function testPatchChecklistIsDeniedForGuest() { + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()]) + ->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [ + 'name' => 'ChecklistName', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testPatchChecklistIsAllowedForMember() { + $checklist = static::getFixture('checklist1'); + $response = static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()]) + ->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [ + 'name' => 'ChecklistName', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'name' => 'ChecklistName', + ]); + } + + public function testPatchChecklistIsAllowedForManager() { + $checklist = static::getFixture('checklist1'); + $response = static::createClientWithCredentials()->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [ + 'name' => 'ChecklistName', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + 'name' => 'ChecklistName', + ]); + } + + public function testPatchChecklistInCampPrototypeIsDeniedForUnrelatedUser() { + $checklist = static::getFixture('checklist1campPrototype'); + $response = static::createClientWithCredentials()->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [ + 'name' => 'ChecklistName', + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testPatchChecklistDisallowsChangingCamp() { + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials()->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [ + 'camp' => $this->getIriFor('camp2'), + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); + + $this->assertResponseStatusCodeSame(400); + $this->assertJsonContains([ + 'detail' => 'Extra attributes are not allowed ("camp" is unknown).', + ]); + } + + public function testPatchChecklistValidatesNullName() { + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials()->request( + 'PATCH', + '/checklists/'.$checklist->getId(), + [ + 'json' => [ + 'name' => null, + ], + 'headers' => ['Content-Type' => 'application/merge-patch+json'], + ] + ); + + $this->assertResponseStatusCodeSame(400); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'The type of the "name" attribute must be "string", "NULL" given.', + ]); + } + + public function testPatchChecklistValidatesBlankName() { + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials()->request( + 'PATCH', + '/checklists/'.$checklist->getId(), + [ + 'json' => [ + 'name' => ' ', + ], + 'headers' => ['Content-Type' => 'application/merge-patch+json'], + ] + ); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'name', + 'message' => 'This value should not be blank.', + ], + ], + ]); + } + + public function testPatchChecklistValidatesTooLongName() { + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials()->request( + 'PATCH', + '/checklists/'.$checklist->getId(), + [ + 'json' => [ + 'name' => str_repeat('l', 33), + ], + 'headers' => ['Content-Type' => 'application/merge-patch+json'], + ] + ); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'violations' => [ + [ + 'propertyPath' => 'name', + 'message' => 'This value is too long. It should have 32 characters or less.', + ], + ], + ]); + } + + public function testPatchChecklistTrimsName() { + $checklist = static::getFixture('checklist1'); + static::createClientWithCredentials()->request( + 'PATCH', + '/checklists/'.$checklist->getId(), + [ + 'json' => [ + 'name' => " \t ChecklistName\t ", + ], + 'headers' => ['Content-Type' => 'application/merge-patch+json'], ] + ); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains( + [ + 'name' => 'ChecklistName', + ] + ); + } + + public function testPatchChecklistCleansForbiddenCharactersFromName() { + $checklist = static::getFixture('checklist1'); + $client = static::createClientWithCredentials(); + $client->disableReboot(); + $client->request( + 'PATCH', + '/checklists/'.$checklist->getId(), + [ + 'json' => [ + 'name' => "ChecklistName\n\t", + ], + 'headers' => ['Content-Type' => 'application/merge-patch+json'], ] + ); + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains( + [ + 'name' => 'ChecklistName', + ] + ); + } +} diff --git a/api/tests/Api/ContentNodes/ChecklistNode/CreateChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/CreateChecklistNodeTest.php new file mode 100644 index 0000000000..8d0fd4d8f8 --- /dev/null +++ b/api/tests/Api/ContentNodes/ChecklistNode/CreateChecklistNodeTest.php @@ -0,0 +1,29 @@ +endpoint = '/content_node/checklist_nodes'; + $this->entityClass = ChecklistNode::class; + $this->defaultContentType = static::getFixture('contentTypeChecklist'); + } + + /** + * payload set up. + */ + public function getExampleWritePayload($attributes = [], $except = []) { + return parent::getExampleWritePayload( + $attributes, + array_merge(['addChecklistItemIds', 'removeChecklistItemIds'], $except) + ); + } +} diff --git a/api/tests/Api/ContentNodes/ChecklistNode/DeleteChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/DeleteChecklistNodeTest.php new file mode 100644 index 0000000000..963a52a82b --- /dev/null +++ b/api/tests/Api/ContentNodes/ChecklistNode/DeleteChecklistNodeTest.php @@ -0,0 +1,17 @@ +endpoint = '/content_node/checklist_nodes'; + $this->defaultEntity = static::getFixture('checklistNode3'); + } +} diff --git a/api/tests/Api/ContentNodes/ChecklistNode/ListChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/ListChecklistNodeTest.php new file mode 100644 index 0000000000..723700944e --- /dev/null +++ b/api/tests/Api/ContentNodes/ChecklistNode/ListChecklistNodeTest.php @@ -0,0 +1,25 @@ +endpoint = '/content_node/checklist_nodes'; + + $this->contentNodesCamp1and2 = [ + $this->getIriFor('checklistNode1'), + $this->getIriFor('checklistNode3'), + ]; + + $this->contentNodesCampUnrelated = [ + $this->getIriFor('checklistNodeCampUnrelated'), + ]; + } +} diff --git a/api/tests/Api/ContentNodes/ChecklistNode/ReadChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/ReadChecklistNodeTest.php new file mode 100644 index 0000000000..f68349061a --- /dev/null +++ b/api/tests/Api/ContentNodes/ChecklistNode/ReadChecklistNodeTest.php @@ -0,0 +1,17 @@ +endpoint = '/content_node/checklist_nodes'; + $this->defaultEntity = static::getFixture('checklistNode3'); + } +} diff --git a/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php new file mode 100644 index 0000000000..679348df60 --- /dev/null +++ b/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php @@ -0,0 +1,120 @@ +endpoint = '/content_node/checklist_nodes'; + $this->defaultEntity = static::getFixture('checklistNode1'); + } + + public function testAddChecklistItemIsDeniedForGuest() { + $checklistItemId = static::getFixture('checklistItem1_1_2')->getId(); + static::createClientWithCredentials(['email' => static::getFixture('user3guest')->getEmail()]) + ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [ + 'addChecklistItemIds' => [$checklistItemId], + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testAddChecklistItemForMember() { + $checklistItemId = static::getFixture('checklistItem1_1_2')->getId(); + static::createClientWithCredentials(['email' => static::getFixture('user2member')->getEmail()]) + ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [ + 'addChecklistItemIds' => [$checklistItemId], + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + '_links' => [ + 'checklistItems' => [ + 1 => [ + 'href' => '/checklist_items/'.$checklistItemId, + ], + ], + ], + ]); + } + + public function testAddChecklistItemForManager() { + $checklistItemId = static::getFixture('checklistItem1_1_2')->getId(); + static::createClientWithCredentials()->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [ + 'addChecklistItemIds' => [$checklistItemId], + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); + + $this->assertResponseStatusCodeSame(200); + $this->assertJsonContains([ + '_links' => [ + 'checklistItems' => [ + 1 => [ + 'href' => '/checklist_items/'.$checklistItemId, + ], + ], + ], + ]); + } + + public function testRemoveChecklistItemIsDeniedForGuest() { + $checklistItemId = static::getFixture('checklistItem1_1_1')->getId(); + static::createClientWithCredentials(['email' => static::getFixture('user3guest')->getEmail()]) + ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [ + 'removeChecklistItemIds' => [$checklistItemId], + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(403); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'Access Denied.', + ]); + } + + public function testRemoveChecklistItemForMember() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials(['email' => static::getFixture('user2member')->getEmail()]) + ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [ + 'removeChecklistItemIds' => [$checklistItem->getId()], + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(200); + $checklistNode = $this->getEntityManager()->getRepository(ChecklistNode::class)->find($this->defaultEntity->getId()); + $this->assertFalse(in_array($checklistItem, $checklistNode->getChecklistItems())); + } + + public function testRemoveChecklistItemForManager() { + $checklistItem = static::getFixture('checklistItem1_1_1'); + static::createClientWithCredentials()->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [ + 'removeChecklistItemIds' => [$checklistItem->getId()], + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); + + $this->assertResponseStatusCodeSame(200); + $checklistNode = $this->getEntityManager()->getRepository(ChecklistNode::class)->find($this->defaultEntity->getId()); + $this->assertFalse(in_array($checklistItem, $checklistNode->getChecklistItems())); + } + + public function testAddChecklistItemOfOtherCampIsDenied() { + $checklistItemId = static::getFixture('checklistItem2_1_1')->getId(); + static::createClientWithCredentials(['email' => static::getFixture('user2member')->getEmail()]) + ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [ + 'addChecklistItemIds' => [$checklistItemId], + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]) + ; + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'title' => 'An error occurred', + 'detail' => 'addChecklistItemIds: Must belong to the same camp.', + ]); + } +} diff --git a/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php b/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php index 3ea968a731..d8e8269a54 100644 --- a/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php +++ b/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php @@ -23,7 +23,7 @@ public function testListContentNodesIsAllowedForLoggedInUserButFiltered() { $response = static::createClientWithCredentials()->request('GET', '/content_nodes'); $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ - 'totalItems' => 21, + 'totalItems' => 23, '_links' => [ 'items' => [], ], @@ -33,10 +33,12 @@ public function testListContentNodesIsAllowedForLoggedInUserButFiltered() { ]); $this->assertEqualsCanonicalizing([ ['href' => $this->getIriFor('columnLayout1')], + ['href' => $this->getIriFor('checklistNode1')], ['href' => $this->getIriFor('columnLayout2')], ['href' => $this->getIriFor('columnLayoutChild1')], ['href' => $this->getIriFor('columnLayout2Child1')], ['href' => $this->getIriFor('columnLayout3')], + ['href' => $this->getIriFor('checklistNode3')], ['href' => $this->getIriFor('columnLayout4')], ['href' => $this->getIriFor('columnLayout5')], ['href' => $this->getIriFor('columnLayout1camp2')], @@ -45,7 +47,7 @@ public function testListContentNodesIsAllowedForLoggedInUserButFiltered() { ['href' => $this->getIriFor('columnLayout2campPrototype')], ['href' => $this->getIriFor('singleText1')], ['href' => $this->getIriFor('singleText2')], - ['href' => $this->getIriFor('safetyConcept1')], + ['href' => $this->getIriFor('safetyConsiderations1')], ['href' => $this->getIriFor('materialNode1')], ['href' => $this->getIriFor('materialNode2')], ['href' => $this->getIriFor('storyboard1')], @@ -61,7 +63,7 @@ public function testListContentNodesFilteredByPeriodIsAllowedForCollaborator() { $response = static::createClientWithCredentials()->request('GET', '/content_nodes?period=%2Fperiods%2F'.$period->getId()); $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ - 'totalItems' => 12, + 'totalItems' => 14, '_links' => [ 'items' => [], ], @@ -71,11 +73,13 @@ public function testListContentNodesFilteredByPeriodIsAllowedForCollaborator() { ]); $this->assertEqualsCanonicalizing([ ['href' => $this->getIriFor('columnLayout1')], + ['href' => $this->getIriFor('checklistNode1')], ['href' => $this->getIriFor('columnLayoutChild1')], ['href' => $this->getIriFor('columnLayout3')], + ['href' => $this->getIriFor('checklistNode3')], ['href' => $this->getIriFor('singleText1')], ['href' => $this->getIriFor('singleText2')], - ['href' => $this->getIriFor('safetyConcept1')], + ['href' => $this->getIriFor('safetyConsiderations1')], ['href' => $this->getIriFor('materialNode1')], ['href' => $this->getIriFor('storyboard1')], ['href' => $this->getIriFor('storyboard2')], diff --git a/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php b/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php index 8fdaa2f327..932b57ed73 100644 --- a/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php +++ b/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php @@ -110,7 +110,7 @@ public function testCreateRejectsParentsWhichDontSupportChildren(string $idOfPar public function testCreateValidatesIncompatibleContentType() { // given /** @var ContentType $contentType */ - $contentType = static::getFixture(ColumnLayout::class === $this->entityClass ? 'contentTypeSafetyConcept' : 'contentTypeColumnLayout'); + $contentType = static::getFixture(ColumnLayout::class === $this->entityClass ? 'contentTypeSafetyConsiderations' : 'contentTypeColumnLayout'); // when $this->create($this->getExampleWritePayload(['contentType' => $this->getIriFor($contentType)])); @@ -179,11 +179,10 @@ public function testCreatePutsContentNodeAtEndOfSlot() { ], ['position'] )); - $this->assertResponseStatusCodeSame(201); $this->assertJsonContains([ 'slot' => '1', - 'position' => 1, + 'position' => 2, ]); } diff --git a/api/tests/Api/ContentNodes/RootColumnLayout/CreateRootColumnLayoutTest.php b/api/tests/Api/ContentNodes/RootColumnLayout/CreateRootColumnLayoutTest.php index eefa5b64dc..8baf213391 100644 --- a/api/tests/Api/ContentNodes/RootColumnLayout/CreateRootColumnLayoutTest.php +++ b/api/tests/Api/ContentNodes/RootColumnLayout/CreateRootColumnLayoutTest.php @@ -46,7 +46,7 @@ public function testCreateColumnLayoutAllowsMissingPosition() { static::createClientWithCredentials()->request('POST', $this->endpoint, ['json' => $this->getExampleWritePayload([], ['position'])]); $this->assertResponseStatusCodeSame(201); - $this->assertJsonContains(['position' => 1]); + $this->assertJsonContains(['position' => 2]); } public function testCreateColumnLayoutAllowsMissingInstanceName() { diff --git a/api/tests/Api/ContentNodes/SingleText/ListSingleTextTest.php b/api/tests/Api/ContentNodes/SingleText/ListSingleTextTest.php index 7e66a3c622..2a8ab5b05f 100644 --- a/api/tests/Api/ContentNodes/SingleText/ListSingleTextTest.php +++ b/api/tests/Api/ContentNodes/SingleText/ListSingleTextTest.php @@ -16,7 +16,7 @@ public function setUp(): void { $this->contentNodesCamp1and2 = [ $this->getIriFor('singleText1'), $this->getIriFor('singleText2'), - $this->getIriFor('safetyConcept1'), + $this->getIriFor('safetyConsiderations1'), ]; $this->contentNodesCampUnrelated = [ diff --git a/api/tests/Api/ContentTypes/DeleteContentTypeTest.php b/api/tests/Api/ContentTypes/DeleteContentTypeTest.php index c1b097e8b4..d66fbcc191 100644 --- a/api/tests/Api/ContentTypes/DeleteContentTypeTest.php +++ b/api/tests/Api/ContentTypes/DeleteContentTypeTest.php @@ -9,7 +9,7 @@ */ class DeleteContentTypeTest extends ECampApiTestCase { public function testDeleteContentTypeIsNotAllowed() { - $contentType = static::getFixture('contentTypeSafetyConcept'); + $contentType = static::getFixture('contentTypeSafetyConsiderations'); static::createClientWithCredentials()->request('DELETE', '/content_types/'.$contentType->getId()); $this->assertResponseStatusCodeSame(405); // method not allowed diff --git a/api/tests/Api/ContentTypes/ListContentTypesTest.php b/api/tests/Api/ContentTypes/ListContentTypesTest.php index 79cd0bf6ed..c5a58ccee6 100644 --- a/api/tests/Api/ContentTypes/ListContentTypesTest.php +++ b/api/tests/Api/ContentTypes/ListContentTypesTest.php @@ -12,7 +12,7 @@ public function testListContentTypesIsAllowedForAnonymousUser() { $response = static::createBasicClient()->request('GET', '/content_types'); $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ - 'totalItems' => 10, + 'totalItems' => 11, '_links' => [ 'items' => [], ], @@ -21,14 +21,14 @@ public function testListContentTypesIsAllowedForAnonymousUser() { ], ]); - $this->assertCount(10, $response->toArray()['_links']['items']); + $this->assertCount(11, $response->toArray()['_links']['items']); } public function testListContentTypesIsAllowedForLoggedInUser() { $response = static::createClientWithCredentials()->request('GET', '/content_types'); $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ - 'totalItems' => 10, + 'totalItems' => 11, '_links' => [ 'items' => [], ], @@ -36,6 +36,6 @@ public function testListContentTypesIsAllowedForLoggedInUser() { 'items' => [], ], ]); - $this->assertCount(10, $response->toArray()['_links']['items']); + $this->assertCount(11, $response->toArray()['_links']['items']); } } diff --git a/api/tests/Api/ContentTypes/ReadContentTypeTest.php b/api/tests/Api/ContentTypes/ReadContentTypeTest.php index 58c3b06679..75c8931661 100644 --- a/api/tests/Api/ContentTypes/ReadContentTypeTest.php +++ b/api/tests/Api/ContentTypes/ReadContentTypeTest.php @@ -11,7 +11,7 @@ class ReadContentTypeTest extends ECampApiTestCase { public function testGetSingleContentTypeIsAllowedForAnonymousUser() { /** @var ContentType $contentType */ - $contentType = static::getFixture('contentTypeSafetyConcept'); + $contentType = static::getFixture('contentTypeSafetyConsiderations'); static::createBasicClient()->request('GET', '/content_types/'.$contentType->getId()); $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ @@ -28,7 +28,7 @@ public function testGetSingleContentTypeIsAllowedForAnonymousUser() { public function testGetSingleContentTypeIsAllowedForLoggedInUser() { /** @var ContentType $contentType */ - $contentType = static::getFixture('contentTypeSafetyConcept'); + $contentType = static::getFixture('contentTypeSafetyConsiderations'); static::createClientWithCredentials()->request('GET', '/content_types/'.$contentType->getId()); $this->assertResponseStatusCodeSame(200); $this->assertJsonContains([ diff --git a/api/tests/Api/ContentTypes/UpdateContentTypeTest.php b/api/tests/Api/ContentTypes/UpdateContentTypeTest.php index ba98231bfa..bfd3b9c46f 100644 --- a/api/tests/Api/ContentTypes/UpdateContentTypeTest.php +++ b/api/tests/Api/ContentTypes/UpdateContentTypeTest.php @@ -9,7 +9,7 @@ */ class UpdateContentTypeTest extends ECampApiTestCase { public function testPatchContentTypeIsNotAllowed() { - $contentType = static::getFixture('contentTypeSafetyConcept'); + $contentType = static::getFixture('contentTypeSafetyConsiderations'); static::createClientWithCredentials()->request('PATCH', '/content_types/'.$contentType->getId(), ['json' => [ 'title' => 'Hello World', 'location' => 'Stoos', diff --git a/api/tests/Api/MaterialItems/CreateMaterialItemTest.php b/api/tests/Api/MaterialItems/CreateMaterialItemTest.php index 762b57ab11..8224ab0176 100644 --- a/api/tests/Api/MaterialItems/CreateMaterialItemTest.php +++ b/api/tests/Api/MaterialItems/CreateMaterialItemTest.php @@ -7,6 +7,7 @@ use App\Entity\MaterialItem; use App\Tests\Api\ECampApiTestCase; use App\Tests\Constraints\CompatibleHalResponse; +use PHPUnit\Framework\Attributes\TestWith; use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface; use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface; use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface; @@ -346,6 +347,21 @@ public function testCreateMaterialItemValidatesInvalidQuantity() { ]); } + #[TestWith([0])] + #[TestWith([-0])] + #[TestWith([-0.1])] + #[TestWith([-1])] + public function testCreateMaterialItemRejectsNegativeQuantity(float $quantity) { + static::createClientWithCredentials()->request('POST', '/material_items', ['json' => $this->getExampleWritePayload([ + 'quantity' => $quantity, + ])]); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'detail' => 'quantity: This value should be greater than 0.', + ]); + } + public function testCreateMaterialItemAllowsMissingUnit() { static::createClientWithCredentials()->request('POST', '/material_items', ['json' => $this->getExampleWritePayload([], ['unit'])]); diff --git a/api/tests/Api/MaterialItems/UpdateMaterialItemTest.php b/api/tests/Api/MaterialItems/UpdateMaterialItemTest.php index c6a9d774f6..aaab79376f 100644 --- a/api/tests/Api/MaterialItems/UpdateMaterialItemTest.php +++ b/api/tests/Api/MaterialItems/UpdateMaterialItemTest.php @@ -3,6 +3,7 @@ namespace App\Tests\Api\MaterialItems; use App\Tests\Api\ECampApiTestCase; +use PHPUnit\Framework\Attributes\TestWith; /** * @internal @@ -359,6 +360,22 @@ public function testPatchMaterialItemValidatesInvalidQuantity() { ]); } + #[TestWith([0])] + #[TestWith([-0])] + #[TestWith([-0.1])] + #[TestWith([-1])] + public function testPatchMaterialItemRejectsNegativeQuantity(float $quantity) { + $materialItem = static::getFixture('materialItem1'); + static::createClientWithCredentials()->request('PATCH', '/material_items/'.$materialItem->getId(), ['json' => [ + 'quantity' => $quantity, + ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]); + + $this->assertResponseStatusCodeSame(422); + $this->assertJsonContains([ + 'detail' => 'quantity: This value should be greater than 0.', + ]); + } + public function testPatchMaterialItemAcceptsLargeNumberForQuantity() { $materialItem = static::getFixture('materialItem1'); static::createClientWithCredentials()->request('PATCH', '/material_items/'.$materialItem->getId(), ['json' => [ diff --git a/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php b/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php index 93cb47f721..46e474c2d9 100644 --- a/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php +++ b/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php @@ -186,9 +186,11 @@ protected function getSnapshotId(): string { private static function getContentNodeEndpointQueryCountRanges(): array { return [ - '/content_nodes' => [8, 9], + '/content_nodes' => [8, 11], '/content_node/column_layouts' => [6, 6], '/content_node/column_layouts/item' => [10, 10], + '/content_node/checklist_nodes' => [6, 7], + '/content_node/checklist_nodes/item' => [9, 9], '/content_node/material_nodes' => [6, 7], '/content_node/material_nodes/item' => [9, 9], '/content_node/multi_selects' => [6, 7], diff --git a/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php b/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php index 15b893263b..86b74b207d 100644 --- a/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php +++ b/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php @@ -11,9 +11,12 @@ public static function get(string $collectionEndpoint, array $fixtures): mixed { '/camp_collaborations' => $fixtures['campCollaboration1manager'], '/camps' => $fixtures['camp1'], '/categories' => $fixtures['category1'], + '/checklists' => $fixtures['checklist1'], + '/checklist_items' => $fixtures['checklistItem1_1_1'], + '/content_node/checklist_nodes' => $fixtures['checklistNode3'], '/content_node/column_layouts' => $fixtures['columnLayout2'], '/content_node/responsive_layouts' => $fixtures['responsiveLayout1'], - '/content_types' => $fixtures['contentTypeSafetyConcept'], + '/content_types' => $fixtures['contentTypeSafetyConsiderations'], '/day_responsibles' => $fixtures['dayResponsible1'], '/days' => $fixtures['day1period1'], '/material_items' => $fixtures['materialItem1'], diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json index eab677ee6d..47bf622d83 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json @@ -240,6 +240,9 @@ "rootContentNode": { "_links": { "children": [ + { + "href": "escaped_value" + }, { "href": "escaped_value" } @@ -381,7 +384,11 @@ }, "rootContentNode": { "_links": { - "children": [], + "children": [ + { + "href": "escaped_value" + } + ], "contentType": { "href": "escaped_value" }, diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json index e2ff2cbcd4..a1216ca249 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json @@ -14,6 +14,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -44,9 +47,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -81,6 +84,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -111,9 +117,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -163,6 +169,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -193,9 +202,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -245,6 +254,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -275,9 +287,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -327,6 +339,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -357,9 +372,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -409,6 +424,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -439,9 +457,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -491,6 +509,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -521,9 +542,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -573,6 +594,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -603,9 +627,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -655,6 +679,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -685,9 +712,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -737,6 +764,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -767,9 +797,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -819,6 +849,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -849,9 +882,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -901,6 +934,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -931,9 +967,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json index 2fa972bec6..83063e878c 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json @@ -12,6 +12,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -42,9 +45,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -59,6 +62,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -89,9 +95,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" }, @@ -106,6 +112,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -136,9 +145,9 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", + "shortTitle": "escaped_value", "title": "escaped_value", "trainingAdvisorName": "escaped_value" } diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklist_items__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklist_items__1.json new file mode 100644 index 0000000000..82a195c448 --- /dev/null +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklist_items__1.json @@ -0,0 +1,110 @@ +{ + "_embedded": { + "items": [ + { + "_links": { + "checklist": { + "href": "escaped_value" + }, + "children": [], + "parent": "escaped_value", + "self": { + "href": "escaped_value" + } + }, + "id": "escaped_value", + "position": "escaped_value", + "text": "escaped_value" + }, + { + "_links": { + "checklist": { + "href": "escaped_value" + }, + "children": [], + "parent": "escaped_value", + "self": { + "href": "escaped_value" + } + }, + "id": "escaped_value", + "position": "escaped_value", + "text": "escaped_value" + }, + { + "_links": { + "checklist": { + "href": "escaped_value" + }, + "children": [], + "parent": "escaped_value", + "self": { + "href": "escaped_value" + } + }, + "id": "escaped_value", + "position": "escaped_value", + "text": "escaped_value" + }, + { + "_links": { + "checklist": { + "href": "escaped_value" + }, + "children": [], + "parent": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "id": "escaped_value", + "position": "escaped_value", + "text": "escaped_value" + }, + { + "_links": { + "checklist": { + "href": "escaped_value" + }, + "children": [ + { + "href": "escaped_value" + } + ], + "parent": "escaped_value", + "self": { + "href": "escaped_value" + } + }, + "id": "escaped_value", + "position": "escaped_value", + "text": "escaped_value" + } + ] + }, + "_links": { + "items": [ + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + } + ], + "self": { + "href": "escaped_value" + } + }, + "totalItems": "escaped_value" +} diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklists__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklists__1.json new file mode 100644 index 0000000000..feed0e6431 --- /dev/null +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklists__1.json @@ -0,0 +1,86 @@ +{ + "_embedded": { + "items": [ + { + "_links": { + "camp": { + "href": "escaped_value" + }, + "checklistItems": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "id": "escaped_value", + "name": "escaped_value" + }, + { + "_links": { + "camp": { + "href": "escaped_value" + }, + "checklistItems": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "id": "escaped_value", + "name": "escaped_value" + }, + { + "_links": { + "camp": { + "href": "escaped_value" + }, + "checklistItems": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "id": "escaped_value", + "name": "escaped_value" + }, + { + "_links": { + "camp": { + "href": "escaped_value" + }, + "checklistItems": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "id": "escaped_value", + "name": "escaped_value" + } + ] + }, + "_links": { + "items": [ + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + } + ], + "self": { + "href": "escaped_value" + } + }, + "totalItems": "escaped_value" +} diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json new file mode 100644 index 0000000000..20693aaa9d --- /dev/null +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json @@ -0,0 +1,72 @@ +{ + "_embedded": { + "items": [ + { + "_links": { + "checklistItems": [], + "children": [], + "contentType": { + "href": "escaped_value" + }, + "parent": { + "href": "escaped_value" + }, + "root": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "contentTypeName": "escaped_value", + "data": "escaped_value", + "id": "escaped_value", + "instanceName": "escaped_value", + "position": "escaped_value", + "slot": "escaped_value" + }, + { + "_links": { + "checklistItems": [ + { + "href": "escaped_value" + } + ], + "children": [], + "contentType": { + "href": "escaped_value" + }, + "parent": { + "href": "escaped_value" + }, + "root": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "contentTypeName": "escaped_value", + "data": "escaped_value", + "id": "escaped_value", + "instanceName": "escaped_value", + "position": "escaped_value", + "slot": "escaped_value" + } + ] + }, + "_links": { + "items": [ + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + } + ], + "self": { + "href": "escaped_value" + } + }, + "totalItems": "escaped_value" +} diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json index dbdfe83685..9e9859e619 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json @@ -147,7 +147,9 @@ "contentType": { "href": "escaped_value" }, - "parent": "escaped_value", + "parent": { + "href": "escaped_value" + }, "root": { "href": "escaped_value" }, @@ -171,7 +173,17 @@ }, { "_links": { - "children": [], + "children": [ + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + } + ], "contentType": { "href": "escaped_value" }, @@ -188,6 +200,10 @@ "contentTypeName": "escaped_value", "data": { "columns": [ + { + "slot": "escaped_value", + "width": "escaped_value" + }, { "slot": "escaped_value", "width": "escaped_value" @@ -205,9 +221,6 @@ { "href": "escaped_value" }, - { - "href": "escaped_value" - }, { "href": "escaped_value" } @@ -215,9 +228,7 @@ "contentType": { "href": "escaped_value" }, - "parent": { - "href": "escaped_value" - }, + "parent": "escaped_value", "root": { "href": "escaped_value" }, @@ -228,10 +239,6 @@ "contentTypeName": "escaped_value", "data": { "columns": [ - { - "slot": "escaped_value", - "width": "escaped_value" - }, { "slot": "escaped_value", "width": "escaped_value" diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json index 6945297e6c..2088e60717 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json @@ -80,11 +80,14 @@ }, { "_links": { + "checklistItems": [], "children": [], "contentType": { "href": "escaped_value" }, - "parent": "escaped_value", + "parent": { + "href": "escaped_value" + }, "root": { "href": "escaped_value" }, @@ -93,14 +96,35 @@ } }, "contentTypeName": "escaped_value", - "data": { - "columns": [ + "data": "escaped_value", + "id": "escaped_value", + "instanceName": "escaped_value", + "position": "escaped_value", + "slot": "escaped_value" + }, + { + "_links": { + "checklistItems": [ { - "slot": "escaped_value", - "width": "escaped_value" + "href": "escaped_value" } - ] + ], + "children": [], + "contentType": { + "href": "escaped_value" + }, + "parent": { + "href": "escaped_value" + }, + "root": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } }, + "contentTypeName": "escaped_value", + "data": "escaped_value", "id": "escaped_value", "instanceName": "escaped_value", "position": "escaped_value", @@ -580,6 +604,41 @@ "position": "escaped_value", "slot": "escaped_value" }, + { + "_links": { + "children": [ + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + } + ], + "contentType": { + "href": "escaped_value" + }, + "parent": "escaped_value", + "root": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "contentTypeName": "escaped_value", + "data": { + "columns": [ + { + "slot": "escaped_value", + "width": "escaped_value" + } + ] + }, + "id": "escaped_value", + "instanceName": "escaped_value", + "position": "escaped_value", + "slot": "escaped_value" + }, { "_links": { "children": [ @@ -740,6 +799,12 @@ { "href": "escaped_value" }, + { + "href": "escaped_value" + }, + { + "href": "escaped_value" + }, { "href": "escaped_value" } diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_types__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_types__1.json index d8875812f3..8656a040cf 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_types__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_types__1.json @@ -118,6 +118,19 @@ "id": "escaped_value", "name": "escaped_value" }, + { + "_links": { + "contentNodes": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "active": "escaped_value", + "id": "escaped_value", + "name": "escaped_value" + }, { "_links": { "contentNodes": { @@ -162,6 +175,9 @@ { "href": "escaped_value" }, + { + "href": "escaped_value" + }, { "href": "escaped_value" } diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json index 9b8c7684dd..df948bb2cf 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json @@ -123,6 +123,34 @@ "position": "escaped_value", "slot": "escaped_value" }, + { + "_links": { + "checklistItems": [ + { + "href": "escaped_value" + } + ], + "children": [], + "contentType": { + "href": "escaped_value" + }, + "parent": { + "href": "escaped_value" + }, + "root": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "contentTypeName": "escaped_value", + "data": "escaped_value", + "id": "escaped_value", + "instanceName": "escaped_value", + "position": "escaped_value", + "slot": "escaped_value" + }, { "_links": { "children": [], @@ -430,6 +458,9 @@ { "_links": { "children": [ + { + "href": "escaped_value" + }, { "href": "escaped_value" } @@ -464,6 +495,9 @@ "rootContentNode": { "_links": { "children": [ + { + "href": "escaped_value" + }, { "href": "escaped_value" } diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json index c84f1c605b..6671946d9e 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json @@ -11,6 +11,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -41,7 +44,7 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", + "shortTitle": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", "title": "escaped_value", diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json index 9afc1cba01..df0ad41916 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json @@ -402,6 +402,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -432,7 +435,7 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", + "shortTitle": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", "title": "escaped_value", diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklist_items__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklist_items__1.json new file mode 100644 index 0000000000..8a41227692 --- /dev/null +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklist_items__1.json @@ -0,0 +1,15 @@ +{ + "_links": { + "checklist": { + "href": "escaped_value" + }, + "children": [], + "parent": "escaped_value", + "self": { + "href": "escaped_value" + } + }, + "id": "escaped_value", + "position": "escaped_value", + "text": "escaped_value" +} diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklists__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklists__1.json new file mode 100644 index 0000000000..328e6ab533 --- /dev/null +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklists__1.json @@ -0,0 +1,15 @@ +{ + "_links": { + "camp": { + "href": "escaped_value" + }, + "checklistItems": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "id": "escaped_value", + "name": "escaped_value" +} diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set content_nodechecklist_nodes__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set content_nodechecklist_nodes__1.json new file mode 100644 index 0000000000..9b0796fa6f --- /dev/null +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set content_nodechecklist_nodes__1.json @@ -0,0 +1,24 @@ +{ + "_links": { + "checklistItems": [], + "children": [], + "contentType": { + "href": "escaped_value" + }, + "parent": { + "href": "escaped_value" + }, + "root": { + "href": "escaped_value" + }, + "self": { + "href": "escaped_value" + } + }, + "contentTypeName": "escaped_value", + "data": "escaped_value", + "id": "escaped_value", + "instanceName": "escaped_value", + "position": "escaped_value", + "slot": "escaped_value" +} diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json index 2075727cda..8766045742 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json @@ -11,6 +11,9 @@ "categories": { "href": "escaped_value" }, + "checklists": { + "href": "escaped_value" + }, "creator": { "href": "escaped_value" }, @@ -41,7 +44,7 @@ "isPrototype": "escaped_value", "kind": "escaped_value", "motto": "escaped_value", - "name": "escaped_value", + "shortTitle": "escaped_value", "organizer": "escaped_value", "printYSLogoOnPicasso": "escaped_value", "title": "escaped_value", diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set schedule_entries__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set schedule_entries__1.json index 3bc182b966..56715cb3b4 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set schedule_entries__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set schedule_entries__1.json @@ -4,7 +4,11 @@ "_embedded": { "rootContentNode": { "_links": { - "children": [], + "children": [ + { + "href": "escaped_value" + } + ], "contentType": { "href": "escaped_value" }, diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml index de1445fbea..599533456b 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml @@ -2333,6 +2333,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -2398,11 +2404,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -2444,6 +2445,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -2460,8 +2468,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -2526,6 +2534,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -2591,11 +2605,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -2630,6 +2639,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -2646,8 +2662,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -2708,6 +2724,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -2773,11 +2795,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -2819,6 +2836,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -2835,8 +2859,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -2897,6 +2921,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -2962,11 +2992,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -3008,6 +3033,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -3024,8 +3056,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -3108,11 +3140,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -3135,6 +3162,13 @@ components: description: 'Whether the Y+S logo should be printed on the picasso of this camp.' example: true type: boolean + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -3148,7 +3182,6 @@ components: - 'null' - string required: - - name - periods - printYSLogoOnPicasso - title @@ -3222,11 +3255,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -3238,6 +3266,13 @@ components: description: 'Whether the Y+S logo should be printed on the picasso of this camp.' example: true type: boolean + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -3251,7 +3286,6 @@ components: - 'null' - string required: - - name - printYSLogoOnPicasso - title type: object @@ -3329,11 +3363,6 @@ components: example: Piraten maxLength: 128 type: ['null', string] - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -3343,6 +3372,11 @@ components: description: 'Whether the Y+S logo should be printed on the picasso of this camp.' example: true type: boolean + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: ['null', string] title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -3354,7 +3388,6 @@ components: maxLength: 64 type: ['null', string] required: - - name - printYSLogoOnPicasso - title type: object @@ -3368,6 +3401,8 @@ components: properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } categories: properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } + checklists: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } creator: properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } materialLists: @@ -3380,6 +3415,7 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - periods - progressLabels @@ -3410,6 +3446,8 @@ components: $ref: '#/components/schemas/CampCollaboration.jsonapi' - $ref: '#/components/schemas/CampCollaboration.jsonapi' + - + $ref: '#/components/schemas/CampCollaboration.jsonapi' readOnly: true type: array periods: @@ -3493,6 +3531,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -3558,11 +3602,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -3604,6 +3643,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -3620,8 +3666,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -3695,6 +3741,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -3760,11 +3812,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -3799,6 +3846,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -3815,8 +3869,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -3886,6 +3940,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -3951,11 +4011,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -3997,6 +4052,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -4013,8 +4075,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -4084,6 +4146,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -4149,11 +4217,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -4195,6 +4258,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -4211,8 +4281,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -4304,11 +4374,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -4331,6 +4396,13 @@ components: description: 'Whether the Y+S logo should be printed on the picasso of this camp.' example: true type: boolean + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -4344,7 +4416,6 @@ components: - 'null' - string required: - - name - periods - printYSLogoOnPicasso - title @@ -4429,6 +4500,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -4494,11 +4571,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -4540,6 +4612,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -4556,8 +4635,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -4645,6 +4724,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -4710,11 +4795,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -4749,6 +4829,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -4765,8 +4852,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -4850,6 +4937,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -4915,11 +5008,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -4961,6 +5049,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -4977,8 +5072,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -5062,6 +5157,12 @@ components: format: iri-reference readOnly: true type: string + checklists: + description: 'List of all Checklists of this Camp.' + example: 'https://example.com/' + format: iri-reference + readOnly: true + type: string coachName: description: 'The name of the Y+S coach who is in charge of the camp.' example: 'Albert Anderegg' @@ -5127,11 +5228,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -5173,6 +5269,13 @@ components: type: string readOnly: true type: array + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -5189,8 +5292,8 @@ components: - activities - campCollaborations - categories + - checklists - materialLists - - name - periods - printYSLogoOnPicasso - progressLabels @@ -5273,11 +5376,6 @@ components: type: - 'null' - string - name: - description: 'A short name for the camp.' - example: 'SoLa 2022' - maxLength: 32 - type: string organizer: description: 'The name of the organization which plans and carries out the camp.' example: 'Pfadi Luftig' @@ -5300,6 +5398,13 @@ components: description: 'Whether the Y+S logo should be printed on the picasso of this camp.' example: true type: boolean + shortTitle: + description: 'A short title for the camp.' + example: 'SoLa 2022' + maxLength: 32 + type: + - 'null' + - string title: description: 'The full title of the camp.' example: 'Abteilungs-Sommerlager 2022' @@ -5313,7 +5418,6 @@ components: - 'null' - string required: - - name - periods - printYSLogoOnPicasso - title @@ -7487,626 +7591,708 @@ components: - preferredContentTypes - short type: object - ColumnLayout-read: + Checklist-read: deprecated: false - description: '' + description: |- + A Checklist + Tree-Structure with ChecklistItems. properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d + camp: + description: 'The camp this checklist belongs to.' + example: /camps/1a2b3c4d format: iri-reference type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + checklistItems: + description: 'All ChecklistItems that belong to this Checklist.' + example: 'https://example.com/' + format: iri-reference readOnly: true type: string - data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - columns: - - - slot: '1' - width: 12 - items: - type: string - type: - - array - - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm + name: + description: 'The human readable name of the checklist.' + example: 'PBS Ausbildungsziele' maxLength: 32 - type: - - 'null' - - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + type: string + required: + - camp + - checklistItems + - name + type: object + Checklist-write: + deprecated: false + description: |- + A Checklist + Tree-Structure with ChecklistItems. + properties: + name: + description: 'The human readable name of the checklist.' + example: 'PBS Ausbildungsziele' + maxLength: 32 + type: string + required: + - name + type: object + Checklist-write_create: + deprecated: false + description: |- + A Checklist + Tree-Structure with ChecklistItems. + properties: + camp: + description: 'The camp this checklist belongs to.' + example: /camps/1a2b3c4d format: iri-reference - type: - - 'null' - - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d + type: string + copyChecklistSource: + description: 'Copy contents from this source checklist.' + example: /checklists/1a2b3c4d format: iri-reference - readOnly: true type: - 'null' - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' + name: + description: 'The human readable name of the checklist.' + example: 'PBS Ausbildungsziele' maxLength: 32 - type: - - 'null' - - string + type: string required: - - children - - contentType - - data - - position + - camp + - name type: object - ColumnLayout-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: + Checklist.jsonapi: deprecated: false - description: '' + description: |- + A Checklist + Tree-Structure with ChecklistItems. properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' + data: + properties: + attributes: + properties: + _id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + name: + description: 'The human readable name of the checklist.' + example: 'PBS Ausbildungsziele' + maxLength: 32 + type: string + required: + - name + type: object + id: + type: string + relationships: + properties: + camp: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + checklistItems: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } + required: + - camp + - checklistItems + type: object + type: + type: string + required: + - id + - type + type: object + included: + description: 'Related resources requested via the "include" query parameter.' + externalDocs: + url: 'https://jsonapi.org/format/#fetching-includes' items: - example: 'https://example.com/' - format: iri-reference - type: string + anyOf: + - + $ref: '#/components/schemas/Checklist.jsonapi' + - + $ref: '#/components/schemas/Checklist.jsonapi' readOnly: true type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d + type: object + Checklist.jsonhal-read: + deprecated: false + description: |- + A Checklist + Tree-Structure with ChecklistItems. + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + camp: + description: 'The camp this checklist belongs to.' + example: /camps/1a2b3c4d format: iri-reference type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + checklistItems: + description: 'All ChecklistItems that belong to this Checklist.' + example: 'https://example.com/' + format: iri-reference readOnly: true type: string - data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - columns: - - - slot: '1' - width: 12 - items: - type: string - type: - - array - - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm + name: + description: 'The human readable name of the checklist.' + example: 'PBS Ausbildungsziele' maxLength: 32 - type: - - 'null' - - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + type: string + required: + - camp + - checklistItems + - name + type: object + Checklist.jsonhal-write_create: + deprecated: false + description: |- + A Checklist + Tree-Structure with ChecklistItems. + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + camp: + description: 'The camp this checklist belongs to.' + example: /camps/1a2b3c4d format: iri-reference - type: - - 'null' - - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d + type: string + copyChecklistSource: + description: 'Copy contents from this source checklist.' + example: /checklists/1a2b3c4d format: iri-reference - readOnly: true type: - 'null' - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' + name: + description: 'The human readable name of the checklist.' + example: 'PBS Ausbildungsziele' maxLength: 32 - type: - - 'null' - - string + type: string required: - - children - - contentType - - data - - position + - camp + - name type: object - ColumnLayout-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: + Checklist.jsonld-read: deprecated: false - description: '' + description: |- + A Checklist + Tree-Structure with ChecklistItems. properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + camp: + description: 'The camp this checklist belongs to.' + example: /camps/1a2b3c4d format: iri-reference type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + checklistItems: + description: 'All ChecklistItems that belong to this Checklist.' + example: 'https://example.com/' + format: iri-reference readOnly: true type: string - data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - columns: - - - slot: '1' - width: 12 - items: - type: string - type: - - array - - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm + name: + description: 'The human readable name of the checklist.' + example: 'PBS Ausbildungsziele' maxLength: 32 - type: - - 'null' - - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + type: string + required: + - camp + - checklistItems + - name + type: object + Checklist.jsonld-write_create: + deprecated: false + description: |- + A Checklist + Tree-Structure with ChecklistItems. + properties: + camp: + description: 'The camp this checklist belongs to.' + example: /camps/1a2b3c4d format: iri-reference - type: - - 'null' - - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d + type: string + copyChecklistSource: + description: 'Copy contents from this source checklist.' + example: /checklists/1a2b3c4d format: iri-reference - readOnly: true type: - 'null' - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' + name: + description: 'The human readable name of the checklist.' + example: 'PBS Ausbildungsziele' maxLength: 32 - type: - - 'null' - - string + type: string required: - - children - - contentType - - data - - position + - camp + - name type: object - ColumnLayout-read_Category.PreferredContentTypes_Category.ContentNodes: + ChecklistItem-read: deprecated: false - description: '' + description: |- + A ChecklistItem + A Checklist contains a Tree-Structure of ChecklistItems. properties: + checklist: + description: 'The Checklist this Item belongs to.' + example: /checklists/1a2b3c4d + format: iri-reference + type: string children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' + description: 'All ChecklistItems that are direct children of this ChecklistItem.' + example: '["/checklist_items/1a2b3c4d"]' items: example: 'https://example.com/' format: iri-reference type: string readOnly: true type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference - type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept - readOnly: true - type: string - data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - columns: - - - slot: '1' - width: 12 - items: - type: string - type: - - array - - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string parent: description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the + root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long + as the new parent is in the same checklist as the old one. + example: /checklist_items/1a2b3c4d format: iri-reference type: - 'null' - string position: default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. + description: 'A whole number used for ordering multiple checklist items that are in the same parent.' example: -1 type: integer - root: + text: + description: 'The human readable text of the checklist-item.' + example: Pfaditechnick + maxLength: 256 + type: string + required: + - checklist + - children + - position + - text + type: object + ChecklistItem-write: + deprecated: false + description: |- + A ChecklistItem + A Checklist contains a Tree-Structure of ChecklistItems. + properties: + parent: description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d + The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the + root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long + as the new parent is in the same checklist as the old one. + example: /checklist_items/1a2b3c4d format: iri-reference - readOnly: true - type: - - 'null' - - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 type: - 'null' - string + position: + default: -1 + description: 'A whole number used for ordering multiple checklist items that are in the same parent.' + example: -1 + type: integer + text: + description: 'The human readable text of the checklist-item.' + example: Pfaditechnick + maxLength: 256 + type: string required: - - children - - contentType - - data - position + - text type: object - ColumnLayout-read_ScheduleEntry.Activity: + ChecklistItem-write_create: deprecated: false - description: '' + description: |- + A ChecklistItem + A Checklist contains a Tree-Structure of ChecklistItems. properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d + checklist: + description: 'The Checklist this Item belongs to.' + example: /checklists/1a2b3c4d format: iri-reference type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept - readOnly: true - type: string - data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - columns: - - - slot: '1' - width: 12 - items: - type: string - type: - - array - - 'null' - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string parent: description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the + root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long + as the new parent is in the same checklist as the old one. + example: /checklist_items/1a2b3c4d format: iri-reference type: - 'null' - string position: default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. + description: 'A whole number used for ordering multiple checklist items that are in the same parent.' example: -1 type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference - readOnly: true - type: - - 'null' - - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 - type: - - 'null' - - string + text: + description: 'The human readable text of the checklist-item.' + example: Pfaditechnick + maxLength: 256 + type: string required: - - children - - contentType - - data + - checklist - position + - text type: object - ColumnLayout-write_create: + ChecklistItem.jsonapi: deprecated: false - description: '' + description: |- + A ChecklistItem + A Checklist contains a Tree-Structure of ChecklistItems. properties: - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference - type: string data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - columns: + properties: + attributes: + properties: + _id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + position: + default: -1 + description: 'A whole number used for ordering multiple checklist items that are in the same parent.' + example: -1 + type: integer + text: + description: 'The human readable text of the checklist-item.' + example: Pfaditechnick + maxLength: 256 + type: string + required: + - position + - text + type: object + id: + type: string + relationships: + properties: + checklist: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + children: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } + parent: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + required: + - checklist + - children + type: object + type: + type: string + required: + - id + - type + type: object + included: + description: 'Related resources requested via the "include" query parameter.' + externalDocs: + url: 'https://jsonapi.org/format/#fetching-includes' + items: + anyOf: - - slot: '1' - width: 12 + $ref: '#/components/schemas/ChecklistItem.jsonapi' + - + $ref: '#/components/schemas/ChecklistItem.jsonapi' + - + $ref: '#/components/schemas/ChecklistItem.jsonapi' + readOnly: true + type: array + type: object + ChecklistItem.jsonhal-read: + deprecated: false + description: |- + A ChecklistItem + A Checklist contains a Tree-Structure of ChecklistItems. + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + checklist: + description: 'The Checklist this Item belongs to.' + example: /checklists/1a2b3c4d + format: iri-reference + type: string + children: + description: 'All ChecklistItems that are direct children of this ChecklistItem.' + example: '["/checklist_items/1a2b3c4d"]' items: + example: 'https://example.com/' + format: iri-reference type: string - type: - - array - - 'null' - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string + readOnly: true + type: array + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string parent: description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the + root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long + as the new parent is in the same checklist as the old one. + example: /checklist_items/1a2b3c4d format: iri-reference type: - 'null' - string position: default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. + description: 'A whole number used for ordering multiple checklist items that are in the same parent.' example: -1 type: integer - slot: + text: + description: 'The human readable text of the checklist-item.' + example: Pfaditechnick + maxLength: 256 + type: string + required: + - checklist + - children + - position + - text + type: object + ChecklistItem.jsonhal-write_create: + deprecated: false + description: |- + A ChecklistItem + A Checklist contains a Tree-Structure of ChecklistItems. + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + checklist: + description: 'The Checklist this Item belongs to.' + example: /checklists/1a2b3c4d + format: iri-reference + type: string + parent: description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 + The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the + root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long + as the new parent is in the same checklist as the old one. + example: /checklist_items/1a2b3c4d + format: iri-reference type: - 'null' - string + position: + default: -1 + description: 'A whole number used for ordering multiple checklist items that are in the same parent.' + example: -1 + type: integer + text: + description: 'The human readable text of the checklist-item.' + example: Pfaditechnick + maxLength: 256 + type: string required: - - contentType - - data - - parent + - checklist - position + - text type: object - ColumnLayout-write_update: + ChecklistItem.jsonld-read: deprecated: false - description: '' + description: |- + A ChecklistItem + A Checklist contains a Tree-Structure of ChecklistItems. properties: - data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - columns: - - - slot: '1' - width: 12 + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + checklist: + description: 'The Checklist this Item belongs to.' + example: /checklists/1a2b3c4d + format: iri-reference + type: string + children: + description: 'All ChecklistItems that are direct children of this ChecklistItem.' + example: '["/checklist_items/1a2b3c4d"]' items: + example: 'https://example.com/' + format: iri-reference type: string - type: - - array - - 'null' - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string + readOnly: true + type: array + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string parent: description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the + root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long + as the new parent is in the same checklist as the old one. + example: /checklist_items/1a2b3c4d format: iri-reference type: - 'null' - string position: default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. + description: 'A whole number used for ordering multiple checklist items that are in the same parent.' example: -1 type: integer - slot: + text: + description: 'The human readable text of the checklist-item.' + example: Pfaditechnick + maxLength: 256 + type: string + required: + - checklist + - children + - position + - text + type: object + ChecklistItem.jsonld-write_create: + deprecated: false + description: |- + A ChecklistItem + A Checklist contains a Tree-Structure of ChecklistItems. + properties: + checklist: + description: 'The Checklist this Item belongs to.' + example: /checklists/1a2b3c4d + format: iri-reference + type: string + parent: description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 + The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the + root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long + as the new parent is in the same checklist as the old one. + example: /checklist_items/1a2b3c4d + format: iri-reference type: - 'null' - string + position: + default: -1 + description: 'A whole number used for ordering multiple checklist items that are in the same parent.' + example: -1 + type: integer + text: + description: 'The human readable text of the checklist-item.' + example: Pfaditechnick + maxLength: 256 + type: string required: - - data + - checklist - position + - text type: object - ColumnLayout.jsonapi: + ChecklistNode-read: deprecated: false description: '' properties: + checklistItems: + description: 'List of selected ChecklistItems.' + example: '["/checklist_items/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + type: array children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -8123,23 +8309,16 @@ components: in a content node. The content type may not be changed once the content node is created. example: /content_types/1a2b3c4d format: iri-reference - readOnly: true type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). + description: 'Holds the actual data of the content node.' example: - columns: - - - slot: '1' - width: 12 + text: 'dummy text' items: type: string type: @@ -8197,33 +8376,22 @@ components: - 'null' - string required: + - checklistItems - children - contentType - - data - position type: object - ColumnLayout.jsonhal-read: + ChecklistNode-write_create: deprecated: false description: '' properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' + addChecklistItemIds: + example: '["1a2b3c4d"]' items: - example: 'https://example.com/' - format: iri-reference type: string - readOnly: true - type: array + type: + - array + - 'null' contentType: description: |- Defines the type of this content node. There is a fixed list of types that are implemented @@ -8232,32 +8400,15 @@ components: example: /content_types/1a2b3c4d format: iri-reference type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept - readOnly: true - type: string data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). + description: 'Holds the actual data of the content node.' example: - columns: - - - slot: '1' - width: 12 + text: 'dummy text' items: type: string type: - array - 'null' - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string instanceName: description: |- An optional name for this content node. This is useful when planning e.g. an alternative @@ -8284,16 +8435,80 @@ components: same parent. The API does not guarantee the uniqueness of parent+slot+position. example: -1 type: integer - root: + removeChecklistItemIds: + example: '["1a2b3c4d"]' + items: + type: string + type: + - array + - 'null' + slot: description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string + required: + - contentType + - parent + - position + type: object + ChecklistNode-write_update: + deprecated: false + description: '' + properties: + addChecklistItemIds: + example: '["1a2b3c4d"]' + items: + type: string + type: + - array + - 'null' + data: + description: 'Holds the actual data of the content node.' + example: + text: 'dummy text' + items: + type: string + type: + - array + - 'null' + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. example: /content_nodes/1a2b3c4d format: iri-reference - readOnly: true type: - 'null' - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + removeChecklistItemIds: + example: '["1a2b3c4d"]' + items: + type: string + type: + - array + - 'null' slot: description: |- The name of the slot in the parent in which this content node resides. The valid slot names @@ -8304,24 +8519,29 @@ components: - 'null' - string required: - - children - - contentType - - data - position type: object - ColumnLayout.jsonhal-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: + ChecklistNode.jsonapi: deprecated: false description: '' properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object + addChecklistItemIds: + example: '["1a2b3c4d"]' + items: + type: string + type: + - array + - 'null' + writeOnly: true + checklistItems: + description: 'List of selected ChecklistItems.' + example: '["/checklist_items/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -8338,22 +8558,17 @@ components: in a content node. The content type may not be changed once the content node is created. example: /content_types/1a2b3c4d format: iri-reference + readOnly: true type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). + description: 'Holds the actual data of the content node.' example: - columns: - - - slot: '1' - width: 12 + text: 'dummy text' items: type: string type: @@ -8391,6 +8606,14 @@ components: same parent. The API does not guarantee the uniqueness of parent+slot+position. example: -1 type: integer + removeChecklistItemIds: + example: '["1a2b3c4d"]' + items: + type: string + type: + - array + - 'null' + writeOnly: true root: description: |- The content node that is the root of the content node tree. Refers to itself in case this @@ -8411,12 +8634,12 @@ components: - 'null' - string required: + - checklistItems - children - contentType - - data - position type: object - ColumnLayout.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: + ChecklistNode.jsonhal-read: deprecated: false description: '' properties: @@ -8429,6 +8652,14 @@ components: type: string type: object type: object + checklistItems: + description: 'List of selected ChecklistItems.' + example: '["/checklist_items/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + type: array children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -8448,19 +8679,13 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). + description: 'Holds the actual data of the content node.' example: - columns: - - - slot: '1' - width: 12 + text: 'dummy text' items: type: string type: @@ -8518,12 +8743,12 @@ components: - 'null' - string required: + - checklistItems - children - contentType - - data - position type: object - ColumnLayout.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes: + ChecklistNode.jsonhal-write_create: deprecated: false description: '' properties: @@ -8536,15 +8761,13 @@ components: type: string type: object type: object - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' + addChecklistItemIds: + example: '["1a2b3c4d"]' items: - example: 'https://example.com/' - format: iri-reference type: string - readOnly: true - type: array + type: + - array + - 'null' contentType: description: |- Defines the type of this content node. There is a fixed list of types that are implemented @@ -8553,32 +8776,15 @@ components: example: /content_types/1a2b3c4d format: iri-reference type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept - readOnly: true - type: string data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). + description: 'Holds the actual data of the content node.' example: - columns: - - - slot: '1' - width: 12 + text: 'dummy text' items: type: string type: - array - 'null' - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string instanceName: description: |- An optional name for this content node. This is useful when planning e.g. an alternative @@ -8605,16 +8811,13 @@ components: same parent. The API does not guarantee the uniqueness of parent+slot+position. example: -1 type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference - readOnly: true + removeChecklistItemIds: + example: '["1a2b3c4d"]' + items: + type: string type: + - array - 'null' - - string slot: description: |- The name of the slot in the parent in which this content node resides. The valid slot names @@ -8625,24 +8828,45 @@ components: - 'null' - string required: - - children - contentType - - data + - parent - position type: object - ColumnLayout.jsonhal-read_ScheduleEntry.Activity: + ChecklistNode.jsonld-read: deprecated: false description: '' properties: - _links: - properties: - self: + '@context': + oneOf: + - + additionalProperties: true properties: - href: - format: iri-reference + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] type: string + required: + - '@vocab' + - hydra type: object - type: object + - + type: string + readOnly: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + checklistItems: + description: 'List of selected ChecklistItems.' + example: '["/checklist_items/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + type: array children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -8662,19 +8886,13 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). + description: 'Holds the actual data of the content node.' example: - columns: - - - slot: '1' - width: 12 + text: 'dummy text' items: type: string type: @@ -8732,24 +8950,22 @@ components: - 'null' - string required: + - checklistItems - children - contentType - - data - position type: object - ColumnLayout.jsonhal-write_create: + ChecklistNode.jsonld-write_create: deprecated: false description: '' properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object + addChecklistItemIds: + example: '["1a2b3c4d"]' + items: + type: string + type: + - array + - 'null' contentType: description: |- Defines the type of this content node. There is a fixed list of types that are implemented @@ -8759,15 +8975,9 @@ components: format: iri-reference type: string data: - default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). + description: 'Holds the actual data of the content node.' example: - columns: - - - slot: '1' - width: 12 + text: 'dummy text' items: type: string type: @@ -8799,6 +9009,13 @@ components: same parent. The API does not guarantee the uniqueness of parent+slot+position. example: -1 type: integer + removeChecklistItemIds: + example: '["1a2b3c4d"]' + items: + type: string + type: + - array + - 'null' slot: description: |- The name of the slot in the parent in which this content node resides. The valid slot names @@ -8810,37 +9027,13 @@ components: - string required: - contentType - - data - parent - position type: object - ColumnLayout.jsonld-read: + ColumnLayout-read: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -8860,7 +9053,7 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: @@ -8935,33 +9128,10 @@ components: - data - position type: object - ColumnLayout.jsonld-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: + ColumnLayout-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -8981,7 +9151,7 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: @@ -9056,33 +9226,10 @@ components: - data - position type: object - ColumnLayout.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: + ColumnLayout-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -9102,7 +9249,7 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: @@ -9177,33 +9324,10 @@ components: - data - position type: object - ColumnLayout.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes: + ColumnLayout-read_Category.PreferredContentTypes_Category.ContentNodes: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -9223,7 +9347,7 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: @@ -9298,33 +9422,10 @@ components: - data - position type: object - ColumnLayout.jsonld-read_ScheduleEntry.Activity: + ColumnLayout-read_ScheduleEntry.Activity: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -9344,7 +9445,7 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: @@ -9419,7 +9520,7 @@ components: - data - position type: object - ColumnLayout.jsonld-write_create: + ColumnLayout-write_create: deprecated: false description: '' properties: @@ -9487,52 +9588,25 @@ components: - parent - position type: object - ContentNode-read: + ColumnLayout-write_update: deprecated: false - description: |- - A piece of information that is part of a programme. ContentNodes may store content such as - one or multiple free text fields, or any other necessary data. Content nodes may also be used - to define layouts. For this purpose, a content node may offer so-called slots, into which other - content nodes may be inserted. In return, a content node may be nested inside a slot in a parent - container content node. This way, a tree of content nodes makes up a complete programme. + description: '' properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference - type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept - readOnly: true - type: string data: - description: 'Holds the actual data of the content node.' + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). example: - text: 'dummy text' + columns: + - + slot: '1' + width: 12 items: type: string type: - array - 'null' - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string instanceName: description: |- An optional name for this content node. This is useful when planning e.g. an alternative @@ -9559,16 +9633,6 @@ components: same parent. The API does not guarantee the uniqueness of parent+slot+position. example: -1 type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference - readOnly: true - type: - - 'null' - - string slot: description: |- The name of the slot in the parent in which this content node resides. The valid slot names @@ -9579,11 +9643,10 @@ components: - 'null' - string required: - - children - - contentType + - data - position type: object - ContentNode-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: + ColumnLayout.jsonapi: deprecated: false description: '' properties: @@ -9603,16 +9666,23 @@ components: in a content node. The content type may not be changed once the content node is created. example: /content_types/1a2b3c4d format: iri-reference + readOnly: true type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - description: 'Holds the actual data of the content node.' + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). example: - text: 'dummy text' + columns: + - + slot: '1' + width: 12 items: type: string type: @@ -9672,12 +9742,22 @@ components: required: - children - contentType + - data - position type: object - ContentNode-read_Category.PreferredContentTypes_Category.ContentNodes: + ColumnLayout.jsonhal-read: deprecated: false description: '' properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -9697,13 +9777,19 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - description: 'Holds the actual data of the content node.' + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). example: - text: 'dummy text' + columns: + - + slot: '1' + width: 12 items: type: string type: @@ -9763,17 +9849,22 @@ components: required: - children - contentType + - data - position type: object - ContentNode.jsonapi: + ColumnLayout.jsonhal-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: deprecated: false - description: |- - A piece of information that is part of a programme. ContentNodes may store content such as - one or multiple free text fields, or any other necessary data. Content nodes may also be used - to define layouts. For this purpose, a content node may offer so-called slots, into which other - content nodes may be inserted. In return, a content node may be nested inside a slot in a parent - container content node. This way, a tree of content nodes makes up a complete programme. + description: '' properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -9790,17 +9881,22 @@ components: in a content node. The content type may not be changed once the content node is created. example: /content_types/1a2b3c4d format: iri-reference - readOnly: true type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - description: 'Holds the actual data of the content node.' + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). example: - text: 'dummy text' + columns: + - + slot: '1' + width: 12 items: type: string type: @@ -9860,16 +9956,12 @@ components: required: - children - contentType + - data - position type: object - ContentNode.jsonhal-read: + ColumnLayout.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: deprecated: false - description: |- - A piece of information that is part of a programme. ContentNodes may store content such as - one or multiple free text fields, or any other necessary data. Content nodes may also be used - to define layouts. For this purpose, a content node may offer so-called slots, into which other - content nodes may be inserted. In return, a content node may be nested inside a slot in a parent - container content node. This way, a tree of content nodes makes up a complete programme. + description: '' properties: _links: properties: @@ -9899,13 +9991,19 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - description: 'Holds the actual data of the content node.' + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). example: - text: 'dummy text' + columns: + - + slot: '1' + width: 12 items: type: string type: @@ -9965,9 +10063,10 @@ components: required: - children - contentType + - data - position type: object - ContentNode.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: + ColumnLayout.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes: deprecated: false description: '' properties: @@ -9999,13 +10098,19 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - description: 'Holds the actual data of the content node.' + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). example: - text: 'dummy text' + columns: + - + slot: '1' + width: 12 items: type: string type: @@ -10065,9 +10170,10 @@ components: required: - children - contentType + - data - position type: object - ContentNode.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes: + ColumnLayout.jsonhal-read_ScheduleEntry.Activity: deprecated: false description: '' properties: @@ -10099,13 +10205,19 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - description: 'Holds the actual data of the content node.' + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). example: - text: 'dummy text' + columns: + - + slot: '1' + width: 12 items: type: string type: @@ -10165,17 +10277,107 @@ components: required: - children - contentType + - data - position type: object - ContentNode.jsonld-read: + ColumnLayout.jsonhal-write_create: deprecated: false - description: |- - A piece of information that is part of a programme. ContentNodes may store content such as - one or multiple free text fields, or any other necessary data. Content nodes may also be used - to define layouts. For this purpose, a content node may offer so-called slots, into which other - content nodes may be inserted. In return, a content node may be nested inside a slot in a parent - container content node. This way, a tree of content nodes makes up a complete programme. + description: '' + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + data: + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + columns: + - + slot: '1' + width: 12 + items: + type: string + type: + - array + - 'null' + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string + required: + - contentType + - data + - parent + - position + type: object + ColumnLayout.jsonld-read: + deprecated: false + description: '' properties: + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true '@id': readOnly: true type: string @@ -10201,13 +10403,19 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - description: 'Holds the actual data of the content node.' + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). example: - text: 'dummy text' + columns: + - + slot: '1' + width: 12 items: type: string type: @@ -10267,9 +10475,10 @@ components: required: - children - contentType + - data - position type: object - ContentNode.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: + ColumnLayout.jsonld-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: deprecated: false description: '' properties: @@ -10315,13 +10524,19 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - description: 'Holds the actual data of the content node.' + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). example: - text: 'dummy text' + columns: + - + slot: '1' + width: 12 items: type: string type: @@ -10381,9 +10596,10 @@ components: required: - children - contentType + - data - position type: object - ContentNode.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes: + ColumnLayout.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: deprecated: false description: '' properties: @@ -10429,13 +10645,19 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: - description: 'Holds the actual data of the content node.' + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). example: - text: 'dummy text' + columns: + - + slot: '1' + width: 12 items: type: string type: @@ -10495,255 +10717,133 @@ components: required: - children - contentType + - data - position type: object - ContentType-read: + ColumnLayout.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes: deprecated: false - description: |- - Defines a type of content that can be present in a content node tree. A content type - determines what data can be stored in content nodes of this type, as well as validation, - available slots and jsonConfig settings. + description: '' properties: - active: - default: true - description: 'Whether this content type is still maintained and recommended for use in new camps.' - example: 'true' + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string readOnly: true - type: boolean - contentNodes: - description: 'API endpoint link for creating new entities of type entityClass.' - example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' - format: iri-reference + '@id': readOnly: true - type: array - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 + type: string + '@type': readOnly: true type: string - name: - description: |- - A name in UpperCamelCase of the content type. This value may be used as a technical - identifier of this content type, it is guaranteed to stay fixed. - example: SafetyConcept - maxLength: 32 + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true + type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference type: string - required: - - active - - name - type: object - ContentType-read_Category.PreferredContentTypes_Category.ContentNodes: - deprecated: false - description: '' - properties: - active: - default: true - description: 'Whether this content type is still maintained and recommended for use in new camps.' - example: 'true' - readOnly: true - type: boolean - contentNodes: - description: 'API endpoint link for creating new entities of type entityClass.' - example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' - format: iri-reference - readOnly: true - type: array - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - name: - description: |- - A name in UpperCamelCase of the content type. This value may be used as a technical - identifier of this content type, it is guaranteed to stay fixed. - example: SafetyConcept - maxLength: 32 + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true type: string - required: - - active - - name - type: object - ContentType.jsonapi: - deprecated: false - description: |- - Defines a type of content that can be present in a content node tree. A content type - determines what data can be stored in content nodes of this type, as well as validation, - available slots and jsonConfig settings. - properties: data: - properties: - attributes: - properties: - _id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - active: - default: true - description: 'Whether this content type is still maintained and recommended for use in new camps.' - example: 'true' - readOnly: true - type: boolean - contentNodes: - description: 'API endpoint link for creating new entities of type entityClass.' - example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' - format: iri-reference - readOnly: true - type: array - entityClass: - description: |- - The name of the internal PHP class that implements all custom behaviour of content nodes - of this type. - readOnly: true - type: string - jsonConfig: - description: |- - Internal configuration for the entityClass, in case the same entityClass is reused - for different content types. - items: { type: string } - readOnly: true - type: [array, 'null'] - name: - description: |- - A name in UpperCamelCase of the content type. This value may be used as a technical - identifier of this content type, it is guaranteed to stay fixed. - example: SafetyConcept - maxLength: 32 - readOnly: true - type: string - required: - - active - - entityClass - - name - type: object - id: - type: string - relationships: - properties: - categories: - properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } - required: - - categories - type: object - type: - type: string - required: - - id - - type - type: object - included: - description: 'Related resources requested via the "include" query parameter.' - externalDocs: - url: 'https://jsonapi.org/format/#fetching-includes' - items: - anyOf: + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + columns: - - $ref: '#/components/schemas/Category.jsonapi' - readOnly: true - type: array - type: object - ContentType.jsonhal-read: - deprecated: false - description: |- - Defines a type of content that can be present in a content node tree. A content type - determines what data can be stored in content nodes of this type, as well as validation, - available slots and jsonConfig settings. - properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - active: - default: true - description: 'Whether this content type is still maintained and recommended for use in new camps.' - example: 'true' - readOnly: true - type: boolean - contentNodes: - description: 'API endpoint link for creating new entities of type entityClass.' - example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' - format: iri-reference - readOnly: true - type: array + slot: '1' + width: 12 + items: + type: string + type: + - array + - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - name: + instanceName: description: |- - A name in UpperCamelCase of the content type. This value may be used as a technical - identifier of this content type, it is guaranteed to stay fixed. - example: SafetyConcept + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm maxLength: 32 - readOnly: true - type: string - required: - - active - - name - type: object - ContentType.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes: - deprecated: false - description: '' - properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - active: - default: true - description: 'Whether this content type is still maintained and recommended for use in new camps.' - example: 'true' - readOnly: true - type: boolean - contentNodes: - description: 'API endpoint link for creating new entities of type entityClass.' - example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference readOnly: true - type: array - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - name: + type: + - 'null' + - string + slot: description: |- - A name in UpperCamelCase of the content type. This value may be used as a technical - identifier of this content type, it is guaranteed to stay fixed. - example: SafetyConcept + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' maxLength: 32 - readOnly: true - type: string + type: + - 'null' + - string required: - - active - - name + - children + - contentType + - data + - position type: object - ContentType.jsonld-read: + ColumnLayout.jsonld-read_ScheduleEntry.Activity: deprecated: false - description: |- - Defines a type of content that can be present in a content node tree. A content type - determines what data can be stored in content nodes of this type, as well as validation, - available slots and jsonConfig settings. + description: '' properties: '@context': oneOf: @@ -10768,417 +10868,551 @@ components: '@type': readOnly: true type: string - active: - default: true - description: 'Whether this content type is still maintained and recommended for use in new camps.' - example: 'true' - readOnly: true - type: boolean - contentNodes: - description: 'API endpoint link for creating new entities of type entityClass.' - example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' - format: iri-reference + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations + readOnly: true + type: string + data: + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + columns: + - + slot: '1' + width: 12 + items: + type: string + type: + - array + - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - name: + instanceName: description: |- - A name in UpperCamelCase of the content type. This value may be used as a technical - identifier of this content type, it is guaranteed to stay fixed. - example: SafetyConcept + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d + format: iri-reference readOnly: true - type: string + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - active - - name + - children + - contentType + - data + - position type: object - ContentType.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes: + ColumnLayout.jsonld-write_create: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string - active: - default: true - description: 'Whether this content type is still maintained and recommended for use in new camps.' - example: 'true' - readOnly: true - type: boolean - contentNodes: - description: 'API endpoint link for creating new entities of type entityClass.' - example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference - readOnly: true - type: array - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true type: string - name: + data: + default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}' description: |- - A name in UpperCamelCase of the content type. This value may be used as a technical - identifier of this content type, it is guaranteed to stay fixed. - example: SafetyConcept + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + columns: + - + slot: '1' + width: 12 + items: + type: string + type: + - array + - 'null' + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm maxLength: 32 - readOnly: true - type: string + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - active - - name - type: object - Credentials: - properties: - identifier: - example: test@example.com - type: string - password: - example: test - type: string + - contentType + - data + - parent + - position type: object - Day-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: + ContentNode-read: deprecated: false - description: '' + description: |- + A piece of information that is part of a programme. ContentNodes may store content such as + one or multiple free text fields, or any other necessary data. Content nodes may also be used + to define layouts. For this purpose, a content node may offer so-called slots, into which other + content nodes may be inserted. In return, a content node may be nested inside a slot in a parent + container content node. This way, a tree of content nodes makes up a complete programme. properties: - dayOffset: - description: "The 0-based offset in days from the period's start date when this day starts." - example: '1' + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: integer - dayResponsibles: - description: 'The list of people who have a whole-day responsibility on this day.' - example: /days/1a2b3c4d/day_responsibles + type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference - readOnly: true type: string - end: - description: 'The end date and time of the day. This is a read-only convenience property.' - example: '2022-01-03T00:00:00+00:00' - format: date + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true + type: string + data: + description: 'Holds the actual data of the content node.' + example: + text: 'dummy text' + items: + type: string + type: + - array + - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - number: - description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' - example: '2' - readOnly: true + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - period: - description: 'The time period that this day belongs to.' - example: /periods/1a2b3c4d + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntries: - description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." - example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - start: - description: 'The start date and time of the day. This is a read-only convenience property.' - example: '2022-01-02T00:00:00+00:00' - format: date readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - dayOffset - - dayResponsibles - - period + - children + - contentType + - position type: object - Day-read_Day.DayResponsibles: + ContentNode-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: deprecated: false - description: |- - A day in a time period of a camp. This is represented as a reference to the time period - along with a number of days offset from the period's starting date. This is to make it - easier to move the whole periods to different dates. Days are created automatically when - creating or updating periods, and are not writable through the API directly. + description: '' properties: - dayOffset: - description: "The 0-based offset in days from the period's start date when this day starts." - example: '1' - readOnly: true - type: integer - dayResponsibles: + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' items: - $ref: '#/components/schemas/DayResponsible-read_Day.DayResponsibles' + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: unknown_type - end: - description: 'The end date and time of the day. This is a read-only convenience property.' - example: '2022-01-03T00:00:00+00:00' - format: date + type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true + type: string + data: + description: 'Holds the actual data of the content node.' + example: + text: 'dummy text' + items: + type: string + type: + - array + - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - number: - description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' - example: '2' - readOnly: true + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - period: - description: 'The time period that this day belongs to.' - example: /periods/1a2b3c4d + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntries: - description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." - example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - start: - description: 'The start date and time of the day. This is a read-only convenience property.' - example: '2022-01-02T00:00:00+00:00' - format: date readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - dayOffset - - dayResponsibles - - period + - children + - contentType + - position type: object - Day-read_Period.Camp_Period.Days: + ContentNode-read_Category.PreferredContentTypes_Category.ContentNodes: deprecated: false description: '' properties: - dayOffset: - description: "The 0-based offset in days from the period's start date when this day starts." - example: '1' + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: integer - dayResponsibles: - description: 'The list of people who have a whole-day responsibility on this day.' - example: /days/1a2b3c4d/day_responsibles + type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference - readOnly: true type: string - end: - description: 'The end date and time of the day. This is a read-only convenience property.' - example: '2022-01-03T00:00:00+00:00' - format: date + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true + type: string + data: + description: 'Holds the actual data of the content node.' + example: + text: 'dummy text' + items: + type: string + type: + - array + - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - number: - description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' - example: '2' - readOnly: true - type: integer - period: - description: 'The time period that this day belongs to.' - example: /periods/1a2b3c4d + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntries: - description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." - example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - start: - description: 'The start date and time of the day. This is a read-only convenience property.' - example: '2022-01-02T00:00:00+00:00' - format: date readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - dayOffset - - dayResponsibles - - period + - children + - contentType + - position type: object - Day.jsonapi: + ContentNode.jsonapi: deprecated: false description: |- - A day in a time period of a camp. This is represented as a reference to the time period - along with a number of days offset from the period's starting date. This is to make it - easier to move the whole periods to different dates. Days are created automatically when - creating or updating periods, and are not writable through the API directly. + A piece of information that is part of a programme. ContentNodes may store content such as + one or multiple free text fields, or any other necessary data. Content nodes may also be used + to define layouts. For this purpose, a content node may offer so-called slots, into which other + content nodes may be inserted. In return, a content node may be nested inside a slot in a parent + container content node. This way, a tree of content nodes makes up a complete programme. properties: - data: - properties: - attributes: - properties: - _id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - dayOffset: - description: "The 0-based offset in days from the period's start date when this day starts." - example: '1' - readOnly: true - type: integer - end: - description: 'The end date and time of the day. This is a read-only convenience property.' - example: '2022-01-03T00:00:00+00:00' - format: date - readOnly: true - number: - description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' - example: '2' - readOnly: true - type: integer - start: - description: 'The start date and time of the day. This is a read-only convenience property.' - example: '2022-01-02T00:00:00+00:00' - format: date - readOnly: true - required: - - dayOffset - type: object - id: - type: string - relationships: - properties: - dayResponsibles: - properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } - period: - properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } - scheduleEntries: - properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } - required: - - dayResponsibles - - period - type: object - type: - type: string - required: - - id - - type - type: object - included: - description: 'Related resources requested via the "include" query parameter.' - externalDocs: - url: 'https://jsonapi.org/format/#fetching-includes' + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' items: - anyOf: - - - $ref: '#/components/schemas/DayResponsible.jsonapi' - - - $ref: '#/components/schemas/DayResponsible.jsonapi' - - - $ref: '#/components/schemas/DayResponsible.jsonapi' + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true type: array - type: object - Day.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: - deprecated: false - description: '' - properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - dayOffset: - description: "The 0-based offset in days from the period's start date when this day starts." - example: '1' - readOnly: true - type: integer - dayResponsibles: - description: 'The list of people who have a whole-day responsibility on this day.' - example: /days/1a2b3c4d/day_responsibles + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference readOnly: true type: string - end: - description: 'The end date and time of the day. This is a read-only convenience property.' - example: '2022-01-03T00:00:00+00:00' - format: date + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true + type: string + data: + description: 'Holds the actual data of the content node.' + example: + text: 'dummy text' + items: + type: string + type: + - array + - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - number: - description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' - example: '2' - readOnly: true + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - period: - description: 'The time period that this day belongs to.' - example: /periods/1a2b3c4d + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntries: - description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." - example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - start: - description: 'The start date and time of the day. This is a read-only convenience property.' - example: '2022-01-02T00:00:00+00:00' - format: date readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - dayOffset - - dayResponsibles - - period + - children + - contentType + - position type: object - Day.jsonhal-read_Day.DayResponsibles: + ContentNode.jsonhal-read: deprecated: false description: |- - A day in a time period of a camp. This is represented as a reference to the time period - along with a number of days offset from the period's starting date. This is to make it - easier to move the whole periods to different dates. Days are created automatically when - creating or updating periods, and are not writable through the API directly. + A piece of information that is part of a programme. ContentNodes may store content such as + one or multiple free text fields, or any other necessary data. Content nodes may also be used + to define layouts. For this purpose, a content node may offer so-called slots, into which other + content nodes may be inserted. In return, a content node may be nested inside a slot in a parent + container content node. This way, a tree of content nodes makes up a complete programme. properties: _links: properties: @@ -11189,57 +11423,94 @@ components: type: string type: object type: object - dayOffset: - description: "The 0-based offset in days from the period's start date when this day starts." - example: '1' - readOnly: true - type: integer - dayResponsibles: + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' items: - $ref: '#/components/schemas/DayResponsible.jsonhal-read_Day.DayResponsibles' + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: unknown_type - end: - description: 'The end date and time of the day. This is a read-only convenience property.' - example: '2022-01-03T00:00:00+00:00' - format: date + type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true + type: string + data: + description: 'Holds the actual data of the content node.' + example: + text: 'dummy text' + items: + type: string + type: + - array + - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - number: - description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' - example: '2' - readOnly: true + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - period: - description: 'The time period that this day belongs to.' - example: /periods/1a2b3c4d + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntries: - description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." - example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - start: - description: 'The start date and time of the day. This is a read-only convenience property.' - example: '2022-01-02T00:00:00+00:00' - format: date readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - dayOffset - - dayResponsibles - - period + - children + - contentType + - position type: object - Day.jsonhal-read_Period.Camp_Period.Days: + ContentNode.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: deprecated: false description: '' properties: @@ -11252,217 +11523,296 @@ components: type: string type: object type: object - dayOffset: - description: "The 0-based offset in days from the period's start date when this day starts." - example: '1' + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: integer - dayResponsibles: - description: 'The list of people who have a whole-day responsibility on this day.' - example: /days/1a2b3c4d/day_responsibles + type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference - readOnly: true type: string - end: - description: 'The end date and time of the day. This is a read-only convenience property.' - example: '2022-01-03T00:00:00+00:00' - format: date + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true + type: string + data: + description: 'Holds the actual data of the content node.' + example: + text: 'dummy text' + items: + type: string + type: + - array + - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - number: - description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' - example: '2' - readOnly: true + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - period: - description: 'The time period that this day belongs to.' - example: /periods/1a2b3c4d + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntries: - description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." - example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - start: - description: 'The start date and time of the day. This is a read-only convenience property.' - example: '2022-01-02T00:00:00+00:00' - format: date readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - dayOffset - - dayResponsibles - - period + - children + - contentType + - position type: object - Day.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: + ContentNode.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true + _links: + properties: + self: properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] + href: + format: iri-reference type: string - required: - - '@vocab' - - hydra type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string - dayOffset: - description: "The 0-based offset in days from the period's start date when this day starts." - example: '1' + type: object + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: integer - dayResponsibles: - description: 'The list of people who have a whole-day responsibility on this day.' - example: /days/1a2b3c4d/day_responsibles + type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true type: string - end: - description: 'The end date and time of the day. This is a read-only convenience property.' - example: '2022-01-03T00:00:00+00:00' - format: date - readOnly: true + data: + description: 'Holds the actual data of the content node.' + example: + text: 'dummy text' + items: + type: string + type: + - array + - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - number: - description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' - example: '2' - readOnly: true + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - period: - description: 'The time period that this day belongs to.' - example: /periods/1a2b3c4d + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntries: - description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." - example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - start: - description: 'The start date and time of the day. This is a read-only convenience property.' - example: '2022-01-02T00:00:00+00:00' - format: date readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - dayOffset - - dayResponsibles - - period + - children + - contentType + - position type: object - Day.jsonld-read_Day.DayResponsibles: + ContentNode.jsonld-read: deprecated: false description: |- - A day in a time period of a camp. This is represented as a reference to the time period - along with a number of days offset from the period's starting date. This is to make it - easier to move the whole periods to different dates. Days are created automatically when - creating or updating periods, and are not writable through the API directly. + A piece of information that is part of a programme. ContentNodes may store content such as + one or multiple free text fields, or any other necessary data. Content nodes may also be used + to define layouts. For this purpose, a content node may offer so-called slots, into which other + content nodes may be inserted. In return, a content node may be nested inside a slot in a parent + container content node. This way, a tree of content nodes makes up a complete programme. properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true '@id': readOnly: true type: string '@type': readOnly: true type: string - dayOffset: - description: "The 0-based offset in days from the period's start date when this day starts." - example: '1' - readOnly: true - type: integer - dayResponsibles: + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' items: - $ref: '#/components/schemas/DayResponsible.jsonld-read_Day.DayResponsibles' + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: unknown_type - end: - description: 'The end date and time of the day. This is a read-only convenience property.' - example: '2022-01-03T00:00:00+00:00' - format: date + type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true + type: string + data: + description: 'Holds the actual data of the content node.' + example: + text: 'dummy text' + items: + type: string + type: + - array + - 'null' id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - number: - description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' - example: '2' - readOnly: true + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - period: - description: 'The time period that this day belongs to.' - example: /periods/1a2b3c4d + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntries: - description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." - example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - start: - description: 'The start date and time of the day. This is a read-only convenience property.' - example: '2022-01-02T00:00:00+00:00' - format: date readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - dayOffset - - dayResponsibles - - period + - children + - contentType + - position type: object - Day.jsonld-read_Period.Camp_Period.Days: + ContentNode.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: deprecated: false description: '' properties: @@ -11489,126 +11839,284 @@ components: '@type': readOnly: true type: string - dayOffset: - description: "The 0-based offset in days from the period's start date when this day starts." - example: '1' + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: integer - dayResponsibles: - description: 'The list of people who have a whole-day responsibility on this day.' - example: /days/1a2b3c4d/day_responsibles + type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference - readOnly: true type: string - end: - description: 'The end date and time of the day. This is a read-only convenience property.' - example: '2022-01-03T00:00:00+00:00' - format: date - readOnly: true - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true type: string - number: - description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' - example: '2' + data: + description: 'Holds the actual data of the content node.' + example: + text: 'dummy text' + items: + type: string + type: + - array + - 'null' + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 readOnly: true + type: string + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - period: - description: 'The time period that this day belongs to.' - example: /periods/1a2b3c4d + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference + readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string + required: + - children + - contentType + - position + type: object + ContentNode.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes: + deprecated: false + description: '' + properties: + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': + readOnly: true type: string - scheduleEntries: - description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." - example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' + '@type': + readOnly: true + type: string + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' items: example: 'https://example.com/' format: iri-reference type: string readOnly: true type: array - start: - description: 'The start date and time of the day. This is a read-only convenience property.' - example: '2022-01-02T00:00:00+00:00' - format: date + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations + readOnly: true + type: string + data: + description: 'Holds the actual data of the content node.' + example: + text: 'dummy text' + items: + type: string + type: + - array + - 'null' + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d + format: iri-reference readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - dayOffset - - dayResponsibles - - period + - children + - contentType + - position type: object - DayResponsible-read: + ContentType-read: deprecated: false - description: 'A person that has some whole-day responsibility on a day in the camp.' + description: |- + Defines a type of content that can be present in a content node tree. A content type + determines what data can be stored in content nodes of this type, as well as validation, + available slots and jsonConfig settings. properties: - campCollaboration: - description: "The person that is responsible. Must belong to the same camp as the day's period." - example: /camp_collaborations/1a2b3c4d - format: iri-reference - type: string - day: - description: 'The day on which the person is responsible.' - example: /days/1a2b3c4d + active: + default: true + description: 'Whether this content type is still maintained and recommended for use in new camps.' + example: 'true' + readOnly: true + type: boolean + contentNodes: + description: 'API endpoint link for creating new entities of type entityClass.' + example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' format: iri-reference - type: string + readOnly: true + type: array id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string + name: + description: |- + A name in UpperCamelCase of the content type. This value may be used as a technical + identifier of this content type, it is guaranteed to stay fixed. + example: SafetyConsiderations + maxLength: 32 + readOnly: true + type: string required: - - campCollaboration - - day + - active + - name type: object - DayResponsible-read_Day.DayResponsibles: + ContentType-read_Category.PreferredContentTypes_Category.ContentNodes: deprecated: false description: '' properties: - campCollaboration: - description: "The person that is responsible. Must belong to the same camp as the day's period." - example: /camp_collaborations/1a2b3c4d - format: iri-reference - type: string - day: - description: 'The day on which the person is responsible.' - example: /days/1a2b3c4d + active: + default: true + description: 'Whether this content type is still maintained and recommended for use in new camps.' + example: 'true' + readOnly: true + type: boolean + contentNodes: + description: 'API endpoint link for creating new entities of type entityClass.' + example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' format: iri-reference - type: string + readOnly: true + type: array id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string + name: + description: |- + A name in UpperCamelCase of the content type. This value may be used as a technical + identifier of this content type, it is guaranteed to stay fixed. + example: SafetyConsiderations + maxLength: 32 + readOnly: true + type: string required: - - campCollaboration - - day + - active + - name type: object - DayResponsible-write: + ContentType.jsonapi: deprecated: false - description: 'A person that has some whole-day responsibility on a day in the camp.' - properties: - campCollaboration: - description: "The person that is responsible. Must belong to the same camp as the day's period." - example: /camp_collaborations/1a2b3c4d - format: iri-reference - type: string - day: - description: 'The day on which the person is responsible.' - example: /days/1a2b3c4d - format: iri-reference - type: string - required: - - campCollaboration - - day - type: object - DayResponsible.jsonapi: - deprecated: false - description: 'A person that has some whole-day responsibility on a day in the camp.' + description: |- + Defines a type of content that can be present in a content node tree. A content type + determines what data can be stored in content nodes of this type, as well as validation, + available slots and jsonConfig settings. properties: data: properties: @@ -11620,18 +12128,52 @@ components: maxLength: 16 readOnly: true type: string + active: + default: true + description: 'Whether this content type is still maintained and recommended for use in new camps.' + example: 'true' + readOnly: true + type: boolean + contentNodes: + description: 'API endpoint link for creating new entities of type entityClass.' + example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' + format: iri-reference + readOnly: true + type: array + entityClass: + description: |- + The name of the internal PHP class that implements all custom behaviour of content nodes + of this type. + readOnly: true + type: string + jsonConfig: + description: |- + Internal configuration for the entityClass, in case the same entityClass is reused + for different content types. + items: { type: string } + readOnly: true + type: [array, 'null'] + name: + description: |- + A name in UpperCamelCase of the content type. This value may be used as a technical + identifier of this content type, it is guaranteed to stay fixed. + example: SafetyConsiderations + maxLength: 32 + readOnly: true + type: string + required: + - active + - entityClass + - name type: object id: type: string relationships: properties: - campCollaboration: - properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } - day: - properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + categories: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } required: - - campCollaboration - - day + - categories type: object type: type: string @@ -11646,15 +12188,16 @@ components: items: anyOf: - - $ref: '#/components/schemas/Day.jsonapi' - - - $ref: '#/components/schemas/Day.jsonapi' + $ref: '#/components/schemas/Category.jsonapi' readOnly: true type: array type: object - DayResponsible.jsonhal-read: + ContentType.jsonhal-read: deprecated: false - description: 'A person that has some whole-day responsibility on a day in the camp.' + description: |- + Defines a type of content that can be present in a content node tree. A content type + determines what data can be stored in content nodes of this type, as well as validation, + available slots and jsonConfig settings. properties: _links: properties: @@ -11665,27 +12208,37 @@ components: type: string type: object type: object - campCollaboration: - description: "The person that is responsible. Must belong to the same camp as the day's period." - example: /camp_collaborations/1a2b3c4d - format: iri-reference - type: string - day: - description: 'The day on which the person is responsible.' - example: /days/1a2b3c4d + active: + default: true + description: 'Whether this content type is still maintained and recommended for use in new camps.' + example: 'true' + readOnly: true + type: boolean + contentNodes: + description: 'API endpoint link for creating new entities of type entityClass.' + example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' format: iri-reference - type: string + readOnly: true + type: array id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string + name: + description: |- + A name in UpperCamelCase of the content type. This value may be used as a technical + identifier of this content type, it is guaranteed to stay fixed. + example: SafetyConsiderations + maxLength: 32 + readOnly: true + type: string required: - - campCollaboration - - day + - active + - name type: object - DayResponsible.jsonhal-read_Day.DayResponsibles: + ContentType.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes: deprecated: false description: '' properties: @@ -11698,56 +12251,42 @@ components: type: string type: object type: object - campCollaboration: - description: "The person that is responsible. Must belong to the same camp as the day's period." - example: /camp_collaborations/1a2b3c4d - format: iri-reference - type: string - day: - description: 'The day on which the person is responsible.' - example: /days/1a2b3c4d + active: + default: true + description: 'Whether this content type is still maintained and recommended for use in new camps.' + example: 'true' + readOnly: true + type: boolean + contentNodes: + description: 'API endpoint link for creating new entities of type entityClass.' + example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' format: iri-reference - type: string + readOnly: true + type: array id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - required: - - campCollaboration - - day - type: object - DayResponsible.jsonhal-write: - deprecated: false - description: 'A person that has some whole-day responsibility on a day in the camp.' - properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - campCollaboration: - description: "The person that is responsible. Must belong to the same camp as the day's period." - example: /camp_collaborations/1a2b3c4d - format: iri-reference - type: string - day: - description: 'The day on which the person is responsible.' - example: /days/1a2b3c4d - format: iri-reference + name: + description: |- + A name in UpperCamelCase of the content type. This value may be used as a technical + identifier of this content type, it is guaranteed to stay fixed. + example: SafetyConsiderations + maxLength: 32 + readOnly: true type: string required: - - campCollaboration - - day + - active + - name type: object - DayResponsible.jsonld-read: + ContentType.jsonld-read: deprecated: false - description: 'A person that has some whole-day responsibility on a day in the camp.' + description: |- + Defines a type of content that can be present in a content node tree. A content type + determines what data can be stored in content nodes of this type, as well as validation, + available slots and jsonConfig settings. properties: '@context': oneOf: @@ -11772,27 +12311,37 @@ components: '@type': readOnly: true type: string - campCollaboration: - description: "The person that is responsible. Must belong to the same camp as the day's period." - example: /camp_collaborations/1a2b3c4d - format: iri-reference - type: string - day: - description: 'The day on which the person is responsible.' - example: /days/1a2b3c4d + active: + default: true + description: 'Whether this content type is still maintained and recommended for use in new camps.' + example: 'true' + readOnly: true + type: boolean + contentNodes: + description: 'API endpoint link for creating new entities of type entityClass.' + example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' format: iri-reference - type: string + readOnly: true + type: array id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string + name: + description: |- + A name in UpperCamelCase of the content type. This value may be used as a technical + identifier of this content type, it is guaranteed to stay fixed. + example: SafetyConsiderations + maxLength: 32 + readOnly: true + type: string required: - - campCollaboration - - day + - active + - name type: object - DayResponsible.jsonld-read_Day.DayResponsibles: + ContentType.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes: deprecated: false description: '' properties: @@ -11819,132 +12368,292 @@ components: '@type': readOnly: true type: string - campCollaboration: - description: "The person that is responsible. Must belong to the same camp as the day's period." - example: /camp_collaborations/1a2b3c4d - format: iri-reference - type: string - day: - description: 'The day on which the person is responsible.' - example: /days/1a2b3c4d + active: + default: true + description: 'Whether this content type is still maintained and recommended for use in new camps.' + example: 'true' + readOnly: true + type: boolean + contentNodes: + description: 'API endpoint link for creating new entities of type entityClass.' + example: '/content_node/column_layouts?contentType=%2Fcontent_types%2F1a2b3c4d' format: iri-reference - type: string + readOnly: true + type: array id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string + name: + description: |- + A name in UpperCamelCase of the content type. This value may be used as a technical + identifier of this content type, it is guaranteed to stay fixed. + example: SafetyConsiderations + maxLength: 32 + readOnly: true + type: string required: - - campCollaboration - - day + - active + - name type: object - DayResponsible.jsonld-write: - deprecated: false - description: 'A person that has some whole-day responsibility on a day in the camp.' + Credentials: properties: - campCollaboration: - description: "The person that is responsible. Must belong to the same camp as the day's period." - example: /camp_collaborations/1a2b3c4d - format: iri-reference + identifier: + example: test@example.com type: string - day: - description: 'The day on which the person is responsible.' - example: /days/1a2b3c4d - format: iri-reference + password: + example: test type: string - required: - - campCollaboration - - day type: object - Invitation-read: + Day-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: deprecated: false - description: |- - An invitation for a person to collaborate in a camp. The person may or may not - already have an account. + description: '' properties: - campId: - description: |- - The id of the camp for which this invitation is valid. This is useful for - redirecting the user to the correct place after they accept. + dayOffset: + description: "The 0-based offset in days from the period's start date when this day starts." + example: '1' + readOnly: true + type: integer + dayResponsibles: + description: 'The list of people who have a whole-day responsibility on this day.' + example: /days/1a2b3c4d/day_responsibles + format: iri-reference + readOnly: true + type: string + end: + description: 'The end date and time of the day. This is a read-only convenience property.' + example: '2022-01-03T00:00:00+00:00' + format: date + readOnly: true + id: + description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d + maxLength: 16 + readOnly: true type: string - campTitle: - description: |- - The full title of the camp for which this invitation is valid. This should help - the user to decide whether to accept or reject the invitation. - example: 'Abteilungs-Sommerlager 2022' + number: + description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' + example: '2' + readOnly: true + type: integer + period: + description: 'The time period that this day belongs to.' + example: /periods/1a2b3c4d + format: iri-reference type: string - userAlreadyInCamp: - description: |- - Indicates whether the logged in user is already collaborating in the camp, and - can therefore not accept the invitation. - type: - - boolean - - 'null' - userDisplayName: - description: |- - The display name of the user that is invited. May be null in case the user does - not already have an account. - example: 'Robert Baden-Powell' - type: - - 'null' - - string + scheduleEntries: + description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." + example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + start: + description: 'The start date and time of the day. This is a read-only convenience property.' + example: '2022-01-02T00:00:00+00:00' + format: date + readOnly: true + required: + - dayOffset + - dayResponsibles + - period type: object - Invitation-write: + Day-read_Day.DayResponsibles: deprecated: false description: |- - An invitation for a person to collaborate in a camp. The person may or may not - already have an account. + A day in a time period of a camp. This is represented as a reference to the time period + along with a number of days offset from the period's starting date. This is to make it + easier to move the whole periods to different dates. Days are created automatically when + creating or updating periods, and are not writable through the API directly. + properties: + dayOffset: + description: "The 0-based offset in days from the period's start date when this day starts." + example: '1' + readOnly: true + type: integer + dayResponsibles: + items: + $ref: '#/components/schemas/DayResponsible-read_Day.DayResponsibles' + readOnly: true + type: unknown_type + end: + description: 'The end date and time of the day. This is a read-only convenience property.' + example: '2022-01-03T00:00:00+00:00' + format: date + readOnly: true + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + number: + description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' + example: '2' + readOnly: true + type: integer + period: + description: 'The time period that this day belongs to.' + example: /periods/1a2b3c4d + format: iri-reference + type: string + scheduleEntries: + description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." + example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + start: + description: 'The start date and time of the day. This is a read-only convenience property.' + example: '2022-01-02T00:00:00+00:00' + format: date + readOnly: true + required: + - dayOffset + - dayResponsibles + - period type: object - Invitation.jsonapi: + Day-read_Period.Camp_Period.Days: + deprecated: false + description: '' + properties: + dayOffset: + description: "The 0-based offset in days from the period's start date when this day starts." + example: '1' + readOnly: true + type: integer + dayResponsibles: + description: 'The list of people who have a whole-day responsibility on this day.' + example: /days/1a2b3c4d/day_responsibles + format: iri-reference + readOnly: true + type: string + end: + description: 'The end date and time of the day. This is a read-only convenience property.' + example: '2022-01-03T00:00:00+00:00' + format: date + readOnly: true + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + number: + description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' + example: '2' + readOnly: true + type: integer + period: + description: 'The time period that this day belongs to.' + example: /periods/1a2b3c4d + format: iri-reference + type: string + scheduleEntries: + description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." + example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + start: + description: 'The start date and time of the day. This is a read-only convenience property.' + example: '2022-01-02T00:00:00+00:00' + format: date + readOnly: true + required: + - dayOffset + - dayResponsibles + - period + type: object + Day.jsonapi: deprecated: false description: |- - An invitation for a person to collaborate in a camp. The person may or may not - already have an account. + A day in a time period of a camp. This is represented as a reference to the time period + along with a number of days offset from the period's starting date. This is to make it + easier to move the whole periods to different dates. Days are created automatically when + creating or updating periods, and are not writable through the API directly. properties: data: properties: attributes: properties: - campId: - description: |- - The id of the camp for which this invitation is valid. This is useful for - redirecting the user to the correct place after they accept. + _id: + description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d + maxLength: 16 + readOnly: true type: string - campTitle: - description: |- - The full title of the camp for which this invitation is valid. This should help - the user to decide whether to accept or reject the invitation. - example: 'Abteilungs-Sommerlager 2022' - type: string - userAlreadyInCamp: - description: |- - Indicates whether the logged in user is already collaborating in the camp, and - can therefore not accept the invitation. - type: [boolean, 'null'] - userDisplayName: - description: |- - The display name of the user that is invited. May be null in case the user does - not already have an account. - example: 'Robert Baden-Powell' - type: ['null', string] + dayOffset: + description: "The 0-based offset in days from the period's start date when this day starts." + example: '1' + readOnly: true + type: integer + end: + description: 'The end date and time of the day. This is a read-only convenience property.' + example: '2022-01-03T00:00:00+00:00' + format: date + readOnly: true + number: + description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' + example: '2' + readOnly: true + type: integer + start: + description: 'The start date and time of the day. This is a read-only convenience property.' + example: '2022-01-02T00:00:00+00:00' + format: date + readOnly: true + required: + - dayOffset type: object id: type: string + relationships: + properties: + dayResponsibles: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } + period: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + scheduleEntries: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } + required: + - dayResponsibles + - period + type: object type: type: string required: - id - type type: object - type: object - Invitation.jsonhal-read: + included: + description: 'Related resources requested via the "include" query parameter.' + externalDocs: + url: 'https://jsonapi.org/format/#fetching-includes' + items: + anyOf: + - + $ref: '#/components/schemas/DayResponsible.jsonapi' + - + $ref: '#/components/schemas/DayResponsible.jsonapi' + - + $ref: '#/components/schemas/DayResponsible.jsonapi' + readOnly: true + type: array + type: object + Day.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: deprecated: false - description: |- - An invitation for a person to collaborate in a camp. The person may or may not - already have an account. + description: '' properties: _links: properties: @@ -11955,39 +12664,191 @@ components: type: string type: object type: object - campId: - description: |- - The id of the camp for which this invitation is valid. This is useful for - redirecting the user to the correct place after they accept. + dayOffset: + description: "The 0-based offset in days from the period's start date when this day starts." + example: '1' + readOnly: true + type: integer + dayResponsibles: + description: 'The list of people who have a whole-day responsibility on this day.' + example: /days/1a2b3c4d/day_responsibles + format: iri-reference + readOnly: true + type: string + end: + description: 'The end date and time of the day. This is a read-only convenience property.' + example: '2022-01-03T00:00:00+00:00' + format: date + readOnly: true + id: + description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d + maxLength: 16 + readOnly: true type: string - campTitle: - description: |- - The full title of the camp for which this invitation is valid. This should help - the user to decide whether to accept or reject the invitation. - example: 'Abteilungs-Sommerlager 2022' + number: + description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' + example: '2' + readOnly: true + type: integer + period: + description: 'The time period that this day belongs to.' + example: /periods/1a2b3c4d + format: iri-reference type: string - userAlreadyInCamp: - description: |- - Indicates whether the logged in user is already collaborating in the camp, and - can therefore not accept the invitation. - type: - - boolean - - 'null' - userDisplayName: - description: |- - The display name of the user that is invited. May be null in case the user does - not already have an account. - example: 'Robert Baden-Powell' - type: - - 'null' - - string + scheduleEntries: + description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." + example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + start: + description: 'The start date and time of the day. This is a read-only convenience property.' + example: '2022-01-02T00:00:00+00:00' + format: date + readOnly: true + required: + - dayOffset + - dayResponsibles + - period type: object - Invitation.jsonld-read: + Day.jsonhal-read_Day.DayResponsibles: deprecated: false description: |- - An invitation for a person to collaborate in a camp. The person may or may not - already have an account. + A day in a time period of a camp. This is represented as a reference to the time period + along with a number of days offset from the period's starting date. This is to make it + easier to move the whole periods to different dates. Days are created automatically when + creating or updating periods, and are not writable through the API directly. + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + dayOffset: + description: "The 0-based offset in days from the period's start date when this day starts." + example: '1' + readOnly: true + type: integer + dayResponsibles: + items: + $ref: '#/components/schemas/DayResponsible.jsonhal-read_Day.DayResponsibles' + readOnly: true + type: unknown_type + end: + description: 'The end date and time of the day. This is a read-only convenience property.' + example: '2022-01-03T00:00:00+00:00' + format: date + readOnly: true + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + number: + description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' + example: '2' + readOnly: true + type: integer + period: + description: 'The time period that this day belongs to.' + example: /periods/1a2b3c4d + format: iri-reference + type: string + scheduleEntries: + description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." + example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + start: + description: 'The start date and time of the day. This is a read-only convenience property.' + example: '2022-01-02T00:00:00+00:00' + format: date + readOnly: true + required: + - dayOffset + - dayResponsibles + - period + type: object + Day.jsonhal-read_Period.Camp_Period.Days: + deprecated: false + description: '' + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + dayOffset: + description: "The 0-based offset in days from the period's start date when this day starts." + example: '1' + readOnly: true + type: integer + dayResponsibles: + description: 'The list of people who have a whole-day responsibility on this day.' + example: /days/1a2b3c4d/day_responsibles + format: iri-reference + readOnly: true + type: string + end: + description: 'The end date and time of the day. This is a read-only convenience property.' + example: '2022-01-03T00:00:00+00:00' + format: date + readOnly: true + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + number: + description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' + example: '2' + readOnly: true + type: integer + period: + description: 'The time period that this day belongs to.' + example: /periods/1a2b3c4d + format: iri-reference + type: string + scheduleEntries: + description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." + example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + start: + description: 'The start date and time of the day. This is a read-only convenience property.' + example: '2022-01-02T00:00:00+00:00' + format: date + readOnly: true + required: + - dayOffset + - dayResponsibles + - period + type: object + Day.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: + deprecated: false + description: '' properties: '@context': oneOf: @@ -12012,134 +12873,287 @@ components: '@type': readOnly: true type: string - campId: - description: |- - The id of the camp for which this invitation is valid. This is useful for - redirecting the user to the correct place after they accept. - example: 1a2b3c4d + dayOffset: + description: "The 0-based offset in days from the period's start date when this day starts." + example: '1' + readOnly: true + type: integer + dayResponsibles: + description: 'The list of people who have a whole-day responsibility on this day.' + example: /days/1a2b3c4d/day_responsibles + format: iri-reference + readOnly: true type: string - campTitle: - description: |- - The full title of the camp for which this invitation is valid. This should help - the user to decide whether to accept or reject the invitation. - example: 'Abteilungs-Sommerlager 2022' + end: + description: 'The end date and time of the day. This is a read-only convenience property.' + example: '2022-01-03T00:00:00+00:00' + format: date + readOnly: true + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true type: string - userAlreadyInCamp: - description: |- - Indicates whether the logged in user is already collaborating in the camp, and - can therefore not accept the invitation. - type: - - boolean - - 'null' - userDisplayName: - description: |- - The display name of the user that is invited. May be null in case the user does - not already have an account. - example: 'Robert Baden-Powell' - type: - - 'null' - - string + number: + description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' + example: '2' + readOnly: true + type: integer + period: + description: 'The time period that this day belongs to.' + example: /periods/1a2b3c4d + format: iri-reference + type: string + scheduleEntries: + description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." + example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + start: + description: 'The start date and time of the day. This is a read-only convenience property.' + example: '2022-01-02T00:00:00+00:00' + format: date + readOnly: true + required: + - dayOffset + - dayResponsibles + - period type: object - MaterialItem-read: + Day.jsonld-read_Day.DayResponsibles: deprecated: false - description: '' + description: |- + A day in a time period of a camp. This is represented as a reference to the time period + along with a number of days offset from the period's starting date. This is to make it + easier to move the whole periods to different dates. Days are created automatically when + creating or updating periods, and are not writable through the API directly. properties: - article: - description: 'The name of the item that is required.' - example: Volleyball - maxLength: 64 + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true type: string + dayOffset: + description: "The 0-based offset in days from the period's start date when this day starts." + example: '1' + readOnly: true + type: integer + dayResponsibles: + items: + $ref: '#/components/schemas/DayResponsible.jsonld-read_Day.DayResponsibles' + readOnly: true + type: unknown_type + end: + description: 'The end date and time of the day. This is a read-only convenience property.' + example: '2022-01-03T00:00:00+00:00' + format: date + readOnly: true id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - materialList: - description: |- - The list to which this item belongs. Lists are used to keep track of who is - responsible to prepare and bring the item to the camp. - example: /material_lists/1a2b3c4d - format: iri-reference - type: string - materialNode: - description: 'The content node to which this item belongs, if it does not belong to a period.' - example: /content_node/material_nodes/1a2b3c4d - format: iri-reference - type: - - 'null' - - string + number: + description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' + example: '2' + readOnly: true + type: integer period: - description: 'The period to which this item belongs, if it does not belong to a content node.' + description: 'The time period that this day belongs to.' example: /periods/1a2b3c4d format: iri-reference - type: - - 'null' - - string - quantity: - description: 'The number of items or the amount in the unit of items that are required.' - example: 1.5 - type: - - 'null' - - number - unit: - description: 'An optional unit for measuring the amount of items required.' - example: kg - maxLength: 32 - type: - - 'null' - - string + type: string + scheduleEntries: + description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." + example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + start: + description: 'The start date and time of the day. This is a read-only convenience property.' + example: '2022-01-02T00:00:00+00:00' + format: date + readOnly: true required: - - article - - materialList + - dayOffset + - dayResponsibles + - period type: object - MaterialItem-write: + Day.jsonld-read_Period.Camp_Period.Days: deprecated: false - description: 'A physical item that is needed for carrying out a programme or camp.' + description: '' properties: - article: - description: 'The name of the item that is required.' - example: Volleyball + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': + readOnly: true type: string - materialList: - description: |- - The list to which this item belongs. Lists are used to keep track of who is - responsible to prepare and bring the item to the camp. - example: /material_lists/1a2b3c4d - format: iri-reference + '@type': + readOnly: true type: string - materialNode: - description: 'The content node to which this item belongs, if it does not belong to a period.' - example: /content_node/material_nodes/1a2b3c4d + dayOffset: + description: "The 0-based offset in days from the period's start date when this day starts." + example: '1' + readOnly: true + type: integer + dayResponsibles: + description: 'The list of people who have a whole-day responsibility on this day.' + example: /days/1a2b3c4d/day_responsibles format: iri-reference - type: - - 'null' - - string + readOnly: true + type: string + end: + description: 'The end date and time of the day. This is a read-only convenience property.' + example: '2022-01-03T00:00:00+00:00' + format: date + readOnly: true + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + number: + description: 'The 1-based cardinal number of the day in the period. Not unique within the camp.' + example: '2' + readOnly: true + type: integer period: - description: 'The period to which this item belongs, if it does not belong to a content node.' + description: 'The time period that this day belongs to.' example: /periods/1a2b3c4d format: iri-reference - type: - - 'null' - - string - quantity: - description: 'The number of items or the amount in the unit of items that are required.' - example: 1.5 - type: - - 'null' - - number - unit: - description: 'An optional unit for measuring the amount of items required.' - example: kg - type: - - 'null' - - string + type: string + scheduleEntries: + description: "All scheduleEntries in this day's period which overlap with this day (using midnight as cutoff)." + example: '/schedule_entries?period=%2Fperiods%2F1a2b3c4d&start%5Bstrictly_before%5D=2022-01-03T00%3A00%3A00%2B00%3A00&end%5Bafter%5D=2022-01-02T00%3A00%3A00%2B00%3A00' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + start: + description: 'The start date and time of the day. This is a read-only convenience property.' + example: '2022-01-02T00:00:00+00:00' + format: date + readOnly: true + required: + - dayOffset + - dayResponsibles + - period type: object - MaterialItem.jsonapi: + DayResponsible-read: deprecated: false - description: 'A physical item that is needed for carrying out a programme or camp.' + description: 'A person that has some whole-day responsibility on a day in the camp.' properties: - data: + campCollaboration: + description: "The person that is responsible. Must belong to the same camp as the day's period." + example: /camp_collaborations/1a2b3c4d + format: iri-reference + type: string + day: + description: 'The day on which the person is responsible.' + example: /days/1a2b3c4d + format: iri-reference + type: string + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + required: + - campCollaboration + - day + type: object + DayResponsible-read_Day.DayResponsibles: + deprecated: false + description: '' + properties: + campCollaboration: + description: "The person that is responsible. Must belong to the same camp as the day's period." + example: /camp_collaborations/1a2b3c4d + format: iri-reference + type: string + day: + description: 'The day on which the person is responsible.' + example: /days/1a2b3c4d + format: iri-reference + type: string + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + required: + - campCollaboration + - day + type: object + DayResponsible-write: + deprecated: false + description: 'A person that has some whole-day responsibility on a day in the camp.' + properties: + campCollaboration: + description: "The person that is responsible. Must belong to the same camp as the day's period." + example: /camp_collaborations/1a2b3c4d + format: iri-reference + type: string + day: + description: 'The day on which the person is responsible.' + example: /days/1a2b3c4d + format: iri-reference + type: string + required: + - campCollaboration + - day + type: object + DayResponsible.jsonapi: + deprecated: false + description: 'A person that has some whole-day responsibility on a day in the camp.' + properties: + data: properties: attributes: properties: @@ -12149,35 +13163,18 @@ components: maxLength: 16 readOnly: true type: string - article: - description: 'The name of the item that is required.' - example: Volleyball - maxLength: 64 - type: string - quantity: - description: 'The number of items or the amount in the unit of items that are required.' - example: 1.5 - type: ['null', number] - unit: - description: 'An optional unit for measuring the amount of items required.' - example: kg - maxLength: 32 - type: ['null', string] - required: - - article type: object id: type: string relationships: properties: - materialList: - properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } - materialNode: + campCollaboration: properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } - period: + day: properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } required: - - materialList + - campCollaboration + - day type: object type: type: string @@ -12192,17 +13189,15 @@ components: items: anyOf: - - $ref: '#/components/schemas/MaterialList.jsonapi' - - - $ref: '#/components/schemas/MaterialList.jsonapi' + $ref: '#/components/schemas/Day.jsonapi' - - $ref: '#/components/schemas/MaterialList.jsonapi' + $ref: '#/components/schemas/Day.jsonapi' readOnly: true type: array type: object - MaterialItem.jsonhal-read: + DayResponsible.jsonhal-read: deprecated: false - description: '' + description: 'A person that has some whole-day responsibility on a day in the camp.' properties: _links: properties: @@ -12213,10 +13208,15 @@ components: type: string type: object type: object - article: - description: 'The name of the item that is required.' - example: Volleyball - maxLength: 64 + campCollaboration: + description: "The person that is responsible. Must belong to the same camp as the day's period." + example: /camp_collaborations/1a2b3c4d + format: iri-reference + type: string + day: + description: 'The day on which the person is responsible.' + example: /days/1a2b3c4d + format: iri-reference type: string id: description: 'An internal, unique, randomly generated identifier of this entity.' @@ -12224,47 +13224,46 @@ components: maxLength: 16 readOnly: true type: string - materialList: - description: |- - The list to which this item belongs. Lists are used to keep track of who is - responsible to prepare and bring the item to the camp. - example: /material_lists/1a2b3c4d + required: + - campCollaboration + - day + type: object + DayResponsible.jsonhal-read_Day.DayResponsibles: + deprecated: false + description: '' + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + campCollaboration: + description: "The person that is responsible. Must belong to the same camp as the day's period." + example: /camp_collaborations/1a2b3c4d format: iri-reference type: string - materialNode: - description: 'The content node to which this item belongs, if it does not belong to a period.' - example: /content_node/material_nodes/1a2b3c4d - format: iri-reference - type: - - 'null' - - string - period: - description: 'The period to which this item belongs, if it does not belong to a content node.' - example: /periods/1a2b3c4d + day: + description: 'The day on which the person is responsible.' + example: /days/1a2b3c4d format: iri-reference - type: - - 'null' - - string - quantity: - description: 'The number of items or the amount in the unit of items that are required.' - example: 1.5 - type: - - 'null' - - number - unit: - description: 'An optional unit for measuring the amount of items required.' - example: kg - maxLength: 32 - type: - - 'null' - - string + type: string + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string required: - - article - - materialList + - campCollaboration + - day type: object - MaterialItem.jsonhal-write: + DayResponsible.jsonhal-write: deprecated: false - description: 'A physical item that is needed for carrying out a programme or camp.' + description: 'A person that has some whole-day responsibility on a day in the camp.' properties: _links: properties: @@ -12275,52 +13274,23 @@ components: type: string type: object type: object - article: - description: 'The name of the item that is required.' - example: Volleyball - maxLength: 64 - type: string - materialList: - description: |- - The list to which this item belongs. Lists are used to keep track of who is - responsible to prepare and bring the item to the camp. - example: /material_lists/1a2b3c4d + campCollaboration: + description: "The person that is responsible. Must belong to the same camp as the day's period." + example: /camp_collaborations/1a2b3c4d format: iri-reference type: string - materialNode: - description: 'The content node to which this item belongs, if it does not belong to a period.' - example: /content_node/material_nodes/1a2b3c4d - format: iri-reference - type: - - 'null' - - string - period: - description: 'The period to which this item belongs, if it does not belong to a content node.' - example: /periods/1a2b3c4d + day: + description: 'The day on which the person is responsible.' + example: /days/1a2b3c4d format: iri-reference - type: - - 'null' - - string - quantity: - description: 'The number of items or the amount in the unit of items that are required.' - example: 1.5 - type: - - 'null' - - number - unit: - description: 'An optional unit for measuring the amount of items required.' - example: kg - maxLength: 32 - type: - - 'null' - - string + type: string required: - - article - - materialList + - campCollaboration + - day type: object - MaterialItem.jsonld-read: + DayResponsible.jsonld-read: deprecated: false - description: '' + description: 'A person that has some whole-day responsibility on a day in the camp.' properties: '@context': oneOf: @@ -12345,10 +13315,15 @@ components: '@type': readOnly: true type: string - article: - description: 'The name of the item that is required.' - example: Volleyball - maxLength: 64 + campCollaboration: + description: "The person that is responsible. Must belong to the same camp as the day's period." + example: /camp_collaborations/1a2b3c4d + format: iri-reference + type: string + day: + description: 'The day on which the person is responsible.' + example: /days/1a2b3c4d + format: iri-reference type: string id: description: 'An internal, unique, randomly generated identifier of this entity.' @@ -12356,247 +13331,163 @@ components: maxLength: 16 readOnly: true type: string - materialList: - description: |- - The list to which this item belongs. Lists are used to keep track of who is - responsible to prepare and bring the item to the camp. - example: /material_lists/1a2b3c4d - format: iri-reference - type: string - materialNode: - description: 'The content node to which this item belongs, if it does not belong to a period.' - example: /content_node/material_nodes/1a2b3c4d - format: iri-reference - type: - - 'null' - - string - period: - description: 'The period to which this item belongs, if it does not belong to a content node.' - example: /periods/1a2b3c4d - format: iri-reference - type: - - 'null' - - string - quantity: - description: 'The number of items or the amount in the unit of items that are required.' - example: 1.5 - type: - - 'null' - - number - unit: - description: 'An optional unit for measuring the amount of items required.' - example: kg - maxLength: 32 - type: - - 'null' - - string required: - - article - - materialList + - campCollaboration + - day type: object - MaterialItem.jsonld-write: + DayResponsible.jsonld-read_Day.DayResponsibles: deprecated: false - description: 'A physical item that is needed for carrying out a programme or camp.' + description: '' properties: - article: - description: 'The name of the item that is required.' - example: Volleyball - maxLength: 64 - type: string - materialList: - description: |- - The list to which this item belongs. Lists are used to keep track of who is - responsible to prepare and bring the item to the camp. - example: /material_lists/1a2b3c4d - format: iri-reference + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': + readOnly: true type: string - materialNode: - description: 'The content node to which this item belongs, if it does not belong to a period.' - example: /content_node/material_nodes/1a2b3c4d - format: iri-reference - type: - - 'null' - - string - period: - description: 'The period to which this item belongs, if it does not belong to a content node.' - example: /periods/1a2b3c4d - format: iri-reference - type: - - 'null' - - string - quantity: - description: 'The number of items or the amount in the unit of items that are required.' - example: 1.5 - type: - - 'null' - - number - unit: - description: 'An optional unit for measuring the amount of items required.' - example: kg - maxLength: 32 - type: - - 'null' - - string - required: - - article - - materialList - type: object - MaterialList-read: - deprecated: false - description: |- - A list of material items that someone needs to bring to the camp. A material list - is automatically created for each person collaborating on the camp. - properties: - camp: - description: 'The camp this material list belongs to.' - example: /camps/1a2b3c4d - format: iri-reference + '@type': + readOnly: true type: string campCollaboration: - description: 'The campCollaboration this material list belongs to.' + description: "The person that is responsible. Must belong to the same camp as the day's period." example: /camp_collaborations/1a2b3c4d format: iri-reference - readOnly: true - type: - - 'null' - - string + type: string + day: + description: 'The day on which the person is responsible.' + example: /days/1a2b3c4d + format: iri-reference + type: string id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - itemCount: - example: 3 - readOnly: true - type: integer - materialItems: - description: 'The items that are part of this list.' - example: '["/material_items/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - name: - description: 'The human readable name of the material list.' - example: Lebensmittel - maxLength: 32 - type: - - 'null' - - string required: - - camp - - materialItems - - name + - campCollaboration + - day type: object - MaterialList-write: + DayResponsible.jsonld-write: deprecated: false - description: |- - A list of material items that someone needs to bring to the camp. A material list - is automatically created for each person collaborating on the camp. + description: 'A person that has some whole-day responsibility on a day in the camp.' properties: - name: - description: 'The human readable name of the material list.' - example: Lebensmittel - maxLength: 32 - type: - - 'null' - - string + campCollaboration: + description: "The person that is responsible. Must belong to the same camp as the day's period." + example: /camp_collaborations/1a2b3c4d + format: iri-reference + type: string + day: + description: 'The day on which the person is responsible.' + example: /days/1a2b3c4d + format: iri-reference + type: string required: - - name + - campCollaboration + - day type: object - MaterialList-write_create: + Invitation-read: deprecated: false description: |- - A list of material items that someone needs to bring to the camp. A material list - is automatically created for each person collaborating on the camp. + An invitation for a person to collaborate in a camp. The person may or may not + already have an account. properties: - camp: - description: 'The camp this material list belongs to.' - example: /camps/1a2b3c4d - format: iri-reference + campId: + description: |- + The id of the camp for which this invitation is valid. This is useful for + redirecting the user to the correct place after they accept. + example: 1a2b3c4d type: string - name: - description: 'The human readable name of the material list.' - example: Lebensmittel - maxLength: 32 + campTitle: + description: |- + The full title of the camp for which this invitation is valid. This should help + the user to decide whether to accept or reject the invitation. + example: 'Abteilungs-Sommerlager 2022' + type: string + userAlreadyInCamp: + description: |- + Indicates whether the logged in user is already collaborating in the camp, and + can therefore not accept the invitation. + type: + - boolean + - 'null' + userDisplayName: + description: |- + The display name of the user that is invited. May be null in case the user does + not already have an account. + example: 'Robert Baden-Powell' type: - 'null' - string - required: - - camp - - name type: object - MaterialList.jsonapi: + Invitation-write: deprecated: false description: |- - A list of material items that someone needs to bring to the camp. A material list - is automatically created for each person collaborating on the camp. + An invitation for a person to collaborate in a camp. The person may or may not + already have an account. + type: object + Invitation.jsonapi: + deprecated: false + description: |- + An invitation for a person to collaborate in a camp. The person may or may not + already have an account. properties: data: properties: attributes: properties: - _id: - description: 'An internal, unique, randomly generated identifier of this entity.' + campId: + description: |- + The id of the camp for which this invitation is valid. This is useful for + redirecting the user to the correct place after they accept. example: 1a2b3c4d - maxLength: 16 - readOnly: true type: string - itemCount: - example: 3 - readOnly: true - type: integer - name: - description: 'The human readable name of the material list.' - example: Lebensmittel - maxLength: 32 + campTitle: + description: |- + The full title of the camp for which this invitation is valid. This should help + the user to decide whether to accept or reject the invitation. + example: 'Abteilungs-Sommerlager 2022' + type: string + userAlreadyInCamp: + description: |- + Indicates whether the logged in user is already collaborating in the camp, and + can therefore not accept the invitation. + type: [boolean, 'null'] + userDisplayName: + description: |- + The display name of the user that is invited. May be null in case the user does + not already have an account. + example: 'Robert Baden-Powell' type: ['null', string] - required: - - name type: object id: type: string - relationships: - properties: - camp: - properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } - campCollaboration: - properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } - materialItems: - properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } - required: - - camp - - materialItems - type: object type: type: string required: - id - type type: object - included: - description: 'Related resources requested via the "include" query parameter.' - externalDocs: - url: 'https://jsonapi.org/format/#fetching-includes' - items: - anyOf: - - - $ref: '#/components/schemas/MaterialList.jsonapi' - - - $ref: '#/components/schemas/MaterialList.jsonapi' - - - $ref: '#/components/schemas/MaterialList.jsonapi' - readOnly: true - type: array type: object - MaterialList.jsonhal-read: + Invitation.jsonhal-read: deprecated: false description: |- - A list of material items that someone needs to bring to the camp. A material list - is automatically created for each person collaborating on the camp. + An invitation for a person to collaborate in a camp. The person may or may not + already have an account. properties: _links: properties: @@ -12607,86 +13498,39 @@ components: type: string type: object type: object - camp: - description: 'The camp this material list belongs to.' - example: /camps/1a2b3c4d - format: iri-reference - type: string - campCollaboration: - description: 'The campCollaboration this material list belongs to.' - example: /camp_collaborations/1a2b3c4d - format: iri-reference - readOnly: true - type: - - 'null' - - string - id: - description: 'An internal, unique, randomly generated identifier of this entity.' + campId: + description: |- + The id of the camp for which this invitation is valid. This is useful for + redirecting the user to the correct place after they accept. example: 1a2b3c4d - maxLength: 16 - readOnly: true type: string - itemCount: - example: 3 - readOnly: true - type: integer - materialItems: - description: 'The items that are part of this list.' - example: '["/material_items/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - name: - description: 'The human readable name of the material list.' - example: Lebensmittel - maxLength: 32 + campTitle: + description: |- + The full title of the camp for which this invitation is valid. This should help + the user to decide whether to accept or reject the invitation. + example: 'Abteilungs-Sommerlager 2022' + type: string + userAlreadyInCamp: + description: |- + Indicates whether the logged in user is already collaborating in the camp, and + can therefore not accept the invitation. type: + - boolean - 'null' - - string - required: - - camp - - materialItems - - name - type: object - MaterialList.jsonhal-write_create: - deprecated: false - description: |- - A list of material items that someone needs to bring to the camp. A material list - is automatically created for each person collaborating on the camp. - properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - camp: - description: 'The camp this material list belongs to.' - example: /camps/1a2b3c4d - format: iri-reference - type: string - name: - description: 'The human readable name of the material list.' - example: Lebensmittel - maxLength: 32 + userDisplayName: + description: |- + The display name of the user that is invited. May be null in case the user does + not already have an account. + example: 'Robert Baden-Powell' type: - 'null' - string - required: - - camp - - name type: object - MaterialList.jsonld-read: + Invitation.jsonld-read: deprecated: false description: |- - A list of material items that someone needs to bring to the camp. A material list - is automatically created for each person collaborating on the camp. + An invitation for a person to collaborate in a camp. The person may or may not + already have an account. properties: '@context': oneOf: @@ -12711,486 +13555,597 @@ components: '@type': readOnly: true type: string - camp: - description: 'The camp this material list belongs to.' - example: /camps/1a2b3c4d - format: iri-reference + campId: + description: |- + The id of the camp for which this invitation is valid. This is useful for + redirecting the user to the correct place after they accept. + example: 1a2b3c4d type: string - campCollaboration: - description: 'The campCollaboration this material list belongs to.' - example: /camp_collaborations/1a2b3c4d - format: iri-reference - readOnly: true + campTitle: + description: |- + The full title of the camp for which this invitation is valid. This should help + the user to decide whether to accept or reject the invitation. + example: 'Abteilungs-Sommerlager 2022' + type: string + userAlreadyInCamp: + description: |- + Indicates whether the logged in user is already collaborating in the camp, and + can therefore not accept the invitation. + type: + - boolean + - 'null' + userDisplayName: + description: |- + The display name of the user that is invited. May be null in case the user does + not already have an account. + example: 'Robert Baden-Powell' type: - 'null' - string + type: object + MaterialItem-read: + deprecated: false + description: '' + properties: + article: + description: 'The name of the item that is required.' + example: Volleyball + maxLength: 64 + type: string id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - itemCount: - example: 3 - readOnly: true - type: integer - materialItems: - description: 'The items that are part of this list.' - example: '["/material_items/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - name: - description: 'The human readable name of the material list.' - example: Lebensmittel - maxLength: 32 + materialList: + description: |- + The list to which this item belongs. Lists are used to keep track of who is + responsible to prepare and bring the item to the camp. + example: /material_lists/1a2b3c4d + format: iri-reference + type: string + materialNode: + description: 'The content node to which this item belongs, if it does not belong to a period.' + example: /content_node/material_nodes/1a2b3c4d + format: iri-reference type: - 'null' - string - required: - - camp - - materialItems - - name - type: object - MaterialList.jsonld-write_create: - deprecated: false - description: |- - A list of material items that someone needs to bring to the camp. A material list - is automatically created for each person collaborating on the camp. - properties: - camp: - description: 'The camp this material list belongs to.' - example: /camps/1a2b3c4d + period: + description: 'The period to which this item belongs, if it does not belong to a content node.' + example: /periods/1a2b3c4d format: iri-reference - type: string - name: - description: 'The human readable name of the material list.' - example: Lebensmittel + type: + - 'null' + - string + quantity: + description: 'The number of items or the amount in the unit of items that are required.' + example: 1.5 + exclusiveMinimum: 0 + type: + - 'null' + - number + unit: + description: 'An optional unit for measuring the amount of items required.' + example: kg maxLength: 32 type: - 'null' - string required: - - camp - - name + - article + - materialList type: object - MaterialNode-read: + MaterialItem-write: deprecated: false - description: '' + description: 'A physical item that is needed for carrying out a programme or camp.' properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference + article: + description: 'The name of the item that is required.' + example: Volleyball type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept - readOnly: true - type: string - data: + materialList: description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - items: - type: string + The list to which this item belongs. Lists are used to keep track of who is + responsible to prepare and bring the item to the camp. + example: /material_lists/1a2b3c4d + format: iri-reference + type: string + materialNode: + description: 'The content node to which this item belongs, if it does not belong to a period.' + example: /content_node/material_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + period: + description: 'The period to which this item belongs, if it does not belong to a content node.' + example: /periods/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + quantity: + description: 'The number of items or the amount in the unit of items that are required.' + example: 1.5 type: - - array - 'null' + - number + unit: + description: 'An optional unit for measuring the amount of items required.' + example: kg + type: + - 'null' + - string + type: object + MaterialItem.jsonapi: + deprecated: false + description: 'A physical item that is needed for carrying out a programme or camp.' + properties: + data: + properties: + attributes: + properties: + _id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + article: + description: 'The name of the item that is required.' + example: Volleyball + maxLength: 64 + type: string + quantity: + description: 'The number of items or the amount in the unit of items that are required.' + example: 1.5 + exclusiveMinimum: 0 + type: ['null', number] + unit: + description: 'An optional unit for measuring the amount of items required.' + example: kg + maxLength: 32 + type: ['null', string] + required: + - article + type: object + id: + type: string + relationships: + properties: + materialList: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + materialNode: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + period: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + required: + - materialList + type: object + type: + type: string + required: + - id + - type + type: object + included: + description: 'Related resources requested via the "include" query parameter.' + externalDocs: + url: 'https://jsonapi.org/format/#fetching-includes' + items: + anyOf: + - + $ref: '#/components/schemas/MaterialList.jsonapi' + - + $ref: '#/components/schemas/MaterialList.jsonapi' + - + $ref: '#/components/schemas/MaterialList.jsonapi' + readOnly: true + type: array + type: object + MaterialItem.jsonhal-read: + deprecated: false + description: '' + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + article: + description: 'The name of the item that is required.' + example: Volleyball + maxLength: 64 + type: string id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - instanceName: + materialList: description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 + The list to which this item belongs. Lists are used to keep track of who is + responsible to prepare and bring the item to the camp. + example: /material_lists/1a2b3c4d + format: iri-reference + type: string + materialNode: + description: 'The content node to which this item belongs, if it does not belong to a period.' + example: /content_node/material_nodes/1a2b3c4d + format: iri-reference type: - 'null' - string - materialItems: - items: - $ref: '#/components/schemas/MaterialItem-read' - type: array - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + period: + description: 'The period to which this item belongs, if it does not belong to a content node.' + example: /periods/1a2b3c4d format: iri-reference type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference - readOnly: true + quantity: + description: 'The number of items or the amount in the unit of items that are required.' + example: 1.5 + exclusiveMinimum: 0 type: - 'null' - - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' + - number + unit: + description: 'An optional unit for measuring the amount of items required.' + example: kg maxLength: 32 type: - 'null' - string required: - - children - - contentType - - materialItems - - position + - article + - materialList type: object - MaterialNode-write_create: + MaterialItem.jsonhal-write: deprecated: false - description: '' + description: 'A physical item that is needed for carrying out a programme or camp.' properties: - contentType: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + article: + description: 'The name of the item that is required.' + example: Volleyball + maxLength: 64 + type: string + materialList: description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d + The list to which this item belongs. Lists are used to keep track of who is + responsible to prepare and bring the item to the camp. + example: /material_lists/1a2b3c4d format: iri-reference type: string - data: - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - items: - type: string - type: - - array - - 'null' - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 + materialNode: + description: 'The content node to which this item belongs, if it does not belong to a period.' + example: /content_node/material_nodes/1a2b3c4d + format: iri-reference type: - 'null' - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + period: + description: 'The period to which this item belongs, if it does not belong to a content node.' + example: /periods/1a2b3c4d format: iri-reference type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 + quantity: + description: 'The number of items or the amount in the unit of items that are required.' + example: 1.5 + exclusiveMinimum: 0 type: - 'null' - - string - required: - - contentType - - parent - - position - type: object - MaterialNode-write_update: - deprecated: false - description: '' - properties: - data: - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - items: - type: string - type: - - array - - 'null' - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d - format: iri-reference - type: - - 'null' - - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' + - number + unit: + description: 'An optional unit for measuring the amount of items required.' + example: kg maxLength: 32 type: - 'null' - string required: - - position + - article + - materialList type: object - MaterialNode.jsonapi: + MaterialItem.jsonld-read: deprecated: false description: '' properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference + '@id': readOnly: true type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + '@type': readOnly: true type: string - data: - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - items: - type: string - type: - - array - - 'null' + article: + description: 'The name of the item that is required.' + example: Volleyball + maxLength: 64 + type: string id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - instanceName: + materialList: description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm + The list to which this item belongs. Lists are used to keep track of who is + responsible to prepare and bring the item to the camp. + example: /material_lists/1a2b3c4d + format: iri-reference + type: string + materialNode: + description: 'The content node to which this item belongs, if it does not belong to a period.' + example: /content_node/material_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + period: + description: 'The period to which this item belongs, if it does not belong to a content node.' + example: /periods/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + quantity: + description: 'The number of items or the amount in the unit of items that are required.' + example: 1.5 + exclusiveMinimum: 0 + type: + - 'null' + - number + unit: + description: 'An optional unit for measuring the amount of items required.' + example: kg maxLength: 32 type: - 'null' - string - materialItems: - items: - $ref: '#/components/schemas/MaterialItem.jsonapi' - readOnly: true - type: array - parent: + required: + - article + - materialList + type: object + MaterialItem.jsonld-write: + deprecated: false + description: 'A physical item that is needed for carrying out a programme or camp.' + properties: + article: + description: 'The name of the item that is required.' + example: Volleyball + maxLength: 64 + type: string + materialList: description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + The list to which this item belongs. Lists are used to keep track of who is + responsible to prepare and bring the item to the camp. + example: /material_lists/1a2b3c4d + format: iri-reference + type: string + materialNode: + description: 'The content node to which this item belongs, if it does not belong to a period.' + example: /content_node/material_nodes/1a2b3c4d format: iri-reference type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d + period: + description: 'The period to which this item belongs, if it does not belong to a content node.' + example: /periods/1a2b3c4d format: iri-reference - readOnly: true type: - 'null' - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' + quantity: + description: 'The number of items or the amount in the unit of items that are required.' + example: 1.5 + exclusiveMinimum: 0 + type: + - 'null' + - number + unit: + description: 'An optional unit for measuring the amount of items required.' + example: kg maxLength: 32 type: - 'null' - string required: - - children - - contentType - - materialItems - - position + - article + - materialList type: object - MaterialNode.jsonhal-read: + MaterialList-read: deprecated: false - description: '' + description: |- + A list of material items that someone needs to bring to the camp. A material list + is automatically created for each person collaborating on the camp. properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d + camp: + description: 'The camp this material list belongs to.' + example: /camps/1a2b3c4d format: iri-reference type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + campCollaboration: + description: 'The campCollaboration this material list belongs to.' + example: /camp_collaborations/1a2b3c4d + format: iri-reference readOnly: true - type: string - data: - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - items: - type: string type: - - array - 'null' + - string id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string + itemCount: + example: 3 + readOnly: true + type: integer materialItems: + description: 'The items that are part of this list.' + example: '["/material_items/1a2b3c4d"]' items: - $ref: '#/components/schemas/MaterialItem.jsonhal-read' + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true type: array - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d - format: iri-reference + name: + description: 'The human readable name of the material list.' + example: Lebensmittel + maxLength: 32 type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference - readOnly: true + required: + - camp + - materialItems + - name + type: object + MaterialList-write: + deprecated: false + description: |- + A list of material items that someone needs to bring to the camp. A material list + is automatically created for each person collaborating on the camp. + properties: + name: + description: 'The human readable name of the material list.' + example: Lebensmittel + maxLength: 32 type: - 'null' - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' + required: + - name + type: object + MaterialList-write_create: + deprecated: false + description: |- + A list of material items that someone needs to bring to the camp. A material list + is automatically created for each person collaborating on the camp. + properties: + camp: + description: 'The camp this material list belongs to.' + example: /camps/1a2b3c4d + format: iri-reference + type: string + name: + description: 'The human readable name of the material list.' + example: Lebensmittel maxLength: 32 type: - 'null' - string required: - - children - - contentType - - materialItems - - position + - camp + - name type: object - MaterialNode.jsonhal-write_create: + MaterialList.jsonapi: deprecated: false - description: '' + description: |- + A list of material items that someone needs to bring to the camp. A material list + is automatically created for each person collaborating on the camp. + properties: + data: + properties: + attributes: + properties: + _id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + itemCount: + example: 3 + readOnly: true + type: integer + name: + description: 'The human readable name of the material list.' + example: Lebensmittel + maxLength: 32 + type: ['null', string] + required: + - name + type: object + id: + type: string + relationships: + properties: + camp: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + campCollaboration: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + materialItems: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } + required: + - camp + - materialItems + type: object + type: + type: string + required: + - id + - type + type: object + included: + description: 'Related resources requested via the "include" query parameter.' + externalDocs: + url: 'https://jsonapi.org/format/#fetching-includes' + items: + anyOf: + - + $ref: '#/components/schemas/MaterialList.jsonapi' + - + $ref: '#/components/schemas/MaterialList.jsonapi' + - + $ref: '#/components/schemas/MaterialList.jsonapi' + readOnly: true + type: array + type: object + MaterialList.jsonhal-read: + deprecated: false + description: |- + A list of material items that someone needs to bring to the camp. A material list + is automatically created for each person collaborating on the camp. properties: _links: properties: @@ -13201,83 +14156,103 @@ components: type: string type: object type: object - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d + camp: + description: 'The camp this material list belongs to.' + example: /camps/1a2b3c4d format: iri-reference type: string - data: - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - items: - type: string - type: - - array - - 'null' - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + campCollaboration: + description: 'The campCollaboration this material list belongs to.' + example: /camp_collaborations/1a2b3c4d format: iri-reference + readOnly: true type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + itemCount: + example: 3 + readOnly: true type: integer - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' + materialItems: + description: 'The items that are part of this list.' + example: '["/material_items/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + name: + description: 'The human readable name of the material list.' + example: Lebensmittel maxLength: 32 type: - 'null' - string required: - - contentType - - parent - - position + - camp + - materialItems + - name type: object - MaterialNode.jsonld-read: + MaterialList.jsonhal-write_create: deprecated: false - description: '' + description: |- + A list of material items that someone needs to bring to the camp. A material list + is automatically created for each person collaborating on the camp. properties: - '@context': - oneOf: - - - additionalProperties: true + _links: + properties: + self: properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] + href: + format: iri-reference type: string - required: - - '@vocab' - - hydra type: object - - - type: string + type: object + camp: + description: 'The camp this material list belongs to.' + example: /camps/1a2b3c4d + format: iri-reference + type: string + name: + description: 'The human readable name of the material list.' + example: Lebensmittel + maxLength: 32 + type: + - 'null' + - string + required: + - camp + - name + type: object + MaterialList.jsonld-read: + deprecated: false + description: |- + A list of material items that someone needs to bring to the camp. A material list + is automatically created for each person collaborating on the camp. + properties: + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string readOnly: true '@id': readOnly: true @@ -13285,160 +14260,73 @@ components: '@type': readOnly: true type: string - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d + camp: + description: 'The camp this material list belongs to.' + example: /camps/1a2b3c4d format: iri-reference type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + campCollaboration: + description: 'The campCollaboration this material list belongs to.' + example: /camp_collaborations/1a2b3c4d + format: iri-reference readOnly: true - type: string - data: - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - items: - type: string type: - - array - 'null' + - string id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string + itemCount: + example: 3 + readOnly: true + type: integer materialItems: + description: 'The items that are part of this list.' + example: '["/material_items/1a2b3c4d"]' items: - $ref: '#/components/schemas/MaterialItem.jsonld-read' - type: array - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d - format: iri-reference - type: - - 'null' - - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: - - 'null' - - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' + type: array + name: + description: 'The human readable name of the material list.' + example: Lebensmittel maxLength: 32 type: - 'null' - string required: - - children - - contentType + - camp - materialItems - - position + - name type: object - MaterialNode.jsonld-write_create: + MaterialList.jsonld-write_create: deprecated: false - description: '' + description: |- + A list of material items that someone needs to bring to the camp. A material list + is automatically created for each person collaborating on the camp. properties: - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d + camp: + description: 'The camp this material list belongs to.' + example: /camps/1a2b3c4d format: iri-reference type: string - data: - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - items: - type: string - type: - - array - - 'null' - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d - format: iri-reference - type: - - 'null' - - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' + name: + description: 'The human readable name of the material list.' + example: Lebensmittel maxLength: 32 type: - 'null' - string required: - - contentType - - parent - - position + - camp + - name type: object - MultiSelect-read: + MaterialNode-read: deprecated: false description: '' properties: @@ -13461,19 +14349,13 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). - example: - options: - natureAndEnvironment: - checked: true - outdoorTechnique: - checked: false items: type: string type: @@ -13494,6 +14376,10 @@ components: type: - 'null' - string + materialItems: + items: + $ref: '#/components/schemas/MaterialItem-read' + type: array parent: description: |- The parent to which this content node belongs. Is null in case this content node is the @@ -13533,9 +14419,10 @@ components: required: - children - contentType + - materialItems - position type: object - MultiSelect-write_create: + MaterialNode-write_create: deprecated: false description: '' properties: @@ -13551,12 +14438,6 @@ components: description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). - example: - options: - natureAndEnvironment: - checked: true - outdoorTechnique: - checked: false items: type: string type: @@ -13602,7 +14483,7 @@ components: - parent - position type: object - MultiSelect-write_update: + MaterialNode-write_update: deprecated: false description: '' properties: @@ -13610,12 +14491,6 @@ components: description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). - example: - options: - natureAndEnvironment: - checked: true - outdoorTechnique: - checked: false items: type: string type: @@ -13657,10 +14532,9 @@ components: - 'null' - string required: - - data - position type: object - MultiSelect.jsonapi: + MaterialNode.jsonapi: deprecated: false description: '' properties: @@ -13684,19 +14558,13 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). - example: - options: - natureAndEnvironment: - checked: true - outdoorTechnique: - checked: false items: type: string type: @@ -13717,6 +14585,11 @@ components: type: - 'null' - string + materialItems: + items: + $ref: '#/components/schemas/MaterialItem.jsonapi' + readOnly: true + type: array parent: description: |- The parent to which this content node belongs. Is null in case this content node is the @@ -13756,9 +14629,10 @@ components: required: - children - contentType + - materialItems - position type: object - MultiSelect.jsonhal-read: + MaterialNode.jsonhal-read: deprecated: false description: '' properties: @@ -13790,19 +14664,13 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). - example: - options: - natureAndEnvironment: - checked: true - outdoorTechnique: - checked: false items: type: string type: @@ -13823,6 +14691,10 @@ components: type: - 'null' - string + materialItems: + items: + $ref: '#/components/schemas/MaterialItem.jsonhal-read' + type: array parent: description: |- The parent to which this content node belongs. Is null in case this content node is the @@ -13862,9 +14734,10 @@ components: required: - children - contentType + - materialItems - position type: object - MultiSelect.jsonhal-write_create: + MaterialNode.jsonhal-write_create: deprecated: false description: '' properties: @@ -13889,12 +14762,6 @@ components: description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). - example: - options: - natureAndEnvironment: - checked: true - outdoorTechnique: - checked: false items: type: string type: @@ -13940,7 +14807,7 @@ components: - parent - position type: object - MultiSelect.jsonld-read: + MaterialNode.jsonld-read: deprecated: false description: '' properties: @@ -13986,19 +14853,13 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). - example: - options: - natureAndEnvironment: - checked: true - outdoorTechnique: - checked: false items: type: string type: @@ -14019,6 +14880,10 @@ components: type: - 'null' - string + materialItems: + items: + $ref: '#/components/schemas/MaterialItem.jsonld-read' + type: array parent: description: |- The parent to which this content node belongs. Is null in case this content node is the @@ -14058,9 +14923,10 @@ components: required: - children - contentType + - materialItems - position type: object - MultiSelect.jsonld-write_create: + MaterialNode.jsonld-write_create: deprecated: false description: '' properties: @@ -14076,12 +14942,6 @@ components: description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). - example: - options: - natureAndEnvironment: - checked: true - outdoorTechnique: - checked: false items: type: string type: @@ -14127,19 +14987,12 @@ components: - parent - position type: object - Period-read: + MultiSelect-read: deprecated: false - description: |- - A time period in which the programme of a camp will take place. There may be multiple - periods in a camp, but they may not overlap. A period is made up of one or more full days. + description: '' properties: - camp: - description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' - example: /camps/1a2b3c4d - format: iri-reference - type: string - contentNodes: - description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' + children: + description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' items: example: 'https://example.com/' @@ -14147,418 +15000,316 @@ components: type: string readOnly: true type: array - dayResponsibles: - description: 'A link to all the DayResponsibles in this period.' - example: '["/day_responsibles/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - days: - description: 'The days in this time period. These are generated automatically.' - example: /periods/1a2b3c4d/days + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true type: string - description: - description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' - example: Hauptlager - maxLength: 32 + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + options: + natureAndEnvironment: + checked: true + outdoorTechnique: + checked: false + items: + type: string type: + - array - 'null' - - string - end: - description: |- - The (inclusive) day at the end of which the period ends, as an ISO date string. Should - not be before "start". - example: '2022-01-08' - format: date id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - materialItems: + instanceName: description: |- - Material items that are assigned directly to the period, as opposed to individual - activities. - example: '["/material_items/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - scheduleEntries: + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: description: |- - All time slots for programme that are part of this time period. A schedule entry - may span over multiple days, but may not end later than the period. - example: /periods/1a2b3c4d/schedule_entries + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference readOnly: true - type: string - start: - description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' - example: '2022-01-01' - format: date + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - camp - - days - - description - - end - - materialItems - - scheduleEntries - - start + - children + - contentType + - position type: object - Period-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: + MultiSelect-write_create: deprecated: false description: '' properties: - camp: - description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' - example: /camps/1a2b3c4d + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference type: string - contentNodes: - description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - dayResponsibles: - description: 'A link to all the DayResponsibles in this period.' - example: '["/day_responsibles/1a2b3c4d"]' + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + options: + natureAndEnvironment: + checked: true + outdoorTechnique: + checked: false items: - example: 'https://example.com/' - format: iri-reference type: string - readOnly: true - type: array - days: - items: - $ref: '#/components/schemas/Day-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' - readOnly: true - type: unknown_type - description: - description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' - example: Hauptlager + type: + - array + - 'null' + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm maxLength: 32 type: - 'null' - string - end: + parent: description: |- - The (inclusive) day at the end of which the period ends, as an ISO date string. Should - not be before "start". - example: '2022-01-08' - format: date - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - materialItems: + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 description: |- - Material items that are assigned directly to the period, as opposed to individual - activities. - example: '["/material_items/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - scheduleEntries: + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + slot: description: |- - All time slots for programme that are part of this time period. A schedule entry - may span over multiple days, but may not end later than the period. - example: /periods/1a2b3c4d/schedule_entries - format: iri-reference - readOnly: true - type: string - start: - description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' - example: '2022-01-01' - format: date + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - camp - - days - - description - - end - - materialItems - - scheduleEntries - - start + - contentType + - parent + - position type: object - Period-read_Period.Camp_Period.Days: + MultiSelect-write_update: deprecated: false - description: |- - A time period in which the programme of a camp will take place. There may be multiple - periods in a camp, but they may not overlap. A period is made up of one or more full days. + description: '' properties: - camp: - anyOf: - - - $ref: '#/components/schemas/Camp-read_Period.Camp_Period.Days' - - - type: 'null' - readOnly: true - contentNodes: - description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' - example: '["/content_nodes/1a2b3c4d"]' + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + options: + natureAndEnvironment: + checked: true + outdoorTechnique: + checked: false items: - example: 'https://example.com/' - format: iri-reference type: string - readOnly: true - type: array - dayResponsibles: - description: 'A link to all the DayResponsibles in this period.' - example: '["/day_responsibles/1a2b3c4d"]' + type: + - array + - 'null' + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string + required: + - data + - position + type: object + MultiSelect.jsonapi: + deprecated: false + description: '' + properties: + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' items: example: 'https://example.com/' format: iri-reference type: string readOnly: true type: array - days: - items: - $ref: '#/components/schemas/Day-read_Period.Camp_Period.Days' + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference readOnly: true - type: unknown_type - description: - description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' - example: Hauptlager - maxLength: 32 + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations + readOnly: true + type: string + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + options: + natureAndEnvironment: + checked: true + outdoorTechnique: + checked: false + items: + type: string type: + - array - 'null' - - string - end: - description: |- - The (inclusive) day at the end of which the period ends, as an ISO date string. Should - not be before "start". - example: '2022-01-08' - format: date id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - materialItems: + instanceName: description: |- - Material items that are assigned directly to the period, as opposed to individual - activities. - example: '["/material_items/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - scheduleEntries: + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: description: |- - All time slots for programme that are part of this time period. A schedule entry - may span over multiple days, but may not end later than the period. - example: /periods/1a2b3c4d/schedule_entries + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d format: iri-reference - readOnly: true - type: string - start: - description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' - example: '2022-01-01' - format: date - required: - - camp - - days - - description - - end - - materialItems - - scheduleEntries - - start - type: object - Period-write: - deprecated: false - description: |- - A time period in which the programme of a camp will take place. There may be multiple - periods in a camp, but they may not overlap. A period is made up of one or more full days. - properties: - description: - description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' - example: Hauptlager - maxLength: 32 type: - 'null' - string - end: + position: + default: -1 description: |- - The (inclusive) day at the end of which the period ends, as an ISO date string. Should - not be before "start". - example: '2022-01-08' - format: date - moveScheduleEntries: - default: true + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + root: description: |- - If the start date of the period is changing, moveScheduleEntries defines what happens with the schedule - entries in the period. - example: true - type: boolean - start: - description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' - example: '2022-01-01' - format: date - required: - - description - - end - - moveScheduleEntries - - start - type: object - Period-write_create: - deprecated: false - description: |- - A time period in which the programme of a camp will take place. There may be multiple - periods in a camp, but they may not overlap. A period is made up of one or more full days. - properties: - camp: - description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' - example: /camps/1a2b3c4d + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - description: - description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' - example: Hauptlager - maxLength: 32 + readOnly: true type: - 'null' - string - end: - description: |- - The (inclusive) day at the end of which the period ends, as an ISO date string. Should - not be before "start". - example: '2022-01-08' - format: date - moveScheduleEntries: - default: true + slot: description: |- - If the start date of the period is changing, moveScheduleEntries defines what happens with the schedule - entries in the period. - example: true - type: boolean - start: - description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' - example: '2022-01-01' - format: date - required: - - camp - - description - - end - - moveScheduleEntries - - start - type: object - Period.jsonapi: - deprecated: false - description: |- - A time period in which the programme of a camp will take place. There may be multiple - periods in a camp, but they may not overlap. A period is made up of one or more full days. - properties: - data: - properties: - attributes: - properties: - _id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - description: - description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' - example: Hauptlager - maxLength: 32 - type: ['null', string] - end: - description: |- - The (inclusive) day at the end of which the period ends, as an ISO date string. Should - not be before "start". - example: '2022-01-08' - format: date - moveScheduleEntries: - default: true - description: |- - If the start date of the period is changing, moveScheduleEntries defines what happens with the schedule - entries in the period. - example: true - type: boolean - writeOnly: true - start: - description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' - example: '2022-01-01' - format: date - required: - - description - - end - - moveScheduleEntries - - start - type: object - id: - type: string - relationships: - properties: - camp: - properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } - contentNodes: - properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } - dayResponsibles: - properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } - days: - properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } - materialItems: - properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } - scheduleEntries: - properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } - required: - - camp - - days - - materialItems - - scheduleEntries - type: object - type: - type: string - required: - - id - - type - type: object - included: - description: 'Related resources requested via the "include" query parameter.' - externalDocs: - url: 'https://jsonapi.org/format/#fetching-includes' - items: - anyOf: - - [] - - - $ref: '#/components/schemas/Day.jsonapi' - - - $ref: '#/components/schemas/Day.jsonapi' - - - $ref: '#/components/schemas/Day.jsonapi' - - - $ref: '#/components/schemas/Day.jsonapi' - - - $ref: '#/components/schemas/Day.jsonapi' - readOnly: true - type: array + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string + required: + - children + - contentType + - position type: object - Period.jsonhal-read: + MultiSelect.jsonhal-read: deprecated: false - description: |- - A time period in which the programme of a camp will take place. There may be multiple - periods in a camp, but they may not overlap. A period is made up of one or more full days. + description: '' properties: _links: properties: @@ -14569,13 +15320,8 @@ components: type: string type: object type: object - camp: - description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' - example: /camps/1a2b3c4d - format: iri-reference - type: string - contentNodes: - description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' + children: + description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' items: example: 'https://example.com/' @@ -14583,73 +15329,91 @@ components: type: string readOnly: true type: array - dayResponsibles: - description: 'A link to all the DayResponsibles in this period.' - example: '["/day_responsibles/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - days: - description: 'The days in this time period. These are generated automatically.' - example: /periods/1a2b3c4d/days + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true type: string - description: - description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' - example: Hauptlager - maxLength: 32 + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + options: + natureAndEnvironment: + checked: true + outdoorTechnique: + checked: false + items: + type: string type: + - array - 'null' - - string - end: - description: |- - The (inclusive) day at the end of which the period ends, as an ISO date string. Should - not be before "start". - example: '2022-01-08' - format: date id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - materialItems: + instanceName: description: |- - Material items that are assigned directly to the period, as opposed to individual - activities. - example: '["/material_items/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - scheduleEntries: + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: description: |- - All time slots for programme that are part of this time period. A schedule entry - may span over multiple days, but may not end later than the period. - example: /periods/1a2b3c4d/schedule_entries + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d format: iri-reference readOnly: true - type: string - start: - description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' - example: '2022-01-01' - format: date + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - camp - - days - - description - - end - - materialItems - - scheduleEntries - - start + - children + - contentType + - position type: object - Period.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: + MultiSelect.jsonhal-write_create: deprecated: false description: '' properties: @@ -14662,237 +15426,72 @@ components: type: string type: object type: object - camp: - description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' - example: /camps/1a2b3c4d + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference type: string - contentNodes: - description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - dayResponsibles: - description: 'A link to all the DayResponsibles in this period.' - example: '["/day_responsibles/1a2b3c4d"]' + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + options: + natureAndEnvironment: + checked: true + outdoorTechnique: + checked: false items: - example: 'https://example.com/' - format: iri-reference type: string - readOnly: true - type: array - days: - items: - $ref: '#/components/schemas/Day.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' - readOnly: true - type: unknown_type - description: - description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' - example: Hauptlager + type: + - array + - 'null' + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm maxLength: 32 type: - 'null' - string - end: - description: |- - The (inclusive) day at the end of which the period ends, as an ISO date string. Should - not be before "start". - example: '2022-01-08' - format: date - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - materialItems: - description: |- - Material items that are assigned directly to the period, as opposed to individual - activities. - example: '["/material_items/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - scheduleEntries: + parent: description: |- - All time slots for programme that are part of this time period. A schedule entry - may span over multiple days, but may not end later than the period. - example: /periods/1a2b3c4d/schedule_entries + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d format: iri-reference - readOnly: true - type: string - start: - description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' - example: '2022-01-01' - format: date - required: - - camp - - days - - description - - end - - materialItems - - scheduleEntries - - start - type: object - Period.jsonhal-read_Period.Camp_Period.Days: - deprecated: false - description: |- - A time period in which the programme of a camp will take place. There may be multiple - periods in a camp, but they may not overlap. A period is made up of one or more full days. - properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - camp: - anyOf: - - - $ref: '#/components/schemas/Camp.jsonhal-read_Period.Camp_Period.Days' - - - type: 'null' - readOnly: true - contentNodes: - description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - dayResponsibles: - description: 'A link to all the DayResponsibles in this period.' - example: '["/day_responsibles/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - days: - items: - $ref: '#/components/schemas/Day.jsonhal-read_Period.Camp_Period.Days' - readOnly: true - type: unknown_type - description: - description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' - example: Hauptlager - maxLength: 32 type: - 'null' - string - end: - description: |- - The (inclusive) day at the end of which the period ends, as an ISO date string. Should - not be before "start". - example: '2022-01-08' - format: date - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - materialItems: + position: + default: -1 description: |- - Material items that are assigned directly to the period, as opposed to individual - activities. - example: '["/material_items/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - scheduleEntries: + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + slot: description: |- - All time slots for programme that are part of this time period. A schedule entry - may span over multiple days, but may not end later than the period. - example: /periods/1a2b3c4d/schedule_entries - format: iri-reference - readOnly: true - type: string - start: - description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' - example: '2022-01-01' - format: date - required: - - camp - - days - - description - - end - - materialItems - - scheduleEntries - - start - type: object - Period.jsonhal-write_create: - deprecated: false - description: |- - A time period in which the programme of a camp will take place. There may be multiple - periods in a camp, but they may not overlap. A period is made up of one or more full days. - properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - camp: - description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' - example: /camps/1a2b3c4d - format: iri-reference - type: string - description: - description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' - example: Hauptlager + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' maxLength: 32 type: - 'null' - string - end: - description: |- - The (inclusive) day at the end of which the period ends, as an ISO date string. Should - not be before "start". - example: '2022-01-08' - format: date - moveScheduleEntries: - default: true - description: |- - If the start date of the period is changing, moveScheduleEntries defines what happens with the schedule - entries in the period. - example: true - type: boolean - start: - description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' - example: '2022-01-01' - format: date required: - - camp - - description - - end - - moveScheduleEntries - - start + - contentType + - parent + - position type: object - Period.jsonld-read: + MultiSelect.jsonld-read: deprecated: false - description: |- - A time period in which the programme of a camp will take place. There may be multiple - periods in a camp, but they may not overlap. A period is made up of one or more full days. + description: '' properties: '@context': oneOf: @@ -14917,13 +15516,8 @@ components: '@type': readOnly: true type: string - camp: - description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' - example: /camps/1a2b3c4d - format: iri-reference - type: string - contentNodes: - description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' + children: + description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' items: example: 'https://example.com/' @@ -14931,16 +15525,187 @@ components: type: string readOnly: true type: array - dayResponsibles: - description: 'A link to all the DayResponsibles in this period.' - example: '["/day_responsibles/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - days: + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations + readOnly: true + type: string + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + options: + natureAndEnvironment: + checked: true + outdoorTechnique: + checked: false + items: + type: string + type: + - array + - 'null' + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d + format: iri-reference + readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string + required: + - children + - contentType + - position + type: object + MultiSelect.jsonld-write_create: + deprecated: false + description: '' + properties: + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + options: + natureAndEnvironment: + checked: true + outdoorTechnique: + checked: false + items: + type: string + type: + - array + - 'null' + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string + required: + - contentType + - parent + - position + type: object + Period-read: + deprecated: false + description: |- + A time period in which the programme of a camp will take place. There may be multiple + periods in a camp, but they may not overlap. A period is made up of one or more full days. + properties: + camp: + description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' + example: /camps/1a2b3c4d + format: iri-reference + type: string + contentNodes: + description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + dayResponsibles: + description: 'A link to all the DayResponsibles in this period.' + example: '["/day_responsibles/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + days: description: 'The days in this time period. These are generated automatically.' example: /periods/1a2b3c4d/days format: iri-reference @@ -14997,33 +15762,10 @@ components: - scheduleEntries - start type: object - Period.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: + Period-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string camp: description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' example: /camps/1a2b3c4d @@ -15049,7 +15791,7 @@ components: type: array days: items: - $ref: '#/components/schemas/Day.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + $ref: '#/components/schemas/Day-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' readOnly: true type: unknown_type description: @@ -15103,39 +15845,16 @@ components: - scheduleEntries - start type: object - Period.jsonld-read_Period.Camp_Period.Days: + Period-read_Period.Camp_Period.Days: deprecated: false description: |- A time period in which the programme of a camp will take place. There may be multiple periods in a camp, but they may not overlap. A period is made up of one or more full days. properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string camp: anyOf: - - $ref: '#/components/schemas/Camp.jsonld-read_Period.Camp_Period.Days' + $ref: '#/components/schemas/Camp-read_Period.Camp_Period.Days' - type: 'null' readOnly: true @@ -15159,7 +15878,7 @@ components: type: array days: items: - $ref: '#/components/schemas/Day.jsonld-read_Period.Camp_Period.Days' + $ref: '#/components/schemas/Day-read_Period.Camp_Period.Days' readOnly: true type: unknown_type description: @@ -15213,17 +15932,12 @@ components: - scheduleEntries - start type: object - Period.jsonld-write_create: + Period-write: deprecated: false description: |- A time period in which the programme of a camp will take place. There may be multiple periods in a camp, but they may not overlap. A period is made up of one or more full days. properties: - camp: - description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' - example: /camps/1a2b3c4d - format: iri-reference - type: string description: description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' example: Hauptlager @@ -15249,72 +15963,151 @@ components: example: '2022-01-01' format: date required: - - camp - description - end - moveScheduleEntries - start type: object - PersonalInvitation-read: + Period-write_create: deprecated: false - description: 'An invitation for a person who already has an account to collaborate in a camp.' + description: |- + A time period in which the programme of a camp will take place. There may be multiple + periods in a camp, but they may not overlap. A period is made up of one or more full days. properties: - campId: - description: |- - The id of the camp for which this invitation is valid. This is useful for - redirecting the user to the correct place after they accept. - example: 1a2b3c4d - type: string - campTitle: - description: |- - The full title of the camp for which this invitation is valid. This should help - the user to decide whether to accept or reject the invitation. - example: 'Abteilungs-Sommerlager 2022' - type: string - id: - example: 1a2b3c4d + camp: + description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' + example: /camps/1a2b3c4d + format: iri-reference type: string + description: + description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' + example: Hauptlager + maxLength: 32 + type: + - 'null' + - string + end: + description: |- + The (inclusive) day at the end of which the period ends, as an ISO date string. Should + not be before "start". + example: '2022-01-08' + format: date + moveScheduleEntries: + default: true + description: |- + If the start date of the period is changing, moveScheduleEntries defines what happens with the schedule + entries in the period. + example: true + type: boolean + start: + description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' + example: '2022-01-01' + format: date + required: + - camp + - description + - end + - moveScheduleEntries + - start type: object - PersonalInvitation-write: - deprecated: false - description: 'An invitation for a person who already has an account to collaborate in a camp.' - type: object - PersonalInvitation.jsonapi: + Period.jsonapi: deprecated: false - description: 'An invitation for a person who already has an account to collaborate in a camp.' + description: |- + A time period in which the programme of a camp will take place. There may be multiple + periods in a camp, but they may not overlap. A period is made up of one or more full days. properties: data: properties: attributes: properties: _id: + description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d + maxLength: 16 + readOnly: true type: string - campId: + description: + description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' + example: Hauptlager + maxLength: 32 + type: ['null', string] + end: description: |- - The id of the camp for which this invitation is valid. This is useful for - redirecting the user to the correct place after they accept. - example: 1a2b3c4d - type: string - campTitle: + The (inclusive) day at the end of which the period ends, as an ISO date string. Should + not be before "start". + example: '2022-01-08' + format: date + moveScheduleEntries: + default: true description: |- - The full title of the camp for which this invitation is valid. This should help - the user to decide whether to accept or reject the invitation. - example: 'Abteilungs-Sommerlager 2022' - type: string + If the start date of the period is changing, moveScheduleEntries defines what happens with the schedule + entries in the period. + example: true + type: boolean + writeOnly: true + start: + description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' + example: '2022-01-01' + format: date + required: + - description + - end + - moveScheduleEntries + - start type: object id: type: string + relationships: + properties: + camp: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + contentNodes: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } + dayResponsibles: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } + days: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } + materialItems: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } + scheduleEntries: + properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } } + required: + - camp + - days + - materialItems + - scheduleEntries + type: object type: type: string required: - id - type type: object + included: + description: 'Related resources requested via the "include" query parameter.' + externalDocs: + url: 'https://jsonapi.org/format/#fetching-includes' + items: + anyOf: + - [] + - + $ref: '#/components/schemas/Day.jsonapi' + - + $ref: '#/components/schemas/Day.jsonapi' + - + $ref: '#/components/schemas/Day.jsonapi' + - + $ref: '#/components/schemas/Day.jsonapi' + - + $ref: '#/components/schemas/Day.jsonapi' + readOnly: true + type: array type: object - PersonalInvitation.jsonhal-read: + Period.jsonhal-read: deprecated: false - description: 'An invitation for a person who already has an account to collaborate in a camp.' + description: |- + A time period in which the programme of a camp will take place. There may be multiple + periods in a camp, but they may not overlap. A period is made up of one or more full days. properties: _links: properties: @@ -15325,809 +16118,781 @@ components: type: string type: object type: object - campId: - description: |- - The id of the camp for which this invitation is valid. This is useful for - redirecting the user to the correct place after they accept. - example: 1a2b3c4d - type: string - campTitle: - description: |- - The full title of the camp for which this invitation is valid. This should help - the user to decide whether to accept or reject the invitation. - example: 'Abteilungs-Sommerlager 2022' - type: string - id: - example: 1a2b3c4d + camp: + description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' + example: /camps/1a2b3c4d + format: iri-reference type: string - type: object - PersonalInvitation.jsonld-read: - deprecated: false - description: 'An invitation for a person who already has an account to collaborate in a camp.' - properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string + contentNodes: + description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - '@id': + type: array + dayResponsibles: + description: 'A link to all the DayResponsibles in this period.' + example: '["/day_responsibles/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: string - '@type': + type: array + days: + description: 'The days in this time period. These are generated automatically.' + example: /periods/1a2b3c4d/days + format: iri-reference readOnly: true type: string - campId: + description: + description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' + example: Hauptlager + maxLength: 32 + type: + - 'null' + - string + end: description: |- - The id of the camp for which this invitation is valid. This is useful for - redirecting the user to the correct place after they accept. + The (inclusive) day at the end of which the period ends, as an ISO date string. Should + not be before "start". + example: '2022-01-08' + format: date + id: + description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d + maxLength: 16 + readOnly: true type: string - campTitle: + materialItems: description: |- - The full title of the camp for which this invitation is valid. This should help - the user to decide whether to accept or reject the invitation. - example: 'Abteilungs-Sommerlager 2022' - type: string - id: - example: 1a2b3c4d + Material items that are assigned directly to the period, as opposed to individual + activities. + example: '["/material_items/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + scheduleEntries: + description: |- + All time slots for programme that are part of this time period. A schedule entry + may span over multiple days, but may not end later than the period. + example: /periods/1a2b3c4d/schedule_entries + format: iri-reference + readOnly: true type: string + start: + description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' + example: '2022-01-01' + format: date + required: + - camp + - days + - description + - end + - materialItems + - scheduleEntries + - start type: object - Profile-read: + Period.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: deprecated: false - description: |- - The profile of a person using eCamp. - The properties available to related eCamp users are here. - Related means that they were or are collaborators in the same camp. + description: '' properties: - abbreviation: - description: 'The default abbreviation in the avatar.' - example: AB - maxLength: 2 - type: - - 'null' - - string - color: - description: 'The default color of the avatar as a hex color string.' - example: '#4DBB52' - maxLength: 8 - pattern: '^(#[0-9a-zA-Z]{6})$' - type: - - 'null' - - string - email: - description: 'Unique email of the user.' - example: bi-pi@example.com - externalDocs: - url: 'https://schema.org/email' - format: email - maxLength: 64 + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + camp: + description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' + example: /camps/1a2b3c4d + format: iri-reference type: string - firstname: - description: "The user's (optional) first name." - example: Robert - maxLength: 64 + contentNodes: + description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + dayResponsibles: + description: 'A link to all the DayResponsibles in this period.' + example: '["/day_responsibles/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + days: + items: + $ref: '#/components/schemas/Day.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + readOnly: true + type: unknown_type + description: + description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' + example: Hauptlager + maxLength: 32 type: - 'null' - string + end: + description: |- + The (inclusive) day at the end of which the period ends, as an ISO date string. Should + not be before "start". + example: '2022-01-08' + format: date id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - language: - description: 'The optional preferred language of the user, as an ICU language code.' - enum: - - de - - de-CH-scout - - en - - en-CH-scout - - fr - - fr-CH-scout - - it - - it-CH-scout - - rm - - rm-CH-scout - example: en - maxLength: 20 - type: - - 'null' - - string - legalName: + materialItems: description: |- - The legal name of the user, for printing on legally relevant - documents. Falls back to the nickname if not complete. - example: 'Robert Baden-Powell' + Material items that are assigned directly to the period, as opposed to individual + activities. + example: '["/material_items/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: - - 'null' - - string - nickname: - description: "The user's (optional) nickname or scout name." - example: Bi-Pi - maxLength: 32 - type: - - 'null' - - string - surname: - description: "The user's (optional) last name." - example: Baden-Powell - maxLength: 64 - type: - - 'null' - - string - user: - example: /users/1a2b3c4d + type: array + scheduleEntries: + description: |- + All time slots for programme that are part of this time period. A schedule entry + may span over multiple days, but may not end later than the period. + example: /periods/1a2b3c4d/schedule_entries format: iri-reference readOnly: true - type: - - 'null' - - string + type: string + start: + description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' + example: '2022-01-01' + format: date required: - - email + - camp + - days + - description + - end + - materialItems + - scheduleEntries + - start type: object - Profile-read_User.create: + Period.jsonhal-read_Period.Camp_Period.Days: deprecated: false - description: '' + description: |- + A time period in which the programme of a camp will take place. There may be multiple + periods in a camp, but they may not overlap. A period is made up of one or more full days. properties: - abbreviation: - description: 'The default abbreviation in the avatar.' - example: AB - maxLength: 2 - type: - - 'null' - - string - color: - description: 'The default color of the avatar as a hex color string.' - example: '#4DBB52' - maxLength: 8 - pattern: '^(#[0-9a-zA-Z]{6})$' - type: - - 'null' - - string - email: - description: 'Unique email of the user.' - example: bi-pi@example.com - externalDocs: - url: 'https://schema.org/email' - format: email - maxLength: 64 - type: string - firstname: - description: "The user's (optional) first name." - example: Robert - maxLength: 64 + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + camp: + anyOf: + - + $ref: '#/components/schemas/Camp.jsonhal-read_Period.Camp_Period.Days' + - + type: 'null' + readOnly: true + contentNodes: + description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + dayResponsibles: + description: 'A link to all the DayResponsibles in this period.' + example: '["/day_responsibles/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + days: + items: + $ref: '#/components/schemas/Day.jsonhal-read_Period.Camp_Period.Days' + readOnly: true + type: unknown_type + description: + description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' + example: Hauptlager + maxLength: 32 type: - 'null' - string + end: + description: |- + The (inclusive) day at the end of which the period ends, as an ISO date string. Should + not be before "start". + example: '2022-01-08' + format: date id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - language: - description: 'The optional preferred language of the user, as an ICU language code.' - enum: - - de - - de-CH-scout - - en - - en-CH-scout - - fr - - fr-CH-scout - - it - - it-CH-scout - - rm - - rm-CH-scout - example: en - maxLength: 20 - type: - - 'null' - - string - legalName: + materialItems: description: |- - The legal name of the user, for printing on legally relevant - documents. Falls back to the nickname if not complete. - example: 'Robert Baden-Powell' - readOnly: true - type: - - 'null' - - string - nickname: - description: "The user's (optional) nickname or scout name." - example: Bi-Pi - maxLength: 32 - type: - - 'null' - - string - surname: - description: "The user's (optional) last name." - example: Baden-Powell - maxLength: 64 - type: - - 'null' - - string - user: - example: /users/1a2b3c4d + Material items that are assigned directly to the period, as opposed to individual + activities. + example: '["/material_items/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + scheduleEntries: + description: |- + All time slots for programme that are part of this time period. A schedule entry + may span over multiple days, but may not end later than the period. + example: /periods/1a2b3c4d/schedule_entries format: iri-reference readOnly: true - type: - - 'null' - - string + type: string + start: + description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' + example: '2022-01-01' + format: date required: - - email + - camp + - days + - description + - end + - materialItems + - scheduleEntries + - start type: object - Profile-write_create: + Period.jsonhal-write_create: deprecated: false description: |- - The profile of a person using eCamp. - The properties available to related eCamp users are here. - Related means that they were or are collaborators in the same camp. + A time period in which the programme of a camp will take place. There may be multiple + periods in a camp, but they may not overlap. A period is made up of one or more full days. properties: - abbreviation: - description: 'The default abbreviation in the avatar.' - example: AB - maxLength: 2 - type: - - 'null' - - string - color: - description: 'The default color of the avatar as a hex color string.' - example: '#4DBB52' - maxLength: 8 - pattern: '^(#[0-9a-zA-Z]{6})$' - type: - - 'null' - - string - email: - description: 'Unique email of the user.' - example: bi-pi@example.com - externalDocs: - url: 'https://schema.org/email' - format: email - maxLength: 64 + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + camp: + description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' + example: /camps/1a2b3c4d + format: iri-reference type: string - firstname: - description: "The user's (optional) first name." - example: Robert - maxLength: 64 - type: - - 'null' - - string - language: - description: 'The optional preferred language of the user, as an ICU language code.' - enum: - - de - - de-CH-scout - - en - - en-CH-scout - - fr - - fr-CH-scout - - it - - it-CH-scout - - rm - - rm-CH-scout - example: en - maxLength: 20 - type: - - 'null' - - string - newEmail: - description: 'New email.' - example: bi-pi@example.com - externalDocs: - url: 'https://schema.org/email' - format: email - type: - - 'null' - - string - nickname: - description: "The user's (optional) nickname or scout name." - example: Bi-Pi + description: + description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' + example: Hauptlager maxLength: 32 type: - 'null' - string - surname: - description: "The user's (optional) last name." - example: Baden-Powell - maxLength: 64 - type: - - 'null' - - string + end: + description: |- + The (inclusive) day at the end of which the period ends, as an ISO date string. Should + not be before "start". + example: '2022-01-08' + format: date + moveScheduleEntries: + default: true + description: |- + If the start date of the period is changing, moveScheduleEntries defines what happens with the schedule + entries in the period. + example: true + type: boolean + start: + description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' + example: '2022-01-01' + format: date required: - - email + - camp + - description + - end + - moveScheduleEntries + - start type: object - Profile-write_update: + Period.jsonld-read: deprecated: false description: |- - The profile of a person using eCamp. - The properties available to related eCamp users are here. - Related means that they were or are collaborators in the same camp. + A time period in which the programme of a camp will take place. There may be multiple + periods in a camp, but they may not overlap. A period is made up of one or more full days. properties: - abbreviation: - description: 'The default abbreviation in the avatar.' - example: AB - maxLength: 2 - type: - - 'null' - - string - color: - description: 'The default color of the avatar as a hex color string.' - example: '#4DBB52' - maxLength: 8 - pattern: '^(#[0-9a-zA-Z]{6})$' - type: - - 'null' - - string - firstname: - description: "The user's (optional) first name." - example: Robert - maxLength: 64 + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + camp: + description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' + example: /camps/1a2b3c4d + format: iri-reference + type: string + contentNodes: + description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + dayResponsibles: + description: 'A link to all the DayResponsibles in this period.' + example: '["/day_responsibles/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + days: + description: 'The days in this time period. These are generated automatically.' + example: /periods/1a2b3c4d/days + format: iri-reference + readOnly: true + type: string + description: + description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' + example: Hauptlager + maxLength: 32 type: - 'null' - string - language: - description: 'The optional preferred language of the user, as an ICU language code.' - enum: - - de - - de-CH-scout - - en - - en-CH-scout - - fr - - fr-CH-scout - - it - - it-CH-scout - - rm - - rm-CH-scout - example: en - maxLength: 20 - type: - - 'null' - - string - newEmail: - description: 'New email.' - example: bi-pi@example.com - externalDocs: - url: 'https://schema.org/email' - format: email - type: - - 'null' - - string - nickname: - description: "The user's (optional) nickname or scout name." - example: Bi-Pi - maxLength: 32 - type: - - 'null' - - string - surname: - description: "The user's (optional) last name." - example: Baden-Powell - maxLength: 64 - type: - - 'null' - - string - untrustedEmailKey: - description: 'User input for email verification.' - type: - - 'null' - - string - writeOnly: true + end: + description: |- + The (inclusive) day at the end of which the period ends, as an ISO date string. Should + not be before "start". + example: '2022-01-08' + format: date + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + materialItems: + description: |- + Material items that are assigned directly to the period, as opposed to individual + activities. + example: '["/material_items/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + scheduleEntries: + description: |- + All time slots for programme that are part of this time period. A schedule entry + may span over multiple days, but may not end later than the period. + example: /periods/1a2b3c4d/schedule_entries + format: iri-reference + readOnly: true + type: string + start: + description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' + example: '2022-01-01' + format: date + required: + - camp + - days + - description + - end + - materialItems + - scheduleEntries + - start type: object - Profile.jsonapi: + Period.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: deprecated: false - description: |- - The profile of a person using eCamp. - The properties available to related eCamp users are here. - Related means that they were or are collaborators in the same camp. + description: '' properties: - data: - properties: - attributes: + '@context': + oneOf: + - + additionalProperties: true properties: - _id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true + '@vocab': type: string - abbreviation: - description: 'The default abbreviation in the avatar.' - example: AB - maxLength: 2 - type: ['null', string] - color: - description: 'The default color of the avatar as a hex color string.' - example: '#4DBB52' - maxLength: 8 - pattern: '^(#[0-9a-zA-Z]{6})$' - type: ['null', string] - email: - description: 'Unique email of the user.' - example: bi-pi@example.com - externalDocs: { url: 'https://schema.org/email' } - format: email - maxLength: 64 - readOnly: true + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] type: string - firstname: - description: "The user's (optional) first name." - example: Robert - maxLength: 64 - type: ['null', string] - language: - description: 'The optional preferred language of the user, as an ICU language code.' - enum: [de, de-CH-scout, en, en-CH-scout, fr, fr-CH-scout, it, it-CH-scout, rm, rm-CH-scout] - example: en - maxLength: 20 - type: ['null', string] - legalName: - description: |- - The legal name of the user, for printing on legally relevant - documents. Falls back to the nickname if not complete. - example: 'Robert Baden-Powell' - readOnly: true - type: ['null', string] - newEmail: - description: 'New email.' - example: bi-pi@example.com - externalDocs: { url: 'https://schema.org/email' } - format: email - type: ['null', string] - writeOnly: true - nickname: - description: "The user's (optional) nickname or scout name." - example: Bi-Pi - maxLength: 32 - type: ['null', string] - surname: - description: "The user's (optional) last name." - example: Baden-Powell - maxLength: 64 - type: ['null', string] - untrustedEmailKey: - description: 'User input for email verification.' - type: ['null', string] - writeOnly: true required: - - email - type: object - id: - type: string - relationships: - properties: - user: - properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + - '@vocab' + - hydra type: object - type: + - type: string - required: - - id - - type - type: object - included: - description: 'Related resources requested via the "include" query parameter.' - externalDocs: - url: 'https://jsonapi.org/format/#fetching-includes' + readOnly: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + camp: + description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' + example: /camps/1a2b3c4d + format: iri-reference + type: string + contentNodes: + description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' + example: '["/content_nodes/1a2b3c4d"]' items: - anyOf: - - - $ref: '#/components/schemas/Profile.jsonapi' + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true type: array - type: object - Profile.jsonhal-read: - deprecated: false - description: |- - The profile of a person using eCamp. - The properties available to related eCamp users are here. - Related means that they were or are collaborators in the same camp. - properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - abbreviation: - description: 'The default abbreviation in the avatar.' - example: AB - maxLength: 2 - type: - - 'null' - - string - color: - description: 'The default color of the avatar as a hex color string.' - example: '#4DBB52' - maxLength: 8 - pattern: '^(#[0-9a-zA-Z]{6})$' - type: - - 'null' - - string - email: - description: 'Unique email of the user.' - example: bi-pi@example.com - externalDocs: - url: 'https://schema.org/email' - format: email - maxLength: 64 - type: string - firstname: - description: "The user's (optional) first name." - example: Robert - maxLength: 64 + dayResponsibles: + description: 'A link to all the DayResponsibles in this period.' + example: '["/day_responsibles/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + days: + items: + $ref: '#/components/schemas/Day.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + readOnly: true + type: unknown_type + description: + description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' + example: Hauptlager + maxLength: 32 type: - 'null' - string + end: + description: |- + The (inclusive) day at the end of which the period ends, as an ISO date string. Should + not be before "start". + example: '2022-01-08' + format: date id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - language: - description: 'The optional preferred language of the user, as an ICU language code.' - enum: - - de - - de-CH-scout - - en - - en-CH-scout - - fr - - fr-CH-scout - - it - - it-CH-scout - - rm - - rm-CH-scout - example: en - maxLength: 20 - type: - - 'null' - - string - legalName: + materialItems: description: |- - The legal name of the user, for printing on legally relevant - documents. Falls back to the nickname if not complete. - example: 'Robert Baden-Powell' + Material items that are assigned directly to the period, as opposed to individual + activities. + example: '["/material_items/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: - - 'null' - - string - nickname: - description: "The user's (optional) nickname or scout name." - example: Bi-Pi - maxLength: 32 - type: - - 'null' - - string - surname: - description: "The user's (optional) last name." - example: Baden-Powell - maxLength: 64 - type: - - 'null' - - string - user: - example: /users/1a2b3c4d + type: array + scheduleEntries: + description: |- + All time slots for programme that are part of this time period. A schedule entry + may span over multiple days, but may not end later than the period. + example: /periods/1a2b3c4d/schedule_entries format: iri-reference readOnly: true - type: - - 'null' - - string + type: string + start: + description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' + example: '2022-01-01' + format: date required: - - email + - camp + - days + - description + - end + - materialItems + - scheduleEntries + - start type: object - Profile.jsonhal-read_User.create: + Period.jsonld-read_Period.Camp_Period.Days: deprecated: false - description: '' + description: |- + A time period in which the programme of a camp will take place. There may be multiple + periods in a camp, but they may not overlap. A period is made up of one or more full days. properties: - _links: - properties: - self: + '@context': + oneOf: + - + additionalProperties: true properties: - href: - format: iri-reference + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] type: string + required: + - '@vocab' + - hydra type: object - type: object - abbreviation: - description: 'The default abbreviation in the avatar.' - example: AB - maxLength: 2 - type: - - 'null' - - string - color: - description: 'The default color of the avatar as a hex color string.' - example: '#4DBB52' - maxLength: 8 - pattern: '^(#[0-9a-zA-Z]{6})$' - type: - - 'null' - - string - email: - description: 'Unique email of the user.' - example: bi-pi@example.com - externalDocs: - url: 'https://schema.org/email' - format: email - maxLength: 64 + - + type: string + readOnly: true + '@id': + readOnly: true type: string - firstname: - description: "The user's (optional) first name." - example: Robert - maxLength: 64 + '@type': + readOnly: true + type: string + camp: + anyOf: + - + $ref: '#/components/schemas/Camp.jsonld-read_Period.Camp_Period.Days' + - + type: 'null' + readOnly: true + contentNodes: + description: 'All the content nodes used in some activity which is carried out (has a schedule entry) in this period.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + dayResponsibles: + description: 'A link to all the DayResponsibles in this period.' + example: '["/day_responsibles/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + days: + items: + $ref: '#/components/schemas/Day.jsonld-read_Period.Camp_Period.Days' + readOnly: true + type: unknown_type + description: + description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' + example: Hauptlager + maxLength: 32 type: - 'null' - string + end: + description: |- + The (inclusive) day at the end of which the period ends, as an ISO date string. Should + not be before "start". + example: '2022-01-08' + format: date id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - language: - description: 'The optional preferred language of the user, as an ICU language code.' - enum: - - de - - de-CH-scout - - en - - en-CH-scout - - fr - - fr-CH-scout - - it - - it-CH-scout - - rm - - rm-CH-scout - example: en - maxLength: 20 - type: - - 'null' - - string - legalName: + materialItems: description: |- - The legal name of the user, for printing on legally relevant - documents. Falls back to the nickname if not complete. - example: 'Robert Baden-Powell' + Material items that are assigned directly to the period, as opposed to individual + activities. + example: '["/material_items/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string readOnly: true - type: - - 'null' - - string - nickname: - description: "The user's (optional) nickname or scout name." - example: Bi-Pi - maxLength: 32 - type: - - 'null' - - string - surname: - description: "The user's (optional) last name." - example: Baden-Powell - maxLength: 64 - type: - - 'null' - - string - user: - example: /users/1a2b3c4d + type: array + scheduleEntries: + description: |- + All time slots for programme that are part of this time period. A schedule entry + may span over multiple days, but may not end later than the period. + example: /periods/1a2b3c4d/schedule_entries format: iri-reference readOnly: true - type: - - 'null' - - string + type: string + start: + description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' + example: '2022-01-01' + format: date required: - - email + - camp + - days + - description + - end + - materialItems + - scheduleEntries + - start type: object - Profile.jsonhal-write_create: + Period.jsonld-write_create: deprecated: false description: |- - The profile of a person using eCamp. - The properties available to related eCamp users are here. - Related means that they were or are collaborators in the same camp. + A time period in which the programme of a camp will take place. There may be multiple + periods in a camp, but they may not overlap. A period is made up of one or more full days. properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - abbreviation: - description: 'The default abbreviation in the avatar.' - example: AB - maxLength: 2 - type: - - 'null' - - string - color: - description: 'The default color of the avatar as a hex color string.' - example: '#4DBB52' - maxLength: 8 - pattern: '^(#[0-9a-zA-Z]{6})$' - type: - - 'null' - - string - email: - description: 'Unique email of the user.' - example: bi-pi@example.com - externalDocs: - url: 'https://schema.org/email' - format: email - maxLength: 64 + camp: + description: 'The camp that this time period belongs to. Cannot be changed once the period is created.' + example: /camps/1a2b3c4d + format: iri-reference type: string - firstname: - description: "The user's (optional) first name." - example: Robert - maxLength: 64 - type: - - 'null' - - string - language: - description: 'The optional preferred language of the user, as an ICU language code.' - enum: - - de - - de-CH-scout - - en - - en-CH-scout - - fr - - fr-CH-scout - - it - - it-CH-scout - - rm - - rm-CH-scout - example: en - maxLength: 20 - type: - - 'null' - - string - newEmail: - description: 'New email.' - example: bi-pi@example.com - externalDocs: - url: 'https://schema.org/email' - format: email - type: - - 'null' - - string - nickname: - description: "The user's (optional) nickname or scout name." - example: Bi-Pi + description: + description: 'A free text name for the period. Useful to distinguish multiple periods in the same camp.' + example: Hauptlager maxLength: 32 type: - 'null' - string - surname: - description: "The user's (optional) last name." - example: Baden-Powell - maxLength: 64 - type: - - 'null' - - string + end: + description: |- + The (inclusive) day at the end of which the period ends, as an ISO date string. Should + not be before "start". + example: '2022-01-08' + format: date + moveScheduleEntries: + default: true + description: |- + If the start date of the period is changing, moveScheduleEntries defines what happens with the schedule + entries in the period. + example: true + type: boolean + start: + description: 'The day on which the period starts, as an ISO date string. Should not be after "end".' + example: '2022-01-01' + format: date required: - - email + - camp + - description + - end + - moveScheduleEntries + - start type: object - Profile.jsonld-read: + PersonalInvitation-read: deprecated: false - description: |- - The profile of a person using eCamp. - The properties available to related eCamp users are here. - Related means that they were or are collaborators in the same camp. + description: 'An invitation for a person who already has an account to collaborate in a camp.' + properties: + campId: + description: |- + The id of the camp for which this invitation is valid. This is useful for + redirecting the user to the correct place after they accept. + example: 1a2b3c4d + type: string + campTitle: + description: |- + The full title of the camp for which this invitation is valid. This should help + the user to decide whether to accept or reject the invitation. + example: 'Abteilungs-Sommerlager 2022' + type: string + id: + example: 1a2b3c4d + type: string + type: object + PersonalInvitation-write: + deprecated: false + description: 'An invitation for a person who already has an account to collaborate in a camp.' + type: object + PersonalInvitation.jsonapi: + deprecated: false + description: 'An invitation for a person who already has an account to collaborate in a camp.' + properties: + data: + properties: + attributes: + properties: + _id: + example: 1a2b3c4d + type: string + campId: + description: |- + The id of the camp for which this invitation is valid. This is useful for + redirecting the user to the correct place after they accept. + example: 1a2b3c4d + type: string + campTitle: + description: |- + The full title of the camp for which this invitation is valid. This should help + the user to decide whether to accept or reject the invitation. + example: 'Abteilungs-Sommerlager 2022' + type: string + type: object + id: + type: string + type: + type: string + required: + - id + - type + type: object + type: object + PersonalInvitation.jsonhal-read: + deprecated: false + description: 'An invitation for a person who already has an account to collaborate in a camp.' + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + campId: + description: |- + The id of the camp for which this invitation is valid. This is useful for + redirecting the user to the correct place after they accept. + example: 1a2b3c4d + type: string + campTitle: + description: |- + The full title of the camp for which this invitation is valid. This should help + the user to decide whether to accept or reject the invitation. + example: 'Abteilungs-Sommerlager 2022' + type: string + id: + example: 1a2b3c4d + type: string + type: object + PersonalInvitation.jsonld-read: + deprecated: false + description: 'An invitation for a person who already has an account to collaborate in a camp.' properties: '@context': oneOf: @@ -16152,6 +16917,29 @@ components: '@type': readOnly: true type: string + campId: + description: |- + The id of the camp for which this invitation is valid. This is useful for + redirecting the user to the correct place after they accept. + example: 1a2b3c4d + type: string + campTitle: + description: |- + The full title of the camp for which this invitation is valid. This should help + the user to decide whether to accept or reject the invitation. + example: 'Abteilungs-Sommerlager 2022' + type: string + id: + example: 1a2b3c4d + type: string + type: object + Profile-read: + deprecated: false + description: |- + The profile of a person using eCamp. + The properties available to related eCamp users are here. + Related means that they were or are collaborators in the same camp. + properties: abbreviation: description: 'The default abbreviation in the avatar.' example: AB @@ -16239,33 +17027,10 @@ components: required: - email type: object - Profile.jsonld-read_User.create: + Profile-read_User.create: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string abbreviation: description: 'The default abbreviation in the avatar.' example: AB @@ -16353,7 +17118,7 @@ components: required: - email type: object - Profile.jsonld-write_create: + Profile-write_create: deprecated: false description: |- The profile of a person using eCamp. @@ -16434,99 +17199,191 @@ components: required: - email type: object - ResetPassword: + Profile-write_update: deprecated: false - description: '' + description: |- + The profile of a person using eCamp. + The properties available to related eCamp users are here. + Related means that they were or are collaborators in the same camp. properties: - email: + abbreviation: + description: 'The default abbreviation in the avatar.' + example: AB + maxLength: 2 type: - 'null' - string - id: - description: "$id: base64_encode($email . '#' . $resetKey)." - readOnly: true + color: + description: 'The default color of the avatar as a hex color string.' + example: '#4DBB52' + maxLength: 8 + pattern: '^(#[0-9a-zA-Z]{6})$' type: - 'null' - string - password: - maxLength: 128 - minLength: 12 + firstname: + description: "The user's (optional) first name." + example: Robert + maxLength: 64 type: - 'null' - string - writeOnly: true - recaptchaToken: + language: + description: 'The optional preferred language of the user, as an ICU language code.' + enum: + - de + - de-CH-scout + - en + - en-CH-scout + - fr + - fr-CH-scout + - it + - it-CH-scout + - rm + - rm-CH-scout + example: en + maxLength: 20 type: - 'null' - string - writeOnly: true - type: object - ResetPassword-create: - deprecated: false - description: '' - properties: - email: + newEmail: + description: 'New email.' + example: bi-pi@example.com + externalDocs: + url: 'https://schema.org/email' + format: email type: - 'null' - string - recaptchaToken: + nickname: + description: "The user's (optional) nickname or scout name." + example: Bi-Pi + maxLength: 32 type: - 'null' - string - writeOnly: true - type: object - ResetPassword-update: - deprecated: false - description: '' - properties: - password: - maxLength: 128 - minLength: 12 + surname: + description: "The user's (optional) last name." + example: Baden-Powell + maxLength: 64 type: - 'null' - string - writeOnly: true - recaptchaToken: + untrustedEmailKey: + description: 'User input for email verification.' type: - 'null' - string writeOnly: true type: object - ResetPassword.jsonapi: + Profile.jsonapi: deprecated: false - description: '' + description: |- + The profile of a person using eCamp. + The properties available to related eCamp users are here. + Related means that they were or are collaborators in the same camp. properties: data: properties: attributes: properties: _id: - description: "$id: base64_encode($email . '#' . $resetKey)." + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 readOnly: true + type: string + abbreviation: + description: 'The default abbreviation in the avatar.' + example: AB + maxLength: 2 + type: ['null', string] + color: + description: 'The default color of the avatar as a hex color string.' + example: '#4DBB52' + maxLength: 8 + pattern: '^(#[0-9a-zA-Z]{6})$' type: ['null', string] email: + description: 'Unique email of the user.' + example: bi-pi@example.com + externalDocs: { url: 'https://schema.org/email' } + format: email + maxLength: 64 + readOnly: true + type: string + firstname: + description: "The user's (optional) first name." + example: Robert + maxLength: 64 type: ['null', string] - password: - maxLength: 128 - minLength: 12 + language: + description: 'The optional preferred language of the user, as an ICU language code.' + enum: [de, de-CH-scout, en, en-CH-scout, fr, fr-CH-scout, it, it-CH-scout, rm, rm-CH-scout] + example: en + maxLength: 20 + type: ['null', string] + legalName: + description: |- + The legal name of the user, for printing on legally relevant + documents. Falls back to the nickname if not complete. + example: 'Robert Baden-Powell' + readOnly: true + type: ['null', string] + newEmail: + description: 'New email.' + example: bi-pi@example.com + externalDocs: { url: 'https://schema.org/email' } + format: email type: ['null', string] writeOnly: true - recaptchaToken: + nickname: + description: "The user's (optional) nickname or scout name." + example: Bi-Pi + maxLength: 32 + type: ['null', string] + surname: + description: "The user's (optional) last name." + example: Baden-Powell + maxLength: 64 + type: ['null', string] + untrustedEmailKey: + description: 'User input for email verification.' type: ['null', string] writeOnly: true + required: + - email type: object id: type: string + relationships: + properties: + user: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + type: object type: type: string required: - id - type type: object + included: + description: 'Related resources requested via the "include" query parameter.' + externalDocs: + url: 'https://jsonapi.org/format/#fetching-includes' + items: + anyOf: + - + $ref: '#/components/schemas/Profile.jsonapi' + readOnly: true + type: array type: object - ResetPassword.jsonhal: + Profile.jsonhal-read: deprecated: false - description: '' + description: |- + The profile of a person using eCamp. + The properties available to related eCamp users are here. + Related means that they were or are collaborators in the same camp. properties: _links: properties: @@ -16537,30 +17394,94 @@ components: type: string type: object type: object + abbreviation: + description: 'The default abbreviation in the avatar.' + example: AB + maxLength: 2 + type: + - 'null' + - string + color: + description: 'The default color of the avatar as a hex color string.' + example: '#4DBB52' + maxLength: 8 + pattern: '^(#[0-9a-zA-Z]{6})$' + type: + - 'null' + - string email: + description: 'Unique email of the user.' + example: bi-pi@example.com + externalDocs: + url: 'https://schema.org/email' + format: email + maxLength: 64 + type: string + firstname: + description: "The user's (optional) first name." + example: Robert + maxLength: 64 type: - 'null' - string id: - description: "$id: base64_encode($email . '#' . $resetKey)." + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + language: + description: 'The optional preferred language of the user, as an ICU language code.' + enum: + - de + - de-CH-scout + - en + - en-CH-scout + - fr + - fr-CH-scout + - it + - it-CH-scout + - rm + - rm-CH-scout + example: en + maxLength: 20 + type: + - 'null' + - string + legalName: + description: |- + The legal name of the user, for printing on legally relevant + documents. Falls back to the nickname if not complete. + example: 'Robert Baden-Powell' readOnly: true type: - 'null' - string - password: - maxLength: 128 - minLength: 12 + nickname: + description: "The user's (optional) nickname or scout name." + example: Bi-Pi + maxLength: 32 type: - 'null' - string - writeOnly: true - recaptchaToken: + surname: + description: "The user's (optional) last name." + example: Baden-Powell + maxLength: 64 type: - 'null' - string - writeOnly: true + user: + example: /users/1a2b3c4d + format: iri-reference + readOnly: true + type: + - 'null' + - string + required: + - email type: object - ResetPassword.jsonhal-create: + Profile.jsonhal-read_User.create: deprecated: false description: '' properties: @@ -16573,21 +17494,191 @@ components: type: string type: object type: object - email: + abbreviation: + description: 'The default abbreviation in the avatar.' + example: AB + maxLength: 2 type: - 'null' - string - recaptchaToken: + color: + description: 'The default color of the avatar as a hex color string.' + example: '#4DBB52' + maxLength: 8 + pattern: '^(#[0-9a-zA-Z]{6})$' type: - 'null' - string - writeOnly: true - type: object - ResetPassword.jsonld: - deprecated: false - description: '' - properties: - '@context': + email: + description: 'Unique email of the user.' + example: bi-pi@example.com + externalDocs: + url: 'https://schema.org/email' + format: email + maxLength: 64 + type: string + firstname: + description: "The user's (optional) first name." + example: Robert + maxLength: 64 + type: + - 'null' + - string + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + language: + description: 'The optional preferred language of the user, as an ICU language code.' + enum: + - de + - de-CH-scout + - en + - en-CH-scout + - fr + - fr-CH-scout + - it + - it-CH-scout + - rm + - rm-CH-scout + example: en + maxLength: 20 + type: + - 'null' + - string + legalName: + description: |- + The legal name of the user, for printing on legally relevant + documents. Falls back to the nickname if not complete. + example: 'Robert Baden-Powell' + readOnly: true + type: + - 'null' + - string + nickname: + description: "The user's (optional) nickname or scout name." + example: Bi-Pi + maxLength: 32 + type: + - 'null' + - string + surname: + description: "The user's (optional) last name." + example: Baden-Powell + maxLength: 64 + type: + - 'null' + - string + user: + example: /users/1a2b3c4d + format: iri-reference + readOnly: true + type: + - 'null' + - string + required: + - email + type: object + Profile.jsonhal-write_create: + deprecated: false + description: |- + The profile of a person using eCamp. + The properties available to related eCamp users are here. + Related means that they were or are collaborators in the same camp. + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + abbreviation: + description: 'The default abbreviation in the avatar.' + example: AB + maxLength: 2 + type: + - 'null' + - string + color: + description: 'The default color of the avatar as a hex color string.' + example: '#4DBB52' + maxLength: 8 + pattern: '^(#[0-9a-zA-Z]{6})$' + type: + - 'null' + - string + email: + description: 'Unique email of the user.' + example: bi-pi@example.com + externalDocs: + url: 'https://schema.org/email' + format: email + maxLength: 64 + type: string + firstname: + description: "The user's (optional) first name." + example: Robert + maxLength: 64 + type: + - 'null' + - string + language: + description: 'The optional preferred language of the user, as an ICU language code.' + enum: + - de + - de-CH-scout + - en + - en-CH-scout + - fr + - fr-CH-scout + - it + - it-CH-scout + - rm + - rm-CH-scout + example: en + maxLength: 20 + type: + - 'null' + - string + newEmail: + description: 'New email.' + example: bi-pi@example.com + externalDocs: + url: 'https://schema.org/email' + format: email + type: + - 'null' + - string + nickname: + description: "The user's (optional) nickname or scout name." + example: Bi-Pi + maxLength: 32 + type: + - 'null' + - string + surname: + description: "The user's (optional) last name." + example: Baden-Powell + maxLength: 64 + type: + - 'null' + - string + required: + - email + type: object + Profile.jsonld-read: + deprecated: false + description: |- + The profile of a person using eCamp. + The properties available to related eCamp users are here. + Related means that they were or are collaborators in the same camp. + properties: + '@context': oneOf: - additionalProperties: true @@ -16610,379 +17701,379 @@ components: '@type': readOnly: true type: string + abbreviation: + description: 'The default abbreviation in the avatar.' + example: AB + maxLength: 2 + type: + - 'null' + - string + color: + description: 'The default color of the avatar as a hex color string.' + example: '#4DBB52' + maxLength: 8 + pattern: '^(#[0-9a-zA-Z]{6})$' + type: + - 'null' + - string email: + description: 'Unique email of the user.' + example: bi-pi@example.com + externalDocs: + url: 'https://schema.org/email' + format: email + maxLength: 64 + type: string + firstname: + description: "The user's (optional) first name." + example: Robert + maxLength: 64 type: - 'null' - string id: - description: "$id: base64_encode($email . '#' . $resetKey)." + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 readOnly: true + type: string + language: + description: 'The optional preferred language of the user, as an ICU language code.' + enum: + - de + - de-CH-scout + - en + - en-CH-scout + - fr + - fr-CH-scout + - it + - it-CH-scout + - rm + - rm-CH-scout + example: en + maxLength: 20 type: - 'null' - string - password: - maxLength: 128 - minLength: 12 + legalName: + description: |- + The legal name of the user, for printing on legally relevant + documents. Falls back to the nickname if not complete. + example: 'Robert Baden-Powell' + readOnly: true type: - 'null' - string - writeOnly: true - recaptchaToken: + nickname: + description: "The user's (optional) nickname or scout name." + example: Bi-Pi + maxLength: 32 type: - 'null' - string - writeOnly: true - type: object - ResetPassword.jsonld-create: - deprecated: false - description: '' - properties: - email: + surname: + description: "The user's (optional) last name." + example: Baden-Powell + maxLength: 64 type: - 'null' - string - recaptchaToken: + user: + example: /users/1a2b3c4d + format: iri-reference + readOnly: true type: - 'null' - string - writeOnly: true + required: + - email type: object - ResponsiveLayout-read: + Profile.jsonld-read_User.create: deprecated: false description: '' properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + '@type': readOnly: true type: string - data: - default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - items: - - - slot: aside-bottom - - - slot: aside-top - - - slot: main - items: - type: string + abbreviation: + description: 'The default abbreviation in the avatar.' + example: AB + maxLength: 2 + type: + - 'null' + - string + color: + description: 'The default color of the avatar as a hex color string.' + example: '#4DBB52' + maxLength: 8 + pattern: '^(#[0-9a-zA-Z]{6})$' + type: + - 'null' + - string + email: + description: 'Unique email of the user.' + example: bi-pi@example.com + externalDocs: + url: 'https://schema.org/email' + format: email + maxLength: 64 + type: string + firstname: + description: "The user's (optional) first name." + example: Robert + maxLength: 64 type: - - array - 'null' + - string id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 + language: + description: 'The optional preferred language of the user, as an ICU language code.' + enum: + - de + - de-CH-scout + - en + - en-CH-scout + - fr + - fr-CH-scout + - it + - it-CH-scout + - rm + - rm-CH-scout + example: en + maxLength: 20 type: - 'null' - string - parent: + legalName: description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d - format: iri-reference + The legal name of the user, for printing on legally relevant + documents. Falls back to the nickname if not complete. + example: 'Robert Baden-Powell' + readOnly: true type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference - readOnly: true + nickname: + description: "The user's (optional) nickname or scout name." + example: Bi-Pi + maxLength: 32 type: - 'null' - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 + surname: + description: "The user's (optional) last name." + example: Baden-Powell + maxLength: 64 + type: + - 'null' + - string + user: + example: /users/1a2b3c4d + format: iri-reference + readOnly: true type: - 'null' - string required: - - children - - contentType - - data - - position + - email type: object - ResponsiveLayout-write_create: + Profile.jsonld-write_create: deprecated: false - description: '' + description: |- + The profile of a person using eCamp. + The properties available to related eCamp users are here. + Related means that they were or are collaborators in the same camp. properties: - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference + abbreviation: + description: 'The default abbreviation in the avatar.' + example: AB + maxLength: 2 + type: + - 'null' + - string + color: + description: 'The default color of the avatar as a hex color string.' + example: '#4DBB52' + maxLength: 8 + pattern: '^(#[0-9a-zA-Z]{6})$' + type: + - 'null' + - string + email: + description: 'Unique email of the user.' + example: bi-pi@example.com + externalDocs: + url: 'https://schema.org/email' + format: email + maxLength: 64 type: string - data: - default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - items: - - - slot: aside-bottom - - - slot: aside-top - - - slot: main - items: - type: string + firstname: + description: "The user's (optional) first name." + example: Robert + maxLength: 64 type: - - array - 'null' - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 + - string + language: + description: 'The optional preferred language of the user, as an ICU language code.' + enum: + - de + - de-CH-scout + - en + - en-CH-scout + - fr + - fr-CH-scout + - it + - it-CH-scout + - rm + - rm-CH-scout + example: en + maxLength: 20 type: - 'null' - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d - format: iri-reference + newEmail: + description: 'New email.' + example: bi-pi@example.com + externalDocs: + url: 'https://schema.org/email' + format: email type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' + nickname: + description: "The user's (optional) nickname or scout name." + example: Bi-Pi maxLength: 32 type: - 'null' - string - required: - - contentType - - data - - parent - - position + surname: + description: "The user's (optional) last name." + example: Baden-Powell + maxLength: 64 + type: + - 'null' + - string + required: + - email type: object - ResponsiveLayout-write_update: + ResetPassword: deprecated: false description: '' properties: - data: - default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - items: - - - slot: aside-bottom - - - slot: aside-top - - - slot: main - items: - type: string + email: type: - - array - 'null' - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 + - string + id: + description: "$id: base64_encode($email . '#' . $resetKey)." + readOnly: true type: - 'null' - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d - format: iri-reference + password: + maxLength: 128 + minLength: 12 type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 + writeOnly: true + recaptchaToken: type: - 'null' - string - required: - - data - - position + writeOnly: true type: object - ResponsiveLayout.jsonapi: + ResetPassword-create: deprecated: false description: '' properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference - readOnly: true - type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept - readOnly: true - type: string - data: - default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - items: - - - slot: aside-bottom - - - slot: aside-top - - - slot: main - items: - type: string - type: - - array - - 'null' - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 + email: type: - 'null' - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d - format: iri-reference + recaptchaToken: type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference - readOnly: true + writeOnly: true + type: object + ResetPassword-update: + deprecated: false + description: '' + properties: + password: + maxLength: 128 + minLength: 12 type: - 'null' - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 + writeOnly: true + recaptchaToken: type: - 'null' - string - required: - - children - - contentType - - data - - position + writeOnly: true type: object - ResponsiveLayout.jsonhal-read: + ResetPassword.jsonapi: + deprecated: false + description: '' + properties: + data: + properties: + attributes: + properties: + _id: + description: "$id: base64_encode($email . '#' . $resetKey)." + readOnly: true + type: ['null', string] + email: + type: ['null', string] + password: + maxLength: 128 + minLength: 12 + type: ['null', string] + writeOnly: true + recaptchaToken: + type: ['null', string] + writeOnly: true + type: object + id: + type: string + type: + type: string + required: + - id + - type + type: object + type: object + ResetPassword.jsonhal: deprecated: false description: '' properties: @@ -16995,104 +18086,30 @@ components: type: string type: object type: object - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference - type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept - readOnly: true - type: string - data: - default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - items: - - - slot: aside-bottom - - - slot: aside-top - - - slot: main - items: - type: string + email: type: - - array - 'null' + - string id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 + description: "$id: base64_encode($email . '#' . $resetKey)." readOnly: true - type: string - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 type: - 'null' - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d - format: iri-reference - type: - - 'null' - - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference - readOnly: true + password: + maxLength: 128 + minLength: 12 type: - 'null' - string - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 + writeOnly: true + recaptchaToken: type: - 'null' - string - required: - - children - - contentType - - data - - position + writeOnly: true type: object - ResponsiveLayout.jsonhal-write_create: + ResetPassword.jsonhal-create: deprecated: false description: '' properties: @@ -17105,74 +18122,17 @@ components: type: string type: object type: object - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference - type: string - data: - default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - items: - - - slot: aside-bottom - - - slot: aside-top - - - slot: main - items: - type: string - type: - - array - - 'null' - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string - parent: - description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d - format: iri-reference + email: type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 + recaptchaToken: type: - 'null' - string - required: - - contentType - - data - - parent - - position + writeOnly: true type: object - ResponsiveLayout.jsonld-read: + ResetPassword.jsonld: deprecated: false description: '' properties: @@ -17199,6 +18159,47 @@ components: '@type': readOnly: true type: string + email: + type: + - 'null' + - string + id: + description: "$id: base64_encode($email . '#' . $resetKey)." + readOnly: true + type: + - 'null' + - string + password: + maxLength: 128 + minLength: 12 + type: + - 'null' + - string + writeOnly: true + recaptchaToken: + type: + - 'null' + - string + writeOnly: true + type: object + ResetPassword.jsonld-create: + deprecated: false + description: '' + properties: + email: + type: + - 'null' + - string + recaptchaToken: + type: + - 'null' + - string + writeOnly: true + type: object + ResponsiveLayout-read: + deprecated: false + description: '' + properties: children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -17218,7 +18219,7 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: @@ -17296,7 +18297,7 @@ components: - data - position type: object - ResponsiveLayout.jsonld-write_create: + ResponsiveLayout-write_create: deprecated: false description: '' properties: @@ -17367,402 +18368,555 @@ components: - parent - position type: object - ScheduleEntry-read: + ResponsiveLayout-write_update: deprecated: false - description: |- - A calendar event in a period of the camp, at which some activity will take place. The start time - is specified as an offset in minutes from the period's start time. + description: '' properties: - activity: + data: + default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' description: |- - The activity that will take place at the time defined by this schedule entry. Can not be changed - once the schedule entry is created. - example: /activities/1a2b3c4d - format: iri-reference - type: string - day: - description: 'The day on which this schedule entry starts.' - example: /days/1a2b3c4d - format: iri-reference - readOnly: true + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + items: + - + slot: aside-bottom + - + slot: aside-top + - + slot: main + items: + type: string type: + - array - 'null' - - string - dayNumber: - description: 'The day number of the day on which this schedule entry starts.' - example: '1' - readOnly: true - type: integer - end: - description: 'End date and time of the schedule entry.' - example: '2022-01-02T01:30:00+00:00' - format: date-time - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - readOnly: true - type: string - left: + instanceName: description: |- - When rendering a period in a calendar view: Specifies how far offset the rendered calendar event - should be from the left border of the day column, as a fractional amount of the width of the whole - day. This is useful to arrange multiple overlapping schedule entries such that all of them are - visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the - API currently does not enforce this. - example: 0.6 + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 type: - 'null' - - number - number: + - string + parent: description: |- - Uniquely identifies this schedule entry in the period. This uses the day number, followed - by a period, followed by the cardinal number of the schedule entry in the numbering scheme - defined by the activity's category. - example: 1.b - readOnly: true - type: string - period: - description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' - example: /periods/1a2b3c4d + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntryNumber: + type: + - 'null' + - string + position: + default: -1 description: |- - The cardinal number of this schedule entry, when chronologically ordering all - schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if - the schedule entry is the second entry with roman numbering on a given day, its - number will be 2. - example: '2' - readOnly: true + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - start: - description: 'Start date and time of the schedule entry.' - example: '2022-01-02T00:00:00+00:00' - format: date-time - width: - default: 1 + slot: description: |- - When rendering a period in a calendar view: Specifies how wide the rendered calendar event should - be, as a fractional amount of the width of the whole day. This is useful to arrange multiple - overlapping schedule entries such that all of them are visible. Should be a decimal number - between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. - example: 0.4 - type: - - 'null' - - number + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - end - - start + - data + - position type: object - ScheduleEntry-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: + ResponsiveLayout.jsonapi: deprecated: false description: '' properties: - activity: + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + contentType: description: |- - The activity that will take place at the time defined by this schedule entry. Can not be changed - once the schedule entry is created. - example: /activities/1a2b3c4d + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference + readOnly: true type: string - day: - description: 'The day on which this schedule entry starts.' - example: /days/1a2b3c4d - format: iri-reference + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true + type: string + data: + default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + items: + - + slot: aside-bottom + - + slot: aside-top + - + slot: main + items: + type: string type: + - array - 'null' - - string - dayNumber: - description: 'The day number of the day on which this schedule entry starts.' - example: '1' - readOnly: true - type: integer - end: - description: 'End date and time of the schedule entry.' - example: '2022-01-02T01:30:00+00:00' - format: date-time id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - left: + instanceName: description: |- - When rendering a period in a calendar view: Specifies how far offset the rendered calendar event - should be from the left border of the day column, as a fractional amount of the width of the whole - day. This is useful to arrange multiple overlapping schedule entries such that all of them are - visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the - API currently does not enforce this. - example: 0.6 + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 type: - 'null' - - number - number: + - string + parent: description: |- - Uniquely identifies this schedule entry in the period. This uses the day number, followed - by a period, followed by the cardinal number of the schedule entry in the numbering scheme - defined by the activity's category. - example: 1.b - readOnly: true - type: string - period: - description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' - example: /periods/1a2b3c4d + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntryNumber: + type: + - 'null' + - string + position: + default: -1 description: |- - The cardinal number of this schedule entry, when chronologically ordering all - schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if - the schedule entry is the second entry with roman numbering on a given day, its - number will be 2. - example: '2' - readOnly: true + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - start: - description: 'Start date and time of the schedule entry.' - example: '2022-01-02T00:00:00+00:00' - format: date-time - width: - default: 1 + root: description: |- - When rendering a period in a calendar view: Specifies how wide the rendered calendar event should - be, as a fractional amount of the width of the whole day. This is useful to arrange multiple - overlapping schedule entries such that all of them are visible. Should be a decimal number - between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. - example: 0.4 + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d + format: iri-reference + readOnly: true type: - 'null' - - number + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - activity - - end - - start + - children + - contentType + - data + - position type: object - ScheduleEntry-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: + ResponsiveLayout.jsonhal-read: deprecated: false description: '' properties: - activity: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + contentType: description: |- - The activity that will take place at the time defined by this schedule entry. Can not be changed - once the schedule entry is created. - example: /activities/1a2b3c4d + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference type: string - day: - description: 'The day on which this schedule entry starts.' - example: /days/1a2b3c4d - format: iri-reference + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations readOnly: true + type: string + data: + default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + items: + - + slot: aside-bottom + - + slot: aside-top + - + slot: main + items: + type: string type: + - array - 'null' - - string - dayNumber: - description: 'The day number of the day on which this schedule entry starts.' - example: '1' - readOnly: true - type: integer - end: - description: 'End date and time of the schedule entry.' - example: '2022-01-02T01:30:00+00:00' - format: date-time id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - left: + instanceName: description: |- - When rendering a period in a calendar view: Specifies how far offset the rendered calendar event - should be from the left border of the day column, as a fractional amount of the width of the whole - day. This is useful to arrange multiple overlapping schedule entries such that all of them are - visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the - API currently does not enforce this. - example: 0.6 + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 type: - 'null' - - number - number: + - string + parent: description: |- - Uniquely identifies this schedule entry in the period. This uses the day number, followed - by a period, followed by the cardinal number of the schedule entry in the numbering scheme - defined by the activity's category. - example: 1.b - readOnly: true - type: string - period: - description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' - example: /periods/1a2b3c4d + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntryNumber: + type: + - 'null' + - string + position: + default: -1 description: |- - The cardinal number of this schedule entry, when chronologically ordering all - schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if - the schedule entry is the second entry with roman numbering on a given day, its - number will be 2. - example: '2' - readOnly: true + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - start: - description: 'Start date and time of the schedule entry.' - example: '2022-01-02T00:00:00+00:00' - format: date-time - width: - default: 1 + root: description: |- - When rendering a period in a calendar view: Specifies how wide the rendered calendar event should - be, as a fractional amount of the width of the whole day. This is useful to arrange multiple - overlapping schedule entries such that all of them are visible. Should be a decimal number - between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. - example: 0.4 + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d + format: iri-reference + readOnly: true type: - 'null' - - number + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - activity - - end - - start + - children + - contentType + - data + - position type: object - ScheduleEntry-read_ScheduleEntry.Activity: + ResponsiveLayout.jsonhal-write_create: deprecated: false - description: |- - A calendar event in a period of the camp, at which some activity will take place. The start time - is specified as an offset in minutes from the period's start time. + description: '' properties: - activity: - anyOf: - - - $ref: '#/components/schemas/Activity-read_ScheduleEntry.Activity' - - - type: 'null' - readOnly: true - day: - description: 'The day on which this schedule entry starts.' - example: /days/1a2b3c4d + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference - readOnly: true + type: string + data: + default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + items: + - + slot: aside-bottom + - + slot: aside-top + - + slot: main + items: + type: string type: + - array - 'null' - - string - dayNumber: - description: 'The day number of the day on which this schedule entry starts.' - example: '1' - readOnly: true - type: integer - end: - description: 'End date and time of the schedule entry.' - example: '2022-01-02T01:30:00+00:00' - format: date-time - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - left: + instanceName: description: |- - When rendering a period in a calendar view: Specifies how far offset the rendered calendar event - should be from the left border of the day column, as a fractional amount of the width of the whole - day. This is useful to arrange multiple overlapping schedule entries such that all of them are - visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the - API currently does not enforce this. - example: 0.6 + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 type: - 'null' - - number - number: + - string + parent: description: |- - Uniquely identifies this schedule entry in the period. This uses the day number, followed - by a period, followed by the cardinal number of the schedule entry in the numbering scheme - defined by the activity's category. - example: 1.b - readOnly: true - type: string - period: - description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' - example: /periods/1a2b3c4d + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d format: iri-reference - type: string - scheduleEntryNumber: + type: + - 'null' + - string + position: + default: -1 description: |- - The cardinal number of this schedule entry, when chronologically ordering all - schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if - the schedule entry is the second entry with roman numbering on a given day, its - number will be 2. - example: '2' - readOnly: true + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 type: integer - start: - description: 'Start date and time of the schedule entry.' - example: '2022-01-02T00:00:00+00:00' - format: date-time - width: - default: 1 + slot: description: |- - When rendering a period in a calendar view: Specifies how wide the rendered calendar event should - be, as a fractional amount of the width of the whole day. This is useful to arrange multiple - overlapping schedule entries such that all of them are visible. Should be a decimal number - between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. - example: 0.4 + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 type: - 'null' - - number + - string required: - - activity - - end - - start + - contentType + - data + - parent + - position type: object - ScheduleEntry-write: + ResponsiveLayout.jsonld-read: deprecated: false - description: |- - A calendar event in a period of the camp, at which some activity will take place. The start time - is specified as an offset in minutes from the period's start time. + description: '' properties: - end: - description: 'End date and time of the schedule entry.' - example: '2022-01-02T01:30:00+00:00' - format: date-time - left: + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + contentType: description: |- - When rendering a period in a calendar view: Specifies how far offset the rendered calendar event - should be from the left border of the day column, as a fractional amount of the width of the whole - day. This is useful to arrange multiple overlapping schedule entries such that all of them are - visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the - API currently does not enforce this. - example: 0.6 - type: - - 'null' - - number - period: - description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' - example: /periods/1a2b3c4d + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d format: iri-reference type: string - start: - description: 'Start date and time of the schedule entry.' - example: '2022-01-02T00:00:00+00:00' - format: date-time - width: - default: 1 + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations + readOnly: true + type: string + data: + default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' description: |- - When rendering a period in a calendar view: Specifies how wide the rendered calendar event should - be, as a fractional amount of the width of the whole day. This is useful to arrange multiple - overlapping schedule entries such that all of them are visible. Should be a decimal number - between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. - example: 0.4 + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + items: + - + slot: aside-bottom + - + slot: aside-top + - + slot: main + items: + type: string type: + - array - 'null' - - number + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d + format: iri-reference + readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string required: - - end - - start + - children + - contentType + - data + - position type: object - ScheduleEntry-write_create: + ResponsiveLayout.jsonld-write_create: + deprecated: false + description: '' + properties: + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + data: + default: '{"items":[{"slot":"main"},{"slot":"aside-top"},{"slot":"aside-bottom"}]}' + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + items: + - + slot: aside-bottom + - + slot: aside-top + - + slot: main + items: + type: string + type: + - array + - 'null' + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string + required: + - contentType + - data + - parent + - position + type: object + ScheduleEntry-read: deprecated: false description: |- A calendar event in a period of the camp, at which some activity will take place. The start time @@ -17775,10 +18929,28 @@ components: example: /activities/1a2b3c4d format: iri-reference type: string + day: + description: 'The day on which this schedule entry starts.' + example: /days/1a2b3c4d + format: iri-reference + readOnly: true + type: + - 'null' + - string + dayNumber: + description: 'The day number of the day on which this schedule entry starts.' + example: '1' + readOnly: true + type: integer end: description: 'End date and time of the schedule entry.' example: '2022-01-02T01:30:00+00:00' format: date-time + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + readOnly: true + type: string left: description: |- When rendering a period in a calendar view: Specifies how far offset the rendered calendar event @@ -17790,11 +18962,28 @@ components: type: - 'null' - number + number: + description: |- + Uniquely identifies this schedule entry in the period. This uses the day number, followed + by a period, followed by the cardinal number of the schedule entry in the numbering scheme + defined by the activity's category. + example: 1.b + readOnly: true + type: string period: description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' example: /periods/1a2b3c4d format: iri-reference type: string + scheduleEntryNumber: + description: |- + The cardinal number of this schedule entry, when chronologically ordering all + schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if + the schedule entry is the second entry with roman numbering on a given day, its + number will be 2. + example: '2' + readOnly: true + type: integer start: description: 'Start date and time of the schedule entry.' example: '2022-01-02T00:00:00+00:00' @@ -17811,127 +19000,13 @@ components: - 'null' - number required: - - activity - end - start type: object - ScheduleEntry.jsonapi: + ScheduleEntry-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: deprecated: false - description: |- - A calendar event in a period of the camp, at which some activity will take place. The start time - is specified as an offset in minutes from the period's start time. + description: '' properties: - data: - properties: - attributes: - properties: - _id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - dayNumber: - description: 'The day number of the day on which this schedule entry starts.' - example: '1' - readOnly: true - type: integer - end: - description: 'End date and time of the schedule entry.' - example: '2022-01-02T01:30:00+00:00' - format: date-time - left: - description: |- - When rendering a period in a calendar view: Specifies how far offset the rendered calendar event - should be from the left border of the day column, as a fractional amount of the width of the whole - day. This is useful to arrange multiple overlapping schedule entries such that all of them are - visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the - API currently does not enforce this. - example: 0.6 - type: ['null', number] - number: - description: |- - Uniquely identifies this schedule entry in the period. This uses the day number, followed - by a period, followed by the cardinal number of the schedule entry in the numbering scheme - defined by the activity's category. - example: 1.b - readOnly: true - type: string - scheduleEntryNumber: - description: |- - The cardinal number of this schedule entry, when chronologically ordering all - schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if - the schedule entry is the second entry with roman numbering on a given day, its - number will be 2. - example: '2' - readOnly: true - type: integer - start: - description: 'Start date and time of the schedule entry.' - example: '2022-01-02T00:00:00+00:00' - format: date-time - width: - default: 1 - description: |- - When rendering a period in a calendar view: Specifies how wide the rendered calendar event should - be, as a fractional amount of the width of the whole day. This is useful to arrange multiple - overlapping schedule entries such that all of them are visible. Should be a decimal number - between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. - example: 0.4 - type: ['null', number] - required: - - end - - start - type: object - id: - type: string - relationships: - properties: - activity: - properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } - day: - properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } - period: - properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } - required: - - activity - type: object - type: - type: string - required: - - id - - type - type: object - included: - description: 'Related resources requested via the "include" query parameter.' - externalDocs: - url: 'https://jsonapi.org/format/#fetching-includes' - items: - anyOf: - - - $ref: '#/components/schemas/Period.jsonapi' - - - $ref: '#/components/schemas/Period.jsonapi' - - - $ref: '#/components/schemas/Period.jsonapi' - readOnly: true - type: array - type: object - ScheduleEntry.jsonhal-read: - deprecated: false - description: |- - A calendar event in a period of the camp, at which some activity will take place. The start time - is specified as an offset in minutes from the period's start time. - properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object activity: description: |- The activity that will take place at the time defined by this schedule entry. Can not be changed @@ -17959,6 +19034,7 @@ components: id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d + maxLength: 16 readOnly: true type: string left: @@ -18010,22 +19086,14 @@ components: - 'null' - number required: + - activity - end - start type: object - ScheduleEntry.jsonhal-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: + ScheduleEntry-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: deprecated: false description: '' properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object activity: description: |- The activity that will take place at the time defined by this schedule entry. Can not be changed @@ -18109,26 +19177,19 @@ components: - end - start type: object - ScheduleEntry.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: + ScheduleEntry-read_ScheduleEntry.Activity: deprecated: false - description: '' + description: |- + A calendar event in a period of the camp, at which some activity will take place. The start time + is specified as an offset in minutes from the period's start time. properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object activity: - description: |- - The activity that will take place at the time defined by this schedule entry. Can not be changed - once the schedule entry is created. - example: /activities/1a2b3c4d - format: iri-reference - type: string + anyOf: + - + $ref: '#/components/schemas/Activity-read_ScheduleEntry.Activity' + - + type: 'null' + readOnly: true day: description: 'The day on which this schedule entry starts.' example: /days/1a2b3c4d @@ -18205,51 +19266,16 @@ components: - end - start type: object - ScheduleEntry.jsonhal-read_ScheduleEntry.Activity: + ScheduleEntry-write: deprecated: false description: |- A calendar event in a period of the camp, at which some activity will take place. The start time is specified as an offset in minutes from the period's start time. properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object - activity: - anyOf: - - - $ref: '#/components/schemas/Activity.jsonhal-read_ScheduleEntry.Activity' - - - type: 'null' - readOnly: true - day: - description: 'The day on which this schedule entry starts.' - example: /days/1a2b3c4d - format: iri-reference - readOnly: true - type: - - 'null' - - string - dayNumber: - description: 'The day number of the day on which this schedule entry starts.' - example: '1' - readOnly: true - type: integer end: description: 'End date and time of the schedule entry.' example: '2022-01-02T01:30:00+00:00' format: date-time - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string left: description: |- When rendering a period in a calendar view: Specifies how far offset the rendered calendar event @@ -18261,28 +19287,11 @@ components: type: - 'null' - number - number: - description: |- - Uniquely identifies this schedule entry in the period. This uses the day number, followed - by a period, followed by the cardinal number of the schedule entry in the numbering scheme - defined by the activity's category. - example: 1.b - readOnly: true - type: string period: description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' example: /periods/1a2b3c4d format: iri-reference type: string - scheduleEntryNumber: - description: |- - The cardinal number of this schedule entry, when chronologically ordering all - schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if - the schedule entry is the second entry with roman numbering on a given day, its - number will be 2. - example: '2' - readOnly: true - type: integer start: description: 'Start date and time of the schedule entry.' example: '2022-01-02T00:00:00+00:00' @@ -18299,25 +19308,15 @@ components: - 'null' - number required: - - activity - end - start type: object - ScheduleEntry.jsonhal-write_create: + ScheduleEntry-write_create: deprecated: false description: |- A calendar event in a period of the camp, at which some activity will take place. The start time is specified as an offset in minutes from the period's start time. properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object activity: description: |- The activity that will take place at the time defined by this schedule entry. Can not be changed @@ -18365,35 +19364,123 @@ components: - end - start type: object - ScheduleEntry.jsonld-read: + ScheduleEntry.jsonapi: deprecated: false description: |- A calendar event in a period of the camp, at which some activity will take place. The start time is specified as an offset in minutes from the period's start time. properties: - '@context': - oneOf: - - - additionalProperties: true + data: + properties: + attributes: properties: - '@vocab': + _id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] + dayNumber: + description: 'The day number of the day on which this schedule entry starts.' + example: '1' + readOnly: true + type: integer + end: + description: 'End date and time of the schedule entry.' + example: '2022-01-02T01:30:00+00:00' + format: date-time + left: + description: |- + When rendering a period in a calendar view: Specifies how far offset the rendered calendar event + should be from the left border of the day column, as a fractional amount of the width of the whole + day. This is useful to arrange multiple overlapping schedule entries such that all of them are + visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the + API currently does not enforce this. + example: 0.6 + type: ['null', number] + number: + description: |- + Uniquely identifies this schedule entry in the period. This uses the day number, followed + by a period, followed by the cardinal number of the schedule entry in the numbering scheme + defined by the activity's category. + example: 1.b + readOnly: true type: string + scheduleEntryNumber: + description: |- + The cardinal number of this schedule entry, when chronologically ordering all + schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if + the schedule entry is the second entry with roman numbering on a given day, its + number will be 2. + example: '2' + readOnly: true + type: integer + start: + description: 'Start date and time of the schedule entry.' + example: '2022-01-02T00:00:00+00:00' + format: date-time + width: + default: 1 + description: |- + When rendering a period in a calendar view: Specifies how wide the rendered calendar event should + be, as a fractional amount of the width of the whole day. This is useful to arrange multiple + overlapping schedule entries such that all of them are visible. Should be a decimal number + between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. + example: 0.4 + type: ['null', number] required: - - '@vocab' - - hydra + - end + - start type: object - - + id: type: string + relationships: + properties: + activity: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + day: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + period: + properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } } + required: + - activity + type: object + type: + type: string + required: + - id + - type + type: object + included: + description: 'Related resources requested via the "include" query parameter.' + externalDocs: + url: 'https://jsonapi.org/format/#fetching-includes' + items: + anyOf: + - + $ref: '#/components/schemas/Period.jsonapi' + - + $ref: '#/components/schemas/Period.jsonapi' + - + $ref: '#/components/schemas/Period.jsonapi' readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string + type: array + type: object + ScheduleEntry.jsonhal-read: + deprecated: false + description: |- + A calendar event in a period of the camp, at which some activity will take place. The start time + is specified as an offset in minutes from the period's start time. + properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object activity: description: |- The activity that will take place at the time defined by this schedule entry. Can not be changed @@ -18475,33 +19562,19 @@ components: - end - start type: object - ScheduleEntry.jsonld-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: + ScheduleEntry.jsonhal-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true + _links: + properties: + self: properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] + href: + format: iri-reference type: string - required: - - '@vocab' - - hydra type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string + type: object activity: description: |- The activity that will take place at the time defined by this schedule entry. Can not be changed @@ -18585,33 +19658,19 @@ components: - end - start type: object - ScheduleEntry.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: + ScheduleEntry.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true + _links: + properties: + self: properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] + href: + format: iri-reference type: string - required: - - '@vocab' - - hydra type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string + type: object activity: description: |- The activity that will take place at the time defined by this schedule entry. Can not be changed @@ -18695,39 +19754,25 @@ components: - end - start type: object - ScheduleEntry.jsonld-read_ScheduleEntry.Activity: + ScheduleEntry.jsonhal-read_ScheduleEntry.Activity: deprecated: false description: |- A calendar event in a period of the camp, at which some activity will take place. The start time is specified as an offset in minutes from the period's start time. properties: - '@context': - oneOf: - - - additionalProperties: true + _links: + properties: + self: properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] + href: + format: iri-reference type: string - required: - - '@vocab' - - hydra type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string + type: object activity: anyOf: - - $ref: '#/components/schemas/Activity.jsonld-read_ScheduleEntry.Activity' + $ref: '#/components/schemas/Activity.jsonhal-read_ScheduleEntry.Activity' - type: 'null' readOnly: true @@ -18807,12 +19852,21 @@ components: - end - start type: object - ScheduleEntry.jsonld-write_create: + ScheduleEntry.jsonhal-write_create: deprecated: false description: |- A calendar event in a period of the camp, at which some activity will take place. The start time is specified as an offset in minutes from the period's start time. properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object activity: description: |- The activity that will take place at the time defined by this schedule entry. Can not be changed @@ -18860,330 +19914,505 @@ components: - end - start type: object - SingleText-read: + ScheduleEntry.jsonld-read: deprecated: false - description: '' + description: |- + A calendar event in a period of the camp, at which some activity will take place. The start time + is specified as an offset in minutes from the period's start time. properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + '@type': readOnly: true type: string - data: - default: '{"html":""}' + activity: description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - html: 'my example text' - items: - type: string + The activity that will take place at the time defined by this schedule entry. Can not be changed + once the schedule entry is created. + example: /activities/1a2b3c4d + format: iri-reference + type: string + day: + description: 'The day on which this schedule entry starts.' + example: /days/1a2b3c4d + format: iri-reference + readOnly: true type: - - array - 'null' + - string + dayNumber: + description: 'The day number of the day on which this schedule entry starts.' + example: '1' + readOnly: true + type: integer + end: + description: 'End date and time of the schedule entry.' + example: '2022-01-02T01:30:00+00:00' + format: date-time id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d - maxLength: 16 readOnly: true type: string - instanceName: + left: description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 + When rendering a period in a calendar view: Specifies how far offset the rendered calendar event + should be from the left border of the day column, as a fractional amount of the width of the whole + day. This is useful to arrange multiple overlapping schedule entries such that all of them are + visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the + API currently does not enforce this. + example: 0.6 type: - 'null' - - string - parent: + - number + number: description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + Uniquely identifies this schedule entry in the period. This uses the day number, followed + by a period, followed by the cardinal number of the schedule entry in the numbering scheme + defined by the activity's category. + example: 1.b + readOnly: true + type: string + period: + description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' + example: /periods/1a2b3c4d format: iri-reference - type: - - 'null' - - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - root: + type: string + scheduleEntryNumber: description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference + The cardinal number of this schedule entry, when chronologically ordering all + schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if + the schedule entry is the second entry with roman numbering on a given day, its + number will be 2. + example: '2' readOnly: true - type: - - 'null' - - string - slot: + type: integer + start: + description: 'Start date and time of the schedule entry.' + example: '2022-01-02T00:00:00+00:00' + format: date-time + width: + default: 1 description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 + When rendering a period in a calendar view: Specifies how wide the rendered calendar event should + be, as a fractional amount of the width of the whole day. This is useful to arrange multiple + overlapping schedule entries such that all of them are visible. Should be a decimal number + between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. + example: 0.4 type: - 'null' - - string + - number required: - - children - - contentType - - data - - position + - end + - start type: object - SingleText-write_create: + ScheduleEntry.jsonld-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries: deprecated: false description: '' properties: - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': + readOnly: true type: string - data: - default: '{"html":""}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - html: 'my example text' - items: - type: string - type: - - array - - 'null' - instanceName: - description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string - parent: + '@type': + readOnly: true + type: string + activity: description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + The activity that will take place at the time defined by this schedule entry. Can not be changed + once the schedule entry is created. + example: /activities/1a2b3c4d + format: iri-reference + type: string + day: + description: 'The day on which this schedule entry starts.' + example: /days/1a2b3c4d format: iri-reference + readOnly: true type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 - type: integer - slot: - description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. + dayNumber: + description: 'The day number of the day on which this schedule entry starts.' example: '1' - maxLength: 32 - type: - - 'null' - - string - required: - - contentType - - data - - parent - - position - type: object - SingleText-write_update: - deprecated: false - description: '' - properties: - data: - default: '{"html":""}' - description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - html: 'my example text' - items: - type: string - type: - - array - - 'null' - instanceName: + readOnly: true + type: integer + end: + description: 'End date and time of the schedule entry.' + example: '2022-01-02T01:30:00+00:00' + format: date-time + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + left: description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 + When rendering a period in a calendar view: Specifies how far offset the rendered calendar event + should be from the left border of the day column, as a fractional amount of the width of the whole + day. This is useful to arrange multiple overlapping schedule entries such that all of them are + visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the + API currently does not enforce this. + example: 0.6 type: - 'null' - - string - parent: + - number + number: description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + Uniquely identifies this schedule entry in the period. This uses the day number, followed + by a period, followed by the cardinal number of the schedule entry in the numbering scheme + defined by the activity's category. + example: 1.b + readOnly: true + type: string + period: + description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' + example: /periods/1a2b3c4d format: iri-reference - type: - - 'null' - - string - position: - default: -1 + type: string + scheduleEntryNumber: description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 + The cardinal number of this schedule entry, when chronologically ordering all + schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if + the schedule entry is the second entry with roman numbering on a given day, its + number will be 2. + example: '2' + readOnly: true type: integer - slot: + start: + description: 'Start date and time of the schedule entry.' + example: '2022-01-02T00:00:00+00:00' + format: date-time + width: + default: 1 description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 + When rendering a period in a calendar view: Specifies how wide the rendered calendar event should + be, as a fractional amount of the width of the whole day. This is useful to arrange multiple + overlapping schedule entries such that all of them are visible. Should be a decimal number + between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. + example: 0.4 type: - 'null' - - string + - number required: - - data - - position + - activity + - end + - start type: object - SingleText.jsonapi: + ScheduleEntry.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes: deprecated: false description: '' properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference + '@id': readOnly: true type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + '@type': readOnly: true type: string - data: - default: '{"html":""}' + activity: description: |- - Holds the actual data of the content node - (overridden from abstract class in order to add specific validation). - example: - html: 'my example text' - items: - type: string + The activity that will take place at the time defined by this schedule entry. Can not be changed + once the schedule entry is created. + example: /activities/1a2b3c4d + format: iri-reference + type: string + day: + description: 'The day on which this schedule entry starts.' + example: /days/1a2b3c4d + format: iri-reference + readOnly: true type: - - array - 'null' + - string + dayNumber: + description: 'The day number of the day on which this schedule entry starts.' + example: '1' + readOnly: true + type: integer + end: + description: 'End date and time of the schedule entry.' + example: '2022-01-02T01:30:00+00:00' + format: date-time id: description: 'An internal, unique, randomly generated identifier of this entity.' example: 1a2b3c4d maxLength: 16 readOnly: true type: string - instanceName: + left: description: |- - An optional name for this content node. This is useful when planning e.g. an alternative - version of the programme suited for bad weather, in addition to the normal version. - example: Schlechtwetterprogramm - maxLength: 32 - type: - - 'null' - - string - parent: + When rendering a period in a calendar view: Specifies how far offset the rendered calendar event + should be from the left border of the day column, as a fractional amount of the width of the whole + day. This is useful to arrange multiple overlapping schedule entries such that all of them are + visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the + API currently does not enforce this. + example: 0.6 + type: + - 'null' + - number + number: description: |- - The parent to which this content node belongs. Is null in case this content node is the - root of a content node tree. For non-root content nodes, the parent can be changed, as long - as the new parent is in the same camp as the old one. - example: /content_nodes/1a2b3c4d + Uniquely identifies this schedule entry in the period. This uses the day number, followed + by a period, followed by the cardinal number of the schedule entry in the numbering scheme + defined by the activity's category. + example: 1.b + readOnly: true + type: string + period: + description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' + example: /periods/1a2b3c4d + format: iri-reference + type: string + scheduleEntryNumber: + description: |- + The cardinal number of this schedule entry, when chronologically ordering all + schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if + the schedule entry is the second entry with roman numbering on a given day, its + number will be 2. + example: '2' + readOnly: true + type: integer + start: + description: 'Start date and time of the schedule entry.' + example: '2022-01-02T00:00:00+00:00' + format: date-time + width: + default: 1 + description: |- + When rendering a period in a calendar view: Specifies how wide the rendered calendar event should + be, as a fractional amount of the width of the whole day. This is useful to arrange multiple + overlapping schedule entries such that all of them are visible. Should be a decimal number + between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. + example: 0.4 + type: + - 'null' + - number + required: + - activity + - end + - start + type: object + ScheduleEntry.jsonld-read_ScheduleEntry.Activity: + deprecated: false + description: |- + A calendar event in a period of the camp, at which some activity will take place. The start time + is specified as an offset in minutes from the period's start time. + properties: + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + activity: + anyOf: + - + $ref: '#/components/schemas/Activity.jsonld-read_ScheduleEntry.Activity' + - + type: 'null' + readOnly: true + day: + description: 'The day on which this schedule entry starts.' + example: /days/1a2b3c4d format: iri-reference + readOnly: true type: - 'null' - string - position: - default: -1 - description: |- - A whole number used for ordering multiple content nodes that are in the same slot of the - same parent. The API does not guarantee the uniqueness of parent+slot+position. - example: -1 + dayNumber: + description: 'The day number of the day on which this schedule entry starts.' + example: '1' + readOnly: true type: integer - root: + end: + description: 'End date and time of the schedule entry.' + example: '2022-01-02T01:30:00+00:00' + format: date-time + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + left: description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d + When rendering a period in a calendar view: Specifies how far offset the rendered calendar event + should be from the left border of the day column, as a fractional amount of the width of the whole + day. This is useful to arrange multiple overlapping schedule entries such that all of them are + visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the + API currently does not enforce this. + example: 0.6 + type: + - 'null' + - number + number: + description: |- + Uniquely identifies this schedule entry in the period. This uses the day number, followed + by a period, followed by the cardinal number of the schedule entry in the numbering scheme + defined by the activity's category. + example: 1.b + readOnly: true + type: string + period: + description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' + example: /periods/1a2b3c4d format: iri-reference + type: string + scheduleEntryNumber: + description: |- + The cardinal number of this schedule entry, when chronologically ordering all + schedule entries WITH THE SAME NUMBERING STYLE that start on the same day. I.e. if + the schedule entry is the second entry with roman numbering on a given day, its + number will be 2. + example: '2' readOnly: true + type: integer + start: + description: 'Start date and time of the schedule entry.' + example: '2022-01-02T00:00:00+00:00' + format: date-time + width: + default: 1 + description: |- + When rendering a period in a calendar view: Specifies how wide the rendered calendar event should + be, as a fractional amount of the width of the whole day. This is useful to arrange multiple + overlapping schedule entries such that all of them are visible. Should be a decimal number + between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. + example: 0.4 type: - 'null' - - string - slot: + - number + required: + - activity + - end + - start + type: object + ScheduleEntry.jsonld-write_create: + deprecated: false + description: |- + A calendar event in a period of the camp, at which some activity will take place. The start time + is specified as an offset in minutes from the period's start time. + properties: + activity: description: |- - The name of the slot in the parent in which this content node resides. The valid slot names - are defined by the content type of the parent. - example: '1' - maxLength: 32 + The activity that will take place at the time defined by this schedule entry. Can not be changed + once the schedule entry is created. + example: /activities/1a2b3c4d + format: iri-reference + type: string + end: + description: 'End date and time of the schedule entry.' + example: '2022-01-02T01:30:00+00:00' + format: date-time + left: + description: |- + When rendering a period in a calendar view: Specifies how far offset the rendered calendar event + should be from the left border of the day column, as a fractional amount of the width of the whole + day. This is useful to arrange multiple overlapping schedule entries such that all of them are + visible. Should be a decimal number between 0 and 1, and left+width should not exceed 1, but the + API currently does not enforce this. + example: 0.6 type: - 'null' - - string + - number + period: + description: 'The time period which this schedule entry is part of. Must belong to the same camp as the activity.' + example: /periods/1a2b3c4d + format: iri-reference + type: string + start: + description: 'Start date and time of the schedule entry.' + example: '2022-01-02T00:00:00+00:00' + format: date-time + width: + default: 1 + description: |- + When rendering a period in a calendar view: Specifies how wide the rendered calendar event should + be, as a fractional amount of the width of the whole day. This is useful to arrange multiple + overlapping schedule entries such that all of them are visible. Should be a decimal number + between 0 and 1, and left+width should not exceed 1, but the API currently does not enforce this. + example: 0.4 + type: + - 'null' + - number required: - - children - - contentType - - data - - position + - activity + - end + - start type: object - SingleText.jsonhal-read: + SingleText-read: deprecated: false description: '' properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -19203,7 +20432,7 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: @@ -19275,19 +20504,10 @@ components: - data - position type: object - SingleText.jsonhal-write_create: + SingleText-write_create: deprecated: false description: '' properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object contentType: description: |- Defines the type of this content node. There is a fixed list of types that are implemented @@ -19349,55 +20569,10 @@ components: - parent - position type: object - SingleText.jsonld-read: + SingleText-write_update: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array - contentType: - description: |- - Defines the type of this content node. There is a fixed list of types that are implemented - in eCamp. Depending on the type, different content data and different slots may be allowed - in a content node. The content type may not be changed once the content node is created. - example: /content_types/1a2b3c4d - format: iri-reference - type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept - readOnly: true - type: string data: default: '{"html":""}' description: |- @@ -19410,12 +20585,6 @@ components: type: - array - 'null' - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string instanceName: description: |- An optional name for this content node. This is useful when planning e.g. an alternative @@ -19442,16 +20611,6 @@ components: same parent. The API does not guarantee the uniqueness of parent+slot+position. example: -1 type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference - readOnly: true - type: - - 'null' - - string slot: description: |- The name of the slot in the parent in which this content node resides. The valid slot names @@ -19462,15 +20621,22 @@ components: - 'null' - string required: - - children - - contentType - data - position type: object - SingleText.jsonld-write_create: + SingleText.jsonapi: deprecated: false description: '' properties: + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array contentType: description: |- Defines the type of this content node. There is a fixed list of types that are implemented @@ -19478,6 +20644,12 @@ components: in a content node. The content type may not be changed once the content node is created. example: /content_types/1a2b3c4d format: iri-reference + readOnly: true + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations + readOnly: true type: string data: default: '{"html":""}' @@ -19491,6 +20663,12 @@ components: type: - array - 'null' + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string instanceName: description: |- An optional name for this content node. This is useful when planning e.g. an alternative @@ -19517,6 +20695,16 @@ components: same parent. The API does not guarantee the uniqueness of parent+slot+position. example: -1 type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d + format: iri-reference + readOnly: true + type: + - 'null' + - string slot: description: |- The name of the slot in the parent in which this content node resides. The valid slot names @@ -19527,15 +20715,24 @@ components: - 'null' - string required: + - children - contentType - data - - parent - position type: object - Storyboard-read: + SingleText.jsonhal-read: deprecated: false description: '' properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -19555,20 +20752,16 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: + default: '{"html":""}' description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). example: - sections: - 186b7ff2-7470-4de4-8783-082c2c189fcd: - column1: '' - column2Html: '' - column3: '' - position: 0 + html: 'my example text' items: type: string type: @@ -19628,12 +20821,22 @@ components: required: - children - contentType + - data - position type: object - Storyboard-write_create: + SingleText.jsonhal-write_create: deprecated: false description: '' properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object contentType: description: |- Defines the type of this content node. There is a fixed list of types that are implemented @@ -19643,16 +20846,12 @@ components: format: iri-reference type: string data: + default: '{"html":""}' description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). example: - sections: - 186b7ff2-7470-4de4-8783-082c2c189fcd: - column1: '' - column2Html: '' - column3: '' - position: 0 + html: 'my example text' items: type: string type: @@ -19695,29 +20894,77 @@ components: - string required: - contentType + - data - parent - position type: object - Storyboard-write_update: + SingleText.jsonld-read: deprecated: false description: '' properties: + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations + readOnly: true + type: string data: + default: '{"html":""}' description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). example: - sections: - 186b7ff2-7470-4de4-8783-082c2c189fcd: - column1: '' - column2Html: '' - column3: '' - position: 0 + html: 'my example text' items: type: string type: - array - 'null' + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string instanceName: description: |- An optional name for this content node. This is useful when planning e.g. an alternative @@ -19744,6 +20991,16 @@ components: same parent. The API does not guarantee the uniqueness of parent+slot+position. example: -1 type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d + format: iri-reference + readOnly: true + type: + - 'null' + - string slot: description: |- The name of the slot in the parent in which this content node resides. The valid slot names @@ -19754,22 +21011,15 @@ components: - 'null' - string required: + - children + - contentType - data - position type: object - Storyboard.jsonapi: + SingleText.jsonld-write_create: deprecated: false description: '' properties: - children: - description: 'All content nodes that are direct children of this content node.' - example: '["/content_nodes/1a2b3c4d"]' - items: - example: 'https://example.com/' - format: iri-reference - type: string - readOnly: true - type: array contentType: description: |- Defines the type of this content node. There is a fixed list of types that are implemented @@ -19777,35 +21027,19 @@ components: in a content node. The content type may not be changed once the content node is created. example: /content_types/1a2b3c4d format: iri-reference - readOnly: true - type: string - contentTypeName: - description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept - readOnly: true type: string data: + default: '{"html":""}' description: |- Holds the actual data of the content node (overridden from abstract class in order to add specific validation). example: - sections: - 186b7ff2-7470-4de4-8783-082c2c189fcd: - column1: '' - column2Html: '' - column3: '' - position: 0 + html: 'my example text' items: type: string type: - array - 'null' - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string instanceName: description: |- An optional name for this content node. This is useful when planning e.g. an alternative @@ -19832,16 +21066,6 @@ components: same parent. The API does not guarantee the uniqueness of parent+slot+position. example: -1 type: integer - root: - description: |- - The content node that is the root of the content node tree. Refers to itself in case this - content node is the root. - example: /content_nodes/1a2b3c4d - format: iri-reference - readOnly: true - type: - - 'null' - - string slot: description: |- The name of the slot in the parent in which this content node resides. The valid slot names @@ -19852,23 +21076,15 @@ components: - 'null' - string required: - - children - contentType + - data + - parent - position type: object - Storyboard.jsonhal-read: + Storyboard-read: deprecated: false description: '' properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -19888,7 +21104,7 @@ components: type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: @@ -19963,19 +21179,10 @@ components: - contentType - position type: object - Storyboard.jsonhal-write_create: + Storyboard-write_create: deprecated: false description: '' properties: - _links: - properties: - self: - properties: - href: - format: iri-reference - type: string - type: object - type: object contentType: description: |- Defines the type of this content node. There is a fixed list of types that are implemented @@ -20040,33 +21247,69 @@ components: - parent - position type: object - Storyboard.jsonld-read: + Storyboard-write_update: + deprecated: false + description: '' + properties: + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + sections: + 186b7ff2-7470-4de4-8783-082c2c189fcd: + column1: '' + column2Html: '' + column3: '' + position: 0 + items: + type: string + type: + - array + - 'null' + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string + required: + - data + - position + type: object + Storyboard.jsonapi: deprecated: false description: '' properties: - '@context': - oneOf: - - - additionalProperties: true - properties: - '@vocab': - type: string - hydra: - enum: ['http://www.w3.org/ns/hydra/core#'] - type: string - required: - - '@vocab' - - hydra - type: object - - - type: string - readOnly: true - '@id': - readOnly: true - type: string - '@type': - readOnly: true - type: string children: description: 'All content nodes that are direct children of this content node.' example: '["/content_nodes/1a2b3c4d"]' @@ -20083,10 +21326,11 @@ components: in a content node. The content type may not be changed once the content node is created. example: /content_types/1a2b3c4d format: iri-reference + readOnly: true type: string contentTypeName: description: 'The name of the content type of this content node. Read-only, for convenience.' - example: SafetyConcept + example: SafetyConsiderations readOnly: true type: string data: @@ -20161,10 +21405,28 @@ components: - contentType - position type: object - Storyboard.jsonld-write_create: + Storyboard.jsonhal-read: deprecated: false description: '' properties: + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array contentType: description: |- Defines the type of this content node. There is a fixed list of types that are implemented @@ -20173,6 +21435,11 @@ components: example: /content_types/1a2b3c4d format: iri-reference type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations + readOnly: true + type: string data: description: |- Holds the actual data of the content node @@ -20189,6 +21456,12 @@ components: type: - array - 'null' + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string instanceName: description: |- An optional name for this content node. This is useful when planning e.g. an alternative @@ -20215,6 +21488,16 @@ components: same parent. The API does not guarantee the uniqueness of parent+slot+position. example: -1 type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d + format: iri-reference + readOnly: true + type: + - 'null' + - string slot: description: |- The name of the slot in the parent in which this content node resides. The valid slot names @@ -20225,82 +21508,348 @@ components: - 'null' - string required: + - children - contentType - - parent - position type: object - User-activate: + Storyboard.jsonhal-write_create: deprecated: false - description: |- - A person using eCamp. - The properties available for all other eCamp users are here. + description: '' properties: - activationKey: - description: 'User-Input for activation.' + _links: + properties: + self: + properties: + href: + format: iri-reference + type: string + type: object + type: object + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + sections: + 186b7ff2-7470-4de4-8783-082c2c189fcd: + column1: '' + column2Html: '' + column3: '' + position: 0 + items: + type: string type: + - array - 'null' - - string - writeOnly: true - type: object - User-read: - deprecated: false - description: |- - A person using eCamp. - The properties available for all other eCamp users are here. - properties: - abbreviation: - description: 'A displayable name of the user.' - example: AB - readOnly: true + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 type: - 'null' - string - color: - description: 'A displayable name of the user.' - example: '#ff0000' - readOnly: true + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference type: - 'null' - string - displayName: - description: 'A displayable name of the user.' - example: 'Robert Baden-Powell' - readOnly: true + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 type: - 'null' - string - id: - description: 'An internal, unique, randomly generated identifier of this entity.' - example: 1a2b3c4d - maxLength: 16 - readOnly: true - type: string - profile: - example: - email: bi-pi@example.com - firstname: Robert - language: en - nickname: Bi-Pi - surname: Baden-Powell - format: iri-reference - type: string + required: + - contentType + - parent + - position type: object - User-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: + Storyboard.jsonld-read: deprecated: false description: '' properties: - abbreviation: - description: 'A displayable name of the user.' - example: AB - readOnly: true - type: - - 'null' - - string - color: - description: 'A displayable name of the user.' - example: '#ff0000' - readOnly: true - type: + '@context': + oneOf: + - + additionalProperties: true + properties: + '@vocab': + type: string + hydra: + enum: ['http://www.w3.org/ns/hydra/core#'] + type: string + required: + - '@vocab' + - hydra + type: object + - + type: string + readOnly: true + '@id': + readOnly: true + type: string + '@type': + readOnly: true + type: string + children: + description: 'All content nodes that are direct children of this content node.' + example: '["/content_nodes/1a2b3c4d"]' + items: + example: 'https://example.com/' + format: iri-reference + type: string + readOnly: true + type: array + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + contentTypeName: + description: 'The name of the content type of this content node. Read-only, for convenience.' + example: SafetyConsiderations + readOnly: true + type: string + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + sections: + 186b7ff2-7470-4de4-8783-082c2c189fcd: + column1: '' + column2Html: '' + column3: '' + position: 0 + items: + type: string + type: + - array + - 'null' + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + root: + description: |- + The content node that is the root of the content node tree. Refers to itself in case this + content node is the root. + example: /content_nodes/1a2b3c4d + format: iri-reference + readOnly: true + type: + - 'null' + - string + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string + required: + - children + - contentType + - position + type: object + Storyboard.jsonld-write_create: + deprecated: false + description: '' + properties: + contentType: + description: |- + Defines the type of this content node. There is a fixed list of types that are implemented + in eCamp. Depending on the type, different content data and different slots may be allowed + in a content node. The content type may not be changed once the content node is created. + example: /content_types/1a2b3c4d + format: iri-reference + type: string + data: + description: |- + Holds the actual data of the content node + (overridden from abstract class in order to add specific validation). + example: + sections: + 186b7ff2-7470-4de4-8783-082c2c189fcd: + column1: '' + column2Html: '' + column3: '' + position: 0 + items: + type: string + type: + - array + - 'null' + instanceName: + description: |- + An optional name for this content node. This is useful when planning e.g. an alternative + version of the programme suited for bad weather, in addition to the normal version. + example: Schlechtwetterprogramm + maxLength: 32 + type: + - 'null' + - string + parent: + description: |- + The parent to which this content node belongs. Is null in case this content node is the + root of a content node tree. For non-root content nodes, the parent can be changed, as long + as the new parent is in the same camp as the old one. + example: /content_nodes/1a2b3c4d + format: iri-reference + type: + - 'null' + - string + position: + default: -1 + description: |- + A whole number used for ordering multiple content nodes that are in the same slot of the + same parent. The API does not guarantee the uniqueness of parent+slot+position. + example: -1 + type: integer + slot: + description: |- + The name of the slot in the parent in which this content node resides. The valid slot names + are defined by the content type of the parent. + example: '1' + maxLength: 32 + type: + - 'null' + - string + required: + - contentType + - parent + - position + type: object + User-activate: + deprecated: false + description: |- + A person using eCamp. + The properties available for all other eCamp users are here. + properties: + activationKey: + description: 'User-Input for activation.' + type: + - 'null' + - string + writeOnly: true + type: object + User-read: + deprecated: false + description: |- + A person using eCamp. + The properties available for all other eCamp users are here. + properties: + abbreviation: + description: 'A displayable name of the user.' + example: AB + readOnly: true + type: + - 'null' + - string + color: + description: 'A displayable name of the user.' + example: '#ff0000' + readOnly: true + type: + - 'null' + - string + displayName: + description: 'A displayable name of the user.' + example: 'Robert Baden-Powell' + readOnly: true + type: + - 'null' + - string + id: + description: 'An internal, unique, randomly generated identifier of this entity.' + example: 1a2b3c4d + maxLength: 16 + readOnly: true + type: string + profile: + example: + email: bi-pi@example.com + firstname: Robert + language: en + nickname: Bi-Pi + surname: Baden-Powell + format: iri-reference + type: string + type: object + User-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User: + deprecated: false + description: '' + properties: + abbreviation: + description: 'A displayable name of the user.' + example: AB + readOnly: true + type: + - 'null' + - string + color: + description: 'A displayable name of the user.' + example: '#ff0000' + readOnly: true + type: - 'null' - string displayName: @@ -21164,165 +22713,917 @@ paths: /activities: get: deprecated: false - description: 'Retrieves the collection of Activity resources.' - operationId: api_activities_get_collection + description: 'Retrieves the collection of Activity resources.' + operationId: api_activities_get_collection + parameters: + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: false + in: query + name: camp + required: false + schema: + type: string + style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: true + in: query + name: 'camp[]' + required: false + schema: + items: + type: string + type: array + style: form + responses: + 200: + content: + application/hal+json: + schema: + properties: + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Activity.jsonhal-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries' }, type: array } }, type: object }, { type: object }] } + _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } + itemsPerPage: { minimum: 0, type: integer } + totalItems: { minimum: 0, type: integer } + required: + - _embedded + - _links + type: object + application/json: + schema: + items: + $ref: '#/components/schemas/Activity-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries' + type: array + application/ld+json: + schema: + properties: + 'hydra:member': { items: { $ref: '#/components/schemas/Activity.jsonld-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries' }, type: array } + 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } + 'hydra:totalItems': { minimum: 0, type: integer } + 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } + required: + - 'hydra:member' + type: object + application/vnd.api+json: + schema: + items: + $ref: '#/components/schemas/Activity.jsonapi' + type: array + text/html: + schema: + items: + $ref: '#/components/schemas/Activity-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries' + type: array + description: 'Activity collection' + summary: 'Retrieves the collection of Activity resources.' + tags: + - Activity + post: + deprecated: false + description: 'Creates a Activity resource.' + operationId: api_activities_post + parameters: [] + requestBody: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/Activity.jsonhal-write_create' + application/json: + schema: + $ref: '#/components/schemas/Activity-write_create' + application/ld+json: + schema: + $ref: '#/components/schemas/Activity.jsonld-write_create' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/Activity.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/Activity-write_create' + description: 'The new Activity resource' + required: true + responses: + 201: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/Activity.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + application/json: + schema: + $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + application/ld+json: + schema: + $ref: '#/components/schemas/Activity.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/Activity.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + description: 'Activity resource created' + links: [] + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Creates a Activity resource.' + tags: + - Activity + '/activities/{id}': + delete: + deprecated: false + description: 'Removes the Activity resource.' + operationId: api_activities_id_delete + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: 'Activity identifier' + explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + responses: + 204: + description: 'Activity resource deleted' + 404: + description: 'Resource not found' + summary: 'Removes the Activity resource.' + tags: + - Activity + get: + deprecated: false + description: 'Retrieves a Activity resource.' + operationId: api_activities_id_get + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: 'Activity identifier' + explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + responses: + 200: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/Activity.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + application/json: + schema: + $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + application/ld+json: + schema: + $ref: '#/components/schemas/Activity.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/Activity.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + description: 'Activity resource' + 404: + description: 'Resource not found' + summary: 'Retrieves a Activity resource.' + tags: + - Activity + patch: + deprecated: false + description: 'Updates the Activity resource.' + operationId: api_activities_id_patch + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: 'Activity identifier' + explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + requestBody: + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/Activity-write' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/Activity.jsonapi' + description: 'The updated Activity resource' + required: true + responses: + 200: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/Activity.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + application/json: + schema: + $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + application/ld+json: + schema: + $ref: '#/components/schemas/Activity.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/Activity.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + description: 'Activity resource updated' + links: [] + 400: + description: 'Invalid input' + 404: + description: 'Resource not found' + 422: + description: 'Unprocessable entity' + summary: 'Updates the Activity resource.' + tags: + - Activity + /activity_progress_labels: + get: + deprecated: false + description: 'Retrieves the collection of ActivityProgressLabel resources.' + operationId: api_activity_progress_labels_get_collection + parameters: + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: false + in: query + name: camp + required: false + schema: + type: string + style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: true + in: query + name: 'camp[]' + required: false + schema: + items: + type: string + type: array + style: form + responses: + 200: + content: + application/hal+json: + schema: + properties: + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/ActivityProgressLabel.jsonhal-read' }, type: array } }, type: object }, { type: object }] } + _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } + itemsPerPage: { minimum: 0, type: integer } + totalItems: { minimum: 0, type: integer } + required: + - _embedded + - _links + type: object + application/json: + schema: + items: + $ref: '#/components/schemas/ActivityProgressLabel-read' + type: array + application/ld+json: + schema: + properties: + 'hydra:member': { items: { $ref: '#/components/schemas/ActivityProgressLabel.jsonld-read' }, type: array } + 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } + 'hydra:totalItems': { minimum: 0, type: integer } + 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } + required: + - 'hydra:member' + type: object + application/vnd.api+json: + schema: + items: + $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' + type: array + text/html: + schema: + items: + $ref: '#/components/schemas/ActivityProgressLabel-read' + type: array + description: 'ActivityProgressLabel collection' + summary: 'Retrieves the collection of ActivityProgressLabel resources.' + tags: + - ActivityProgressLabel + post: + deprecated: false + description: 'Creates a ActivityProgressLabel resource.' + operationId: api_activity_progress_labels_post + parameters: [] + requestBody: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonhal-write_create' + application/json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel-write_create' + application/ld+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonld-write_create' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/ActivityProgressLabel-write_create' + description: 'The new ActivityProgressLabel resource' + required: true + responses: + 201: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonhal-read' + application/json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel-read' + application/ld+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonld-read' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/ActivityProgressLabel-read' + description: 'ActivityProgressLabel resource created' + links: [] + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Creates a ActivityProgressLabel resource.' + tags: + - ActivityProgressLabel + '/activity_progress_labels/{id}': + delete: + deprecated: false + description: 'Removes the ActivityProgressLabel resource.' + operationId: api_activity_progress_labels_id_delete + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: 'ActivityProgressLabel identifier' + explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + responses: + 204: + description: 'ActivityProgressLabel resource deleted' + 404: + description: 'Resource not found' + summary: 'Removes the ActivityProgressLabel resource.' + tags: + - ActivityProgressLabel + get: + deprecated: false + description: 'Retrieves a ActivityProgressLabel resource.' + operationId: api_activity_progress_labels_id_get + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: 'ActivityProgressLabel identifier' + explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + responses: + 200: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonhal-read' + application/json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel-read' + application/ld+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonld-read' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/ActivityProgressLabel-read' + description: 'ActivityProgressLabel resource' + 404: + description: 'Resource not found' + summary: 'Retrieves a ActivityProgressLabel resource.' + tags: + - ActivityProgressLabel + patch: + deprecated: false + description: 'Updates the ActivityProgressLabel resource.' + operationId: api_activity_progress_labels_id_patch + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: 'ActivityProgressLabel identifier' + explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + requestBody: + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel-write' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' + description: 'The updated ActivityProgressLabel resource' + required: true + responses: + 200: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonhal-read' + application/json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel-read' + application/ld+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonld-read' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/ActivityProgressLabel-read' + description: 'ActivityProgressLabel resource updated' + links: [] + 400: + description: 'Invalid input' + 404: + description: 'Resource not found' + 422: + description: 'Unprocessable entity' + summary: 'Updates the ActivityProgressLabel resource.' + tags: + - ActivityProgressLabel + /activity_responsibles: + get: + deprecated: false + description: 'Retrieves the collection of ActivityResponsible resources.' + operationId: api_activity_responsibles_get_collection + parameters: + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: false + in: query + name: activity + required: false + schema: + type: string + style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: false + in: query + name: activity.camp + required: false + schema: + type: string + style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: true + in: query + name: 'activity.camp[]' + required: false + schema: + items: + type: string + type: array + style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: true + in: query + name: 'activity[]' + required: false + schema: + items: + type: string + type: array + style: form + responses: + 200: + content: + application/hal+json: + schema: + properties: + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/ActivityResponsible.jsonhal-read' }, type: array } }, type: object }, { type: object }] } + _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } + itemsPerPage: { minimum: 0, type: integer } + totalItems: { minimum: 0, type: integer } + required: + - _embedded + - _links + type: object + application/json: + schema: + items: + $ref: '#/components/schemas/ActivityResponsible-read' + type: array + application/ld+json: + schema: + properties: + 'hydra:member': { items: { $ref: '#/components/schemas/ActivityResponsible.jsonld-read' }, type: array } + 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } + 'hydra:totalItems': { minimum: 0, type: integer } + 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } + required: + - 'hydra:member' + type: object + application/vnd.api+json: + schema: + items: + $ref: '#/components/schemas/ActivityResponsible.jsonapi' + type: array + text/html: + schema: + items: + $ref: '#/components/schemas/ActivityResponsible-read' + type: array + description: 'ActivityResponsible collection' + summary: 'Retrieves the collection of ActivityResponsible resources.' + tags: + - ActivityResponsible + post: + deprecated: false + description: 'Creates a ActivityResponsible resource.' + operationId: api_activity_responsibles_post + parameters: [] + requestBody: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/ActivityResponsible.jsonhal-write' + application/json: + schema: + $ref: '#/components/schemas/ActivityResponsible-write' + application/ld+json: + schema: + $ref: '#/components/schemas/ActivityResponsible.jsonld-write' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/ActivityResponsible.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/ActivityResponsible-write' + description: 'The new ActivityResponsible resource' + required: true + responses: + 201: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/ActivityResponsible.jsonhal-read' + application/json: + schema: + $ref: '#/components/schemas/ActivityResponsible-read' + application/ld+json: + schema: + $ref: '#/components/schemas/ActivityResponsible.jsonld-read' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/ActivityResponsible.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/ActivityResponsible-read' + description: 'ActivityResponsible resource created' + links: [] + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Creates a ActivityResponsible resource.' + tags: + - ActivityResponsible + '/activity_responsibles/{id}': + delete: + deprecated: false + description: 'Removes the ActivityResponsible resource.' + operationId: api_activity_responsibles_id_delete + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: 'ActivityResponsible identifier' + explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + responses: + 204: + description: 'ActivityResponsible resource deleted' + 404: + description: 'Resource not found' + summary: 'Removes the ActivityResponsible resource.' + tags: + - ActivityResponsible + get: + deprecated: false + description: 'Retrieves a ActivityResponsible resource.' + operationId: api_activity_responsibles_id_get parameters: - - allowEmptyValue: true + allowEmptyValue: false allowReserved: false deprecated: false - description: '' + description: 'ActivityResponsible identifier' explode: false - in: query - name: camp - required: false + in: path + name: id + required: true schema: type: string - style: form - - - allowEmptyValue: true - allowReserved: false - deprecated: false - description: '' - explode: true - in: query - name: 'camp[]' - required: false - schema: - items: - type: string - type: array - style: form + style: simple responses: 200: content: application/hal+json: schema: - properties: - _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Activity.jsonhal-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries' }, type: array } }, type: object }, { type: object }] } - _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } - itemsPerPage: { minimum: 0, type: integer } - totalItems: { minimum: 0, type: integer } - required: - - _embedded - - _links - type: object + $ref: '#/components/schemas/ActivityResponsible.jsonhal-read' application/json: schema: - items: - $ref: '#/components/schemas/Activity-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries' - type: array + $ref: '#/components/schemas/ActivityResponsible-read' application/ld+json: schema: - properties: - 'hydra:member': { items: { $ref: '#/components/schemas/Activity.jsonld-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries' }, type: array } - 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } - 'hydra:totalItems': { minimum: 0, type: integer } - 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } - required: - - 'hydra:member' - type: object + $ref: '#/components/schemas/ActivityResponsible.jsonld-read' application/vnd.api+json: schema: - items: - $ref: '#/components/schemas/Activity.jsonapi' - type: array + $ref: '#/components/schemas/ActivityResponsible.jsonapi' text/html: schema: - items: - $ref: '#/components/schemas/Activity-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries' - type: array - description: 'Activity collection' - summary: 'Retrieves the collection of Activity resources.' + $ref: '#/components/schemas/ActivityResponsible-read' + description: 'ActivityResponsible resource' + 404: + description: 'Resource not found' + summary: 'Retrieves a ActivityResponsible resource.' tags: - - Activity + - ActivityResponsible + /auth/cevidb: + get: + operationId: oauthCevidbRedirect + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: '' + explode: false + in: path + name: callback + required: false + schema: + type: string + style: simple + responses: + 302: + description: 'Redirect to the CeviDB OAuth authorization endpoint' + summary: 'Log in using CeviDB Oauth.' + tags: + - OAuth + ref: 'CeviDB OAuth' + /auth/google: + get: + operationId: oauthGoogleRedirect + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: '' + explode: false + in: path + name: callback + required: false + schema: + type: string + style: simple + responses: + 302: + description: 'Redirect to the Google OAuth authorization endpoint' + summary: 'Log in using Google Oauth.' + tags: + - OAuth + ref: 'Google OAuth' + /auth/jubladb: + get: + operationId: oauthJubladbRedirect + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: '' + explode: false + in: path + name: callback + required: false + schema: + type: string + style: simple + responses: + 302: + description: 'Redirect to the JublaDB OAuth authorization endpoint' + summary: 'Log in using JublaDB Oauth.' + tags: + - OAuth + ref: 'JublaDB OAuth' + /auth/pbsmidata: + get: + operationId: oauthPbsmidataRedirect + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: '' + explode: false + in: path + name: callback + required: false + schema: + type: string + style: simple + responses: + 302: + description: 'Redirect to the PBS MiData OAuth authorization endpoint' + summary: 'Log in using PBS MiData Oauth.' + tags: + - OAuth + ref: 'PBS MiData OAuth' + /auth/resend_activation: post: deprecated: false - description: 'Creates a Activity resource.' - operationId: api_activities_post + description: 'Activation email will be sent to the given email again.' + operationId: api_authresend_activation_post parameters: [] requestBody: content: application/hal+json: schema: - $ref: '#/components/schemas/Activity.jsonhal-write_create' + $ref: '#/components/schemas/UserActivation.jsonhal-create' application/json: schema: - $ref: '#/components/schemas/Activity-write_create' + $ref: '#/components/schemas/UserActivation-create' application/ld+json: schema: - $ref: '#/components/schemas/Activity.jsonld-write_create' + $ref: '#/components/schemas/UserActivation.jsonld-create' application/vnd.api+json: schema: - $ref: '#/components/schemas/Activity.jsonapi' + $ref: '#/components/schemas/UserActivation.jsonapi' text/html: schema: - $ref: '#/components/schemas/Activity-write_create' - description: 'The new Activity resource' + $ref: '#/components/schemas/UserActivation-create' + description: 'The new UserActivation resource' required: true responses: - 201: + 204: content: application/hal+json: - schema: - $ref: '#/components/schemas/Activity.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + schema: [] application/json: - schema: - $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + schema: [] application/ld+json: - schema: - $ref: '#/components/schemas/Activity.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + schema: [] application/vnd.api+json: - schema: - $ref: '#/components/schemas/Activity.jsonapi' + schema: [] text/html: - schema: - $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' - description: 'Activity resource created' + schema: [] + description: 'UserActivation resource created' links: [] 400: description: 'Invalid input' 422: description: 'Unprocessable entity' - summary: 'Creates a Activity resource.' + summary: 'Request activation email again' tags: - - Activity - '/activities/{id}': - delete: + - UserActivation + /auth/reset_password: + post: deprecated: false - description: 'Removes the Activity resource.' - operationId: api_activities_id_delete - parameters: - - - allowEmptyValue: false - allowReserved: false - deprecated: false - description: 'Activity identifier' - explode: false - in: path - name: id - required: true - schema: - type: string - style: simple + description: 'Password-Reset-Link will be sent to the given email' + operationId: api_authreset_password_post + parameters: [] + requestBody: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/ResetPassword.jsonhal-create' + application/json: + schema: + $ref: '#/components/schemas/ResetPassword-create' + application/ld+json: + schema: + $ref: '#/components/schemas/ResetPassword.jsonld-create' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/ResetPassword.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/ResetPassword-create' + description: 'The new ResetPassword resource' + required: true responses: 204: - description: 'Activity resource deleted' - 404: - description: 'Resource not found' - summary: 'Removes the Activity resource.' + content: + application/hal+json: + schema: [] + application/json: + schema: [] + application/ld+json: + schema: [] + application/vnd.api+json: + schema: [] + text/html: + schema: [] + description: 'ResetPassword resource created' + links: [] + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Request Password-Reset-Mail' tags: - - Activity + - ResetPassword + '/auth/reset_password/{id}': get: deprecated: false - description: 'Retrieves a Activity resource.' - operationId: api_activities_id_get + description: 'Retrieves a ResetPassword resource.' + operationId: api_authreset_password_id_get parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'Activity identifier' + description: 'ResetPassword identifier' explode: false in: path name: id @@ -21335,35 +23636,35 @@ paths: content: application/hal+json: schema: - $ref: '#/components/schemas/Activity.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + $ref: '#/components/schemas/ResetPassword.jsonhal' application/json: schema: - $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + $ref: '#/components/schemas/ResetPassword' application/ld+json: schema: - $ref: '#/components/schemas/Activity.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + $ref: '#/components/schemas/ResetPassword.jsonld' application/vnd.api+json: schema: - $ref: '#/components/schemas/Activity.jsonapi' + $ref: '#/components/schemas/ResetPassword.jsonapi' text/html: schema: - $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' - description: 'Activity resource' + $ref: '#/components/schemas/ResetPassword' + description: 'ResetPassword resource' 404: description: 'Resource not found' - summary: 'Retrieves a Activity resource.' + summary: 'Retrieves a ResetPassword resource.' tags: - - Activity + - ResetPassword patch: deprecated: false - description: 'Updates the Activity resource.' - operationId: api_activities_id_patch + description: 'Updates the ResetPassword resource.' + operationId: api_authreset_password_id_patch parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'Activity identifier' + description: 'ResetPassword identifier' explode: false in: path name: id @@ -21375,31 +23676,31 @@ paths: content: application/merge-patch+json: schema: - $ref: '#/components/schemas/Activity-write' + $ref: '#/components/schemas/ResetPassword-update' application/vnd.api+json: schema: - $ref: '#/components/schemas/Activity.jsonapi' - description: 'The updated Activity resource' + $ref: '#/components/schemas/ResetPassword.jsonapi' + description: 'The updated ResetPassword resource' required: true responses: 200: content: application/hal+json: schema: - $ref: '#/components/schemas/Activity.jsonhal-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + $ref: '#/components/schemas/ResetPassword.jsonhal' application/json: schema: - $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + $ref: '#/components/schemas/ResetPassword' application/ld+json: schema: - $ref: '#/components/schemas/Activity.jsonld-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' + $ref: '#/components/schemas/ResetPassword.jsonld' application/vnd.api+json: schema: - $ref: '#/components/schemas/Activity.jsonapi' + $ref: '#/components/schemas/ResetPassword.jsonapi' text/html: schema: - $ref: '#/components/schemas/Activity-read_Activity.Category_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries_Activity.ContentNodes' - description: 'Activity resource updated' + $ref: '#/components/schemas/ResetPassword' + description: 'ResetPassword resource updated' links: [] 400: description: 'Invalid input' @@ -21407,15 +23708,62 @@ paths: description: 'Resource not found' 422: description: 'Unprocessable entity' - summary: 'Updates the Activity resource.' + summary: 'Updates the ResetPassword resource.' tags: - - Activity - /activity_progress_labels: + - ResetPassword + /authentication_token: + post: + description: 'Creates a user token.' + operationId: login_check_post + requestBody: + content: + application/json: + schema: + properties: + identifier: + nullable: false + type: string + password: + nullable: false + type: string + required: + - identifier + - password + type: object + description: 'The login data' + required: true + responses: + 200: + content: + application/json: + schema: + properties: + token: { nullable: false, readOnly: true, type: string } + required: + - token + type: object + description: 'User token created' + summary: 'Creates a user token.' + tags: + - 'Login Check' + /camp_collaborations: get: deprecated: false - description: 'Retrieves the collection of ActivityProgressLabel resources.' - operationId: api_activity_progress_labels_get_collection + description: 'Retrieves the collection of CampCollaboration resources.' + operationId: api_camp_collaborations_get_collection parameters: + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: false + in: query + name: activityResponsibles.activity + required: false + schema: + type: string + style: form - allowEmptyValue: true allowReserved: false @@ -21428,6 +23776,20 @@ paths: schema: type: string style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: true + in: query + name: 'activityResponsibles.activity[]' + required: false + schema: + items: + type: string + type: array + style: form - allowEmptyValue: true allowReserved: false @@ -21448,7 +23810,7 @@ paths: application/hal+json: schema: properties: - _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/ActivityProgressLabel.jsonhal-read' }, type: array } }, type: object }, { type: object }] } + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/CampCollaboration.jsonhal-read_CampCollaboration.Camp_CampCollaboration.User' }, type: array } }, type: object }, { type: object }] } _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } itemsPerPage: { minimum: 0, type: integer } totalItems: { minimum: 0, type: integer } @@ -21459,12 +23821,12 @@ paths: application/json: schema: items: - $ref: '#/components/schemas/ActivityProgressLabel-read' + $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' type: array application/ld+json: schema: properties: - 'hydra:member': { items: { $ref: '#/components/schemas/ActivityProgressLabel.jsonld-read' }, type: array } + 'hydra:member': { items: { $ref: '#/components/schemas/CampCollaboration.jsonld-read_CampCollaboration.Camp_CampCollaboration.User' }, type: array } 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } 'hydra:totalItems': { minimum: 0, type: integer } 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } @@ -21474,79 +23836,79 @@ paths: application/vnd.api+json: schema: items: - $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' + $ref: '#/components/schemas/CampCollaboration.jsonapi' type: array text/html: schema: items: - $ref: '#/components/schemas/ActivityProgressLabel-read' + $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' type: array - description: 'ActivityProgressLabel collection' - summary: 'Retrieves the collection of ActivityProgressLabel resources.' + description: 'CampCollaboration collection' + summary: 'Retrieves the collection of CampCollaboration resources.' tags: - - ActivityProgressLabel + - CampCollaboration post: deprecated: false - description: 'Creates a ActivityProgressLabel resource.' - operationId: api_activity_progress_labels_post + description: 'Also sends an invitation email to the inviteEmail address, if specified.' + operationId: api_camp_collaborations_post parameters: [] requestBody: content: application/hal+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonhal-write_create' + $ref: '#/components/schemas/CampCollaboration.jsonhal-write_create' application/json: schema: - $ref: '#/components/schemas/ActivityProgressLabel-write_create' + $ref: '#/components/schemas/CampCollaboration-write_create' application/ld+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonld-write_create' + $ref: '#/components/schemas/CampCollaboration.jsonld-write_create' application/vnd.api+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' + $ref: '#/components/schemas/CampCollaboration.jsonapi' text/html: schema: - $ref: '#/components/schemas/ActivityProgressLabel-write_create' - description: 'The new ActivityProgressLabel resource' + $ref: '#/components/schemas/CampCollaboration-write_create' + description: 'The new CampCollaboration resource' required: true responses: 201: content: application/hal+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonhal-read' + $ref: '#/components/schemas/CampCollaboration.jsonhal-read_CampCollaboration.Camp_CampCollaboration.User' application/json: schema: - $ref: '#/components/schemas/ActivityProgressLabel-read' + $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' application/ld+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonld-read' + $ref: '#/components/schemas/CampCollaboration.jsonld-read_CampCollaboration.Camp_CampCollaboration.User' application/vnd.api+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' + $ref: '#/components/schemas/CampCollaboration.jsonapi' text/html: schema: - $ref: '#/components/schemas/ActivityProgressLabel-read' - description: 'ActivityProgressLabel resource created' + $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' + description: 'CampCollaboration resource created' links: [] 400: description: 'Invalid input' 422: description: 'Unprocessable entity' - summary: 'Creates a ActivityProgressLabel resource.' + summary: 'Creates a CampCollaboration resource.' tags: - - ActivityProgressLabel - '/activity_progress_labels/{id}': + - CampCollaboration + '/camp_collaborations/{id}': delete: deprecated: false - description: 'Removes the ActivityProgressLabel resource.' - operationId: api_activity_progress_labels_id_delete + description: 'Removes the CampCollaboration resource.' + operationId: api_camp_collaborations_id_delete parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'ActivityProgressLabel identifier' + description: 'CampCollaboration identifier' explode: false in: path name: id @@ -21556,22 +23918,22 @@ paths: style: simple responses: 204: - description: 'ActivityProgressLabel resource deleted' + description: 'CampCollaboration resource deleted' 404: description: 'Resource not found' - summary: 'Removes the ActivityProgressLabel resource.' + summary: 'Removes the CampCollaboration resource.' tags: - - ActivityProgressLabel + - CampCollaboration get: deprecated: false - description: 'Retrieves a ActivityProgressLabel resource.' - operationId: api_activity_progress_labels_id_get + description: 'Retrieves a CampCollaboration resource.' + operationId: api_camp_collaborations_id_get parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'ActivityProgressLabel identifier' + description: 'CampCollaboration identifier' explode: false in: path name: id @@ -21584,35 +23946,92 @@ paths: content: application/hal+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonhal-read' + $ref: '#/components/schemas/CampCollaboration.jsonhal-read_CampCollaboration.Camp_CampCollaboration.User' application/json: schema: - $ref: '#/components/schemas/ActivityProgressLabel-read' + $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' + application/ld+json: + schema: + $ref: '#/components/schemas/CampCollaboration.jsonld-read_CampCollaboration.Camp_CampCollaboration.User' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/CampCollaboration.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' + description: 'CampCollaboration resource' + 404: + description: 'Resource not found' + summary: 'Retrieves a CampCollaboration resource.' + tags: + - CampCollaboration + patch: + deprecated: false + description: 'Updates the CampCollaboration resource.' + operationId: api_camp_collaborations_id_patch + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: 'CampCollaboration identifier' + explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + requestBody: + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/CampCollaboration-write_update' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/CampCollaboration.jsonapi' + description: 'The updated CampCollaboration resource' + required: true + responses: + 200: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/CampCollaboration.jsonhal-read_CampCollaboration.Camp_CampCollaboration.User' + application/json: + schema: + $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' application/ld+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonld-read' + $ref: '#/components/schemas/CampCollaboration.jsonld-read_CampCollaboration.Camp_CampCollaboration.User' application/vnd.api+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' + $ref: '#/components/schemas/CampCollaboration.jsonapi' text/html: schema: - $ref: '#/components/schemas/ActivityProgressLabel-read' - description: 'ActivityProgressLabel resource' + $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' + description: 'CampCollaboration resource updated' + links: [] + 400: + description: 'Invalid input' 404: description: 'Resource not found' - summary: 'Retrieves a ActivityProgressLabel resource.' + 422: + description: 'Unprocessable entity' + summary: 'Updates the CampCollaboration resource.' tags: - - ActivityProgressLabel + - CampCollaboration + '/camp_collaborations/{id}/resend_invitation': patch: deprecated: false - description: 'Updates the ActivityProgressLabel resource.' - operationId: api_activity_progress_labels_id_patch + description: 'Updates the CampCollaboration resource.' + operationId: api_camp_collaborations_idresend_invitation_patch parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'ActivityProgressLabel identifier' + description: 'CampCollaboration identifier' explode: false in: path name: id @@ -21624,31 +24043,31 @@ paths: content: application/merge-patch+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel-write' + $ref: '#/components/schemas/CampCollaboration-resend_invitation' application/vnd.api+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' - description: 'The updated ActivityProgressLabel resource' + $ref: '#/components/schemas/CampCollaboration.jsonapi' + description: 'The updated CampCollaboration resource' required: true responses: 200: content: application/hal+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonhal-read' + $ref: '#/components/schemas/CampCollaboration.jsonhal-read' application/json: schema: - $ref: '#/components/schemas/ActivityProgressLabel-read' + $ref: '#/components/schemas/CampCollaboration-read' application/ld+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonld-read' + $ref: '#/components/schemas/CampCollaboration.jsonld-read' application/vnd.api+json: schema: - $ref: '#/components/schemas/ActivityProgressLabel.jsonapi' + $ref: '#/components/schemas/CampCollaboration.jsonapi' text/html: schema: - $ref: '#/components/schemas/ActivityProgressLabel-read' - description: 'ActivityProgressLabel resource updated' + $ref: '#/components/schemas/CampCollaboration-read' + description: 'CampCollaboration resource updated' links: [] 400: description: 'Invalid input' @@ -21656,14 +24075,14 @@ paths: description: 'Resource not found' 422: description: 'Unprocessable entity' - summary: 'Updates the ActivityProgressLabel resource.' + summary: 'Send the invitation email for this CampCollaboration again. Only possible, if the status is already invited.' tags: - - ActivityProgressLabel - /activity_responsibles: + - CampCollaboration + /camps: get: deprecated: false - description: 'Retrieves the collection of ActivityResponsible resources.' - operationId: api_activity_responsibles_get_collection + description: 'Retrieves the collection of Camp resources.' + operationId: api_camps_get_collection parameters: - allowEmptyValue: true @@ -21672,36 +24091,148 @@ paths: description: '' explode: false in: query - name: activity + name: isPrototype required: false schema: - type: string + type: boolean style: form - allowEmptyValue: true allowReserved: false deprecated: false description: '' - explode: false + explode: true in: query - name: activity.camp + name: 'isPrototype[]' required: false schema: - type: string + items: + type: boolean + type: array style: form + responses: + 200: + content: + application/hal+json: + schema: + properties: + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Camp.jsonhal-read' }, type: array } }, type: object }, { type: object }] } + _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } + itemsPerPage: { minimum: 0, type: integer } + totalItems: { minimum: 0, type: integer } + required: + - _embedded + - _links + type: object + application/json: + schema: + items: + $ref: '#/components/schemas/Camp-read' + type: array + application/ld+json: + schema: + properties: + 'hydra:member': { items: { $ref: '#/components/schemas/Camp.jsonld-read' }, type: array } + 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } + 'hydra:totalItems': { minimum: 0, type: integer } + 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } + required: + - 'hydra:member' + type: object + application/vnd.api+json: + schema: + items: + $ref: '#/components/schemas/Camp.jsonapi' + type: array + text/html: + schema: + items: + $ref: '#/components/schemas/Camp-read' + type: array + description: 'Camp collection' + summary: 'Retrieves the collection of Camp resources.' + tags: + - Camp + post: + deprecated: false + description: 'Creates a Camp resource.' + operationId: api_camps_post + parameters: [] + requestBody: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/Camp.jsonhal-write_create' + application/json: + schema: + $ref: '#/components/schemas/Camp-write_create' + application/ld+json: + schema: + $ref: '#/components/schemas/Camp.jsonld-write_create' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/Camp.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/Camp-write_create' + description: 'The new Camp resource' + required: true + responses: + 201: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/Camp.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + application/json: + schema: + $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + application/ld+json: + schema: + $ref: '#/components/schemas/Camp.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/Camp.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + description: 'Camp resource created' + links: [] + 400: + description: 'Invalid input' + 422: + description: 'Unprocessable entity' + summary: 'Creates a Camp resource.' + tags: + - Camp + '/camps/{campId}/categories': + get: + deprecated: false + description: 'Retrieves the collection of Category resources.' + operationId: api_camps_campIdcategories_get_collection + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: 'Category identifier' + explode: false + in: path + name: campId + required: true + schema: + type: string + style: simple - allowEmptyValue: true allowReserved: false deprecated: false description: '' - explode: true + explode: false in: query - name: 'activity.camp[]' + name: camp required: false schema: - items: - type: string - type: array + type: string style: form - allowEmptyValue: true @@ -21710,7 +24241,7 @@ paths: description: '' explode: true in: query - name: 'activity[]' + name: 'camp[]' required: false schema: items: @@ -21723,7 +24254,7 @@ paths: application/hal+json: schema: properties: - _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/ActivityResponsible.jsonhal-read' }, type: array } }, type: object }, { type: object }] } + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Category.jsonhal-read' }, type: array } }, type: object }, { type: object }] } _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } itemsPerPage: { minimum: 0, type: integer } totalItems: { minimum: 0, type: integer } @@ -21734,12 +24265,12 @@ paths: application/json: schema: items: - $ref: '#/components/schemas/ActivityResponsible-read' + $ref: '#/components/schemas/Category-read' type: array application/ld+json: schema: properties: - 'hydra:member': { items: { $ref: '#/components/schemas/ActivityResponsible.jsonld-read' }, type: array } + 'hydra:member': { items: { $ref: '#/components/schemas/Category.jsonld-read' }, type: array } 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } 'hydra:totalItems': { minimum: 0, type: integer } 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } @@ -21749,79 +24280,115 @@ paths: application/vnd.api+json: schema: items: - $ref: '#/components/schemas/ActivityResponsible.jsonapi' + $ref: '#/components/schemas/Category.jsonapi' type: array text/html: schema: items: - $ref: '#/components/schemas/ActivityResponsible-read' + $ref: '#/components/schemas/Category-read' type: array - description: 'ActivityResponsible collection' - summary: 'Retrieves the collection of ActivityResponsible resources.' + description: 'Category collection' + summary: 'Retrieves the collection of Category resources.' tags: - - ActivityResponsible - post: + - Category + '/camps/{campId}/checklists': + get: deprecated: false - description: 'Creates a ActivityResponsible resource.' - operationId: api_activity_responsibles_post - parameters: [] - requestBody: - content: - application/hal+json: - schema: - $ref: '#/components/schemas/ActivityResponsible.jsonhal-write' - application/json: - schema: - $ref: '#/components/schemas/ActivityResponsible-write' - application/ld+json: - schema: - $ref: '#/components/schemas/ActivityResponsible.jsonld-write' - application/vnd.api+json: - schema: - $ref: '#/components/schemas/ActivityResponsible.jsonapi' - text/html: - schema: - $ref: '#/components/schemas/ActivityResponsible-write' - description: 'The new ActivityResponsible resource' - required: true + description: 'Retrieves the collection of Checklist resources.' + operationId: api_camps_campIdchecklists_get_collection + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: 'Checklist identifier' + explode: false + in: path + name: campId + required: true + schema: + type: string + style: simple + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: false + in: query + name: camp + required: false + schema: + type: string + style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: true + in: query + name: 'camp[]' + required: false + schema: + items: + type: string + type: array + style: form responses: - 201: + 200: content: application/hal+json: schema: - $ref: '#/components/schemas/ActivityResponsible.jsonhal-read' + properties: + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Checklist.jsonhal-read' }, type: array } }, type: object }, { type: object }] } + _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } + itemsPerPage: { minimum: 0, type: integer } + totalItems: { minimum: 0, type: integer } + required: + - _embedded + - _links + type: object application/json: schema: - $ref: '#/components/schemas/ActivityResponsible-read' + items: + $ref: '#/components/schemas/Checklist-read' + type: array application/ld+json: schema: - $ref: '#/components/schemas/ActivityResponsible.jsonld-read' + properties: + 'hydra:member': { items: { $ref: '#/components/schemas/Checklist.jsonld-read' }, type: array } + 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } + 'hydra:totalItems': { minimum: 0, type: integer } + 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } + required: + - 'hydra:member' + type: object application/vnd.api+json: schema: - $ref: '#/components/schemas/ActivityResponsible.jsonapi' + items: + $ref: '#/components/schemas/Checklist.jsonapi' + type: array text/html: schema: - $ref: '#/components/schemas/ActivityResponsible-read' - description: 'ActivityResponsible resource created' - links: [] - 400: - description: 'Invalid input' - 422: - description: 'Unprocessable entity' - summary: 'Creates a ActivityResponsible resource.' + items: + $ref: '#/components/schemas/Checklist-read' + type: array + description: 'Checklist collection' + summary: 'Retrieves the collection of Checklist resources.' tags: - - ActivityResponsible - '/activity_responsibles/{id}': + - Checklist + '/camps/{id}': delete: deprecated: false - description: 'Removes the ActivityResponsible resource.' - operationId: api_activity_responsibles_id_delete + description: 'Removes the Camp resource.' + operationId: api_camps_id_delete parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'ActivityResponsible identifier' + description: 'Camp identifier' explode: false in: path name: id @@ -21831,22 +24398,22 @@ paths: style: simple responses: 204: - description: 'ActivityResponsible resource deleted' + description: 'Camp resource deleted' 404: description: 'Resource not found' - summary: 'Removes the ActivityResponsible resource.' + summary: 'Removes the Camp resource.' tags: - - ActivityResponsible + - Camp get: deprecated: false - description: 'Retrieves a ActivityResponsible resource.' - operationId: api_activity_responsibles_id_get + description: 'Retrieves a Camp resource.' + operationId: api_camps_id_get parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'ActivityResponsible identifier' + description: 'Camp identifier' explode: false in: path name: id @@ -21859,222 +24426,243 @@ paths: content: application/hal+json: schema: - $ref: '#/components/schemas/ActivityResponsible.jsonhal-read' + $ref: '#/components/schemas/Camp.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' application/json: schema: - $ref: '#/components/schemas/ActivityResponsible-read' + $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' application/ld+json: schema: - $ref: '#/components/schemas/ActivityResponsible.jsonld-read' + $ref: '#/components/schemas/Camp.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' application/vnd.api+json: schema: - $ref: '#/components/schemas/ActivityResponsible.jsonapi' + $ref: '#/components/schemas/Camp.jsonapi' text/html: schema: - $ref: '#/components/schemas/ActivityResponsible-read' - description: 'ActivityResponsible resource' + $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + description: 'Camp resource' 404: description: 'Resource not found' - summary: 'Retrieves a ActivityResponsible resource.' - tags: - - ActivityResponsible - /auth/cevidb: - get: - operationId: oauthCevidbRedirect - parameters: - - - allowEmptyValue: false - allowReserved: false - deprecated: false - description: '' - explode: false - in: path - name: callback - required: false - schema: - type: string - style: simple - responses: - 302: - description: 'Redirect to the CeviDB OAuth authorization endpoint' - summary: 'Log in using CeviDB Oauth.' + summary: 'Retrieves a Camp resource.' tags: - - OAuth - ref: 'CeviDB OAuth' - /auth/google: - get: - operationId: oauthGoogleRedirect + - Camp + patch: + deprecated: false + description: 'Updates the Camp resource.' + operationId: api_camps_id_patch parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: '' + description: 'Camp identifier' explode: false in: path - name: callback - required: false + name: id + required: true schema: type: string style: simple + requestBody: + content: + application/merge-patch+json: + schema: + $ref: '#/components/schemas/Camp-write_update' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/Camp.jsonapi' + description: 'The updated Camp resource' + required: true responses: - 302: - description: 'Redirect to the Google OAuth authorization endpoint' - summary: 'Log in using Google Oauth.' + 200: + content: + application/hal+json: + schema: + $ref: '#/components/schemas/Camp.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + application/json: + schema: + $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + application/ld+json: + schema: + $ref: '#/components/schemas/Camp.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + application/vnd.api+json: + schema: + $ref: '#/components/schemas/Camp.jsonapi' + text/html: + schema: + $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + description: 'Camp resource updated' + links: [] + 400: + description: 'Invalid input' + 404: + description: 'Resource not found' + 422: + description: 'Unprocessable entity' + summary: 'Updates the Camp resource.' tags: - - OAuth - ref: 'Google OAuth' - /auth/jubladb: + - Camp + /categories: get: - operationId: oauthJubladbRedirect + deprecated: false + description: 'Retrieves the collection of Category resources.' + operationId: api_categories_get_collection parameters: - - allowEmptyValue: false + allowEmptyValue: true allowReserved: false deprecated: false description: '' explode: false - in: path - name: callback + in: query + name: camp required: false schema: type: string - style: simple - responses: - 302: - description: 'Redirect to the JublaDB OAuth authorization endpoint' - summary: 'Log in using JublaDB Oauth.' - tags: - - OAuth - ref: 'JublaDB OAuth' - /auth/pbsmidata: - get: - operationId: oauthPbsmidataRedirect - parameters: + style: form - - allowEmptyValue: false + allowEmptyValue: true allowReserved: false deprecated: false description: '' - explode: false - in: path - name: callback + explode: true + in: query + name: 'camp[]' required: false schema: - type: string - style: simple - responses: - 302: - description: 'Redirect to the PBS MiData OAuth authorization endpoint' - summary: 'Log in using PBS MiData Oauth.' - tags: - - OAuth - ref: 'PBS MiData OAuth' - /auth/resend_activation: - post: - deprecated: false - description: 'Activation email will be sent to the given email again.' - operationId: api_authresend_activation_post - parameters: [] - requestBody: - content: - application/hal+json: - schema: - $ref: '#/components/schemas/UserActivation.jsonhal-create' - application/json: - schema: - $ref: '#/components/schemas/UserActivation-create' - application/ld+json: - schema: - $ref: '#/components/schemas/UserActivation.jsonld-create' - application/vnd.api+json: - schema: - $ref: '#/components/schemas/UserActivation.jsonapi' - text/html: - schema: - $ref: '#/components/schemas/UserActivation-create' - description: 'The new UserActivation resource' - required: true + items: + type: string + type: array + style: form responses: - 204: + 200: content: application/hal+json: - schema: [] + schema: + properties: + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Category.jsonhal-read' }, type: array } }, type: object }, { type: object }] } + _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } + itemsPerPage: { minimum: 0, type: integer } + totalItems: { minimum: 0, type: integer } + required: + - _embedded + - _links + type: object application/json: - schema: [] + schema: + items: + $ref: '#/components/schemas/Category-read' + type: array application/ld+json: - schema: [] + schema: + properties: + 'hydra:member': { items: { $ref: '#/components/schemas/Category.jsonld-read' }, type: array } + 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } + 'hydra:totalItems': { minimum: 0, type: integer } + 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } + required: + - 'hydra:member' + type: object application/vnd.api+json: - schema: [] + schema: + items: + $ref: '#/components/schemas/Category.jsonapi' + type: array text/html: - schema: [] - description: 'UserActivation resource created' - links: [] - 400: - description: 'Invalid input' - 422: - description: 'Unprocessable entity' - summary: 'Request activation email again' + schema: + items: + $ref: '#/components/schemas/Category-read' + type: array + description: 'Category collection' + summary: 'Retrieves the collection of Category resources.' tags: - - UserActivation - /auth/reset_password: + - Category post: deprecated: false - description: 'Password-Reset-Link will be sent to the given email' - operationId: api_authreset_password_post + description: 'Creates a Category resource.' + operationId: api_categories_post parameters: [] requestBody: content: application/hal+json: schema: - $ref: '#/components/schemas/ResetPassword.jsonhal-create' + $ref: '#/components/schemas/Category.jsonhal-write_create' application/json: schema: - $ref: '#/components/schemas/ResetPassword-create' + $ref: '#/components/schemas/Category-write_create' application/ld+json: schema: - $ref: '#/components/schemas/ResetPassword.jsonld-create' + $ref: '#/components/schemas/Category.jsonld-write_create' application/vnd.api+json: schema: - $ref: '#/components/schemas/ResetPassword.jsonapi' + $ref: '#/components/schemas/Category.jsonapi' text/html: schema: - $ref: '#/components/schemas/ResetPassword-create' - description: 'The new ResetPassword resource' + $ref: '#/components/schemas/Category-write_create' + description: 'The new Category resource' required: true responses: - 204: + 201: content: application/hal+json: - schema: [] + schema: + $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes' application/json: - schema: [] + schema: + $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' application/ld+json: - schema: [] + schema: + $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes' application/vnd.api+json: - schema: [] + schema: + $ref: '#/components/schemas/Category.jsonapi' text/html: - schema: [] - description: 'ResetPassword resource created' + schema: + $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' + description: 'Category resource created' links: [] 400: description: 'Invalid input' 422: description: 'Unprocessable entity' - summary: 'Request Password-Reset-Mail' + summary: 'Creates a Category resource.' tags: - - ResetPassword - '/auth/reset_password/{id}': + - Category + '/categories/{id}': + delete: + deprecated: false + description: 'Removes the Category resource.' + operationId: api_categories_id_delete + parameters: + - + allowEmptyValue: false + allowReserved: false + deprecated: false + description: 'Category identifier' + explode: false + in: path + name: id + required: true + schema: + type: string + style: simple + responses: + 204: + description: 'Category resource deleted' + 404: + description: 'Resource not found' + summary: 'Removes the Category resource.' + tags: + - Category get: deprecated: false - description: 'Retrieves a ResetPassword resource.' - operationId: api_authreset_password_id_get + description: 'Retrieves a Category resource.' + operationId: api_categories_id_get parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'ResetPassword identifier' + description: 'Category identifier' explode: false in: path name: id @@ -22087,35 +24675,35 @@ paths: content: application/hal+json: schema: - $ref: '#/components/schemas/ResetPassword.jsonhal' + $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes' application/json: schema: - $ref: '#/components/schemas/ResetPassword' + $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' application/ld+json: schema: - $ref: '#/components/schemas/ResetPassword.jsonld' + $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes' application/vnd.api+json: schema: - $ref: '#/components/schemas/ResetPassword.jsonapi' + $ref: '#/components/schemas/Category.jsonapi' text/html: schema: - $ref: '#/components/schemas/ResetPassword' - description: 'ResetPassword resource' + $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' + description: 'Category resource' 404: description: 'Resource not found' - summary: 'Retrieves a ResetPassword resource.' + summary: 'Retrieves a Category resource.' tags: - - ResetPassword + - Category patch: deprecated: false - description: 'Updates the ResetPassword resource.' - operationId: api_authreset_password_id_patch + description: 'Updates the Category resource.' + operationId: api_categories_id_patch parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'ResetPassword identifier' + description: 'Category identifier' explode: false in: path name: id @@ -22127,31 +24715,31 @@ paths: content: application/merge-patch+json: schema: - $ref: '#/components/schemas/ResetPassword-update' + $ref: '#/components/schemas/Category-write_update' application/vnd.api+json: schema: - $ref: '#/components/schemas/ResetPassword.jsonapi' - description: 'The updated ResetPassword resource' + $ref: '#/components/schemas/Category.jsonapi' + description: 'The updated Category resource' required: true responses: 200: content: application/hal+json: schema: - $ref: '#/components/schemas/ResetPassword.jsonhal' + $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes' application/json: schema: - $ref: '#/components/schemas/ResetPassword' + $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' application/ld+json: schema: - $ref: '#/components/schemas/ResetPassword.jsonld' + $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes' application/vnd.api+json: schema: - $ref: '#/components/schemas/ResetPassword.jsonapi' + $ref: '#/components/schemas/Category.jsonapi' text/html: schema: - $ref: '#/components/schemas/ResetPassword' - description: 'ResetPassword resource updated' + $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' + description: 'Category resource updated' links: [] 400: description: 'Invalid input' @@ -22159,49 +24747,14 @@ paths: description: 'Resource not found' 422: description: 'Unprocessable entity' - summary: 'Updates the ResetPassword resource.' - tags: - - ResetPassword - /authentication_token: - post: - description: 'Creates a user token.' - operationId: login_check_post - requestBody: - content: - application/json: - schema: - properties: - identifier: - nullable: false - type: string - password: - nullable: false - type: string - required: - - identifier - - password - type: object - description: 'The login data' - required: true - responses: - 200: - content: - application/json: - schema: - properties: - token: { nullable: false, readOnly: true, type: string } - required: - - token - type: object - description: 'User token created' - summary: 'Creates a user token.' + summary: 'Updates the Category resource.' tags: - - 'Login Check' - /camp_collaborations: + - Category + /checklist_items: get: deprecated: false - description: 'Retrieves the collection of CampCollaboration resources.' - operationId: api_camp_collaborations_get_collection + description: 'Retrieves the collection of ChecklistItem resources.' + operationId: api_checklist_items_get_collection parameters: - allowEmptyValue: true @@ -22210,7 +24763,7 @@ paths: description: '' explode: false in: query - name: activityResponsibles.activity + name: checklist required: false schema: type: string @@ -22222,7 +24775,7 @@ paths: description: '' explode: false in: query - name: camp + name: checklist.camp required: false schema: type: string @@ -22234,7 +24787,7 @@ paths: description: '' explode: true in: query - name: 'activityResponsibles.activity[]' + name: 'checklist.camp[]' required: false schema: items: @@ -22248,7 +24801,7 @@ paths: description: '' explode: true in: query - name: 'camp[]' + name: 'checklist[]' required: false schema: items: @@ -22261,7 +24814,7 @@ paths: application/hal+json: schema: properties: - _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/CampCollaboration.jsonhal-read_CampCollaboration.Camp_CampCollaboration.User' }, type: array } }, type: object }, { type: object }] } + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/ChecklistItem.jsonhal-read' }, type: array } }, type: object }, { type: object }] } _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } itemsPerPage: { minimum: 0, type: integer } totalItems: { minimum: 0, type: integer } @@ -22272,12 +24825,12 @@ paths: application/json: schema: items: - $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' + $ref: '#/components/schemas/ChecklistItem-read' type: array application/ld+json: schema: properties: - 'hydra:member': { items: { $ref: '#/components/schemas/CampCollaboration.jsonld-read_CampCollaboration.Camp_CampCollaboration.User' }, type: array } + 'hydra:member': { items: { $ref: '#/components/schemas/ChecklistItem.jsonld-read' }, type: array } 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } 'hydra:totalItems': { minimum: 0, type: integer } 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } @@ -22287,145 +24840,104 @@ paths: application/vnd.api+json: schema: items: - $ref: '#/components/schemas/CampCollaboration.jsonapi' + $ref: '#/components/schemas/ChecklistItem.jsonapi' type: array text/html: schema: items: - $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' + $ref: '#/components/schemas/ChecklistItem-read' type: array - description: 'CampCollaboration collection' - summary: 'Retrieves the collection of CampCollaboration resources.' + description: 'ChecklistItem collection' + summary: 'Retrieves the collection of ChecklistItem resources.' tags: - - CampCollaboration + - ChecklistItem post: deprecated: false - description: 'Also sends an invitation email to the inviteEmail address, if specified.' - operationId: api_camp_collaborations_post + description: 'Creates a ChecklistItem resource.' + operationId: api_checklist_items_post parameters: [] requestBody: content: application/hal+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonhal-write_create' + $ref: '#/components/schemas/ChecklistItem.jsonhal-write_create' application/json: schema: - $ref: '#/components/schemas/CampCollaboration-write_create' + $ref: '#/components/schemas/ChecklistItem-write_create' application/ld+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonld-write_create' + $ref: '#/components/schemas/ChecklistItem.jsonld-write_create' application/vnd.api+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonapi' + $ref: '#/components/schemas/ChecklistItem.jsonapi' text/html: schema: - $ref: '#/components/schemas/CampCollaboration-write_create' - description: 'The new CampCollaboration resource' + $ref: '#/components/schemas/ChecklistItem-write_create' + description: 'The new ChecklistItem resource' required: true responses: 201: content: application/hal+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonhal-read_CampCollaboration.Camp_CampCollaboration.User' + $ref: '#/components/schemas/ChecklistItem.jsonhal-read' application/json: schema: - $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' + $ref: '#/components/schemas/ChecklistItem-read' application/ld+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonld-read_CampCollaboration.Camp_CampCollaboration.User' + $ref: '#/components/schemas/ChecklistItem.jsonld-read' application/vnd.api+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonapi' + $ref: '#/components/schemas/ChecklistItem.jsonapi' text/html: schema: - $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' - description: 'CampCollaboration resource created' + $ref: '#/components/schemas/ChecklistItem-read' + description: 'ChecklistItem resource created' links: [] 400: description: 'Invalid input' 422: description: 'Unprocessable entity' - summary: 'Creates a CampCollaboration resource.' + summary: 'Creates a ChecklistItem resource.' tags: - - CampCollaboration - '/camp_collaborations/{id}': + - ChecklistItem + '/checklist_items/{id}': delete: deprecated: false - description: 'Removes the CampCollaboration resource.' - operationId: api_camp_collaborations_id_delete - parameters: - - - allowEmptyValue: false - allowReserved: false - deprecated: false - description: 'CampCollaboration identifier' - explode: false - in: path - name: id - required: true - schema: - type: string - style: simple - responses: - 204: - description: 'CampCollaboration resource deleted' - 404: - description: 'Resource not found' - summary: 'Removes the CampCollaboration resource.' - tags: - - CampCollaboration - get: - deprecated: false - description: 'Retrieves a CampCollaboration resource.' - operationId: api_camp_collaborations_id_get + description: 'Removes the ChecklistItem resource.' + operationId: api_checklist_items_id_delete parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'CampCollaboration identifier' + description: 'ChecklistItem identifier' explode: false in: path name: id required: true - schema: - type: string - style: simple - responses: - 200: - content: - application/hal+json: - schema: - $ref: '#/components/schemas/CampCollaboration.jsonhal-read_CampCollaboration.Camp_CampCollaboration.User' - application/json: - schema: - $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' - application/ld+json: - schema: - $ref: '#/components/schemas/CampCollaboration.jsonld-read_CampCollaboration.Camp_CampCollaboration.User' - application/vnd.api+json: - schema: - $ref: '#/components/schemas/CampCollaboration.jsonapi' - text/html: - schema: - $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' - description: 'CampCollaboration resource' + schema: + type: string + style: simple + responses: + 204: + description: 'ChecklistItem resource deleted' 404: description: 'Resource not found' - summary: 'Retrieves a CampCollaboration resource.' + summary: 'Removes the ChecklistItem resource.' tags: - - CampCollaboration - patch: + - ChecklistItem + get: deprecated: false - description: 'Updates the CampCollaboration resource.' - operationId: api_camp_collaborations_id_patch + description: 'Retrieves a ChecklistItem resource.' + operationId: api_checklist_items_id_get parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'CampCollaboration identifier' + description: 'ChecklistItem identifier' explode: false in: path name: id @@ -22433,56 +24945,40 @@ paths: schema: type: string style: simple - requestBody: - content: - application/merge-patch+json: - schema: - $ref: '#/components/schemas/CampCollaboration-write_update' - application/vnd.api+json: - schema: - $ref: '#/components/schemas/CampCollaboration.jsonapi' - description: 'The updated CampCollaboration resource' - required: true responses: 200: content: application/hal+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonhal-read_CampCollaboration.Camp_CampCollaboration.User' + $ref: '#/components/schemas/ChecklistItem.jsonhal-read' application/json: schema: - $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' + $ref: '#/components/schemas/ChecklistItem-read' application/ld+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonld-read_CampCollaboration.Camp_CampCollaboration.User' + $ref: '#/components/schemas/ChecklistItem.jsonld-read' application/vnd.api+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonapi' + $ref: '#/components/schemas/ChecklistItem.jsonapi' text/html: schema: - $ref: '#/components/schemas/CampCollaboration-read_CampCollaboration.Camp_CampCollaboration.User' - description: 'CampCollaboration resource updated' - links: [] - 400: - description: 'Invalid input' + $ref: '#/components/schemas/ChecklistItem-read' + description: 'ChecklistItem resource' 404: description: 'Resource not found' - 422: - description: 'Unprocessable entity' - summary: 'Updates the CampCollaboration resource.' + summary: 'Retrieves a ChecklistItem resource.' tags: - - CampCollaboration - '/camp_collaborations/{id}/resend_invitation': + - ChecklistItem patch: deprecated: false - description: 'Updates the CampCollaboration resource.' - operationId: api_camp_collaborations_idresend_invitation_patch + description: 'Updates the ChecklistItem resource.' + operationId: api_checklist_items_id_patch parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'CampCollaboration identifier' + description: 'ChecklistItem identifier' explode: false in: path name: id @@ -22494,31 +24990,31 @@ paths: content: application/merge-patch+json: schema: - $ref: '#/components/schemas/CampCollaboration-resend_invitation' + $ref: '#/components/schemas/ChecklistItem-write' application/vnd.api+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonapi' - description: 'The updated CampCollaboration resource' + $ref: '#/components/schemas/ChecklistItem.jsonapi' + description: 'The updated ChecklistItem resource' required: true responses: 200: content: application/hal+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonhal-read' + $ref: '#/components/schemas/ChecklistItem.jsonhal-read' application/json: schema: - $ref: '#/components/schemas/CampCollaboration-read' + $ref: '#/components/schemas/ChecklistItem-read' application/ld+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonld-read' + $ref: '#/components/schemas/ChecklistItem.jsonld-read' application/vnd.api+json: schema: - $ref: '#/components/schemas/CampCollaboration.jsonapi' + $ref: '#/components/schemas/ChecklistItem.jsonapi' text/html: schema: - $ref: '#/components/schemas/CampCollaboration-read' - description: 'CampCollaboration resource updated' + $ref: '#/components/schemas/ChecklistItem-read' + description: 'ChecklistItem resource updated' links: [] 400: description: 'Invalid input' @@ -22526,14 +25022,14 @@ paths: description: 'Resource not found' 422: description: 'Unprocessable entity' - summary: 'Send the invitation email for this CampCollaboration again. Only possible, if the status is already invited.' + summary: 'Updates the ChecklistItem resource.' tags: - - CampCollaboration - /camps: + - ChecklistItem + /checklists: get: deprecated: false - description: 'Retrieves the collection of Camp resources.' - operationId: api_camps_get_collection + description: 'Retrieves the collection of Checklist resources.' + operationId: api_checklists_get_collection parameters: - allowEmptyValue: true @@ -22542,10 +25038,10 @@ paths: description: '' explode: false in: query - name: isPrototype + name: camp required: false schema: - type: boolean + type: string style: form - allowEmptyValue: true @@ -22554,11 +25050,11 @@ paths: description: '' explode: true in: query - name: 'isPrototype[]' + name: 'camp[]' required: false schema: items: - type: boolean + type: string type: array style: form responses: @@ -22567,7 +25063,7 @@ paths: application/hal+json: schema: properties: - _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Camp.jsonhal-read' }, type: array } }, type: object }, { type: object }] } + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Checklist.jsonhal-read' }, type: array } }, type: object }, { type: object }] } _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } itemsPerPage: { minimum: 0, type: integer } totalItems: { minimum: 0, type: integer } @@ -22578,12 +25074,12 @@ paths: application/json: schema: items: - $ref: '#/components/schemas/Camp-read' + $ref: '#/components/schemas/Checklist-read' type: array application/ld+json: schema: properties: - 'hydra:member': { items: { $ref: '#/components/schemas/Camp.jsonld-read' }, type: array } + 'hydra:member': { items: { $ref: '#/components/schemas/Checklist.jsonld-read' }, type: array } 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } 'hydra:totalItems': { minimum: 0, type: integer } 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } @@ -22593,82 +25089,82 @@ paths: application/vnd.api+json: schema: items: - $ref: '#/components/schemas/Camp.jsonapi' + $ref: '#/components/schemas/Checklist.jsonapi' type: array text/html: schema: items: - $ref: '#/components/schemas/Camp-read' + $ref: '#/components/schemas/Checklist-read' type: array - description: 'Camp collection' - summary: 'Retrieves the collection of Camp resources.' + description: 'Checklist collection' + summary: 'Retrieves the collection of Checklist resources.' tags: - - Camp + - Checklist post: deprecated: false - description: 'Creates a Camp resource.' - operationId: api_camps_post + description: 'Creates a Checklist resource.' + operationId: api_checklists_post parameters: [] requestBody: content: application/hal+json: schema: - $ref: '#/components/schemas/Camp.jsonhal-write_create' + $ref: '#/components/schemas/Checklist.jsonhal-write_create' application/json: schema: - $ref: '#/components/schemas/Camp-write_create' + $ref: '#/components/schemas/Checklist-write_create' application/ld+json: schema: - $ref: '#/components/schemas/Camp.jsonld-write_create' + $ref: '#/components/schemas/Checklist.jsonld-write_create' application/vnd.api+json: schema: - $ref: '#/components/schemas/Camp.jsonapi' + $ref: '#/components/schemas/Checklist.jsonapi' text/html: schema: - $ref: '#/components/schemas/Camp-write_create' - description: 'The new Camp resource' + $ref: '#/components/schemas/Checklist-write_create' + description: 'The new Checklist resource' required: true responses: 201: content: application/hal+json: schema: - $ref: '#/components/schemas/Camp.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + $ref: '#/components/schemas/Checklist.jsonhal-read' application/json: schema: - $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + $ref: '#/components/schemas/Checklist-read' application/ld+json: schema: - $ref: '#/components/schemas/Camp.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + $ref: '#/components/schemas/Checklist.jsonld-read' application/vnd.api+json: schema: - $ref: '#/components/schemas/Camp.jsonapi' + $ref: '#/components/schemas/Checklist.jsonapi' text/html: schema: - $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' - description: 'Camp resource created' + $ref: '#/components/schemas/Checklist-read' + description: 'Checklist resource created' links: [] 400: description: 'Invalid input' 422: description: 'Unprocessable entity' - summary: 'Creates a Camp resource.' + summary: 'Creates a Checklist resource.' tags: - - Camp - '/camps/{campId}/categories': + - Checklist + '/checklists/{checklistId}/checklist_items': get: deprecated: false - description: 'Retrieves the collection of Category resources.' - operationId: BelongsToCamp_App\Entity\Category_get_collection + description: 'Retrieves the collection of ChecklistItem resources.' + operationId: api_checklists_checklistIdchecklist_items_get_collection parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'Category identifier' + description: 'ChecklistItem identifier' explode: false in: path - name: campId + name: checklistId required: true schema: type: string @@ -22680,7 +25176,19 @@ paths: description: '' explode: false in: query - name: camp + name: checklist + required: false + schema: + type: string + style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: false + in: query + name: checklist.camp required: false schema: type: string @@ -22692,7 +25200,21 @@ paths: description: '' explode: true in: query - name: 'camp[]' + name: 'checklist.camp[]' + required: false + schema: + items: + type: string + type: array + style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: true + in: query + name: 'checklist[]' required: false schema: items: @@ -22705,7 +25227,7 @@ paths: application/hal+json: schema: properties: - _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Category.jsonhal-read' }, type: array } }, type: object }, { type: object }] } + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/ChecklistItem.jsonhal-read' }, type: array } }, type: object }, { type: object }] } _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } itemsPerPage: { minimum: 0, type: integer } totalItems: { minimum: 0, type: integer } @@ -22716,12 +25238,12 @@ paths: application/json: schema: items: - $ref: '#/components/schemas/Category-read' + $ref: '#/components/schemas/ChecklistItem-read' type: array application/ld+json: schema: properties: - 'hydra:member': { items: { $ref: '#/components/schemas/Category.jsonld-read' }, type: array } + 'hydra:member': { items: { $ref: '#/components/schemas/ChecklistItem.jsonld-read' }, type: array } 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } 'hydra:totalItems': { minimum: 0, type: integer } 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } @@ -22731,28 +25253,28 @@ paths: application/vnd.api+json: schema: items: - $ref: '#/components/schemas/Category.jsonapi' + $ref: '#/components/schemas/ChecklistItem.jsonapi' type: array text/html: schema: items: - $ref: '#/components/schemas/Category-read' + $ref: '#/components/schemas/ChecklistItem-read' type: array - description: 'Category collection' - summary: 'Retrieves the collection of Category resources.' + description: 'ChecklistItem collection' + summary: 'Retrieves the collection of ChecklistItem resources.' tags: - - Category - '/camps/{id}': + - ChecklistItem + '/checklists/{id}': delete: deprecated: false - description: 'Removes the Camp resource.' - operationId: api_camps_id_delete + description: 'Removes the Checklist resource.' + operationId: api_checklists_id_delete parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'Camp identifier' + description: 'Checklist identifier' explode: false in: path name: id @@ -22762,22 +25284,22 @@ paths: style: simple responses: 204: - description: 'Camp resource deleted' + description: 'Checklist resource deleted' 404: description: 'Resource not found' - summary: 'Removes the Camp resource.' + summary: 'Removes the Checklist resource.' tags: - - Camp + - Checklist get: deprecated: false - description: 'Retrieves a Camp resource.' - operationId: api_camps_id_get + description: 'Retrieves a Checklist resource.' + operationId: api_checklists_id_get parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'Camp identifier' + description: 'Checklist identifier' explode: false in: path name: id @@ -22790,35 +25312,35 @@ paths: content: application/hal+json: schema: - $ref: '#/components/schemas/Camp.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + $ref: '#/components/schemas/Checklist.jsonhal-read' application/json: schema: - $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + $ref: '#/components/schemas/Checklist-read' application/ld+json: schema: - $ref: '#/components/schemas/Camp.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + $ref: '#/components/schemas/Checklist.jsonld-read' application/vnd.api+json: schema: - $ref: '#/components/schemas/Camp.jsonapi' + $ref: '#/components/schemas/Checklist.jsonapi' text/html: schema: - $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' - description: 'Camp resource' + $ref: '#/components/schemas/Checklist-read' + description: 'Checklist resource' 404: description: 'Resource not found' - summary: 'Retrieves a Camp resource.' + summary: 'Retrieves a Checklist resource.' tags: - - Camp + - Checklist patch: deprecated: false - description: 'Updates the Camp resource.' - operationId: api_camps_id_patch + description: 'Updates the Checklist resource.' + operationId: api_checklists_id_patch parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'Camp identifier' + description: 'Checklist identifier' explode: false in: path name: id @@ -22830,31 +25352,31 @@ paths: content: application/merge-patch+json: schema: - $ref: '#/components/schemas/Camp-write_update' + $ref: '#/components/schemas/Checklist-write' application/vnd.api+json: schema: - $ref: '#/components/schemas/Camp.jsonapi' - description: 'The updated Camp resource' + $ref: '#/components/schemas/Checklist.jsonapi' + description: 'The updated Checklist resource' required: true responses: 200: content: application/hal+json: schema: - $ref: '#/components/schemas/Camp.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + $ref: '#/components/schemas/Checklist.jsonhal-read' application/json: schema: - $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + $ref: '#/components/schemas/Checklist-read' application/ld+json: schema: - $ref: '#/components/schemas/Camp.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' + $ref: '#/components/schemas/Checklist.jsonld-read' application/vnd.api+json: schema: - $ref: '#/components/schemas/Camp.jsonapi' + $ref: '#/components/schemas/Checklist.jsonapi' text/html: schema: - $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User' - description: 'Camp resource updated' + $ref: '#/components/schemas/Checklist-read' + description: 'Checklist resource updated' links: [] 400: description: 'Invalid input' @@ -22862,14 +25384,14 @@ paths: description: 'Resource not found' 422: description: 'Unprocessable entity' - summary: 'Updates the Camp resource.' + summary: 'Updates the Checklist resource.' tags: - - Camp - /categories: + - Checklist + /content_node/checklist_nodes: get: deprecated: false - description: 'Retrieves the collection of Category resources.' - operationId: api_categories_get_collection + description: 'Retrieves the collection of ChecklistNode resources.' + operationId: api_content_nodechecklist_nodes_get_collection parameters: - allowEmptyValue: true @@ -22878,7 +25400,31 @@ paths: description: '' explode: false in: query - name: camp + name: contentType + required: false + schema: + type: string + style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: false + in: query + name: period + required: false + schema: + type: string + style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: false + in: query + name: root required: false schema: type: string @@ -22890,7 +25436,21 @@ paths: description: '' explode: true in: query - name: 'camp[]' + name: 'contentType[]' + required: false + schema: + items: + type: string + type: array + style: form + - + allowEmptyValue: true + allowReserved: false + deprecated: false + description: '' + explode: true + in: query + name: 'root[]' required: false schema: items: @@ -22903,7 +25463,7 @@ paths: application/hal+json: schema: properties: - _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Category.jsonhal-read' }, type: array } }, type: object }, { type: object }] } + _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/ChecklistNode.jsonhal-read' }, type: array } }, type: object }, { type: object }] } _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object } itemsPerPage: { minimum: 0, type: integer } totalItems: { minimum: 0, type: integer } @@ -22914,12 +25474,12 @@ paths: application/json: schema: items: - $ref: '#/components/schemas/Category-read' + $ref: '#/components/schemas/ChecklistNode-read' type: array application/ld+json: schema: properties: - 'hydra:member': { items: { $ref: '#/components/schemas/Category.jsonld-read' }, type: array } + 'hydra:member': { items: { $ref: '#/components/schemas/ChecklistNode.jsonld-read' }, type: array } 'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object } 'hydra:totalItems': { minimum: 0, type: integer } 'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object } @@ -22929,79 +25489,79 @@ paths: application/vnd.api+json: schema: items: - $ref: '#/components/schemas/Category.jsonapi' + $ref: '#/components/schemas/ChecklistNode.jsonapi' type: array text/html: schema: items: - $ref: '#/components/schemas/Category-read' + $ref: '#/components/schemas/ChecklistNode-read' type: array - description: 'Category collection' - summary: 'Retrieves the collection of Category resources.' + description: 'ChecklistNode collection' + summary: 'Retrieves the collection of ChecklistNode resources.' tags: - - Category + - ChecklistNode post: deprecated: false - description: 'Creates a Category resource.' - operationId: api_categories_post + description: 'Creates a ChecklistNode resource.' + operationId: api_content_nodechecklist_nodes_post parameters: [] requestBody: content: application/hal+json: schema: - $ref: '#/components/schemas/Category.jsonhal-write_create' + $ref: '#/components/schemas/ChecklistNode.jsonhal-write_create' application/json: schema: - $ref: '#/components/schemas/Category-write_create' + $ref: '#/components/schemas/ChecklistNode-write_create' application/ld+json: schema: - $ref: '#/components/schemas/Category.jsonld-write_create' + $ref: '#/components/schemas/ChecklistNode.jsonld-write_create' application/vnd.api+json: schema: - $ref: '#/components/schemas/Category.jsonapi' + $ref: '#/components/schemas/ChecklistNode.jsonapi' text/html: schema: - $ref: '#/components/schemas/Category-write_create' - description: 'The new Category resource' + $ref: '#/components/schemas/ChecklistNode-write_create' + description: 'The new ChecklistNode resource' required: true responses: 201: content: application/hal+json: schema: - $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes' + $ref: '#/components/schemas/ChecklistNode.jsonhal-read' application/json: schema: - $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' + $ref: '#/components/schemas/ChecklistNode-read' application/ld+json: schema: - $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes' + $ref: '#/components/schemas/ChecklistNode.jsonld-read' application/vnd.api+json: schema: - $ref: '#/components/schemas/Category.jsonapi' + $ref: '#/components/schemas/ChecklistNode.jsonapi' text/html: schema: - $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' - description: 'Category resource created' + $ref: '#/components/schemas/ChecklistNode-read' + description: 'ChecklistNode resource created' links: [] 400: description: 'Invalid input' 422: description: 'Unprocessable entity' - summary: 'Creates a Category resource.' + summary: 'Creates a ChecklistNode resource.' tags: - - Category - '/categories/{id}': + - ChecklistNode + '/content_node/checklist_nodes/{id}': delete: deprecated: false - description: 'Removes the Category resource.' - operationId: api_categories_id_delete + description: 'Removes the ChecklistNode resource.' + operationId: api_content_nodechecklist_nodes_id_delete parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'Category identifier' + description: 'ChecklistNode identifier' explode: false in: path name: id @@ -23011,22 +25571,22 @@ paths: style: simple responses: 204: - description: 'Category resource deleted' + description: 'ChecklistNode resource deleted' 404: description: 'Resource not found' - summary: 'Removes the Category resource.' + summary: 'Removes the ChecklistNode resource.' tags: - - Category + - ChecklistNode get: deprecated: false - description: 'Retrieves a Category resource.' - operationId: api_categories_id_get + description: 'Retrieves a ChecklistNode resource.' + operationId: api_content_nodechecklist_nodes_id_get parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'Category identifier' + description: 'ChecklistNode identifier' explode: false in: path name: id @@ -23039,35 +25599,35 @@ paths: content: application/hal+json: schema: - $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes' + $ref: '#/components/schemas/ChecklistNode.jsonhal-read' application/json: schema: - $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' + $ref: '#/components/schemas/ChecklistNode-read' application/ld+json: schema: - $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes' + $ref: '#/components/schemas/ChecklistNode.jsonld-read' application/vnd.api+json: schema: - $ref: '#/components/schemas/Category.jsonapi' + $ref: '#/components/schemas/ChecklistNode.jsonapi' text/html: schema: - $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' - description: 'Category resource' + $ref: '#/components/schemas/ChecklistNode-read' + description: 'ChecklistNode resource' 404: description: 'Resource not found' - summary: 'Retrieves a Category resource.' + summary: 'Retrieves a ChecklistNode resource.' tags: - - Category + - ChecklistNode patch: deprecated: false - description: 'Updates the Category resource.' - operationId: api_categories_id_patch + description: 'Updates the ChecklistNode resource.' + operationId: api_content_nodechecklist_nodes_id_patch parameters: - allowEmptyValue: false allowReserved: false deprecated: false - description: 'Category identifier' + description: 'ChecklistNode identifier' explode: false in: path name: id @@ -23079,31 +25639,31 @@ paths: content: application/merge-patch+json: schema: - $ref: '#/components/schemas/Category-write_update' + $ref: '#/components/schemas/ChecklistNode-write_update' application/vnd.api+json: schema: - $ref: '#/components/schemas/Category.jsonapi' - description: 'The updated Category resource' + $ref: '#/components/schemas/ChecklistNode.jsonapi' + description: 'The updated ChecklistNode resource' required: true responses: 200: content: application/hal+json: schema: - $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes' + $ref: '#/components/schemas/ChecklistNode.jsonhal-read' application/json: schema: - $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' + $ref: '#/components/schemas/ChecklistNode-read' application/ld+json: schema: - $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes' + $ref: '#/components/schemas/ChecklistNode.jsonld-read' application/vnd.api+json: schema: - $ref: '#/components/schemas/Category.jsonapi' + $ref: '#/components/schemas/ChecklistNode.jsonapi' text/html: schema: - $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes' - description: 'Category resource updated' + $ref: '#/components/schemas/ChecklistNode-read' + description: 'ChecklistNode resource updated' links: [] 400: description: 'Invalid input' @@ -23111,9 +25671,9 @@ paths: description: 'Resource not found' 422: description: 'Unprocessable entity' - summary: 'Updates the Category resource.' + summary: 'Updates the ChecklistNode resource.' tags: - - Category + - ChecklistNode /content_node/column_layouts: get: deprecated: false diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json index 69c3aebd5f..fb16677bba 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json +++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json @@ -24,6 +24,18 @@ "href": "\/categories{\/id}{?camp,camp[]}", "templated": true }, + "checklistItems": { + "href": "\/checklist_items{\/id}{?checklist,checklist[],checklist.camp,checklist.camp[]}", + "templated": true + }, + "checklistNodes": { + "href": "\/content_node\/checklist_nodes{\/id}{?contentType,contentType[],root,root[],period}", + "templated": true + }, + "checklists": { + "href": "\/checklists{\/id}{?camp,camp[]}", + "templated": true + }, "columnLayouts": { "href": "\/content_node\/column_layouts{\/id}{?contentType,contentType[],root,root[],period}", "templated": true diff --git a/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml index b8edfa35ed..00d3d68b59 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml +++ b/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml @@ -1,5 +1,5 @@ /activities: 221 -/activities/item: 233 +/activities/item: 236 /activity_progress_labels: 6 /activity_progress_labels/item: 7 /activity_responsibles: 6 @@ -10,6 +10,10 @@ /camp_collaborations/item: 24 /categories: 11 /categories/item: 9 +/checklists: 6 +/checklists/item: 7 +/checklist_items: 6 +/checklist_items/item: 8 /content_types: 6 /content_types/item: 6 /days: 26 diff --git a/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml index 1e0924898b..31e42033f3 100644 --- a/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml +++ b/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml @@ -1,5 +1,5 @@ /activities: 21 -/activities/item: 33 +/activities/item: 36 /activity_progress_labels: 6 /activity_progress_labels/item: 7 /activity_responsibles: 6 @@ -10,6 +10,10 @@ /camp_collaborations/item: 14 /categories: 11 /categories/item: 9 +/checklists: 6 +/checklists/item: 7 +/checklist_items: 6 +/checklist_items/item: 8 /content_types: 6 /content_types/item: 6 /days: 26 diff --git a/api/tests/Entity/CampTest.php b/api/tests/Entity/CampTest.php index e83f008472..b228b48fcf 100644 --- a/api/tests/Entity/CampTest.php +++ b/api/tests/Entity/CampTest.php @@ -25,7 +25,7 @@ class CampTest extends TestCase { public function setUp(): void { $this->campPrototype = new Camp(); $this->campPrototype->isPrototype = true; - $this->campPrototype->name = 'camp-name'; + $this->campPrototype->shortTitle = 'camp-name'; $this->campPrototype->title = 'camp-title'; $this->campPrototype->motto = 'camp-motto'; diff --git a/api/tests/Service/MailServiceTest.php b/api/tests/Service/MailServiceTest.php index 14846bfaa7..714dcb69cc 100644 --- a/api/tests/Service/MailServiceTest.php +++ b/api/tests/Service/MailServiceTest.php @@ -41,7 +41,7 @@ protected function setUp(): void { $this->user->profile = $profile; $this->camp = new Camp(); - $this->camp->name = 'some camp'; + $this->camp->shortTitle = 'some camp'; $this->camp->title = 'some camp title'; } @@ -52,13 +52,13 @@ public function testSendInviteToCampMailDeChScout() { self::assertEmailCount(1); $mailerMessage = self::getMailerMessage(0); self::assertEmailAddressContains($mailerMessage, 'To', self::INVITE_MAIL); - self::assertEmailHeaderSame($mailerMessage, 'subject', '[eCamp v3] Du wurdest ins Lager "some camp" eingeladen'); + self::assertEmailHeaderSame($mailerMessage, 'subject', '[eCamp v3] Du wurdest ins Lager "some camp title" eingeladen'); - self::assertEmailHtmlBodyContains($mailerMessage, $this->camp->name); + self::assertEmailHtmlBodyContains($mailerMessage, $this->camp->title); self::assertEmailHtmlBodyContains($mailerMessage, $this->user->getDisplayName()); self::assertEmailHtmlBodyContains($mailerMessage, self::INVITE_KEY); - self::assertEmailTextBodyContains($mailerMessage, $this->camp->name); + self::assertEmailTextBodyContains($mailerMessage, $this->camp->title); self::assertEmailTextBodyContains($mailerMessage, $this->user->getDisplayName()); self::assertEmailTextBodyContains($mailerMessage, self::INVITE_KEY); } @@ -72,11 +72,11 @@ public function testSendInvitationMailDoesNotCrashForAllLanguages(string $langua $mailerMessage = self::getMailerMessage(0); self::assertEmailAddressContains($mailerMessage, 'To', self::INVITE_MAIL); - self::assertEmailHtmlBodyContains($mailerMessage, $this->camp->name); + self::assertEmailHtmlBodyContains($mailerMessage, $this->camp->title); self::assertEmailHtmlBodyContains($mailerMessage, $this->user->getDisplayName()); self::assertEmailHtmlBodyContains($mailerMessage, self::INVITE_KEY); - self::assertEmailTextBodyContains($mailerMessage, $this->camp->name); + self::assertEmailTextBodyContains($mailerMessage, $this->camp->title); self::assertEmailTextBodyContains($mailerMessage, $this->user->getDisplayName()); self::assertEmailTextBodyContains($mailerMessage, self::INVITE_KEY); } diff --git a/api/tests/Validator/ContentNode/AssertNoLoopValidatorTest.php b/api/tests/Validator/AssertNoLoopValidatorTest.php similarity index 95% rename from api/tests/Validator/ContentNode/AssertNoLoopValidatorTest.php rename to api/tests/Validator/AssertNoLoopValidatorTest.php index ead7803414..527f4bfb94 100644 --- a/api/tests/Validator/ContentNode/AssertNoLoopValidatorTest.php +++ b/api/tests/Validator/AssertNoLoopValidatorTest.php @@ -1,10 +1,10 @@ { diff --git a/common/helpers/__tests__/campCollaborationDisplayName.spec.js b/common/helpers/__tests__/campCollaborationDisplayName.spec.js index 36360e08d0..fc762ff8ea 100644 --- a/common/helpers/__tests__/campCollaborationDisplayName.spec.js +++ b/common/helpers/__tests__/campCollaborationDisplayName.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import campCollaborationDisplayName from '../campCollaborationDisplayName.js' describe('campCollaborationDisplayName', () => { diff --git a/common/helpers/__tests__/campCollaborationInitials.spec.js b/common/helpers/__tests__/campCollaborationInitials.spec.js index 5693d6c486..66cecb956e 100644 --- a/common/helpers/__tests__/campCollaborationInitials.spec.js +++ b/common/helpers/__tests__/campCollaborationInitials.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import campCollaborationInitials from '../campCollaborationInitials.js' describe('campCollaborationInitials', () => { diff --git a/common/helpers/__tests__/campCollaborationLegalName.spec.js b/common/helpers/__tests__/campCollaborationLegalName.spec.js index 1d215bde1b..93cd7dda77 100644 --- a/common/helpers/__tests__/campCollaborationLegalName.spec.js +++ b/common/helpers/__tests__/campCollaborationLegalName.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import campCollaborationLegalName from '../campCollaborationLegalName.js' describe('campCollaborationLegalName', () => { diff --git a/common/helpers/__tests__/campShortTitle.spec.js b/common/helpers/__tests__/campShortTitle.spec.js new file mode 100644 index 0000000000..f992d457eb --- /dev/null +++ b/common/helpers/__tests__/campShortTitle.spec.js @@ -0,0 +1,45 @@ +import { describe, expect, it } from 'vitest' +import { campShortTitle } from '../campShortTitle.js' + +describe('campShortTitle', () => { + it.each([ + [{ shortTitle: null, title: 'Sommerlager Pfadistufe 2024' }, 'SoLa24 Pfadis'], + [{ shortTitle: null, title: 'HeLa Wolfsstufe 2024' }, 'HeLa24 Wölfli'], + [{ shortTitle: null, title: 'Bezirkspfingstlager Rover 2025' }, 'BezPfiLa25 Rover'], + [{ shortTitle: null, title: 'PfiLa Pfadistufe 2024' }, 'PfiLa24 Pfadis'], + [{ shortTitle: null, title: 'Pfingstlager 2024' }, 'PfiLa 2024'], + [{ shortTitle: null, title: 'Pio SoLa 2024' }, 'Pio SoLa 2024'], + [{ shortTitle: null, title: 'Herbstlager 2024' }, 'HeLa 2024'], + [{ shortTitle: null, title: 'Auffahrtslager 2025 Pfadi Olymp' }, 'AufLa25PfadiOlym'], + [{ shortTitle: null, title: 'Sola 2024 Jubla BuechBerg' }, 'SoLa24JublaBuech'], + [{ shortTitle: null, title: 'Pfingstlager PTA Bern 2024' }, 'PfiLa24 PTA Bern'], + [{ shortTitle: null, title: 'PfiLa 24 -Wolfsstufe Falkenstein' }, 'PfiLa24-WölfliFa'], + [{ shortTitle: null, title: 'MoBe Klassenlager 2018 Scuol' }, 'MoBeKlaLa18Scuol'], + [{ shortTitle: null, title: 'Cevilager Thun 2024' }, 'Cevilager24 Thun'], + [{ shortTitle: null, title: 'Sommerlager Blauring 2024' }, 'SoLa24 Blauring'], + [{ shortTitle: null, title: 'Sola24 Pfadistufe und Wölfli' }, 'SoLa24Pfadis&Wöl'], + [{ shortTitle: null, title: 'Dracheburg Pfila 2024' }, 'DracheburgPfiLa2'], + [{ shortTitle: null, title: 'Pio Bezirkspfila 2024' }, 'Pio BezPfiLa24'], + [{ shortTitle: null, title: 'Piostufensola 12.12.2026' }, 'PioSoLa26 12.12.'], + + [{ shortTitle: null, title: "Camp d'été à Thun 2024" }, 'été à Thun 2024'], + [{ shortTitle: null, title: "Campo di Pentecoste 2024" }, 'Pentecoste 2024'], + [{ shortTitle: null, title: "Camp d'hiver PiCos 2025" }, "hiver PiCos 2025"], + [{ shortTitle: null, title: "Camp d'automne Eclais 2025" }, "Aut Eclais 2025"], + [{ shortTitle: null, title: "Camp de pâques 2025 louveteaux" }, "Pâq25louveteaux"], + [{ shortTitle: null, title: "Campo di primavera 2025 esploratori" }, "Prim 2025 esplos"], + [{ shortTitle: null, title: "Campo autunnale 2028" }, "autunnale 2028"], + [{ shortTitle: null, title: "Campo dell'Ascensione 2025 Esploratori" }, "Asc 2025 Esplos"], + + [{ shortTitle: 'Pfila 2024', title: 'Pfingstlager 2024' }, 'Pfila 2024'], + [{ shortTitle: 'Pfila 2024', title: null }, 'Pfila 2024'], + [{ shortTitle: null, title: null }, ''], + [{ shortTitle: undefined, title: null }, ''], + [{ shortTitle: '0', title: 'Sola24' }, '0'], + [{ shortTitle: '', title: 'Sola24' }, 'SoLa24'], + [null, ''], + [undefined, ''], + ])('maps "%s" to "%s"', (input, expected) => { + expect(campShortTitle(input)).toEqual(expected) + }) +}) diff --git a/common/helpers/__tests__/colors.spec.js b/common/helpers/__tests__/colors.spec.js index 0af33c5db4..9eadb357f0 100644 --- a/common/helpers/__tests__/colors.spec.js +++ b/common/helpers/__tests__/colors.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import { campCollaborationColor, idToColor, userColor } from '../colors.js' describe('idToColor', () => { diff --git a/common/helpers/__tests__/dateHelperUTCFormatted.spec.js b/common/helpers/__tests__/dateHelperUTCFormatted.spec.js index 3d02bf3e32..6508c7c908 100644 --- a/common/helpers/__tests__/dateHelperUTCFormatted.spec.js +++ b/common/helpers/__tests__/dateHelperUTCFormatted.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import { dateRange, rangeLongEnd, diff --git a/common/helpers/__tests__/dayResponsibles.spec.js b/common/helpers/__tests__/dayResponsibles.spec.js index b4e7774c0a..e3623c8698 100644 --- a/common/helpers/__tests__/dayResponsibles.spec.js +++ b/common/helpers/__tests__/dayResponsibles.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import { dayResponsiblesCommaSeparated, filterDayResponsiblesByDay, diff --git a/common/helpers/__tests__/initials.spec.js b/common/helpers/__tests__/initials.spec.js index 842c11c5de..895b46db75 100644 --- a/common/helpers/__tests__/initials.spec.js +++ b/common/helpers/__tests__/initials.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import initials from '../initials.js' describe('initials', () => { diff --git a/common/helpers/__tests__/interpolation.spec.js b/common/helpers/__tests__/interpolation.spec.js index 71a20bc76c..c0ee4cb51b 100644 --- a/common/helpers/__tests__/interpolation.spec.js +++ b/common/helpers/__tests__/interpolation.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import { lerp, clamp, invlerp, range } from '../interpolation.js' describe('lerp', () => { diff --git a/common/helpers/__tests__/materialListsSorted.spec.js b/common/helpers/__tests__/materialListsSorted.spec.js index fe4e2afd6d..ca4327cb45 100644 --- a/common/helpers/__tests__/materialListsSorted.spec.js +++ b/common/helpers/__tests__/materialListsSorted.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import materialListsSorted from '../materialListsSorted.js' describe('materialListsSorted', () => { diff --git a/common/helpers/__tests__/picasso.spec.js b/common/helpers/__tests__/picasso.spec.js index abbce4c181..ed3c1883cd 100644 --- a/common/helpers/__tests__/picasso.spec.js +++ b/common/helpers/__tests__/picasso.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import { splitDaysIntoPages, calculateBedtime } from '../picasso.js' import dayjs from '@/common/helpers/dayjs.js' diff --git a/common/helpers/__tests__/userDisplayName.spec.js b/common/helpers/__tests__/userDisplayName.spec.js index 5b3e95aec4..72a7a429c4 100644 --- a/common/helpers/__tests__/userDisplayName.spec.js +++ b/common/helpers/__tests__/userDisplayName.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import userDisplayName from '../userDisplayName.js' describe('userDisplayName', () => { diff --git a/common/helpers/__tests__/userInitials.spec.js b/common/helpers/__tests__/userInitials.spec.js index eff283e9f8..9dbb8c9e1d 100644 --- a/common/helpers/__tests__/userInitials.spec.js +++ b/common/helpers/__tests__/userInitials.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from "vitest"; import userInitials from '../userInitials.js' describe('userInitials', () => { diff --git a/common/helpers/__tests__/userLegalName.spec.js b/common/helpers/__tests__/userLegalName.spec.js index a89b179c7c..236bade2fd 100644 --- a/common/helpers/__tests__/userLegalName.spec.js +++ b/common/helpers/__tests__/userLegalName.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest' import userLegalName from '../userLegalName.js' describe('userLegalName', () => { diff --git a/common/helpers/campShortTitle.js b/common/helpers/campShortTitle.js new file mode 100644 index 0000000000..85f69cb63e --- /dev/null +++ b/common/helpers/campShortTitle.js @@ -0,0 +1,76 @@ +const AUTOMATIC_SHORTNERS = [ + { regex: /So(?:mmer)?la(?:ger)?/gi, text: 'SoLa' }, + { regex: /Pfi(?:ngst)?la(?:ger)?/gi, text: 'PfiLa' }, + { regex: /He(?:rbst)?la(?:ger)?/gi, text: 'HeLa' }, +] + +const ADDITIONAL_SHORTNERS = [ + { regex: /Auslandssola/gi, text: 'AuLa' }, + { regex: /Auffahrtslager/gi, text: 'AufLa' }, + { regex: /Abteilungslager/gi, text: 'AbLa' }, + { regex: /Klassenlager/gi, text: 'KlaLa' }, + { + regex: /(Bez)irks?(So|Ab|Au|Auf|He|Pfi)La|(Ka)ntonslager|(Bu)ndeslager/gi, + text: '$1$2$3$4La', + }, + { + regex: + /(?.*?\b)?(?(?:[A-Za-z]{2,}La)|(?:[A-Za-z]{2,}lager))(?(?:\s(?!19|20))|.*?)\s?(?:(?:19|20)(?\d{2}))(?.*)/g, + text: '$$$$$', + }, + { regex: /(Pfadi|Pio|Rover)stufe(?!n)/g, text: '$1s' }, + { regex: /(B)ie?berstufe(?!n)/gi, text: '$1iberli' }, + { regex: /(W)olfs?stufe(?!n)/gi, text: '$1ölfli' }, + { regex: /(E)sploratori/gi, text: '$1splos' }, + { + regex: /(Bie?ber|Wolfs?|Pfadi|Pio|Rover)stufen(So|Ab|Au|Auf|He|Pfi)La/gi, + text: '$1$2La', + }, + { + regex: /Campo? (.*? ?)(?:(?: ?d[ei] )?(Pentec[ôo]te|Pentecoste|primavera|printemps|p[âa]ques|pasqua)|(?:d')?([ée]t[eé]|automne|hiver)|(estivo|autunnale|invernale)|(?:de[l ]l[' ])?(Ascensione?))? (.*? ?)*?((?:19|20)\d{2})?/gi, + text: '$2$3$4$5 $1$6$7', + }, + { regex: /\bPrintemps/gi, text: 'Prt', }, + { regex: /\bPrimavera/gi, text: 'Prim', }, + { regex: /\bP[aâ]ques/gi, text: 'Pâq', }, + { regex: /\bPasqua/gi, text: 'Pas', }, + { regex: /\bAutomne/gi, text: 'Aut', }, + { regex: /\bAutunno/gi, text: 'Aut', }, + { regex: /\bHiver/gi, text: 'Hiv', }, + { regex: /\bInverno/gi, text: 'Inv', }, + { regex: /\bPentec[oô]s?te/gi, text: 'Pent', }, + { regex: /\bAscensione?/gi, text: 'Asc', }, + { regex: /\bEstate/gi, text: 'Est', }, + + { regex: /\b(?:und|et?)\b/g, text: '&' }, + { regex: /\b(?:19|20)(\d{2})\b/g, text: '$1' }, + { regex: /\s/g, text: '' }, +] + +function campShortTitle(camp) { + if (camp?.shortTitle != null && camp.shortTitle !== '') { + return camp.shortTitle.substring(0, 16) + } + + let title = camp?.title ?? '' + + for (const { regex, text } of AUTOMATIC_SHORTNERS) { + title = title.replace(regex, text) + } + + if (title.length <= 16) { + return title + } + + for (const { regex, text } of ADDITIONAL_SHORTNERS) { + title = title.replace(regex, text) + if (title.length <= 16) { + return title + } + } + return title.substring(0, 16) +} + +export { campShortTitle } + +export default campShortTitle diff --git a/common/helpers/dayjs/__tests__/formatDatePeriod.spec.js b/common/helpers/dayjs/__tests__/formatDatePeriod.spec.js index 4f2e891b21..41942d7057 100644 --- a/common/helpers/dayjs/__tests__/formatDatePeriod.spec.js +++ b/common/helpers/dayjs/__tests__/formatDatePeriod.spec.js @@ -1,3 +1,4 @@ +import { describe, beforeEach, expect, it } from 'vitest' import dayjs from '@/common/helpers/dayjs.js' describe('formatDatePeriod dayjs plugin', () => { diff --git a/common/helpers/dayjs/__tests__/parseTime.spec.js b/common/helpers/dayjs/__tests__/parseTime.spec.js new file mode 100644 index 0000000000..6357d233f0 --- /dev/null +++ b/common/helpers/dayjs/__tests__/parseTime.spec.js @@ -0,0 +1,100 @@ +import { describe, beforeEach, expect, it } from 'vitest' +import { default as dayjs, dayjsLocaleMap } from '../../dayjs' +import parseTime from '../parseTime' +import { padStart, range } from 'lodash' +import { HTML5_FMT } from '../../dateFormat' + +describe('parseTime', () => { + describe.each(Object.keys(dayjsLocaleMap))('`%s` locale', (locale) => { + beforeEach(() => { + dayjs.locale(locale) + }) + + const numbersFrom1to23 = range(1, 24).map((number) => [ + `${number}`, + `${padStart(number, 2, '0')}:00`, + ]) + + it.each([ + ['00:00', '00:00'], + ['12:00', '12:00'], + ['23:59', '23:59'], + ['01:01', '01:01'], + ['09:59', '09:59'], + ['20:00', '20:00'], + ['10:11', '10:11'], + ['010:11', '10:11', { en: '00:10' }], + ['00010:11', '10:11', { en: '00:01' }], + ['18:30', '18:30'], + ['001:11', '01:11', { en: '00:01' }], + ['000001:11', '01:11', { en: '00:00' }], + ['16:30', '16:30'], + ...numbersFrom1to23, + [0, '00:00'], + [-0, '00:00'], + ['123', '01:23'], + ['1234', '12:34'], + ['13567', '13:56'], + ['407', '04:07'], + ['3.56', '03:56'], + ['23,4', '23:04'], + ['1,30', '01:30'], + ['1:2', '01:02'], + ['1.2', '01:02'], + ['1,2', '01:02'], + ['1-2', '01:02'], + ['1;2', '01:02'], + ['01', '01:00'], + ['18', '18:00'], + ['23', '23:00'], + // not specified like this, but the current behaviour + ['010', '00:10'], + ['023', '00:23'], + ['145', '01:45'], + ['159', '01:59'], + ['200', '02:00'], + ['214', '02:14'], + ['313', '03:13'], + ['659', '06:59'], + ])( + `parses %s to %s (but special case for %s)`, + (input, output, specialCaseForLocale = {}) => { + const { isValid, parsedDateTime } = parseTime(input) + + const expectedOutput = + locale in specialCaseForLocale ? specialCaseForLocale[locale] : output + + expect(parsedDateTime.format('HH:mm')).toEqual(expectedOutput) + // the resulting dayjs object should not flow over to the next day + expect(parsedDateTime.format(HTML5_FMT.DATE)).toEqual( + dayjs().format(HTML5_FMT.DATE) + ) + expect(isValid).toEqual(true) + } + ) + + it.each([ + [null], + [undefined], + [''], + [' '], + ['\t'], + [[]], + [{}], + ['invalid time'], + ['a very long time that the cases are in multiple lines'], + ['24'], + ['99'], + ['2525'], + ['160'], + ['189'], + ['191'], + ['260'], + ['269'], + ['999'], + ])(`rejects %s`, (input) => { + const { isValid } = parseTime(input) + expect(isValid).toEqual(false) + }) + }) +}) diff --git a/common/helpers/dayjs/parseTime.js b/common/helpers/dayjs/parseTime.js new file mode 100644 index 0000000000..416e2f8dd0 --- /dev/null +++ b/common/helpers/dayjs/parseTime.js @@ -0,0 +1,52 @@ +import dayjs from '../dayjs' +import { HTML5_FMT } from '../dateFormat' + +const REGEX_WITH_COLON = /([0-9]{1,2})[.:,\-;_hH]?([0-9]{1,2})?/ +const REGEX_WITHOUT_COLON = /([0-9]{1,2})([0-9]{2})/ + +function matchDigitGroups(input) { + if (input.match(/^\d{1,2}$/)) { + return [input, '0'] + } + const matchWithoutColon = input.match(REGEX_WITHOUT_COLON) + if (matchWithoutColon) { + return matchWithoutColon.slice(1) + } + const matchWithColon = input.match(REGEX_WITH_COLON) + if (matchWithColon) { + return matchWithColon.slice(1) + } + return [] +} + +export default (val) => { + const stringVal = `${val}` + let valIgnoringLeadingZero = stringVal.replace(/^0*?([\d]{1,2}):/, '$1:') + const parsedDateTime = dayjs.utc(valIgnoringLeadingZero, 'LT') + const formatted = parsedDateTime.format('LT') + if (!formatted.startsWith('0') && valIgnoringLeadingZero.match(/^0\d/)) { + valIgnoringLeadingZero = valIgnoringLeadingZero.slice(1) + } + const isValid = parsedDateTime.isValid() && formatted === valIgnoringLeadingZero + + if (isValid) { + return { parsedDateTime, isValid } + } + + const digitGroups = matchDigitGroups(stringVal) + if (!digitGroups || digitGroups.length < 2) { + return { parsedDateTime, isValid } + } + + const hours = digitGroups[0] + const minutes = digitGroups[1] + const fuzzyMatchedTime = dayjs.utc(`${hours}:${minutes}`, HTML5_FMT.TIME) + const fuzzyMatchedTimeToday = dayjs.utc( + fuzzyMatchedTime.format(HTML5_FMT.TIME), + HTML5_FMT.TIME + ) + if (hours > 23 || minutes > 59) { + return { parsedDateTime, isValid: false } + } + return { parsedDateTime: fuzzyMatchedTimeToday, isValid: fuzzyMatchedTime.isValid() } +} diff --git a/common/locales/de.json b/common/locales/de.json index c8f3f1d83f..70cb006428 100644 --- a/common/locales/de.json +++ b/common/locales/de.json @@ -1,12 +1,16 @@ { "components": { - "story": { - "storyDay": { - "noStory": "Die Blöcke an diesem Tag enthalten keinen roten Faden." + "summary": { + "summaryDay": { + "noContent": "Die Blöcke an diesem Tag enthalten keine '{contentType}' Inhalte." } } }, "contentNode": { + "checklist": { + "icon": "mdi-clipboard-list-outline", + "name": "Checkliste" + }, "columnLayout": { "entity": { "column": { @@ -72,9 +76,9 @@ "printAboveMainContent": "Über dem Hauptinhalt drucken", "printBelowMainContent": "Unter dem Hauptinhalt drucken" }, - "safetyConcept": { + "safetyConsiderations": { "info": "Einige Blöcke erfordern, dass ihr euch Gedanken zu den Risiken macht. Hier könnt ihr diese Gedanken erfassen.{br}Haltet fest, welche Risiken ihr erkannt habt - und wie ihr diesen begegnen könnt.", - "name": "Sicherheitskonzept" + "name": "Sicherheitsüberlegungen" }, "storyboard": { "entity": { @@ -128,10 +132,10 @@ "courseKind": "Kursbezeichnung (bei J+S Kurs: J+S Bezeichnung)", "courseNumber": "Kursnummer", "kind": "Lagerart (Haus-, Zelt-, Unterwegslager, Sommer-, Herbstlager)", - "motto": "Motto", - "name": "Lagername", + "motto": "Motto / Thema", "organizer": "Organisator", "printYSLogoOnPicasso": "J+S-Logo auf Grobprogramm drucken (bei J+S-Kursen aktivieren)", + "shortTitle": "Kurzer Lagertitel", "title": "Lagertitel", "trainingAdvisorName": "Bürgerlicher Name der Betreuungsperson" }, @@ -169,6 +173,18 @@ "-": "keine Nummerierung" } }, + "checklist": { + "fields": { + "name": "Name" + }, + "name": "Checkliste | Checklisten" + }, + "checklistItem": { + "fields": { + "text": "Text" + }, + "name": "Checklisteneintrag" + }, "contentType": { "name": "Inhalttyp | Inhalttypen" }, @@ -244,6 +260,9 @@ "shortScheduleEntryDescription": "Tag\u202f{dayNumber} {startTime}" }, "print": { + "config": { + "periods": "Lagerabschnitt(e)" + }, "cover": { "title": "Titelseite" }, @@ -259,8 +278,13 @@ "program": { "title": "Detailprogramm" }, - "story": { - "title": "Roter Faden" + "summary": { + "safetyConsiderations": { + "title": "Sicherheitsüberlegungen" + }, + "storycontext": { + "title": "Roter Faden" + } }, "toc": { "title": "Inhaltsverzeichnis" diff --git a/common/locales/en.json b/common/locales/en.json index 1093dd758c..a0a8c91f29 100644 --- a/common/locales/en.json +++ b/common/locales/en.json @@ -1,8 +1,8 @@ { "components": { - "story": { - "storyDay": { - "noStory": "The activities on this day do not contain any story content." + "summary": { + "summaryDay": { + "noContent": "The activities on this day do not contain any {contentType} content." } } }, @@ -76,10 +76,10 @@ "printAboveMainContent": "Print above main content", "printBelowMainContent": "Print below main content" }, - "safetyConcept": { + "safetyConsiderations": { "icon": "mdi-security", "info": "Some blocks require to think about the risks. Here you can record these thoughts.{br}Record what risks you have identified - and how you can address them.", - "name": "Safety concept" + "name": "Safety considerations" }, "storyboard": { "entity": { @@ -135,11 +135,11 @@ "courseKind": "Course kind (for Y+S courses: Y+S course term)", "courseNumber": "Course number", "kind": "Camp kind (house, tent, traveling, summer, autumn)", - "motto": "Motto", - "name": "Name", + "motto": "Motto / Theme", "organizer": "Organizer", "printYSLogoOnPicasso": "Print the Y+S logo on the picasso (required for Y+S courses)", - "title": "Title", + "shortTitle": "Short camp title", + "title": "Camp title", "trainingAdvisorName": "Name of training advisor" }, "name": "Camp | Camps", @@ -176,6 +176,18 @@ "-": "no numbering" } }, + "checklist": { + "fields": { + "name": "Name" + }, + "name": "Checklist | Checklists" + }, + "checklistItem": { + "fields": { + "text": "Text" + }, + "name": "Checklist entry" + }, "contentType": { "name": "Contenttype | Contenttypes" }, @@ -251,6 +263,9 @@ "shortScheduleEntryDescription": "day {dayNumber} {startTime}" }, "print": { + "config": { + "periods": "Period(s)" + }, "cover": { "title": "Cover page" }, @@ -266,8 +281,13 @@ "program": { "title": "Program" }, - "story": { - "title": "Storyline" + "summary": { + "safetyConsiderations": { + "title": "Safety considerations" + }, + "storycontext": { + "title": "Story" + } }, "toc": { "title": "Table of contents" diff --git a/common/locales/fr.json b/common/locales/fr.json index db1a1a74a4..c1346d5ebe 100644 --- a/common/locales/fr.json +++ b/common/locales/fr.json @@ -1,8 +1,8 @@ { "components": { - "story": { - "storyDay": { - "noStory": "Aucun file rouge trouvé ce jour-là..." + "summary": { + "summaryDay": { + "noContent": "Aucun {contentType} trouvé ce jour-là..." } } }, @@ -62,9 +62,9 @@ "printAboveMainContent": "Imprimer au-dessus du contenu principal", "printBelowMainContent": "Imprimer sous le contenu principal" }, - "safetyConcept": { + "safetyConsiderations": { "info": "Certains blocs nécessitent de réfléchir aux risques. Tu peux enregistrer ces réflexions ici.{br}Enregistre les risques que tu as identifiés - et comment tu peux y faire face.", - "name": "Concept de sécurité" + "name": "Considérations de sécurité" }, "storyboard": { "entity": { @@ -117,10 +117,10 @@ "courseKind": "Type de cours (pour les cours J+S: description du cours)", "courseNumber": "Numéro de cours", "kind": "Type de camp (chalet, tente, itinérant, été, automne)", - "motto": "Thème", - "name": "Nom du camp", + "motto": "Motto / thème", "organizer": "Organisateur", "printYSLogoOnPicasso": "Imprimer le logo J+S sur le programme général (requis pour les cours J+S)", + "shortTitle": "Titre court du camp", "title": "Titre du camp", "trainingAdvisorName": "Nom du coach J+S" }, @@ -157,6 +157,17 @@ "i": "i, ii, iii - chiffres romains minuscules" } }, + "checklist": { + "fields": { + "name": "Nom" + }, + "name": "Check-list | Check-lists" + }, + "checklistItem": { + "fields": { + "text": "Text" + } + }, "contentType": { "name": "Type de contenu | Types de contenu" }, @@ -231,6 +242,9 @@ } }, "print": { + "config": { + "periods": "Période(s) du camp" + }, "cover": { "title": "Page de couverture" }, @@ -246,8 +260,13 @@ "program": { "title": "Programme" }, - "story": { - "title": "Histoire" + "summary": { + "safetyConsiderations": { + "title": "Considérations de sécurité" + }, + "storycontext": { + "title": "Histoire" + } }, "toc": { "title": "Table des matières" diff --git a/common/locales/it.json b/common/locales/it.json index f7ea5a4054..ea6c611789 100644 --- a/common/locales/it.json +++ b/common/locales/it.json @@ -1,8 +1,8 @@ { "components": { - "story": { - "storyDay": { - "noStory": "Nessun contenuto di storia trovato in questo giorno..." + "summary": { + "summaryDay": { + "noContent": "Nessun contenuto '{contentType}' trovato in questo giorno..." } } }, @@ -62,9 +62,9 @@ "printAboveMainContent": "Stampa sopra il contenuto principale", "printBelowMainContent": "Stampa sotto il contenuto principale" }, - "safetyConcept": { + "safetyConsiderations": { "info": "Alcuni blocchi richiedono una riflessione sui rischi. Qui puoi registrare questi pensieri.{br}Registra i rischi che hai identificato e come puoi affrontarli.", - "name": "Concetto di sicurezza" + "name": "Considerazioni sulla sicurezza" }, "storyboard": { "entity": { @@ -114,8 +114,8 @@ "addressName": "Nome", "addressStreet": "Via", "addressZipcode": "Codice postale", - "motto": "Motto", - "name": "Nome", + "motto": "Motto / Tema", + "shortTitle": "Titolo breve", "title": "Titolo" }, "name": "Campo", @@ -221,6 +221,9 @@ } }, "print": { + "config": { + "periods": "Sezione/i portante/i" + }, "cover": { "title": "Pagina di copertina" }, @@ -230,8 +233,13 @@ "program": { "title": "Programma" }, - "story": { - "title": "Trama" + "summary": { + "safetyConsiderations": { + "title": "Considerazioni sulla sicurezza" + }, + "storycontext": { + "title": "Storia" + } }, "toc": { "title": "Indice dei contenuti" diff --git a/docker-compose.override.yml b/docker-compose.override.yml new file mode 100644 index 0000000000..27143a7265 --- /dev/null +++ b/docker-compose.override.yml @@ -0,0 +1,27 @@ +services: + api: + build: + target: frankenphp_dev + volumes: + - ./api:/app:rw,delegated + - caddy_data:/data + - caddy_config:/config + - ./api/docker/caddy/Caddyfile:/etc/caddy/Caddyfile:ro + - ./api/docker/php/conf.d/api-platform.dev.ini:/usr/local/etc/php/conf.d/api-platform.ini:delegated + - ./api/docker/php/docker-entrypoint.sh:/usr/local/bin/docker-entrypoint:delegated + - ./.cache/composer:/tmp/composer/cache:delegated + environment: + DATABASE_URL: "postgresql://ecamp3:ecamp3@database:5432/ecamp3?serverVersion=15&charset=utf8" + # See https://docs.docker.com/docker-for-mac/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host + # See https://github.com/docker/for-linux/issues/264 + # The `remote_host` below may optionally be replaced with `remote_connect_back` + # XDEBUG_MODE required for step debugging + XDEBUG_MODE: ${XDEBUG_MODE:-off} + # default port for Xdebug 3 is 9003 + # idekey=VSCODE if you are debugging with VSCode + XDEBUG_CONFIG: ${XDEBUG_CONFIG} + # This should correspond to the server declared in PHPStorm `Preferences | Languages & Frameworks | PHP | Servers` + # Then PHPStorm will use the corresponding path mappings + PHP_IDE_CONFIG: serverName=localhost + PERFORMANCE_TEST_DEBUG_OUTPUT: ${PERFORMANCE_TEST_DEBUG_OUTPUT:-} + user: ${USER_ID:-1000} diff --git a/docker-compose.yml b/docker-compose.yml index be2c1a9a31..0830ee320a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ services: frontend: - image: node:22.5.1 + image: node:22.9.0 container_name: 'ecamp3-frontend' ports: - '9229:9229' # jest debug @@ -28,70 +28,48 @@ services: image: ecamp/ecamp3-dev-api build: context: ./api - target: frankenphp_dev + target: frankenphp_prod cache_from: - ecamp/ecamp3-dev-api container_name: 'ecamp3-api' depends_on: - database - docker-host + volumes: + - ./api/config/jwt:/app/config/jwt:rw,delegated ports: - - target: 3000 - published: 3000 - protocol: tcp - target: 2019 published: 2019 protocol: tcp - volumes: - - ./api:/app:rw,delegated - - caddy_data:/data - - caddy_config:/config - - ./api/docker/caddy/Caddyfile:/etc/caddy/Caddyfile:ro - - ./api/docker/php/conf.d/api-platform.dev.ini:/usr/local/etc/php/conf.d/api-platform.ini:delegated - - ./api/docker/php/docker-entrypoint.sh:/usr/local/bin/docker-entrypoint:delegated - - ./.cache/composer:/tmp/composer/cache:delegated environment: DATA_MIGRATIONS_DIR: dev-data - # See https://docs.docker.com/docker-for-mac/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host - # See https://github.com/docker/for-linux/issues/264 - # The `remote_host` below may optionally be replaced with `remote_connect_back` - # XDEBUG_MODE required for step debugging - XDEBUG_MODE: ${XDEBUG_MODE:-off} - # default port for Xdebug 3 is 9003 - # idekey=VSCODE if you are debugging with VSCode - XDEBUG_CONFIG: ${XDEBUG_CONFIG} - # This should correspond to the server declared in PHPStorm `Preferences | Languages & Frameworks | PHP | Servers` - # Then PHPStorm will use the corresponding path mappings - PHP_IDE_CONFIG: serverName=localhost + DATABASE_URL: "postgresql://ecamp3:ecamp3@database:5432/ecamp3dev?serverVersion=15&charset=utf8" + LOG_LEVEL: debug ADDITIONAL_TRUSTED_HOSTS: '.*' - PERFORMANCE_TEST_DEBUG_OUTPUT: ${PERFORMANCE_TEST_DEBUG_OUTPUT:-} + SERVER_NAME: ":3001" healthcheck: interval: 10s timeout: 3s retries: 3 start_period: 30s - user: ${USER_ID:-1000} extra_hosts: - 'host.docker.internal:host-gateway' http-cache: - image: varnish:7.5.0 + image: varnish:7.6.0 container_name: 'ecamp3-http-cache' depends_on: - api volumes: - ./api/docker/varnish/vcl/:/etc/varnish/:ro - ports: - - target: 8080 - published: 3004 - protocol: tcp command: -a :8081,HTTP -p http_max_hdr=96 environment: - COOKIE_PREFIX=localhost_ + - SEND_XKEY_HEADERS_DOWNSTREAM=${SEND_XKEY_HEADERS_DOWNSTREAM:-true} - VARNISH_HTTP_PORT=8080 pdf: - image: node:22.5.1 + image: node:22.9.0 container_name: 'ecamp3-pdf' stdin_open: true tty: true @@ -110,7 +88,7 @@ services: - CI=${CI} print: - image: node:22.5.1 + image: node:22.9.0 container_name: 'ecamp3-print' user: ${USER_ID:-1000} volumes: @@ -181,7 +159,7 @@ services: - FUNCTION_ENABLE_INCOGNITO_MODE=true e2e: - image: cypress/included:13.13.0 + image: cypress/included:cypress-13.13.0-node-20.15.1-chrome-126.0.6478.114-1-ff-128.0-edge-126.0.2592.61-1@sha256:f9733a2cadc3aa270e40f8ce1158a23cb99703476a9db7154b4ecc51ba02bd5c profiles: ['e2e'] container_name: 'ecamp3-e2e' environment: @@ -192,9 +170,25 @@ services: - /tmp/.X11-unix:/tmp/.X11-unix:rw network_mode: host working_dir: /e2e + + reverse-proxy: + image: nginx:1.27 + container_name: 'ecamp3-reverse-proxy' + volumes: + - ./reverse-proxy-nginx.conf:/etc/nginx/nginx.conf + depends_on: + - frontend + - api + ports: + - target: 3000 + published: 3000 + protocol: tcp + - target: 3004 + published: 3004 + protocol: tcp translation: - image: node:22.5.1 + image: node:22.9.0 profiles: ['translation'] container_name: 'ecamp3-translation' volumes: diff --git a/e2e/README.md b/e2e/README.md index 08188d9384..6fc4245a64 100644 --- a/e2e/README.md +++ b/e2e/README.md @@ -90,3 +90,23 @@ npm run cypress:open ```shell docker compose run --rm --entrypoint="npm run lint" e2e ``` + +## For both options: run against prod api image + +### Run the dev api image to generate jwt pair + +```shell +docker compose up -d --wait +``` + +### Build the prod api image + +```shell +docker compose -f ../docker-compose.yml build api +``` + +### Run the prod api image + +```shell +docker compose -f ../docker-compose.yml up --wait -d api +``` diff --git a/e2e/eslint.config.mjs b/e2e/eslint.config.mjs new file mode 100644 index 0000000000..da2ba4624b --- /dev/null +++ b/e2e/eslint.config.mjs @@ -0,0 +1,48 @@ +import { includeIgnoreFile } from '@eslint/compat' +import globals from 'globals' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import js from '@eslint/js' +import { FlatCompat } from '@eslint/eslintrc' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}) +const gitignorePath = path.resolve(__dirname, '.gitignore') + +export default [ + ...compat.extends( + 'eslint:recommended', + 'plugin:cypress/recommended', + 'plugin:prettier/recommended' + ), + { + ignores: ['data/'], + }, + + includeIgnoreFile(gitignorePath), + + { + languageOptions: { + globals: { + ...globals.node, + ...globals.mocha, + }, + + ecmaVersion: 2022, + + parserOptions: { + parser: '@babel/eslint-parser', + }, + }, + + rules: { + 'prefer-const': 'error', + 'prettier/prettier': 'error', + }, + }, +] diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 1acf1335a6..1524f4ba58 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -6,14 +6,341 @@ "": { "name": "@ecamp3/e2e", "devDependencies": { + "@babel/eslint-parser": "7.25.1", + "@eslint/compat": "1.1.1", + "@eslint/eslintrc": "3.1.0", + "@eslint/js": "9.11.1", "cypress": "13.13.2", - "eslint": "8.57.0", + "eslint": "9.11.1", "eslint-config-prettier": "9.1.0", - "eslint-plugin-cypress": "3.4.0", + "eslint-plugin-cypress": "3.5.0", "eslint-plugin-prettier": "5.2.1", + "globals": "15.9.0", "prettier": "3.3.3" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz", + "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -26,9 +353,9 @@ } }, "node_modules/@cypress/request": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", - "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.5.tgz", + "integrity": "sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -38,14 +365,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", + "form-data": "~4.0.0", + "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "6.10.4", + "qs": "6.13.0", "safe-buffer": "^5.1.2", "tough-cookie": "^4.1.3", "tunnel-agent": "^0.6.0", @@ -92,27 +419,75 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.1.tgz", + "integrity": "sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -120,36 +495,56 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", + "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "levn": "^0.4.1" }, "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -166,13 +561,87 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-scope": "5.1.1" + } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -225,15 +694,29 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz", - "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==", + "version": "22.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.2.tgz", + "integrity": "sha512-866lXSrpGpgyHBZUa2m9YNWqHDjjM0aBTJlNtYaGEw4rqY/dcD7deRVTbBBAJelfA7oaGDbNftXF/TL/A6RgoA==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "undici-types": "~6.11.1" + "undici-types": "~6.19.2" } }, "node_modules/@types/sinonjs__fake-timers": { @@ -261,13 +744,6 @@ "@types/node": "*" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, - "license": "ISC" - }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -348,19 +824,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -372,19 +835,17 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/arch": { @@ -446,9 +907,9 @@ } }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true, "license": "MIT" }, @@ -480,9 +941,9 @@ } }, "node_modules/aws4": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.0.tgz", - "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "dev": true, "license": "MIT" }, @@ -549,6 +1010,40 @@ "concat-map": "0.0.1" } }, + "node_modules/browserslist": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -624,6 +1119,28 @@ "node": ">=6" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001663", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", + "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0", + "peer": true + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -632,33 +1149,19 @@ "license": "Apache-2.0" }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/check-more-types": { @@ -744,24 +1247,23 @@ } }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/colorette": { "version": "2.0.20", @@ -810,6 +1312,14 @@ "dev": true, "license": "MIT" }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -890,6 +1400,111 @@ "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, + "node_modules/cypress/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cypress/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cypress/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cypress/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -904,20 +1519,20 @@ } }, "node_modules/dayjs": { - "version": "1.11.12", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", - "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==", + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", "dev": true, "license": "MIT" }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -963,19 +1578,6 @@ "node": ">=0.4.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -987,6 +1589,14 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/electron-to-chromium": { + "version": "1.5.28", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz", + "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==", + "dev": true, + "license": "ISC", + "peer": true + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1041,58 +1651,65 @@ "node": ">= 0.4" } }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz", + "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.6.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.11.1", + "@eslint/plugin-kit": "^0.2.0", "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", @@ -1104,10 +1721,18 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { @@ -1124,9 +1749,9 @@ } }, "node_modules/eslint-plugin-cypress": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-3.4.0.tgz", - "integrity": "sha512-Rrrr3Ri6wHqzrRr+TyUV7bDS4UnMMrFY1R1PP2F7XdGfe9txDC6lQEshyoNOWqGoPkbbeDm1x1XPc/adxemsnA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-3.5.0.tgz", + "integrity": "sha512-JZQ6XnBTNI8h1B9M7wJSFzc48SYbh7VMMKaNTQOFa3BQlnmXPrVc4PKen8R+fpv6VleiPeej6VxloGb42zdRvw==", "dev": true, "license": "MIT", "dependencies": { @@ -1136,6 +1761,35 @@ "eslint": ">=7" } }, + "node_modules/eslint-plugin-cypress/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-cypress/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-prettier": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", @@ -1168,9 +1822,99 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -1178,38 +1922,84 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -1228,6 +2018,16 @@ "node": ">=0.10" } }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -1241,7 +2041,7 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { + "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -1251,6 +2051,16 @@ "node": ">=4.0" } }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -1407,27 +2217,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/find-up": { @@ -1448,18 +2248,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -1480,18 +2279,18 @@ } }, "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" } }, "node_modules/fs-extra": { @@ -1510,13 +2309,6 @@ "node": ">=10" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -1527,6 +2319,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -1583,28 +2386,6 @@ "assert-plus": "^1.0.0" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -1635,16 +2416,13 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1670,21 +2448,15 @@ "dev": true, "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/has-property-descriptors": { @@ -1740,15 +2512,15 @@ } }, "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", "dev": true, "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", - "sshpk": "^1.14.1" + "sshpk": "^1.18.0" }, "engines": { "node": ">=0.10" @@ -1786,9 +2558,9 @@ "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -1832,25 +2604,6 @@ "node": ">=8" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, "node_modules/ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", @@ -1981,6 +2734,14 @@ "dev": true, "license": "MIT" }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2001,6 +2762,20 @@ "dev": true, "license": "MIT" }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -2036,6 +2811,20 @@ "dev": true, "license": "ISC" }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -2181,6 +2970,82 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", @@ -2200,6 +3065,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -2233,6 +3134,17 @@ "node": ">=8" } }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -2297,9 +3209,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, @@ -2310,6 +3222,14 @@ "dev": true, "license": "MIT" }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -2458,16 +3378,6 @@ "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -2492,6 +3402,14 @@ "dev": true, "license": "MIT" }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true, + "license": "ISC", + "peer": true + }, "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -2579,9 +3497,9 @@ "license": "MIT" }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, "license": "MIT", "dependencies": { @@ -2600,13 +3518,13 @@ } }, "node_modules/qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -2702,23 +3620,6 @@ "dev": true, "license": "MIT" }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -2782,16 +3683,13 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/set-function-length": { @@ -2876,6 +3774,42 @@ "node": ">=8" } }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/sshpk": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", @@ -2954,19 +3888,17 @@ } }, "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=4" } }, "node_modules/synckit": { @@ -3020,6 +3952,17 @@ "node": ">=14.14" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/tough-cookie": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", @@ -3047,9 +3990,9 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true, "license": "0BSD" }, @@ -3087,9 +4030,9 @@ } }, "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -3100,9 +4043,9 @@ } }, "node_modules/undici-types": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", - "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, "license": "MIT", "optional": true @@ -3127,16 +4070,46 @@ "node": ">=8" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, - "license": "BSD-2-Clause", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, "dependencies": { - "punycode": "^2.1.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, + "node_modules/uri-js": { + "name": "uri-js-replace", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", + "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", + "dev": true, + "license": "MIT" + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -3217,6 +4190,42 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3224,6 +4233,14 @@ "dev": true, "license": "ISC" }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC", + "peer": true + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", diff --git a/e2e/package.json b/e2e/package.json index f8c8dbc7d3..c55e086e4f 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -5,34 +5,26 @@ "cypress:open": "cypress open", "cypress:run": "cypress run", "lint": "npm run lint:eslint && npm run lint:prettier", - "lint:eslint": "eslint --fix --ext .js --ignore-path .gitignore .", - "lint:prettier": "prettier --write --ignore-path .gitignore **/*.{js,json,md}", + "lint:eslint": "eslint --fix .", + "lint:prettier": "prettier --write --ignore-path .gitignore **/*.{js,mjs,json,md}", "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier", - "lint:check:eslint": "eslint --ext .js --ignore-path .gitignore .", - "lint:check:prettier": "prettier --check --ignore-path .gitignore **/*.{js,json,md}" + "lint:check:eslint": "eslint .", + "lint:check:prettier": "prettier --check --ignore-path .gitignore **/*.{js,mjs,json,md}" }, "devDependencies": { + "@babel/eslint-parser": "7.25.1", + "@eslint/compat": "1.1.1", + "@eslint/eslintrc": "3.1.0", + "@eslint/js": "9.11.1", "cypress": "13.13.2", - "eslint": "8.57.0", + "eslint": "9.11.1", "eslint-config-prettier": "9.1.0", - "eslint-plugin-cypress": "3.4.0", + "eslint-plugin-cypress": "3.5.0", "eslint-plugin-prettier": "5.2.1", + "globals": "15.9.0", "prettier": "3.3.3" }, - "eslintConfig": { - "root": true, - "env": { - "node": true, - "mocha": true - }, - "extends": [ - "eslint:recommended", - "plugin:cypress/recommended", - "plugin:prettier/recommended" - ], - "rules": { - "prefer-const": "error", - "prettier/prettier": "error" - } + "overrides": { + "uri-js": "npm:uri-js-replace" } } diff --git a/e2e/specs/httpCache.cy.js b/e2e/specs/httpCache.cy.js index 4b0fc346be..14a5412ee5 100644 --- a/e2e/specs/httpCache.cy.js +++ b/e2e/specs/httpCache.cy.js @@ -9,7 +9,7 @@ describe('HTTP cache tests', () => { cy.request(Cypress.env('API_ROOT_URL_CACHED') + uri + '.jsonhal').then((response) => { const headers = response.headers expect(headers.xkey).to.eq( - 'c462edd869f3 5e2028c55ee4 a4211c112939 f17470519474 1a0f84e322c8 3ef17bd1df72 4f0c657fecef 44dcc7493c65 cfccaecd4bad 318e064ea0c9 /api/content_types' + 'a4211c11211c c462edd869f3 5e2028c55ee4 a4211c112939 f17470519474 1a0f84e322c8 3ef17bd1df72 4f0c657fecef 44dcc7493c65 cfccaecd4bad 318e064ea0c9 /api/content_types' ) expect(headers['x-cache']).to.eq('MISS') cy.readFile('./specs/responses/content_types_collection.json').then((data) => diff --git a/e2e/specs/nuxtPrint.cy.js b/e2e/specs/nuxtPrint.cy.js index e9938c0b04..2b45952d08 100644 --- a/e2e/specs/nuxtPrint.cy.js +++ b/e2e/specs/nuxtPrint.cy.js @@ -28,7 +28,6 @@ describe('Nuxt print test', () => { '/?config=' + encodeURIComponent(JSON.stringify(printConfig)) ) - cy.contains(camp.name) cy.contains(camp.title) cy.contains(camp.motto) diff --git a/e2e/specs/responses/content_types_collection.json b/e2e/specs/responses/content_types_collection.json index f209e6a3b5..1b977c9a1e 100644 --- a/e2e/specs/responses/content_types_collection.json +++ b/e2e/specs/responses/content_types_collection.json @@ -4,6 +4,9 @@ "href": "/api/content_types.jsonhal" }, "items": [ + { + "href": "/api/content_types/a4211c11211c" + }, { "href": "/api/content_types/c462edd869f3" }, @@ -36,9 +39,22 @@ } ] }, - "totalItems": 10, + "totalItems": 11, "_embedded": { "items": [ + { + "_links": { + "self": { + "href": "/api/content_types/a4211c11211c" + }, + "contentNodes": { + "href": "/api/content_node/checklist_nodes?contentType=%2Fapi%2Fcontent_types%2Fa4211c11211c" + } + }, + "name": "Checklist", + "active": true, + "id": "a4211c11211c" + }, { "_links": { "self": { @@ -139,7 +155,7 @@ "href": "/api/content_node/single_texts?contentType=%2Fapi%2Fcontent_types%2F44dcc7493c65" } }, - "name": "SafetyConcept", + "name": "SafetyConsiderations", "active": true, "id": "44dcc7493c65" }, diff --git a/frontend/.prettierignore b/frontend/.prettierignore index e33c23a197..de2f837688 100644 --- a/frontend/.prettierignore +++ b/frontend/.prettierignore @@ -1,5 +1,6 @@ src/common/locales/ src/locales/ +/data /dist .vscode /public/twemoji diff --git a/frontend/eslint.config.mjs b/frontend/eslint.config.mjs new file mode 100644 index 0000000000..800d10a87d --- /dev/null +++ b/frontend/eslint.config.mjs @@ -0,0 +1,97 @@ +import { includeIgnoreFile } from '@eslint/compat' +import localRules from 'eslint-plugin-local-rules' +import globals from 'globals' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import js from '@eslint/js' +import { FlatCompat } from '@eslint/eslintrc' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}) +const gitignorePath = path.resolve(__dirname, '.gitignore') +export default [ + ...compat.extends( + 'plugin:vue/recommended', + 'plugin:vue/vue3-recommended', + 'plugin:vue-scoped-css/vue3-recommended', + 'eslint:recommended', + 'plugin:prettier/recommended', + '@vue/eslint-config-prettier' + ), + { + ignores: ['data/', 'dist/', 'public/twemoji/'], + }, + + includeIgnoreFile(gitignorePath), + + { + plugins: { + 'local-rules': localRules, + }, + + languageOptions: { + globals: { + ...globals.node, + }, + + parserOptions: { + ecmaVersion: '6', + parser: '@babel/eslint-parser', + }, + }, + + rules: { + 'prefer-const': 'error', + 'prettier/prettier': 'error', + + 'vue/component-tags-order': [ + 'error', + { + order: ['template', 'script', 'style'], + }, + ], + + 'vue/multi-word-component-names': 'off', + 'vue/no-deprecated-destroyed-lifecycle': 'off', + 'vue/no-deprecated-dollar-listeners-api': 'off', + 'vue/no-deprecated-dollar-scopedslots-api': 'off', + 'vue/no-deprecated-filter': 'warn', + 'vue/no-deprecated-props-default-this': 'off', + 'vue/no-deprecated-slot-attribute': 'off', + 'vue/no-deprecated-slot-scope-attribute': 'off', + 'vue/no-deprecated-v-bind-sync': 'off', + 'vue/no-deprecated-v-on-native-modifier': 'warn', + 'vue/no-v-for-template-key-on-child': 'off', + 'vue/no-v-model-argument': 'warn', + 'vue/require-explicit-emits': 'off', + + 'no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_$', + }, + ], + + 'local-rules/matching-translation-keys': [ + 'error', + { + ignoreKeysRegex: + '^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|config|summary|toc))\\..+', + translationKeyPropRegex: '[a-zA-Z0-9]-i18n-key$', + }, + ], + + 'vue/no-mutating-props': [ + 'error', + { + shallowOnly: true, + }, + ], + }, + }, +] diff --git a/frontend/package-lock.json b/frontend/package-lock.json index dd1ba3348a..46b6cf5e7e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -7,32 +7,32 @@ "name": "@ecamp3/frontend", "hasInstallScript": true, "dependencies": { - "@intlify/core": "9.13.1", + "@intlify/core": "9.14.1", "@mdi/font": "7.4.47", - "@react-pdf/font": "2.5.1", - "@react-pdf/layout": "3.12.1", - "@react-pdf/pdfkit": "3.1.10", + "@react-pdf/font": "2.5.2", + "@react-pdf/layout": "4.0.0", + "@react-pdf/pdfkit": "4.0.0", "@react-pdf/primitives": "3.1.1", - "@react-pdf/render": "3.4.4", - "@sentry/browser": "8.24.0", - "@sentry/vue": "8.24.0", - "@tiptap/extension-bold": "2.5.9", - "@tiptap/extension-bubble-menu": "2.5.9", - "@tiptap/extension-bullet-list": "2.5.9", - "@tiptap/extension-document": "2.5.9", - "@tiptap/extension-hard-break": "2.5.9", - "@tiptap/extension-heading": "2.5.9", - "@tiptap/extension-history": "2.5.9", - "@tiptap/extension-italic": "2.5.9", - "@tiptap/extension-list-item": "2.5.9", - "@tiptap/extension-ordered-list": "2.5.9", - "@tiptap/extension-paragraph": "2.5.9", - "@tiptap/extension-placeholder": "2.5.9", - "@tiptap/extension-strike": "2.5.9", - "@tiptap/extension-text": "2.5.9", - "@tiptap/extension-underline": "2.5.9", - "@tiptap/pm": "2.5.9", - "@tiptap/vue-2": "2.5.9", + "@react-pdf/render": "4.0.0", + "@sentry/browser": "8.32.0", + "@sentry/vue": "8.32.0", + "@tiptap/extension-bold": "2.7.3", + "@tiptap/extension-bubble-menu": "2.7.3", + "@tiptap/extension-bullet-list": "2.7.3", + "@tiptap/extension-document": "2.7.3", + "@tiptap/extension-hard-break": "2.7.3", + "@tiptap/extension-heading": "2.7.3", + "@tiptap/extension-history": "2.7.3", + "@tiptap/extension-italic": "2.7.3", + "@tiptap/extension-list-item": "2.7.3", + "@tiptap/extension-ordered-list": "2.7.3", + "@tiptap/extension-paragraph": "2.7.3", + "@tiptap/extension-placeholder": "2.7.3", + "@tiptap/extension-strike": "2.7.3", + "@tiptap/extension-text": "2.7.3", + "@tiptap/extension-underline": "2.7.3", + "@tiptap/pm": "2.7.3", + "@tiptap/vue-2": "2.7.3", "@zxcvbn-ts/core": "3.0.4", "@zxcvbn-ts/language-common": "3.0.4", "@zxcvbn-ts/language-de": "3.0.2", @@ -40,12 +40,12 @@ "@zxcvbn-ts/language-fr": "3.0.2", "@zxcvbn-ts/language-it": "3.0.2", "assert": "2.1.0", - "axios": "1.7.3", + "axios": "1.7.7", "colorjs.io": "0.5.2", "comlink": "4.4.1", - "dayjs": "1.11.12", + "dayjs": "1.11.13", "deepmerge": "4.3.1", - "emoji-regex": "10.3.0", + "emoji-regex": "10.4.0", "file-saver": "2.0.5", "hal-json-vuex": "2.0.0-alpha.16", "inter-ui": "3.19.3", @@ -72,37 +72,40 @@ }, "devDependencies": { "@babel/eslint-parser": "7.25.1", - "@sentry/vite-plugin": "2.21.1", - "@testing-library/jest-dom": "6.4.8", + "@eslint/compat": "1.1.1", + "@eslint/eslintrc": "3.1.0", + "@eslint/js": "9.11.1", + "@sentry/vite-plugin": "2.22.4", + "@testing-library/jest-dom": "6.5.0", "@testing-library/user-event": "14.5.2", "@testing-library/vue": "5.9.0", "@vitejs/plugin-vue2": "2.3.1", - "@vitest/coverage-v8": "2.0.5", + "@vitest/coverage-v8": "2.1.1", "@vue/babel-preset-app": "5.0.8", "@vue/eslint-config-prettier": "9.0.0", "@vue/test-utils": "1.3.6", "autoprefixer": "10.4.20", "babel-plugin-require-context-hook": "1.0.0", - "eslint": "8.57.0", + "eslint": "9.11.1", "eslint-config-prettier": "9.1.0", - "eslint-plugin-import": "2.29.1", "eslint-plugin-local-rules": "3.0.2", - "eslint-plugin-n": "17.10.2", + "eslint-plugin-n": "17.10.3", "eslint-plugin-prettier": "5.2.1", "eslint-plugin-promise": "7.1.0", - "eslint-plugin-vue": "9.27.0", + "eslint-plugin-vue": "9.28.0", "eslint-plugin-vue-scoped-css": "2.8.1", "flush-promises": "1.0.2", + "globals": "15.9.0", "jest-serializer-vue-tjw": "3.20.0", - "jsdom": "24.1.1", - "lint-staged": "15.2.8", + "jsdom": "25.0.1", + "lint-staged": "15.2.10", "prettier": "3.3.3", "sass": "1.32.13", - "unplugin-vue-components": "0.27.3", - "vite": "5.3.5", + "unplugin-vue-components": "0.27.4", + "vite": "5.4.8", "vite-plugin-comlink": "5.0.1", "vite-plugin-vue2-svg": "0.4.0", - "vitest": "2.0.5", + "vitest": "2.1.1", "vitest-canvas-mock": "0.3.3", "vue-template-compiler": "2.7.15" } @@ -153,9 +156,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "dev": true, "license": "MIT", "engines": { @@ -213,13 +216,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -273,9 +276,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", - "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -284,7 +287,7 @@ "@babel/helper-optimise-call-expression": "^7.24.7", "@babel/helper-replace-supers": "^7.25.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.0", + "@babel/traverse": "^7.25.4", "semver": "^6.3.1" }, "engines": { @@ -467,7 +470,6 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -477,7 +479,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -509,14 +510,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/types": "^7.25.6" }, "engines": { "node": ">=6.9.0" @@ -539,10 +540,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", - "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -551,14 +555,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.0.tgz", - "integrity": "sha512-dG0aApncVQwAUJa8tP1VHTnmU67BeIQvKafd3raEx315H54FfkZSz3B/TT+33ZQAjatGJA79gZqTtqL5QZUKXw==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/traverse": "^7.25.3" }, "engines": { "node": ">=6.9.0" @@ -768,13 +772,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", + "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -784,13 +788,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -985,16 +989,16 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", - "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", + "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-remap-async-to-generator": "^7.25.0", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.0" + "@babel/traverse": "^7.25.4" }, "engines": { "node": ">=6.9.0" @@ -1054,14 +1058,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", + "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1089,17 +1093,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", + "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.0", + "@babel/traverse": "^7.25.4", "globals": "^11.1.0" }, "engines": { @@ -1109,6 +1113,16 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", @@ -1570,14 +1584,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", + "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1655,16 +1669,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", - "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz", + "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, @@ -1807,14 +1821,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", + "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1824,17 +1838,17 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.2.tgz", - "integrity": "sha512-Y2Vkwy3ITW4id9c6KXshVV/x5yCGK7VdJmKkzOzNsDZMojRKfSA/033rRbLqlRozmhRXCejxWHLSJOg/wUHfzw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", + "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", + "@babel/compat-data": "^7.25.4", "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.0", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", @@ -1859,13 +1873,13 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoped-functions": "^7.24.7", "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.25.4", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-classes": "^7.25.4", "@babel/plugin-transform-computed-properties": "^7.24.7", "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-dotall-regex": "^7.24.7", @@ -1893,7 +1907,7 @@ "@babel/plugin-transform-optional-catch-binding": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.25.4", "@babel/plugin-transform-private-property-in-object": "^7.24.7", "@babel/plugin-transform-property-literals": "^7.24.7", "@babel/plugin-transform-regenerator": "^7.24.7", @@ -1906,10 +1920,10 @@ "@babel/plugin-transform-unicode-escapes": "^7.24.7", "@babel/plugin-transform-unicode-property-regex": "^7.24.7", "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.37.1", "semver": "^6.3.1" @@ -1944,9 +1958,9 @@ "license": "MIT" }, "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1971,17 +1985,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", - "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.0", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1989,12 +2003,21 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", @@ -2432,26 +2455,61 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.1.tgz", + "integrity": "sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -2459,52 +2517,56 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", + "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "levn": "^0.4.1" }, "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -2521,22 +2583,28 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@intlify/core": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.13.1.tgz", - "integrity": "sha512-R+l9DRqzfK0yT9UgaCq3sl24NJAP4f/djAu4z9zLknAUBEal2q/tXFV+oGzcGpvi3uXWNvF9Gctj+IsuPwJjoA==", + "version": "9.14.1", + "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.14.1.tgz", + "integrity": "sha512-AT3x7F9YqcWRUBC2maPYven4dTeavJCBYEkDqy1WTif/qtVasDASayKLFf95DsFz7ajhu/3ep9IzTAZayvW9sA==", "license": "MIT", "dependencies": { - "@intlify/core-base": "9.13.1", - "@intlify/shared": "9.13.1" + "@intlify/core-base": "9.14.1", + "@intlify/shared": "9.14.1" }, "engines": { "node": ">= 16" @@ -2546,13 +2614,13 @@ } }, "node_modules/@intlify/core-base": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz", - "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==", + "version": "9.14.1", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.1.tgz", + "integrity": "sha512-rG5/hlNW6Qfve41go37szEf0mVLcfhYuOu83JcY0jZKasnwsrcZYYWDzebCcuO5I/6Sy1JFWo9p+nvkQS1Dy+w==", "license": "MIT", "dependencies": { - "@intlify/message-compiler": "9.13.1", - "@intlify/shared": "9.13.1" + "@intlify/message-compiler": "9.14.1", + "@intlify/shared": "9.14.1" }, "engines": { "node": ">= 16" @@ -2562,12 +2630,12 @@ } }, "node_modules/@intlify/message-compiler": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz", - "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==", + "version": "9.14.1", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.1.tgz", + "integrity": "sha512-MY8hwukJBnXvGAncVKlHsqKDQ5ZcQx4peqEmI8wBUTXn4pezrtTGYXNoz81cLyEEHB+L/zlKWVBSh5TiX4gYoQ==", "license": "MIT", "dependencies": { - "@intlify/shared": "9.13.1", + "@intlify/shared": "9.14.1", "source-map-js": "^1.0.2" }, "engines": { @@ -2578,9 +2646,9 @@ } }, "node_modules/@intlify/shared": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz", - "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==", + "version": "9.14.1", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.1.tgz", + "integrity": "sha512-XjHu6PEQup9MnP1x0W9y0nXXfq9jFftAYSfV11hryjtH4XqXP8HrzMvXI+ZVifF+jZLszaTzIhvukllplxTQTg==", "license": "MIT", "engines": { "node": ">= 16" @@ -2608,9 +2676,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -2860,69 +2928,97 @@ } }, "node_modules/@react-pdf/font": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-2.5.1.tgz", - "integrity": "sha512-Hyb2zBb92Glc3lvhmJfy4dO2Mj29KB26Uk12Ua9EhKAdiuCTLBqgP8Oe1cGwrvDI7xA4OOcwvBMdYh0vhOUHzA==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-2.5.2.tgz", + "integrity": "sha512-Ud0EfZ2FwrbvwAWx8nz+KKLmiqACCH9a/N/xNDOja0e/YgSnqTpuyHegFBgIMKjuBtO5dNvkb4dXkxAhGe/ayw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@react-pdf/types": "^2.5.0", + "@react-pdf/types": "^2.6.0", "cross-fetch": "^3.1.5", "fontkit": "^2.0.2", "is-url": "^1.2.4" } }, "node_modules/@react-pdf/image": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@react-pdf/image/-/image-2.3.6.tgz", - "integrity": "sha512-7iZDYZrZlJqNzS6huNl2XdMcLFUo68e6mOdzQeJ63d5eApdthhSHBnkGzHfLhH5t8DCpZNtClmklzuLL63ADfw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/image/-/image-3.0.0.tgz", + "integrity": "sha512-l4HV5NutPw52Wbuvxol0BiFc6TkKXK/kJNwVIElphw47nwfueLEjIfBxRTuOeHmpdibvEh3a5STwYmMTQjXSxg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@react-pdf/png-js": "^2.3.1", + "@react-pdf/png-js": "^3.0.0", "cross-fetch": "^3.1.5", - "jay-peg": "^1.0.2" + "jay-peg": "^1.1.0" } }, "node_modules/@react-pdf/layout": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/@react-pdf/layout/-/layout-3.12.1.tgz", - "integrity": "sha512-BxSeykDxvADlpe4OGtQ7NH46QXq3uImAYsTHOPLCwbXMniQ1O3uCBx7H+HthxkCNshgYVPp9qS3KyvQv/oIZwg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/layout/-/layout-4.0.0.tgz", + "integrity": "sha512-BNipDwULk9ehvf0V5HLrP2QIujkfj2LzHs8yfCQ/Z8TkAX6dEt1AgwDttBpBLfzcu8w8HFjgpLR1TNOTXiOsAQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@react-pdf/fns": "2.2.1", - "@react-pdf/image": "^2.3.6", - "@react-pdf/pdfkit": "^3.1.10", - "@react-pdf/primitives": "^3.1.1", - "@react-pdf/stylesheet": "^4.2.5", - "@react-pdf/textkit": "^4.4.1", - "@react-pdf/types": "^2.5.0", + "@react-pdf/fns": "3.0.0", + "@react-pdf/image": "^3.0.0", + "@react-pdf/pdfkit": "^4.0.0", + "@react-pdf/primitives": "^4.0.0", + "@react-pdf/stylesheet": "^5.0.0", + "@react-pdf/textkit": "^5.0.0", + "@react-pdf/types": "^2.7.0", "cross-fetch": "^3.1.5", "emoji-regex": "^10.3.0", "queue": "^6.0.1", - "yoga-layout": "^2.0.1" + "yoga-layout": "^3.1.0" + } + }, + "node_modules/@react-pdf/layout/node_modules/@react-pdf/fns": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/fns/-/fns-3.0.0.tgz", + "integrity": "sha512-ICbIWR93PE6+xf2Xd/fXYO1dAuiOAJaszEuGGv3wp5lLSeeelDXlEYLh6R05okxh28YqMzc0Qd85x6n6MtaLUQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13" + } + }, + "node_modules/@react-pdf/layout/node_modules/@react-pdf/primitives": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-4.0.0.tgz", + "integrity": "sha512-yp4E0rDL03NaUp/CnDBz3HQNfH2Mzdlgku57yhTMGNzetwB0NJusXcjYg5XsTGIXnR7Tv80JKI4O4ajj+oaLeQ==", + "license": "MIT" + }, + "node_modules/@react-pdf/layout/node_modules/@react-pdf/textkit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/textkit/-/textkit-5.0.0.tgz", + "integrity": "sha512-+K6zkF6lDXHIZZ9nNzplJ48IrjXNGQqVfO5v73AsutHbvx44E62t46EeoGLHsmjGeMG70TooSI1Mwq/7f/5tLw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "3.0.0", + "bidi-js": "^1.0.2", + "hyphen": "^1.6.4", + "unicode-properties": "^1.4.1" } }, "node_modules/@react-pdf/pdfkit": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@react-pdf/pdfkit/-/pdfkit-3.1.10.tgz", - "integrity": "sha512-P/qPBtCFo2HDJD0i6NfbmoBRrsOVO8CIogYsefwG4fklTo50zNgnMM5U1WLckTuX8Qt1ThiQuokmTG5arheblA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/pdfkit/-/pdfkit-4.0.0.tgz", + "integrity": "sha512-HaaAoBpoRGJ6c1ZOANNQZ3q6Ehmagqa8n40x+OZ5s9HcmUviZ34SCm+QBa42s1o4299M+Lgw3UoqpW7sHv3/Hg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@react-pdf/png-js": "^2.3.1", + "@react-pdf/png-js": "^3.0.0", "browserify-zlib": "^0.2.0", "crypto-js": "^4.2.0", "fontkit": "^2.0.2", - "jay-peg": "^1.0.2", + "jay-peg": "^1.1.0", "vite-compatible-readable-stream": "^3.6.1" } }, "node_modules/@react-pdf/png-js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@react-pdf/png-js/-/png-js-2.3.1.tgz", - "integrity": "sha512-pEZ18I4t1vAUS4lmhvXPmXYP4PHeblpWP/pAlMMRkEyP7tdAeHUN7taQl9sf9OPq7YITMY3lWpYpJU6t4CZgZg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/png-js/-/png-js-3.0.0.tgz", + "integrity": "sha512-eSJnEItZ37WPt6Qv5pncQDxLJRK15eaRwPT+gZoujP548CodenOVp49GST8XJvKMFt9YqIBzGBV/j9AgrOQzVA==", "license": "MIT", "dependencies": { "browserify-zlib": "^0.2.0" @@ -2935,16 +3031,16 @@ "license": "MIT" }, "node_modules/@react-pdf/render": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@react-pdf/render/-/render-3.4.4.tgz", - "integrity": "sha512-CfGxWmVgrY3JgmB1iMnz2W6Ck+8pisZeFt8vGlxP+JfT+0onr208pQvGSV5KwA9LGhAdABxqc/+y17V3vtKdFA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/render/-/render-4.0.0.tgz", + "integrity": "sha512-gvrw4HM9RocuDLd+19cvP2xaSs3h4OgYn2N6VDXzj6LYQnoHBAazRV9qMpGi8FuNlQ3Va+s82R1ynXYMr0FXIg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@react-pdf/fns": "2.2.1", - "@react-pdf/primitives": "^3.1.1", - "@react-pdf/textkit": "^4.4.1", - "@react-pdf/types": "^2.5.0", + "@react-pdf/fns": "3.0.0", + "@react-pdf/primitives": "^4.0.0", + "@react-pdf/textkit": "^5.0.0", + "@react-pdf/types": "^2.7.0", "abs-svg-path": "^0.1.1", "color-string": "^1.9.1", "normalize-svg-path": "^1.1.0", @@ -2952,21 +3048,58 @@ "svg-arc-to-cubic-bezier": "^3.2.0" } }, + "node_modules/@react-pdf/render/node_modules/@react-pdf/fns": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/fns/-/fns-3.0.0.tgz", + "integrity": "sha512-ICbIWR93PE6+xf2Xd/fXYO1dAuiOAJaszEuGGv3wp5lLSeeelDXlEYLh6R05okxh28YqMzc0Qd85x6n6MtaLUQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13" + } + }, + "node_modules/@react-pdf/render/node_modules/@react-pdf/primitives": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-4.0.0.tgz", + "integrity": "sha512-yp4E0rDL03NaUp/CnDBz3HQNfH2Mzdlgku57yhTMGNzetwB0NJusXcjYg5XsTGIXnR7Tv80JKI4O4ajj+oaLeQ==", + "license": "MIT" + }, + "node_modules/@react-pdf/render/node_modules/@react-pdf/textkit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/textkit/-/textkit-5.0.0.tgz", + "integrity": "sha512-+K6zkF6lDXHIZZ9nNzplJ48IrjXNGQqVfO5v73AsutHbvx44E62t46EeoGLHsmjGeMG70TooSI1Mwq/7f/5tLw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "3.0.0", + "bidi-js": "^1.0.2", + "hyphen": "^1.6.4", + "unicode-properties": "^1.4.1" + } + }, "node_modules/@react-pdf/stylesheet": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-4.2.5.tgz", - "integrity": "sha512-XnmapeCW+hDuNdVwpuvO04WKv71wAs8aH+saIq29Bo2fp1SxznHTcQArTZtK6Wgr/E9BHXeB2iAPpUZuI6G+xA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-5.0.0.tgz", + "integrity": "sha512-FrJXUMsvSGee13gpL82HOhhk16y3IKxLmYvmJU1ZUo9Jm9pLydnHDPlSUDK+rKmxdSD2X+twUR7sv6FlrA5i+A==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", - "@react-pdf/fns": "2.2.1", - "@react-pdf/types": "^2.5.0", + "@react-pdf/fns": "3.0.0", + "@react-pdf/types": "^2.7.0", "color-string": "^1.9.1", "hsl-to-hex": "^1.0.0", "media-engine": "^1.0.3", "postcss-value-parser": "^4.1.0" } }, + "node_modules/@react-pdf/stylesheet/node_modules/@react-pdf/fns": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/fns/-/fns-3.0.0.tgz", + "integrity": "sha512-ICbIWR93PE6+xf2Xd/fXYO1dAuiOAJaszEuGGv3wp5lLSeeelDXlEYLh6R05okxh28YqMzc0Qd85x6n6MtaLUQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13" + } + }, "node_modules/@react-pdf/textkit": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@react-pdf/textkit/-/textkit-4.4.1.tgz", @@ -2981,21 +3114,21 @@ } }, "node_modules/@react-pdf/types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@react-pdf/types/-/types-2.5.0.tgz", - "integrity": "sha512-XsVRkt0hQ60I4e3leAVt+aZR3KJCaJd179BfJHAv4F4x6Vq3yqkry8lcbUWKGKDw1j3/8sW4FsgGR41SFvsG9A==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@react-pdf/types/-/types-2.7.0.tgz", + "integrity": "sha512-7KrPPCpgRPKR+g+T127PE4bpw9Q84ZiY07EYRwXKVtTEVW9wJ5BZiF9smT9IvH19s+MQaDLmYRgjESsnqlyH0Q==", "license": "MIT" }, "node_modules/@remirror/core-constants": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-2.0.2.tgz", - "integrity": "sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz", + "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==", "license": "MIT" }, "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", + "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", "dev": true, "license": "MIT", "dependencies": { @@ -3016,9 +3149,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.1.tgz", - "integrity": "sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], @@ -3030,9 +3163,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.1.tgz", - "integrity": "sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], @@ -3044,9 +3177,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz", - "integrity": "sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], @@ -3058,9 +3191,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.1.tgz", - "integrity": "sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], @@ -3072,9 +3205,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.1.tgz", - "integrity": "sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], @@ -3086,9 +3219,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.1.tgz", - "integrity": "sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], @@ -3100,9 +3233,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.1.tgz", - "integrity": "sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ "arm64" ], @@ -3114,9 +3247,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.1.tgz", - "integrity": "sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ "arm64" ], @@ -3128,9 +3261,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.1.tgz", - "integrity": "sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "cpu": [ "ppc64" ], @@ -3142,9 +3275,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.1.tgz", - "integrity": "sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], @@ -3156,9 +3289,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.1.tgz", - "integrity": "sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], @@ -3170,9 +3303,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz", - "integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], @@ -3184,9 +3317,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz", - "integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], @@ -3198,9 +3331,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.1.tgz", - "integrity": "sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], @@ -3212,9 +3345,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.1.tgz", - "integrity": "sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], @@ -3226,9 +3359,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.1.tgz", - "integrity": "sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], @@ -3240,67 +3373,67 @@ ] }, "node_modules/@sentry-internal/browser-utils": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.24.0.tgz", - "integrity": "sha512-U5dVZ4JM+UeN3YWBUHZcNLF038C3ccTTsTICIw+zfCQbpPhPms8DOEDVpd0So18XoNDzYmLo07hC1BwByRAfGw==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.32.0.tgz", + "integrity": "sha512-DpUGhk5O1OVjT0fo9wsbEdO1R/S9gGBRDtn9+FFVeRtieJHwXpeZiLK+tZhTOvaILmtSoTPUEY3L5sK4j5Xq9g==", "license": "MIT", "dependencies": { - "@sentry/core": "8.24.0", - "@sentry/types": "8.24.0", - "@sentry/utils": "8.24.0" + "@sentry/core": "8.32.0", + "@sentry/types": "8.32.0", + "@sentry/utils": "8.32.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/feedback": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.24.0.tgz", - "integrity": "sha512-0tWRp8SOSTSPTViRJnB6+HHixFgkEWjKPciuLsAZkobRhi+VVedPj3zVztORy5AvARGr6AgyVSdnviilcrKl6g==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.32.0.tgz", + "integrity": "sha512-XB7hiVJQW1tNzpoXIHbvm3rjipIt7PZiJJtFg2vxaqu/FzdgOcYqQiwIKivJVAKuRZ9rIeJtK1jdXQFOc/TRJA==", "license": "MIT", "dependencies": { - "@sentry/core": "8.24.0", - "@sentry/types": "8.24.0", - "@sentry/utils": "8.24.0" + "@sentry/core": "8.32.0", + "@sentry/types": "8.32.0", + "@sentry/utils": "8.32.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.24.0.tgz", - "integrity": "sha512-+3d+3Ln7iDOZo2wOBv7EWojVHigEskjKsz8vR3WFdxYyue8e3zPQ/xg/t9A6BtEVRPQsEyhM3oN6LyjqFv2nfg==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.32.0.tgz", + "integrity": "sha512-yiEUnn2yyo1AIQIFNeRX3tdK8fmyKIkxdFS1WiVQmeYI/hFwYBTZPly0FcO/g3xnRMSA2tvrS+hZEaaXfK4WhA==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "8.24.0", - "@sentry/core": "8.24.0", - "@sentry/types": "8.24.0", - "@sentry/utils": "8.24.0" + "@sentry-internal/browser-utils": "8.32.0", + "@sentry/core": "8.32.0", + "@sentry/types": "8.32.0", + "@sentry/utils": "8.32.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.24.0.tgz", - "integrity": "sha512-MI+j9tUab1d5oer2xKQ2lxdXSzBeZ1DF2dwlVxQDOfSAQqRfZJpmLcmSPb6M+GJsf2xHg6n4dAQvWQuM0qGQPQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.32.0.tgz", + "integrity": "sha512-oBbhtDBkD+5z/T0NVJ5VenBWAid/S9QdVrod/UqxVqU7F8N+E9/INFQI48zCWr4iVlUMcszJPDElvJEsMDvvBQ==", "license": "MIT", "dependencies": { - "@sentry-internal/replay": "8.24.0", - "@sentry/core": "8.24.0", - "@sentry/types": "8.24.0", - "@sentry/utils": "8.24.0" + "@sentry-internal/replay": "8.32.0", + "@sentry/core": "8.32.0", + "@sentry/types": "8.32.0", + "@sentry/utils": "8.32.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/babel-plugin-component-annotate": { - "version": "2.21.1", - "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.21.1.tgz", - "integrity": "sha512-u1L8gZ4He0WdyiIsohYkA/YOY1b6Oa5yIMRtfZZ9U5TiWYLgOfMWyb88X0GotZeghSbgxrse/yI4WeHnhAUQDQ==", + "version": "2.22.4", + "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.4.tgz", + "integrity": "sha512-hbSq067KwmeKIEkmyzkTNJbmbtx2KRqvpiy9Q/DynI5Z46Nko/ppvgIfyFXK9DelwvEPOqZic4WXTIhO4iv3DA==", "dev": true, "license": "MIT", "engines": { @@ -3308,33 +3441,33 @@ } }, "node_modules/@sentry/browser": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.24.0.tgz", - "integrity": "sha512-WdCLUoMAE0ZWsZDb3G/FQI5YgkH59VVEpnPqrWI08m2KuqLz8eU724JZvNzaDv/L2yzksgS4HDDUXkNRzDeCrQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.32.0.tgz", + "integrity": "sha512-AEKFj64g4iYwEMRvVcxiY0FswmClRXCP1IEvCqujn8OBS8AjMOr1z/RwYieEs0D90yNNB3YEqF8adrKENblJmw==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "8.24.0", - "@sentry-internal/feedback": "8.24.0", - "@sentry-internal/replay": "8.24.0", - "@sentry-internal/replay-canvas": "8.24.0", - "@sentry/core": "8.24.0", - "@sentry/types": "8.24.0", - "@sentry/utils": "8.24.0" + "@sentry-internal/browser-utils": "8.32.0", + "@sentry-internal/feedback": "8.32.0", + "@sentry-internal/replay": "8.32.0", + "@sentry-internal/replay-canvas": "8.32.0", + "@sentry/core": "8.32.0", + "@sentry/types": "8.32.0", + "@sentry/utils": "8.32.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/bundler-plugin-core": { - "version": "2.21.1", - "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.21.1.tgz", - "integrity": "sha512-F8FdL/bS8cy1SY1Gw0Mfo3ROTqlrq9Lvt5QGvhXi22dpVcDkWmoTWE2k+sMEnXOa8SdThMc/gyC8lMwHGd3kFQ==", + "version": "2.22.4", + "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.4.tgz", + "integrity": "sha512-25NiyV3v6mdqOXlpzbbJnq0FHdAu1uTEDr+DU8CzNLjIXlq2Sr2CFZ/mhRcR6daM8OAretJdQ34lu0yHUVeE4Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.18.5", - "@sentry/babel-plugin-component-annotate": "2.21.1", - "@sentry/cli": "^2.22.3", + "@sentry/babel-plugin-component-annotate": "2.22.4", + "@sentry/cli": "^2.33.1", "dotenv": "^16.3.1", "find-up": "^5.0.0", "glob": "^9.3.2", @@ -3346,9 +3479,9 @@ } }, "node_modules/@sentry/cli": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.33.0.tgz", - "integrity": "sha512-9MOzQy1UunVBhPOfEuO0JH2ofWAMmZVavTTR/Bo2CkJwI1qjyVF0UKLTXE3l4ujiJnFufOoBsVyKmYWXFerbCw==", + "version": "2.36.2", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.36.2.tgz", + "integrity": "sha512-QoijP9TnO1UVNnRKtH718jlu/F9bBki6ffrOfmcjxkvLT6Q3nBMmqhYNH/AJV/RcgqLd6noWss4fbDMXZLzgIQ==", "dev": true, "hasInstallScript": true, "license": "BSD-3-Clause", @@ -3366,19 +3499,19 @@ "node": ">= 10" }, "optionalDependencies": { - "@sentry/cli-darwin": "2.33.0", - "@sentry/cli-linux-arm": "2.33.0", - "@sentry/cli-linux-arm64": "2.33.0", - "@sentry/cli-linux-i686": "2.33.0", - "@sentry/cli-linux-x64": "2.33.0", - "@sentry/cli-win32-i686": "2.33.0", - "@sentry/cli-win32-x64": "2.33.0" + "@sentry/cli-darwin": "2.36.2", + "@sentry/cli-linux-arm": "2.36.2", + "@sentry/cli-linux-arm64": "2.36.2", + "@sentry/cli-linux-i686": "2.36.2", + "@sentry/cli-linux-x64": "2.36.2", + "@sentry/cli-win32-i686": "2.36.2", + "@sentry/cli-win32-x64": "2.36.2" } }, "node_modules/@sentry/cli-darwin": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.33.0.tgz", - "integrity": "sha512-LQFvD7uCOQ2P/vYru7IBKqJDHwJ9Rr2vqqkdjbxe2YCQS/N3NPXvi3eVM9hDJ284oyV/BMZ5lrmVTuIicf/hhw==", + "version": "2.36.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.36.2.tgz", + "integrity": "sha512-To64Pq+pcmecEr+gFXiqaZy8oKhyLQLXO/SVDdf16CUL2qpuahE3bO5h9kFacMxPPxOWcgc2btF+4gYa1+bQTA==", "dev": true, "license": "BSD-3-Clause", "optional": true, @@ -3390,9 +3523,9 @@ } }, "node_modules/@sentry/cli-linux-arm": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.33.0.tgz", - "integrity": "sha512-gY1bFE7wjDJc7WiNq1AS0WrILqLLJUw6Ou4pFQS45KjaH3/XJ1eohHhGJNy/UBHJ/Gq32b/BA9vsnWTXClZJ7g==", + "version": "2.36.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.36.2.tgz", + "integrity": "sha512-cRSvOQK97WM0m03k/c+LVAWT042Qz887WP/2Gy64eUi/PfArwb+QZZnsu4FCygxK9jnzgLTo4+ewoJVi17xaLQ==", "cpu": [ "arm" ], @@ -3408,9 +3541,9 @@ } }, "node_modules/@sentry/cli-linux-arm64": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.33.0.tgz", - "integrity": "sha512-mR2ZhqpU8RBVGLF5Ji19iOmVznk1B7Bzg5VhA8bVPuKsQmFN/3SyqE87IPMhwKoAsSRXyctwmbAkKs4240fxGA==", + "version": "2.36.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.36.2.tgz", + "integrity": "sha512-g+FFmj1oJ2iRMsfs1ORz6THOO6MiAR55K9YxdZUBvqfoHLjSMt7Jst43sbZ3O0u55hnfixSKLNzDaTGaM/jxIQ==", "cpu": [ "arm64" ], @@ -3426,9 +3559,9 @@ } }, "node_modules/@sentry/cli-linux-i686": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.33.0.tgz", - "integrity": "sha512-XPIy0XpqgAposHtWsy58qsX85QnZ8q0ktBuT4skrsCrLMzfhoQg4Ua+YbUr3RvE814Rt8Hzowx2ar2Rl3pyCyw==", + "version": "2.36.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.36.2.tgz", + "integrity": "sha512-rjxTw/CMd0Q7qlOb7gWFiwn3hJIxNkhbn1bOU54xj9CZvQSCvh10l7l4Y9o8znJLl41c5kMXVq8yuYws9A7AGQ==", "cpu": [ "x86", "ia32" @@ -3445,9 +3578,9 @@ } }, "node_modules/@sentry/cli-linux-x64": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.33.0.tgz", - "integrity": "sha512-qe1DdCUv4tmqS03s8RtCkEX9vCW2G+NgOxX6jZ5jN/sKDwjUlquljqo7JHUGSupkoXmymnNPm5By3rNr6VyNHg==", + "version": "2.36.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.36.2.tgz", + "integrity": "sha512-cF8IPFTlwiC7JgVvSW4rS99sxb1W1N//iANxuzqaDswUnmJLi0AJy/jES87qE5GRB6ljaPVMvH7Kq0OCp3bvPA==", "cpu": [ "x64" ], @@ -3463,9 +3596,9 @@ } }, "node_modules/@sentry/cli-win32-i686": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.33.0.tgz", - "integrity": "sha512-VEXWtJ69C3b+kuSmXQJRwdQ0ypPGH88hpqyQuosbAOIqh/sv4g9B/u1ETHZc+whLdFDpPcTLVMbLDbXTGug0Yg==", + "version": "2.36.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.36.2.tgz", + "integrity": "sha512-YDH/Kcd8JAo1Bg4jtSwF8dr7FZZ8QbYLMx8q/5eenHpq6VdOgPENsTvayLW3cAjWLcm44u8Ed/gcEK0z1IxQmQ==", "cpu": [ "x86", "ia32" @@ -3481,9 +3614,9 @@ } }, "node_modules/@sentry/cli-win32-x64": { - "version": "2.33.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.33.0.tgz", - "integrity": "sha512-GIUKysZ1xbSklY9h1aVaLMSYLsnMSd+JuwQLR+0wKw2wJC4O5kNCPFSGikhiOZM/kvh3GO1WnXNyazFp8nLAzw==", + "version": "2.36.2", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.36.2.tgz", + "integrity": "sha512-Kac8WPbkFSVAJqPAVRBiW0uij9PVoXo0owf+EDeIIDLs9yxZat0d1xgyQPlUWrCGdxowMSbDvaSUz1YnE7MUmg==", "cpu": [ "x64" ], @@ -3498,47 +3631,47 @@ } }, "node_modules/@sentry/core": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.24.0.tgz", - "integrity": "sha512-nyy7po78Ef5KNzehHJCCyLGGR/FceHyw2IRzDQUVD6M4tos8G1OML1gcnALChWhyeq1SIoDsC1ofxFlbkIWuog==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.32.0.tgz", + "integrity": "sha512-+xidTr0lZ0c755tq4k75dXPEb8PA+qvIefW3U9+dQMORLokBrYoKYMf5zZTG2k/OfSJS6OSxatUj36NFuCs3aA==", "license": "MIT", "dependencies": { - "@sentry/types": "8.24.0", - "@sentry/utils": "8.24.0" + "@sentry/types": "8.32.0", + "@sentry/utils": "8.32.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/types": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.24.0.tgz", - "integrity": "sha512-5QWXARoFrvTvnS19ip+ha0x4nWIv/RvoCTnqCsgrNTjypbk1+KMSMQQhGMo8OuEBFhdGyTs1BqfxVV82URHh3w==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.32.0.tgz", + "integrity": "sha512-hxckvN2MzS5SgGDgVQ0/QpZXk13Vrq4BtZLwXhPhyeTmZtUiUfWvcL5TFQqLinfKdTKPe9q2MxeAJ0D4LalhMg==", "license": "MIT", "engines": { "node": ">=14.18" } }, "node_modules/@sentry/utils": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.24.0.tgz", - "integrity": "sha512-AGo5PldxCJYn3g0IYXeBkeALNa+NieJaaCDpYyzrKAFdxoA6Qp+Z/wmN9m5BYZ9eHx9N+xMOoz2aIh4hG48VbQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.32.0.tgz", + "integrity": "sha512-t1WVERhgmYURxbBj9J4/H2P2X+VKqm7B3ce9iQyrZbdf5NekhcU4jHIecPUWCPHjQkFIqkVTorqeBmDTlg/UmQ==", "license": "MIT", "dependencies": { - "@sentry/types": "8.24.0" + "@sentry/types": "8.32.0" }, "engines": { "node": ">=14.18" } }, "node_modules/@sentry/vite-plugin": { - "version": "2.21.1", - "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.21.1.tgz", - "integrity": "sha512-i2PqeLafGBcSROnmr9mS0dL2/JBJji/4rJZ2U2A+tqtAhDAAaCUNalbn6xLp/hawLExt/wRuBj1J7j46sGDOaA==", + "version": "2.22.4", + "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.22.4.tgz", + "integrity": "sha512-C51PUlTv0BXN3+e9SjPHptNX3b9E0clrsaR5c//l/sFkQjuteDHKChA1gNzZSvfoa3gm9NzZAgpk3hVF2O3nBA==", "dev": true, "license": "MIT", "dependencies": { - "@sentry/bundler-plugin-core": "2.21.1", + "@sentry/bundler-plugin-core": "2.22.4", "unplugin": "1.0.1" }, "engines": { @@ -3546,15 +3679,15 @@ } }, "node_modules/@sentry/vue": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.24.0.tgz", - "integrity": "sha512-a75tkByrVk4pMFWuE6xVGg4hpbV1IBzi4UqB0DpNVrVqmd+4sjHSFL1NrvjWV4oKAuhYwKCSVPfsniyoP612sQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.32.0.tgz", + "integrity": "sha512-56cF0lHKhzjBuErU1Bo7rSTyWFAudrStpp7smIAtGBURS2Q0pDPnx1PAmV36IXfuMcClGVFBHiGB1zZWZ46W3w==", "license": "MIT", "dependencies": { - "@sentry/browser": "8.24.0", - "@sentry/core": "8.24.0", - "@sentry/types": "8.24.0", - "@sentry/utils": "8.24.0" + "@sentry/browser": "8.32.0", + "@sentry/core": "8.32.0", + "@sentry/types": "8.32.0", + "@sentry/utils": "8.32.0" }, "engines": { "node": ">=14.18" @@ -3564,12 +3697,11 @@ } }, "node_modules/@swc/helpers": { - "version": "0.4.36", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.36.tgz", - "integrity": "sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", "license": "Apache-2.0", "dependencies": { - "legacy-swc-helpers": "npm:@swc/helpers@=0.4.14", "tslib": "^2.4.0" } }, @@ -3677,14 +3809,13 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.8.tgz", - "integrity": "sha512-JD0G+Zc38f5MBHA4NgxQMR5XtO5Jx9g86jqturNTt2WUfRmLDIY7iKkWHDCCTiDuFMre6nxAD5wHw9W5kI4rGw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", + "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", "dev": true, "license": "MIT", "dependencies": { "@adobe/css-tools": "^4.4.0", - "@babel/runtime": "^7.9.2", "aria-query": "^5.0.0", "chalk": "^3.0.0", "css.escape": "^1.5.1", @@ -3918,9 +4049,9 @@ } }, "node_modules/@tiptap/core": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.5.9.tgz", - "integrity": "sha512-PPUR+0tbr+wX2G8RG4FEps4qhbnAPEeXK1FUtirLXSRh8vm+TDgafu3sms7wBc4fAyw9zTO/KNNZ90GBe04guA==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.7.3.tgz", + "integrity": "sha512-6b62isitaWRX6cR6V5x4O9+1lgCpoTNRrSegWwBrE1OGDHcGwdTZuzdNIbjLZ9k3qs4tXl49WKXHIXK44RDOIw==", "license": "MIT", "peer": true, "funding": { @@ -3928,26 +4059,26 @@ "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/pm": "^2.5.9" + "@tiptap/pm": "^2.7.0" } }, "node_modules/@tiptap/extension-bold": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.5.9.tgz", - "integrity": "sha512-XUJdzFb31t0+bwiRquJf0btBpqOB3axQNHTKM9XADuL4S+Z6OBPj0I5rYINeElw/Q7muvdWrHWHh/ovNJA1/5A==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.7.3.tgz", + "integrity": "sha512-jc38r/1YSix20s47qXwOAzVYmxVwySS5oTsNr9T5pFp0NWSFSwYsAn2L1Ko4BcI9nJ8VDgnGGg/JjkurGM3SCw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/extension-bubble-menu": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.5.9.tgz", - "integrity": "sha512-NddZ8Qn5dgPPa1W4yk0jdhF4tDBh0FwzBpbnDu2Xz/0TUHrA36ugB2CvR5xS1we4zUKckgpVqOqgdelrmqqFVg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.7.3.tgz", + "integrity": "sha512-gzhiNFwbR7oWxw1DTF6MTa6bd6toLY5mFSFLn4IdrqkkY5enxJXEak/uYvJ/q2gNvtZbrgBZVZn2UABPl2e9dg==", "license": "MIT", "dependencies": { "tippy.js": "^6.3.7" @@ -3957,40 +4088,40 @@ "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9", - "@tiptap/pm": "^2.5.9" + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" } }, "node_modules/@tiptap/extension-bullet-list": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.5.9.tgz", - "integrity": "sha512-hJTv1x4omFgaID4LMRT5tOZb/VKmi8Kc6jsf4JNq4Grxd2sANmr9qpmKtBZvviK+XD5PpTXHvL+1c8C1SQtuHQ==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.7.3.tgz", + "integrity": "sha512-ctcuqyWavLSgzQzRFAzubCdTbmE8p2jZWAe2nDNCfSsNDGKlqMnQVswj+qTQhlFEvJZh0AXs1N3eKA2ezNI+Yw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/extension-document": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.5.9.tgz", - "integrity": "sha512-VdNZYDyCzC3W430UdeRXR9IZzPeODSbi5Xz/JEdV93THVp8AC9CrZR7/qjqdBTgbTB54VP8Yr6bKfCoIAF0BeQ==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.7.3.tgz", + "integrity": "sha512-gL+NhS3r5T5B3DAnENis8VliFooOcpnp5diqmpiNPeQaO04GRQZCsFGmk/b/xRyEI8j80m+YtGYbpJodlvsTPw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/extension-floating-menu": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.5.9.tgz", - "integrity": "sha512-MWJIQQT6e5MgqHny8neeH2Dx926nVPF7sv4p84nX4E0dnkRbEYUP8mCsWYhSUvxxIif6e+yY+4654f2Q9qTx1w==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.7.3.tgz", + "integrity": "sha512-ch8kiFJJAuF5gTddM5VNLvOzvuquYELeM4SmUQcQ5O9X7dn1L1sTwrJgpj+oLOp5K+MF2YLCYC8dAEIWIj2rlg==", "license": "MIT", "dependencies": { "tippy.js": "^6.3.7" @@ -4000,164 +4131,164 @@ "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9", - "@tiptap/pm": "^2.5.9" + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" } }, "node_modules/@tiptap/extension-hard-break": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.5.9.tgz", - "integrity": "sha512-8hQ63SgZRG4BqHOeSfeaowG2eMr2beced018pOGbpHbE3XSYoISkMVuFz4Z8UEVR3W9dTbKo4wxNufSTducocQ==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.7.3.tgz", + "integrity": "sha512-HtnjmQfbjTDsrPzfRDmzH4fZvm5xZ0qmYQyRkfV4tFrD1vx6Wb2hmpfcuiBYuNVEP6OmOzG9pQV98zhfSHEcjg==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/extension-heading": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.5.9.tgz", - "integrity": "sha512-HHowAlGUbFn1qvmY02ydM7qiPPMTGhAJn2A46enDRjNHW5UoqeMfkMpTEYaioOexyguRFSfDT3gpK68IHkQORQ==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.7.3.tgz", + "integrity": "sha512-Wq1pqUCTgFk3MddlsCZuNq9ROMctGlXGagyRcGpPtb5BJ3Ane5Njyg0lZjgGbr6CW1F3W4gy1xRKNVHXFjZ51w==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/extension-history": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.5.9.tgz", - "integrity": "sha512-hGPtJgoZSwnVVqi/xipC2ET/9X2G2UI/Y+M3IYV1ZlM0tCYsv4spNi3uXlZqnXRwYcBXLk5u6e/dmsy5QFbL8g==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.7.3.tgz", + "integrity": "sha512-sXU1R6jvd16h0IPRroBhAzeXAMFNSldJ4vhX7dxlhWTKQHeAh1Mvuye+o9oX3oNnCm6bN++j2n/CxuZoJWOSbQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9", - "@tiptap/pm": "^2.5.9" + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" } }, "node_modules/@tiptap/extension-italic": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.5.9.tgz", - "integrity": "sha512-Bw+P139L4cy+B56zpUiRjP8BZSaAUl3JFMnr/FO+FG55QhCxFMXIc6XrC3vslNy5ef3B3zv4gCttS3ee8ByMiw==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.7.3.tgz", + "integrity": "sha512-qMX5LjMTdPpSDp4VIpSOY0d6bB6m4CJepGlMVrQEfUEj9uMPZZxD0cME+63r/J4yIrmMCR+GJyjOu5erdYp3JA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/extension-list-item": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.5.9.tgz", - "integrity": "sha512-d9Eo+vBz74SMxP0r25aqiErV256C+lGz+VWMjOoqJa6xWLM1keYy12JtGQWJi8UDVZrDskJKCHq81A0uLt27WA==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.7.3.tgz", + "integrity": "sha512-xCb4WjeBn3IekWyofhc9WnxYROv9oq7KM8tMqVaMNfSfSzd6wfoijzFBeL2da1B5Pwl1tJM6MqcH70zmytMJZw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/extension-ordered-list": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.5.9.tgz", - "integrity": "sha512-9MsWpvVvzILuEOd/GdroF7RI7uDuE1M6at9rzsaVGvCPVHZBvu1XR3MSVK5OdiJbbJuPGttlzEFLaN/rQdCGFg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.7.3.tgz", + "integrity": "sha512-J7PbM1tQSNpAGQ9Ft9Qm2oKQDE4J6uZv711ZwQgWBVne7CEu1zfD/ezlRe4yiw5XjeD0B91CP4KNRRKefePAjA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/extension-paragraph": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.5.9.tgz", - "integrity": "sha512-HDXGiHTJ/V85dbDMjcFj4XfqyTQZqry6V21ucMzgBZYX60X3gIn7VpQTQnnRjvULSgtfOASSJP6BELc5TyiK0w==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.7.3.tgz", + "integrity": "sha512-jcvcsN1JEYxPYQ3IgeJ7sUr3gDlIoVm9GXIV83fiF8KWw30M1jWfYJ6zgef8e5wB7d/NLhc3yhVrRk4R6P4ApQ==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/extension-placeholder": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.5.9.tgz", - "integrity": "sha512-ytKmlSiebtCBXoMPE2cup48DR0rQiekXhLKLkNyt7m8tSXkaRO4eDaFqCqPEXLeQXWdhwWEoPM6Cejaaa3ztkA==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.7.3.tgz", + "integrity": "sha512-ZcqOyOlqzKVFXK5LMkDUGV+pA5UqL+P6k8XWsPR1J0YFTYe5t6kupPDyZ4ndir4HvY0Ix9xQlagvXRmn6wlVUA==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9", - "@tiptap/pm": "^2.5.9" + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" } }, "node_modules/@tiptap/extension-strike": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.5.9.tgz", - "integrity": "sha512-QezkOZpczpl09S8lp5JL7sRkwREoPY16Y/lTvBcFKm3TZbVzYZZ/KwS0zpwK9HXTfXr8os4L9AGjQf0tHonX+w==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.7.3.tgz", + "integrity": "sha512-X6ybvtt/F8usRoq9MjJcTAnr0pboi3FjqZtMZOKrX1oS0bt89FcxmbymP/5VMGDLxxxzEfrRqttvZ4s/z+HOow==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/extension-text": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.5.9.tgz", - "integrity": "sha512-W0pfiQUPsMkwaV5Y/wKW4cFsyXAIkyOFt7uN5u6LrZ/iW9KZ/IsDODPJDikWp0aeQnXzT9NNQULTpCjbHzzS6g==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.7.3.tgz", + "integrity": "sha512-p1ic3rxbY8Z+1W2e/W4qXxT9zh0x2DjY2bUq+bNTvAbjOw2D9XhE4B03vhRVvNOgQdVXqJX638fK8P34ndrV1A==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/extension-underline": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.5.9.tgz", - "integrity": "sha512-1gFBLzzphwJHsPLwUl9xosErEmtG2c2Sa2ajyS4uRjfl9X7+Li2O2WelZLHZGgTHWliE6ptA3m1MyXppHoitbg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.7.3.tgz", + "integrity": "sha512-PtQc1otBDDnxlKNmf1ZNvDGvJE13KJ913IMT3dwgKiVYXDH5rc+Y1RsgyWkiOJn8plzmToz9XD8sFzLuejZ1+Q==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9" + "@tiptap/core": "^2.7.0" } }, "node_modules/@tiptap/pm": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.5.9.tgz", - "integrity": "sha512-YSUaEQVtvZnGzGjif2Tl2o9utE+6tR2Djhz0EqFUcAUEVhOMk7UYUO+r/aPfcCRraIoKKuDQzyCpjKmJicjCUA==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.7.3.tgz", + "integrity": "sha512-qMUMypHjxq7n37u4iBTbAfoWf38eDi5I13l2U3a3UKt/mJBABusf2aYq4NfkY5vQQn48HbZ3Hj+TygrdPklQwQ==", "license": "MIT", "dependencies": { "prosemirror-changeset": "^2.2.1", "prosemirror-collab": "^1.3.1", - "prosemirror-commands": "^1.5.2", + "prosemirror-commands": "^1.6.0", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", @@ -4165,14 +4296,14 @@ "prosemirror-keymap": "^1.2.2", "prosemirror-markdown": "^1.13.0", "prosemirror-menu": "^1.2.4", - "prosemirror-model": "^1.22.2", + "prosemirror-model": "^1.22.3", "prosemirror-schema-basic": "^1.2.3", "prosemirror-schema-list": "^1.4.1", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.4.0", - "prosemirror-trailing-node": "^2.0.9", - "prosemirror-transform": "^1.9.0", - "prosemirror-view": "^1.33.9" + "prosemirror-trailing-node": "^3.0.0", + "prosemirror-transform": "^1.10.0", + "prosemirror-view": "^1.33.10" }, "funding": { "type": "github", @@ -4180,13 +4311,13 @@ } }, "node_modules/@tiptap/vue-2": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.5.9.tgz", - "integrity": "sha512-gqwwUfRy1WT9uHaZEpTWjEavLrsDfpjwzSQ/w1NjX/broyDMKc9WR/G2qlBCruYLBuypJSX9Z3nCMABD7Zhyaw==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.7.3.tgz", + "integrity": "sha512-0xy7+2QM422kI1xOsjBOtYVhz3kwxKCoa+OUpLB92nDYd3NM1C1+FO5lwAY/uXvxG1npgWU9JiInSe3E8M/TSA==", "license": "MIT", "dependencies": { - "@tiptap/extension-bubble-menu": "^2.5.9", - "@tiptap/extension-floating-menu": "^2.5.9", + "@tiptap/extension-bubble-menu": "^2.7.3", + "@tiptap/extension-floating-menu": "^2.7.3", "vue-ts-types": "^1.6.0" }, "funding": { @@ -4194,8 +4325,8 @@ "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@tiptap/core": "^2.5.9", - "@tiptap/pm": "^2.5.9", + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0", "vue": "^2.6.0" } }, @@ -4217,26 +4348,19 @@ "license": "MIT" }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true, "license": "MIT" }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, - "license": "ISC" - }, "node_modules/@vitejs/plugin-vue2": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue2/-/plugin-vue2-2.3.1.tgz", @@ -4252,20 +4376,20 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.5.tgz", - "integrity": "sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz", + "integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.5", + "debug": "^4.3.6", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.10", + "magic-string": "^0.30.11", "magicast": "^0.3.4", "std-env": "^3.7.0", "test-exclude": "^7.0.1", @@ -4275,7 +4399,13 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "2.0.5" + "@vitest/browser": "2.1.1", + "vitest": "2.1.1" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } } }, "node_modules/@vitest/coverage-v8/node_modules/magic-string": { @@ -4289,14 +4419,14 @@ } }, "node_modules/@vitest/expect": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", - "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", + "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", + "@vitest/spy": "2.1.1", + "@vitest/utils": "2.1.1", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" }, @@ -4304,10 +4434,58 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/mocker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", + "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "^2.1.0-beta.1", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.11" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/spy": "2.1.1", + "msw": "^2.3.5", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/mocker/node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "node_modules/@vitest/pretty-format": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", - "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", + "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4318,13 +4496,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.5.tgz", - "integrity": "sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", + "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.0.5", + "@vitest/utils": "2.1.1", "pathe": "^1.1.2" }, "funding": { @@ -4332,14 +4510,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.5.tgz", - "integrity": "sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", + "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.0.5", - "magic-string": "^0.30.10", + "@vitest/pretty-format": "2.1.1", + "magic-string": "^0.30.11", "pathe": "^1.1.2" }, "funding": { @@ -4357,9 +4535,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", - "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", + "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", "dev": true, "license": "MIT", "dependencies": { @@ -4370,14 +4548,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", - "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", + "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.0.5", - "estree-walker": "^3.0.3", + "@vitest/pretty-format": "2.1.1", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" }, @@ -4385,16 +4562,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/utils/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/@vue/babel-helper-vue-jsx-merge-props": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", @@ -4403,28 +4570,27 @@ "license": "MIT" }, "node_modules/@vue/babel-helper-vue-transform-on": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz", - "integrity": "sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz", + "integrity": "sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==", "dev": true, "license": "MIT" }, "node_modules/@vue/babel-plugin-jsx": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz", - "integrity": "sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz", + "integrity": "sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "~7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", - "@vue/babel-helper-vue-transform-on": "1.2.2", - "@vue/babel-plugin-resolve-type": "1.2.2", - "camelcase": "^6.3.0", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.6", + "@babel/types": "^7.25.6", + "@vue/babel-helper-vue-transform-on": "1.2.5", + "@vue/babel-plugin-resolve-type": "1.2.5", "html-tags": "^3.3.1", "svg-tags": "^1.0.0" }, @@ -4437,49 +4603,23 @@ } } }, - "node_modules/@vue/babel-plugin-jsx/node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@vue/babel-plugin-resolve-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz", - "integrity": "sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz", + "integrity": "sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/helper-module-imports": "~7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/parser": "^7.23.9", - "@vue/compiler-sfc": "^3.4.15" + "@babel/code-frame": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/parser": "^7.25.6", + "@vue/compiler-sfc": "^3.5.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@vue/babel-plugin-transform-vue-jsx": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", @@ -4655,16 +4795,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@vue/babel-sugar-v-model/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", @@ -4690,56 +4820,46 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@vue/babel-sugar-v-on/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/@vue/compiler-core": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.34.tgz", - "integrity": "sha512-Z0izUf32+wAnQewjHu+pQf1yw00EGOmevl1kE+ljjjMe7oEfpQ+BI3/JNK7yMB4IrUsqLDmPecUrpj3mCP+yJQ==", + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.8.tgz", + "integrity": "sha512-Uzlxp91EPjfbpeO5KtC0KnXPkuTfGsNDeaKQJxQN718uz+RqDYarEf7UhQJGK+ZYloD2taUbHTI2J4WrUaZQNA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.24.7", - "@vue/shared": "3.4.34", + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.8", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.34.tgz", - "integrity": "sha512-3PUOTS1h5cskdOJMExCu2TInXuM0j60DRPpSCJDqOCupCfUZCJoyQmKtRmA8EgDNZ5kcEE7vketamRZfrEuVDw==", + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.8.tgz", + "integrity": "sha512-GUNHWvoDSbSa5ZSHT9SnV5WkStWfzJwwTd6NMGzilOE/HM5j+9EB9zGXdtu/fCNEmctBqMs6C9SvVPpVPuk1Eg==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.4.34", - "@vue/shared": "3.4.34" + "@vue/compiler-core": "3.5.8", + "@vue/shared": "3.5.8" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.34.tgz", - "integrity": "sha512-x6lm0UrM03jjDXTPZgD9Ad8bIVD1ifWNit2EaWQIZB5CULr46+FbLQ5RpK7AXtDHGjx9rmvC7QRCTjsiGkAwRw==", + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.8.tgz", + "integrity": "sha512-taYpngQtSysrvO9GULaOSwcG5q821zCoIQBtQQSx7Uf7DxpR6CIHR90toPr9QfDD2mqHQPCSgoWBvJu0yV9zjg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.24.7", - "@vue/compiler-core": "3.4.34", - "@vue/compiler-dom": "3.4.34", - "@vue/compiler-ssr": "3.4.34", - "@vue/shared": "3.4.34", + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.8", + "@vue/compiler-dom": "3.5.8", + "@vue/compiler-ssr": "3.5.8", + "@vue/shared": "3.5.8", "estree-walker": "^2.0.2", - "magic-string": "^0.30.10", - "postcss": "^8.4.39", + "magic-string": "^0.30.11", + "postcss": "^8.4.47", "source-map-js": "^1.2.0" } }, @@ -4754,14 +4874,14 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.34.tgz", - "integrity": "sha512-8TDBcLaTrFm5rnF+Qm4BlliaopJgqJ28Nsrc80qazynm5aJO+Emu7y0RWw34L8dNnTRdcVBpWzJxhGYzsoVu4g==", + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.8.tgz", + "integrity": "sha512-W96PtryNsNG9u0ZnN5Q5j27Z/feGrFV6zy9q5tzJVyJaLiwYxvC0ek4IXClZygyhjm+XKM7WD9pdKi/wIRVC/Q==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.4.34", - "@vue/shared": "3.4.34" + "@vue/compiler-dom": "3.5.8", + "@vue/shared": "3.5.8" } }, "node_modules/@vue/component-compiler-utils": { @@ -4870,9 +4990,9 @@ } }, "node_modules/@vue/shared": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.34.tgz", - "integrity": "sha512-x5LmiRLpRsd9KTjAB8MPKf0CDPMcuItjP0gbNqFCIgL1I8iYp4zglhj9w9FPCdIbHG2M91RVeIbArFfFTz9I3A==", + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.8.tgz", + "integrity": "sha512-mJleSWbAGySd2RJdX1RBtcrUBX6snyOc0qHpgk3lGi4l9/P/3ny3ELqFWqYdkXIwwNN/kdm8nD9ky8o6l/Lx2A==", "dev": true, "license": "MIT" }, @@ -5086,109 +5206,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/assert": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", @@ -5285,9 +5302,9 @@ } }, "node_modules/axios": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", - "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -5321,14 +5338,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -5460,9 +5477,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "dev": true, "funding": [ { @@ -5480,8 +5497,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, @@ -5532,22 +5549,19 @@ } }, "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001646", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", - "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==", + "version": "1.0.30001663", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", + "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", "dev": true, "funding": [ { @@ -5608,22 +5622,26 @@ } }, "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", + "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", "dev": true, "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" + "domutils": "^3.1.0", + "encoding-sniffer": "^0.2.0", + "htmlparser2": "^9.1.0", + "parse5": "^7.1.2", + "parse5-htmlparser2-tree-adapter": "^7.0.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^6.19.5", + "whatwg-mimetype": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=18.17" }, "funding": { "url": "https://github.com/cheeriojs/cheerio?sponsor=1" @@ -5647,26 +5665,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cheerio/node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -5876,9 +5874,9 @@ "license": "MIT" }, "node_modules/core-js": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", - "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", + "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5888,13 +5886,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.0" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", @@ -6067,25 +6065,18 @@ "license": "CC0-1.0" }, "node_modules/cssstyle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", - "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", + "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", "dev": true, "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.6.0" + "rrweb-cssom": "^0.7.1" }, "engines": { "node": ">=18" } }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", - "dev": true, - "license": "MIT" - }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -6106,64 +6097,10 @@ "node": ">=18" } }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/dayjs": { - "version": "1.11.12", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", - "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==", + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", "license": "MIT" }, "node_modules/de-indent": { @@ -6174,13 +6111,13 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -6326,19 +6263,6 @@ "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", "license": "MIT" }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", @@ -6491,18 +6415,32 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "version": "1.5.28", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz", + "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==", "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "license": "MIT" }, + "node_modules/encoding-sniffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", + "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, "node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", @@ -6542,67 +6480,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -6645,62 +6522,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -6741,9 +6562,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -6761,44 +6582,43 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz", + "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.6.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.11.1", + "@eslint/plugin-kit": "^0.2.0", "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", @@ -6810,10 +6630,18 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-compat-utils": { @@ -6858,56 +6686,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/eslint-plugin-es-x": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", @@ -6930,61 +6708,6 @@ "eslint": ">=8" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-local-rules": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/eslint-plugin-local-rules/-/eslint-plugin-local-rules-3.0.2.tgz", @@ -6993,9 +6716,9 @@ "license": "MIT" }, "node_modules/eslint-plugin-n": { - "version": "17.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.2.tgz", - "integrity": "sha512-e+s4eAf5NtJaxPhTNu3qMO0Iz40WANS93w9LQgYcvuljgvDmWi/a3rh+OrNyMHeng6aOWGJO0rCg5lH4zi8yTw==", + "version": "17.10.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.3.tgz", + "integrity": "sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw==", "dev": true, "license": "MIT", "dependencies": { @@ -7028,19 +6751,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/globals": { - "version": "15.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", - "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint-plugin-n/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -7118,9 +6828,9 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "9.27.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz", - "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==", + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.28.0.tgz", + "integrity": "sha512-ShrihdjIhOTxs+MfWun6oJWuk+g/LAhN+CiuOl/jjkG3l0F2AuK5NMTaWqyvBgkFtpYmyks6P4603mLmhNJW8g==", "dev": true, "license": "MIT", "dependencies": { @@ -7129,7 +6839,7 @@ "natural-compare": "^1.4.0", "nth-check": "^2.1.1", "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.0", + "semver": "^7.6.3", "vue-eslint-parser": "^9.4.3", "xml-name-validator": "^4.0.0" }, @@ -7287,9 +6997,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7297,49 +7007,33 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, "node_modules/eslint/node_modules/has-flag": { @@ -7366,31 +7060,31 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -7590,16 +7284,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-saver": { @@ -7639,18 +7333,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -7668,9 +7361,9 @@ "license": "MIT" }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", @@ -7688,12 +7381,12 @@ } }, "node_modules/fontkit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.2.tgz", - "integrity": "sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", + "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", "license": "MIT", "dependencies": { - "@swc/helpers": "^0.4.2", + "@swc/helpers": "^0.5.12", "brotli": "^1.3.2", "clone": "^2.1.2", "dfa": "^1.2.0", @@ -7714,9 +7407,9 @@ } }, "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, "license": "ISC", "dependencies": { @@ -7789,25 +7482,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -7883,28 +7557,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-tsconfig": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", - "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dev": true, "license": "MIT", "dependencies": { @@ -7973,30 +7629,16 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", "dev": true, "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gopd": { @@ -8018,13 +7660,6 @@ "dev": true, "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/hal-json-normalizer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/hal-json-normalizer/-/hal-json-normalizer-4.2.0.tgz", @@ -8276,9 +7911,9 @@ } }, "node_modules/hyphen": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/hyphen/-/hyphen-1.10.4.tgz", - "integrity": "sha512-SejXzIpv9gOVdDWXd4suM1fdF1k2dxZGvuTdkOVLoazYfK7O4DykIQbdrvuyG+EaTNlXAGhMndtKrhykgbt0gg==", + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/hyphen/-/hyphen-1.10.6.tgz", + "integrity": "sha512-fXHXcGFTXOvZTSkPJuGOQf5Lv5T/R2itiiCVPg9LxAje5D00O0pP83yJShFq5V89Ly//Gt6acj7z8pbBr34stw==", "license": "ISC" }, "node_modules/iconv-lite": { @@ -8295,9 +7930,9 @@ } }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -8489,9 +8124,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8504,22 +8139,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -8626,19 +8245,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -8807,19 +8413,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-weakset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", @@ -8955,9 +8548,9 @@ } }, "node_modules/jay-peg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jay-peg/-/jay-peg-1.0.2.tgz", - "integrity": "sha512-fyV3NVvv6pTys/3BTapBUGAWAuU9rM2gRcgijZHzptd5KKL+s+S7hESFN+wOsbDH1MzFwdlRAXi0aGxS6uiMKg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jay-peg/-/jay-peg-1.1.0.tgz", + "integrity": "sha512-WhyKySfx5CEFoKDnpmHyJUrpX5fUrr/X3kqVHISmiO9jrJC73RQBOAZJB8bDrWT4PHEkl0QgNZLlWJfAWAIFew==", "license": "MIT", "dependencies": { "restructure": "^3.0.0" @@ -9100,13 +8693,13 @@ } }, "node_modules/jsdom": { - "version": "24.1.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz", - "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", "dev": true, "license": "MIT", "dependencies": { - "cssstyle": "^4.0.1", + "cssstyle": "^4.1.0", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", "form-data": "^4.0.0", @@ -9119,7 +8712,7 @@ "rrweb-cssom": "^0.7.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", + "tough-cookie": "^5.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", @@ -9247,16 +8840,6 @@ "node": ">=0.10.0" } }, - "node_modules/legacy-swc-helpers": { - "name": "@swc/helpers", - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", - "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -9294,9 +8877,9 @@ } }, "node_modules/lint-staged": { - "version": "15.2.8", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.8.tgz", - "integrity": "sha512-PUWFf2zQzsd9EFU+kM1d7UP+AZDbKFKuj+9JNVTBkhUFhbg4MAt6WfyMMwBfM4lYqd4D2Jwac5iuTu9rVj4zCQ==", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", "dev": true, "license": "MIT", "dependencies": { @@ -9306,7 +8889,7 @@ "execa": "~8.0.1", "lilconfig": "~3.1.2", "listr2": "~8.2.4", - "micromatch": "~4.0.7", + "micromatch": "~4.0.8", "pidtree": "~0.6.0", "string-argv": "~0.3.2", "yaml": "~2.5.0" @@ -9457,9 +9040,9 @@ } }, "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -9575,14 +9158,14 @@ } }, "node_modules/magicast": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", - "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.24.4", - "@babel/types": "^7.24.0", + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", "source-map-js": "^1.2.0" } }, @@ -9689,9 +9272,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -9772,16 +9355,6 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/minipass": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", @@ -9823,9 +9396,9 @@ "license": "MIT" }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, @@ -10053,58 +9626,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -10246,6 +9767,19 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -10335,9 +9869,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", "license": "ISC" }, "node_modules/picomatch": { @@ -10367,9 +9901,9 @@ } }, "node_modules/pkg-types": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", - "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", + "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", "dev": true, "license": "MIT", "dependencies": { @@ -10388,9 +9922,9 @@ } }, "node_modules/postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "funding": [ { "type": "opencollective", @@ -10408,8 +9942,8 @@ "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -10460,9 +9994,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { @@ -10698,9 +10232,9 @@ } }, "node_modules/prosemirror-model": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.2.tgz", - "integrity": "sha512-I4lS7HHIW47D0Xv/gWmi4iUWcQIDYaJKd8Hk4+lcSps+553FlQrhmxtItpEvTr75iAruhzVShVp6WUwsT6Boww==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.3.tgz", + "integrity": "sha512-V4XCysitErI+i0rKFILGt/xClnFJaohe/wrrlT2NSZ+zk8ggQfDH4x2wNK7Gm0Hp4CIoWizvXFP7L9KMaCuI0Q==", "license": "MIT", "dependencies": { "orderedmap": "^2.0.0" @@ -10738,9 +10272,9 @@ } }, "node_modules/prosemirror-tables": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.4.0.tgz", - "integrity": "sha512-fxryZZkQG12fSCNuZDrYx6Xvo2rLYZTbKLRd8rglOPgNJGMKIS8uvTt6gGC38m7UCu/ENnXIP9pEz5uDaPc+cA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.5.0.tgz", + "integrity": "sha512-VMx4zlYWm7aBlZ5xtfJHpqa3Xgu3b7srV54fXYnXgsAcIGRqKSrhiK3f89omzzgaAgAtDOV4ImXnLKhVfheVNQ==", "license": "MIT", "dependencies": { "prosemirror-keymap": "^1.1.2", @@ -10751,12 +10285,12 @@ } }, "node_modules/prosemirror-trailing-node": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-2.0.9.tgz", - "integrity": "sha512-YvyIn3/UaLFlFKrlJB6cObvUhmwFNZVhy1Q8OpW/avoTbD/Y7H5EcjK4AZFKhmuS6/N6WkGgt7gWtBWDnmFvHg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz", + "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==", "license": "MIT", "dependencies": { - "@remirror/core-constants": "^2.0.2", + "@remirror/core-constants": "3.0.0", "escape-string-regexp": "^4.0.0" }, "peerDependencies": { @@ -10778,18 +10312,18 @@ } }, "node_modules/prosemirror-transform": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.9.0.tgz", - "integrity": "sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.0.tgz", + "integrity": "sha512-9UOgFSgN6Gj2ekQH5CTDJ8Rp/fnKR2IkYfGdzzp5zQMFsS4zDllLVx/+jGcX86YlACpG7UR5fwAXiWzxqWtBTg==", "license": "MIT", "dependencies": { "prosemirror-model": "^1.21.0" } }, "node_modules/prosemirror-view": { - "version": "1.33.9", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.33.9.tgz", - "integrity": "sha512-xV1A0Vz9cIcEnwmMhKKFAOkfIp8XmJRnaZoPqNXrPS7EK5n11Ov8V76KhR0RsfQd/SIzmWY+bg+M44A2Lx/Nnw==", + "version": "1.34.3", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.3.tgz", + "integrity": "sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA==", "license": "MIT", "dependencies": { "prosemirror-model": "^1.20.0", @@ -10817,13 +10351,6 @@ "dev": true, "license": "ISC" }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true, - "license": "MIT" - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -10843,13 +10370,6 @@ "node": ">=6" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true, - "license": "MIT" - }, "node_modules/queue": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", @@ -10901,9 +10421,9 @@ } }, "node_modules/recaptcha-v3": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/recaptcha-v3/-/recaptcha-v3-1.10.0.tgz", - "integrity": "sha512-aGTxYSk3FFNKnXeKDbLpgRDRyIHRZNBF5HyaXXAN1Aj4TSyyZvmoAn9CylvpqLV3pYpIQavwc+2rzhNFn5SsLQ==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/recaptcha-v3/-/recaptcha-v3-1.11.3.tgz", + "integrity": "sha512-sEE6J0RzUkS+sKEBpgCD/AqCU0ffrAVOADGjvAx9vcttN+VLK42SWMkj/J/I6vHu3Kew+xcfbBqDVb65N0QGDw==", "license": "Apache-2.0" }, "node_modules/redent": { @@ -10928,9 +10448,9 @@ "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "dev": true, "license": "MIT", "dependencies": { @@ -11024,13 +10544,6 @@ "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "license": "MIT" - }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", @@ -11119,62 +10632,23 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, "node_modules/rollup": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz", - "integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, "license": "MIT", "dependencies": { @@ -11188,25 +10662,32 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.19.1", - "@rollup/rollup-android-arm64": "4.19.1", - "@rollup/rollup-darwin-arm64": "4.19.1", - "@rollup/rollup-darwin-x64": "4.19.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.19.1", - "@rollup/rollup-linux-arm-musleabihf": "4.19.1", - "@rollup/rollup-linux-arm64-gnu": "4.19.1", - "@rollup/rollup-linux-arm64-musl": "4.19.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.19.1", - "@rollup/rollup-linux-riscv64-gnu": "4.19.1", - "@rollup/rollup-linux-s390x-gnu": "4.19.1", - "@rollup/rollup-linux-x64-gnu": "4.19.1", - "@rollup/rollup-linux-x64-musl": "4.19.1", - "@rollup/rollup-win32-arm64-msvc": "4.19.1", - "@rollup/rollup-win32-ia32-msvc": "4.19.1", - "@rollup/rollup-win32-x64-msvc": "4.19.1", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, + "node_modules/rollup/node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT" + }, "node_modules/rope-sequence": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", @@ -11253,25 +10734,6 @@ "node": ">=4.0.0" } }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -11292,24 +10754,6 @@ ], "license": "MIT" }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -11523,9 +10967,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -11641,9 +11085,9 @@ } }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -11669,58 +11113,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -11748,16 +11140,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", @@ -12034,16 +11416,23 @@ "license": "MIT" }, "node_modules/tinybench": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", - "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", + "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", "dev": true, "license": "MIT" }, "node_modules/tinypool": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", - "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", + "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", "dev": true, "license": "MIT", "engines": { @@ -12061,9 +11450,9 @@ } }, "node_modules/tinyspy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", - "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, "license": "MIT", "engines": { @@ -12079,11 +11468,30 @@ "@popperjs/core": "^2.9.0" } }, + "node_modules/tldts": { + "version": "6.1.47", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.47.tgz", + "integrity": "sha512-R/K2tZ5MiY+mVrnSkNJkwqYT2vUv1lcT6wJvd2emGaMJ7PHUGRY4e3tUsdFCXgqxi2QgbHjL3yJgXCo40v9Hxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.47" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.47", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.47.tgz", + "integrity": "sha512-6SWyFMnlst1fEt7GQVAAu16EGgFK0cLouH/2Mk6Ftlwhv3Ol40L0dlpGMcnnNiiOMyD2EV/aF3S+U2nKvvLvrA==", + "dev": true, + "license": "MIT" + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -12103,19 +11511,16 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" + "node": ">=16" } }, "node_modules/tr46": { @@ -12131,36 +11536,10 @@ "node": ">=18" } }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "license": "0BSD" }, "node_modules/type-check": { @@ -12189,83 +11568,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", @@ -12279,26 +11581,20 @@ "dev": true, "license": "MIT" }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "node_modules/undici": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz", + "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=18.17" } }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, "license": "MIT", "engines": { @@ -12320,9 +11616,9 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "dev": true, "license": "MIT", "engines": { @@ -12365,16 +11661,6 @@ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", "license": "MIT" }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/unplugin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.0.1.tgz", @@ -12389,22 +11675,22 @@ } }, "node_modules/unplugin-vue-components": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.27.3.tgz", - "integrity": "sha512-5wg7lbdg5ZcrAQNzyYK+6gcg/DG8K6rO+f5YeuvqGHs/PhpapBvpA4O/0ex/pFthE5WgRk43iWuRZEMLVsdz4Q==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.27.4.tgz", + "integrity": "sha512-1XVl5iXG7P1UrOMnaj2ogYa5YTq8aoh5jwDPQhemwO/OrXW+lPQKDXd1hMz15qxQPxgb/XXlbgo3HQ2rLEbmXQ==", "dev": true, "license": "MIT", "dependencies": { "@antfu/utils": "^0.7.10", "@rollup/pluginutils": "^5.1.0", "chokidar": "^3.6.0", - "debug": "^4.3.5", + "debug": "^4.3.6", "fast-glob": "^3.3.2", "local-pkg": "^0.5.0", - "magic-string": "^0.30.10", + "magic-string": "^0.30.11", "minimatch": "^9.0.5", "mlly": "^1.7.1", - "unplugin": "^1.11.0" + "unplugin": "^1.12.1" }, "engines": { "node": ">=14" @@ -12463,19 +11749,25 @@ } }, "node_modules/unplugin-vue-components/node_modules/unplugin": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.0.tgz", - "integrity": "sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.1.tgz", + "integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==", "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.12.1", - "chokidar": "^3.6.0", - "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.6.2" }, "engines": { "node": ">=14.0.0" + }, + "peerDependencies": { + "webpack-sources": "^3" + }, + "peerDependenciesMeta": { + "webpack-sources": { + "optional": true + } } }, "node_modules/unplugin-vue-components/node_modules/webpack-virtual-modules": { @@ -12517,25 +11809,12 @@ } }, "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "name": "uri-js-replace", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", + "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", "dev": true, - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } + "license": "MIT" }, "node_modules/url-template": { "version": "3.1.1", @@ -12633,15 +11912,15 @@ } }, "node_modules/vite": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", - "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.21.3", - "postcss": "^8.4.39", - "rollup": "^4.13.0" + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -12660,6 +11939,7 @@ "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -12677,6 +11957,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -12703,16 +11986,15 @@ } }, "node_modules/vite-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.5.tgz", - "integrity": "sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", + "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.5", + "debug": "^4.3.6", "pathe": "^1.1.2", - "tinyrainbow": "^1.2.0", "vite": "^5.0.0" }, "bin": { @@ -12766,30 +12048,30 @@ } }, "node_modules/vitest": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.5.tgz", - "integrity": "sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", + "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", "dev": true, "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@vitest/expect": "2.0.5", - "@vitest/pretty-format": "^2.0.5", - "@vitest/runner": "2.0.5", - "@vitest/snapshot": "2.0.5", - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", + "@vitest/expect": "2.1.1", + "@vitest/mocker": "2.1.1", + "@vitest/pretty-format": "^2.1.1", + "@vitest/runner": "2.1.1", + "@vitest/snapshot": "2.1.1", + "@vitest/spy": "2.1.1", + "@vitest/utils": "2.1.1", "chai": "^5.1.1", - "debug": "^4.3.5", - "execa": "^8.0.1", - "magic-string": "^0.30.10", + "debug": "^4.3.6", + "magic-string": "^0.30.11", "pathe": "^1.1.2", "std-env": "^3.7.0", - "tinybench": "^2.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.0", "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.0.5", + "vite-node": "2.1.1", "why-is-node-running": "^2.3.0" }, "bin": { @@ -12804,8 +12086,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.0.5", - "@vitest/ui": "2.0.5", + "@vitest/browser": "2.1.1", + "@vitest/ui": "2.1.1", "happy-dom": "*", "jsdom": "*" }, @@ -12929,6 +12211,24 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/vue-eslint-parser/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -13359,9 +12659,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { @@ -13466,9 +12766,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", "dev": true, "license": "ISC", "bin": { @@ -13492,9 +12792,9 @@ } }, "node_modules/yoga-layout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-2.0.1.tgz", - "integrity": "sha512-tT/oChyDXelLo2A+UVnlW9GU7CsvFMaEnd9kVFsaiCQonFAXd3xrHhkLYu+suwwosrAEQ746xBU+HvYtm1Zs2Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.1.0.tgz", + "integrity": "sha512-auzJ8lEovThZIpR8wLGWNo/JEj4VTO79q9/gOJ0dWb3shAYPFdX3t9VN0fC0v+jeQF77STUdCzebLwRMqzn5gQ==", "license": "MIT" } } diff --git a/frontend/package.json b/frontend/package.json index f4477e2f20..a3cfbc159a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,10 +6,10 @@ "preview": "vite preview --host 0.0.0.0 --port 3000", "build": "vite build", "lint": "npm run lint:eslint && npm run lint:prettier", - "lint:eslint": "eslint . --ext .vue,.js --fix --ignore-path .gitignore", + "lint:eslint": "eslint --fix .", "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{css,scss,json,md}", "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier", - "lint:check:eslint": "eslint . --ext .vue,.js --no-fix --ignore-path .gitignore", + "lint:check:eslint": "eslint .", "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,md}", "start": "vite --host 0.0.0.0", "dev": "vite --host 0.0.0.0", @@ -19,32 +19,32 @@ "postinstall": "./scripts/install-twemoji.sh" }, "dependencies": { - "@intlify/core": "9.13.1", + "@intlify/core": "9.14.1", "@mdi/font": "7.4.47", - "@react-pdf/font": "2.5.1", - "@react-pdf/layout": "3.12.1", - "@react-pdf/pdfkit": "3.1.10", + "@react-pdf/font": "2.5.2", + "@react-pdf/layout": "4.0.0", + "@react-pdf/pdfkit": "4.0.0", "@react-pdf/primitives": "3.1.1", - "@react-pdf/render": "3.4.4", - "@sentry/browser": "8.24.0", - "@sentry/vue": "8.24.0", - "@tiptap/extension-bold": "2.5.9", - "@tiptap/extension-bubble-menu": "2.5.9", - "@tiptap/extension-bullet-list": "2.5.9", - "@tiptap/extension-document": "2.5.9", - "@tiptap/extension-hard-break": "2.5.9", - "@tiptap/extension-heading": "2.5.9", - "@tiptap/extension-history": "2.5.9", - "@tiptap/extension-italic": "2.5.9", - "@tiptap/extension-list-item": "2.5.9", - "@tiptap/extension-ordered-list": "2.5.9", - "@tiptap/extension-paragraph": "2.5.9", - "@tiptap/extension-placeholder": "2.5.9", - "@tiptap/extension-strike": "2.5.9", - "@tiptap/extension-text": "2.5.9", - "@tiptap/extension-underline": "2.5.9", - "@tiptap/pm": "2.5.9", - "@tiptap/vue-2": "2.5.9", + "@react-pdf/render": "4.0.0", + "@sentry/browser": "8.32.0", + "@sentry/vue": "8.32.0", + "@tiptap/extension-bold": "2.7.3", + "@tiptap/extension-bubble-menu": "2.7.3", + "@tiptap/extension-bullet-list": "2.7.3", + "@tiptap/extension-document": "2.7.3", + "@tiptap/extension-hard-break": "2.7.3", + "@tiptap/extension-heading": "2.7.3", + "@tiptap/extension-history": "2.7.3", + "@tiptap/extension-italic": "2.7.3", + "@tiptap/extension-list-item": "2.7.3", + "@tiptap/extension-ordered-list": "2.7.3", + "@tiptap/extension-paragraph": "2.7.3", + "@tiptap/extension-placeholder": "2.7.3", + "@tiptap/extension-strike": "2.7.3", + "@tiptap/extension-text": "2.7.3", + "@tiptap/extension-underline": "2.7.3", + "@tiptap/pm": "2.7.3", + "@tiptap/vue-2": "2.7.3", "@zxcvbn-ts/core": "3.0.4", "@zxcvbn-ts/language-common": "3.0.4", "@zxcvbn-ts/language-de": "3.0.2", @@ -52,12 +52,12 @@ "@zxcvbn-ts/language-fr": "3.0.2", "@zxcvbn-ts/language-it": "3.0.2", "assert": "2.1.0", - "axios": "1.7.3", + "axios": "1.7.7", "colorjs.io": "0.5.2", "comlink": "4.4.1", - "dayjs": "1.11.12", + "dayjs": "1.11.13", "deepmerge": "4.3.1", - "emoji-regex": "10.3.0", + "emoji-regex": "10.4.0", "file-saver": "2.0.5", "hal-json-vuex": "2.0.0-alpha.16", "inter-ui": "3.19.3", @@ -84,106 +84,45 @@ }, "devDependencies": { "@babel/eslint-parser": "7.25.1", - "@sentry/vite-plugin": "2.21.1", - "@testing-library/jest-dom": "6.4.8", + "@eslint/compat": "1.1.1", + "@eslint/eslintrc": "3.1.0", + "@eslint/js": "9.11.1", + "@sentry/vite-plugin": "2.22.4", + "@testing-library/jest-dom": "6.5.0", "@testing-library/user-event": "14.5.2", "@testing-library/vue": "5.9.0", "@vitejs/plugin-vue2": "2.3.1", - "@vitest/coverage-v8": "2.0.5", + "@vitest/coverage-v8": "2.1.1", "@vue/babel-preset-app": "5.0.8", "@vue/eslint-config-prettier": "9.0.0", "@vue/test-utils": "1.3.6", "autoprefixer": "10.4.20", "babel-plugin-require-context-hook": "1.0.0", - "eslint": "8.57.0", + "eslint": "9.11.1", "eslint-config-prettier": "9.1.0", - "eslint-plugin-import": "2.29.1", "eslint-plugin-local-rules": "3.0.2", - "eslint-plugin-n": "17.10.2", + "eslint-plugin-n": "17.10.3", "eslint-plugin-prettier": "5.2.1", "eslint-plugin-promise": "7.1.0", - "eslint-plugin-vue": "9.27.0", + "eslint-plugin-vue": "9.28.0", "eslint-plugin-vue-scoped-css": "2.8.1", "flush-promises": "1.0.2", + "globals": "15.9.0", "jest-serializer-vue-tjw": "3.20.0", - "jsdom": "24.1.1", - "lint-staged": "15.2.8", + "jsdom": "25.0.1", + "lint-staged": "15.2.10", "prettier": "3.3.3", "sass": "1.32.13", - "unplugin-vue-components": "0.27.3", - "vite": "5.3.5", + "unplugin-vue-components": "0.27.4", + "vite": "5.4.8", "vite-plugin-comlink": "5.0.1", "vite-plugin-vue2-svg": "0.4.0", - "vitest": "2.0.5", + "vitest": "2.1.1", "vitest-canvas-mock": "0.3.3", "vue-template-compiler": "2.7.15" }, - "eslintConfig": { - "root": true, - "env": { - "node": true, - "jest": true - }, - "extends": [ - "plugin:vue/recommended", - "plugin:vue/vue3-recommended", - "plugin:vue-scoped-css/vue3-recommended", - "eslint:recommended", - "plugin:prettier/recommended", - "@vue/eslint-config-prettier" - ], - "rules": { - "prefer-const": "error", - "prettier/prettier": "error", - "vue/component-tags-order": [ - "error", - { - "order": [ - "template", - "script", - "style" - ] - } - ], - "vue/multi-word-component-names": "off", - "vue/no-deprecated-destroyed-lifecycle": "off", - "vue/no-deprecated-dollar-listeners-api": "off", - "vue/no-deprecated-dollar-scopedslots-api": "off", - "vue/no-deprecated-filter": "warn", - "vue/no-deprecated-props-default-this": "off", - "vue/no-deprecated-slot-attribute": "off", - "vue/no-deprecated-slot-scope-attribute": "off", - "vue/no-deprecated-v-bind-sync": "off", - "vue/no-deprecated-v-on-native-modifier": "warn", - "vue/no-v-for-template-key-on-child": "off", - "vue/no-v-model-argument": "warn", - "vue/require-explicit-emits": "off", - "no-unused-vars": [ - "error", - { - "argsIgnorePattern": "^_$" - } - ], - "local-rules/matching-translation-keys": [ - "error", - { - "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+", - "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$" - } - ], - "vue/no-mutating-props": [ - "error", - { - "shallowOnly": true - } - ] - }, - "parserOptions": { - "parser": "@babel/eslint-parser" - }, - "plugins": [ - "eslint-plugin-local-rules" - ] + "overrides": { + "uri-js": "npm:uri-js-replace" }, "postcss": { "plugins": { diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 55b1f2bc5a..f0f57a09ce 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -56,7 +56,10 @@ export default { }, } + + diff --git a/frontend/src/components/activity/content/SafetyConcept.vue b/frontend/src/components/activity/content/SafetyConsiderations.vue similarity index 86% rename from frontend/src/components/activity/content/SafetyConcept.vue rename to frontend/src/components/activity/content/SafetyConsiderations.vue index 3807a56eb9..8359f14eae 100644 --- a/frontend/src/components/activity/content/SafetyConcept.vue +++ b/frontend/src/components/activity/content/SafetyConsiderations.vue @@ -3,7 +3,7 @@ +
  • +
    + {{ item.text }} + + +
    +
      + +
    +
  • + + + + + diff --git a/frontend/src/components/activity/content/columnLayout/__tests__/calculateNextSlotName.spec.js b/frontend/src/components/activity/content/columnLayout/__tests__/calculateNextSlotName.spec.js index 76242642c9..a2a2324432 100644 --- a/frontend/src/components/activity/content/columnLayout/__tests__/calculateNextSlotName.spec.js +++ b/frontend/src/components/activity/content/columnLayout/__tests__/calculateNextSlotName.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, it } from 'vitest' import { calculateNextSlotName, adjustColumnWidths } from '../calculateNextSlotName.js' describe('generating a next slot name', () => { diff --git a/frontend/src/components/activity/content/columnLayout/calculateNextSlotName.js b/frontend/src/components/activity/content/columnLayout/calculateNextSlotName.js index a07b20b795..89624c8e82 100644 --- a/frontend/src/components/activity/content/columnLayout/calculateNextSlotName.js +++ b/frontend/src/components/activity/content/columnLayout/calculateNextSlotName.js @@ -2,7 +2,7 @@ import cloneDeep from 'lodash/cloneDeep' export function calculateNextSlotName(slotNames) { let i = 0 - // eslint-disable-next-line no-constant-condition + while (true) { if (!slotNames.includes((++i).toString())) return i.toString() } diff --git a/frontend/src/components/activity/content/layout/ContentNodeCard.vue b/frontend/src/components/activity/content/layout/ContentNodeCard.vue index 96dfbbc67f..69e211bb37 100644 --- a/frontend/src/components/activity/content/layout/ContentNodeCard.vue +++ b/frontend/src/components/activity/content/layout/ContentNodeCard.vue @@ -89,10 +89,12 @@ import camelCase from 'lodash/camelCase' import DialogEntityDelete from '@/components/dialog/DialogEntityDelete.vue' import IconWithTooltip from '@/components/generic/IconWithTooltip.vue' import ApiForm from '@/components/form/api/ApiForm.vue' +import ApiTextField from '@/components/form/api/ApiTextField.vue' export default { name: 'ContentNodeCard', components: { + ApiTextField, ApiForm, IconWithTooltip, DialogEntityDelete, diff --git a/frontend/src/components/camp/CampListItem.vue b/frontend/src/components/camp/CampListItem.vue new file mode 100644 index 0000000000..cbf857fd4e --- /dev/null +++ b/frontend/src/components/camp/CampListItem.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/frontend/src/components/campAdmin/CampDangerZone.vue b/frontend/src/components/campAdmin/CampDangerZone.vue index 27fee7e7dd..232759aa37 100644 --- a/frontend/src/components/campAdmin/CampDangerZone.vue +++ b/frontend/src/components/campAdmin/CampDangerZone.vue @@ -25,7 +25,7 @@ Critical operations on camp @@ -44,14 +44,14 @@ Critical operations on camp

    {{ $tc('components.campAdmin.campDangerZone.deleteCamp.explanation', 0, { - campName: camp.name, + campTitle: camp.title, }) }}