From 3ac1c04bcd28440f2d0c5b7b125fd0eed0eca644 Mon Sep 17 00:00:00 2001 From: Stefan Matting Date: Tue, 23 Jan 2024 16:14:44 +0100 Subject: [PATCH] publish to wire-builds (#4445) * refactor: branch vs pr pipelines * reinstate lint * always push docker image * target branch * Add helm chart * publish helm chart * Add publish to wire-builds step * fix debug * fix: upgrade account-pages * fix: image_tag not defined as output * Remove test triggers * test: update to remove warnings * chore: update prettier plugin * chore: trying to fix deps * chore: fix --------- Co-authored-by: Timothy LeBon --- .eslintrc.json | 12 + .github/workflows/ci.yml | 85 ++ .github/workflows/test_build_deploy.yml | 221 +++--- bin/chart-next-version.sh | 79 ++ bin/push_docker.js | 47 +- bin/semver | 448 +++++++++++ charts/account-pages/.helmignore | 21 + charts/account-pages/Chart.yaml | 5 + charts/account-pages/README.md | 1 + charts/account-pages/templates/_helpers.tpl | 25 + .../account-pages/templates/deployment.yaml | 64 ++ charts/account-pages/values.yaml | 60 ++ package.json | 8 +- server/tsconfig.json | 4 +- server/yarn.lock | 1 - src/script/component/OpenWireButtons.test.tsx | 12 +- src/script/page/ConversationJoin.test.tsx | 10 +- src/script/page/UserProfile.test.tsx | 10 +- tsconfig.json | 6 +- yarn.lock | 744 ++++++++---------- 20 files changed, 1323 insertions(+), 540 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100755 bin/chart-next-version.sh create mode 100755 bin/semver create mode 100644 charts/account-pages/.helmignore create mode 100644 charts/account-pages/Chart.yaml create mode 100644 charts/account-pages/README.md create mode 100644 charts/account-pages/templates/_helpers.tpl create mode 100644 charts/account-pages/templates/deployment.yaml create mode 100644 charts/account-pages/values.yaml diff --git a/.eslintrc.json b/.eslintrc.json index 286ce7fa5d..0b4cc46bfc 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -2,6 +2,7 @@ "env": { "jasmine": true }, + "parser": "@typescript-eslint/parser", "plugins": ["jest"], "extends": ["@wireapp/eslint-config", "plugin:jest/recommended"], "overrides": [ @@ -19,8 +20,19 @@ "project": ["./tsconfig.json", "./server/tsconfig.json"] }, "rules": { + "id-length": [ + "error", + { + "exceptions": ["t"] + } + ], "import/no-default-export": "off", "jest/no-jasmine-globals": "warn", "jest/no-try-expect": "off" + }, + "settings": { + "react": { + "version": "detect" + } } } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..607ea319d5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,85 @@ +name: CI + +on: + push: + branches: [staging, main] + tags: + - v* + pull_request: + branches: [staging, main] + +jobs: + test_build_deploy: + runs-on: ubuntu-latest + + strategy: + matrix: + DISTRIBUTION: ['DISTRIBUTION_0'] + + env: + TEST_COVERAGE_FAIL_THRESHOLD: 10 + TEST_COVERAGE_WARNING_THRESHOLD: 50 + DEPLOYMENT_RECOVERY_TIMEOUT_SECONDS: 150 + AWS_APPLICATION_NAME: Account + AWS_BUILD_ZIP_PATH: 'wire-account.zip' + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Set environment variables + env: + # DISTRIBUTIONS are saved in the format `distribution-{name}` + DISTRIBUTION: ${{secrets[matrix.DISTRIBUTION]}} + run: | + echo "BRANCH_NAME=$(git branch --show-current)" >> $GITHUB_ENV + echo "TAG=$(git tag --points-at ${{github.sha}})" >> $GITHUB_ENV + echo "COMMIT_MESSAGE=$(git log --format=%B -n 1 ${{github.event.after}} | head -n 1)" >> $GITHUB_ENV + echo "DISTRIBUTION=${DISTRIBUTION/distribution-/}" >> $GITHUB_ENV + + - name: Set TITLE + env: + PR_TITLE: ${{github.event.pull_request.title || env.COMMIT_MESSAGE}} + run: echo "TITLE=$PR_TITLE" >> $GITHUB_ENV + + - name: Print environment variables + env: + GITHUB_CONTEXT: ${{toJson(github)}} + run: | + echo -e "BRANCH_NAME = ${BRANCH_NAME}" + echo -e "TAG = ${TAG}" + echo -e "TITLE = ${TITLE}" + echo -e "COMMIT_MESSAGE = ${COMMIT_MESSAGE}" + echo -e "GITHUB_CONTEXT = ${GITHUB_CONTEXT}" + + - name: Skip CI + if: contains(env.TITLE || env.COMMIT_MESSAGE, '[skip ci]') || contains(env.TITLE || env.COMMIT_MESSAGE, '[ci skip]') + uses: andymckay/cancel-action@0.3 + + - name: Cancel Previous Runs + uses: styfle/cancel-workflow-action@0.11.0 + with: + access_token: ${{github.token}} + + - name: Yarn cache + uses: c-hive/gha-yarn-cache@v2.1.0 + + - name: Authenticate git clone + env: + GH_TOKEN: ${{secrets.OTTO_THE_BOT_GH_TOKEN}} + run: echo -e "machine github.com\n login ${GH_TOKEN}" > ~/.netrc + + - name: Install JS dependencies + run: yarn --immutable + + - name: Test + run: yarn test + + - name: Monitor coverage + if: github.event_name == 'pull_request' && ! contains(github.event.pull_request.user.login, 'dependabot[bot]') + uses: slavcodev/coverage-monitor-action@1.8.0 + with: + github_token: ${{github.token}} + coverage_path: 'coverage/clover.xml' + threshold_alert: ${{env.TEST_COVERAGE_FAIL_THRESHOLD}} + threshold_warning: ${{env.TEST_COVERAGE_WARNING_THRESHOLD}} diff --git a/.github/workflows/test_build_deploy.yml b/.github/workflows/test_build_deploy.yml index 7555d08339..10aaf9ba1f 100644 --- a/.github/workflows/test_build_deploy.yml +++ b/.github/workflows/test_build_deploy.yml @@ -5,8 +5,6 @@ on: branches: [staging, main] tags: - v* - pull_request: - branches: [staging, main] jobs: test_build_deploy: @@ -17,12 +15,15 @@ jobs: DISTRIBUTION: ['DISTRIBUTION_0'] env: - TEST_COVERAGE_FAIL_THRESHOLD: 10 - TEST_COVERAGE_WARNING_THRESHOLD: 50 DEPLOYMENT_RECOVERY_TIMEOUT_SECONDS: 150 AWS_APPLICATION_NAME: Account AWS_BUILD_ZIP_PATH: 'wire-account.zip' + outputs: + wire_builds_target_branches: ${{ steps.output_target_branches.outputs.wire_builds_target_branches }} + chart_version: ${{ steps.publish_helm_chart.outputs.chart_version }} + image_tag: ${{ steps.push_docker_image.outputs.image_tag }} + steps: - name: Checkout uses: actions/checkout@v4 @@ -56,6 +57,26 @@ jobs: if: contains(env.TITLE || env.COMMIT_MESSAGE, '[skip ci]') || contains(env.TITLE || env.COMMIT_MESSAGE, '[ci skip]') uses: andymckay/cancel-action@0.3 + - name: Define target branches in wireapp/wire-builds to bump + id: output_target_branches + shell: bash + run: | + # NOTE: make sure that wire_builds_target_branches is valid JSON + wire_builds_target_branches='[]' + + version_tag="${TAG:-$BRANCH_NAME}" + + if [[ "$version_tag" == *"production"* ]]; then + echo "FUTUREWORK: bump some production branch on wire-builds once it exists" + fi + + if [ "$version_tag" == "staging" ]; then + wire_builds_target_branches='["dev"]' + fi + + echo "wire_builds_target_branches: $wire_builds_target_branches" + echo "wire_builds_target_branches=$wire_builds_target_branches" >> $GITHUB_OUTPUT + - name: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.12.0 with: @@ -75,15 +96,6 @@ jobs: - name: Test run: yarn test - - name: Monitor coverage - if: github.event_name == 'pull_request' && ! contains(github.event.pull_request.user.login, 'dependabot[bot]') - uses: slavcodev/coverage-monitor-action@1.8.0 - with: - github_token: ${{github.token}} - coverage_path: 'coverage/clover.xml' - threshold_alert: ${{env.TEST_COVERAGE_FAIL_THRESHOLD}} - threshold_warning: ${{env.TEST_COVERAGE_WARNING_THRESHOLD}} - - name: Create commit file run: | mkdir -p ./dist @@ -97,27 +109,6 @@ jobs: if: env.TAG != '' run: yarn bundle:prod - - name: Assembling release information - if: env.TAG != '' && matrix.DISTRIBUTION == 'DISTRIBUTION_0' - # NOTE: always using 'main' config, since release version is only consumed at - # 'production' stage for now - # NOTE: 'containerImageTag' value must follow bin/push_docker.js:L49 - shell: bash - env: - RELEASE_NAME: ${{env.TAG}} - run: | - configVersion=$(cat ./app-config/package.json | jq -r '.dependencies["wire-web-config-default-main"]' | awk -F '#' '{ print $2 }') - packageVersion=$(cat ./package.json | jq -r '.version') - containerImageTag="${packageVersion}-${configVersion}-${GITHUB_SHA::7}" - echo "{\"imageTag\": \"${containerImageTag}\", \"releaseName\": \"${RELEASE_NAME}\"}" > ./release-info.json - - - name: Storing release information - if: env.TAG != '' && matrix.DISTRIBUTION == 'DISTRIBUTION_0' - uses: actions/upload-artifact@v4 - with: - name: release-info.json - path: ./release-info.json - - name: Deploy staging build to Elastic Beanstalk if: env.BRANCH_NAME == 'staging' && matrix.DISTRIBUTION == 'DISTRIBUTION_0' uses: einaregilsson/beanstalk-deploy@v20 @@ -148,29 +139,57 @@ jobs: version_label: ${{env.TAG}}-${{github.run_id}} version_description: ${{github.sha}} - - name: Push staging Docker image - if: env.BRANCH_NAME == 'staging' + - name: Push Docker image + id: push_docker_image env: DOCKER_PASSWORD: ${{secrets.WEBTEAM_QUAY_PASSWORD}} DOCKER_USERNAME: ${{secrets.WEBTEAM_QUAY_USERNAME}} run: | + dist=$DISTRIBUTION if [ "$DISTRIBUTION" == "wire" ]; then - yarn docker '' staging - else - yarn docker "$DISTRIBUTION" staging + dist="" + fi + stage="$BRANCH_NAME" + if [ "$TAG" != "" ]; then + stage="production" fi + yarn docker "$dist" "$stage" ${GITHUB_SHA} ./tag.txt + echo "image_tag=$(cat ./tag.txt)" >> $GITHUB_OUTPUT + echo "Pushed also unique docker tag $image_tag" - - name: Push production Docker image - if: env.TAG != '' + - uses: azure/setup-helm@v3 + with: + version: '3.12.2' + id: install + + - name: Publish Helm chart + shell: bash + id: publish_helm_chart env: - DOCKER_PASSWORD: ${{secrets.WEBTEAM_QUAY_PASSWORD}} - DOCKER_USERNAME: ${{secrets.WEBTEAM_QUAY_USERNAME}} + AWS_ACCESS_KEY_ID: ${{ secrets.CHARTS_WEBAPP_AUTOMATION_AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.CHARTS_WEBAPP_AUTOMATION_AWS_SECRET_ACCESS_KEY }} run: | - if [ "$DISTRIBUTION" == "wire" ]; then - yarn docker '' production + set -eo pipefail + + image_tag="${{steps.push_docker_image.outputs.image_tag}}" + + helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.15.1 + + helm repo add charts-webapp s3://public.wire.com/charts-webapp + + if [ "$TAG" != "" ]; then + chart_version="$(./bin/chart-next-version.sh release)" else - yarn docker "$DISTRIBUTION" production + chart_version="$(./bin/chart-next-version.sh prerelease)" fi + echo "chart_version=$chart_version" >> $GITHUB_OUTPUT + + chart_patched="$(yq -Mr ".version = \"$chart_version\" | .appVersion = \"$image_tag\"" ./charts/account-pages/Chart.yaml)" + echo "$chart_patched" > ./charts/account-pages/Chart.yaml + + helm package ./charts/account-pages + + helm s3 push account-pages-*.tgz charts-webapp - name: Create GitHub release id: create_release @@ -185,71 +204,65 @@ jobs: draft: false prerelease: false - update_helm_chart: - name: Update Helm chart + publish_wire_builds: + name: Bump account-pages chart in wire-builds runs-on: ubuntu-latest - needs: test_build_deploy - steps: - # INFO: https://github.com/wireapp/wire-webapp/blob/062ae4e1c23fa0b33dafae9cc0acf9a94fa8ad1a/.github/workflows/test_build_deploy.yml#L351-L356 - - name: Obtaining release information artifact - id: release-info-artifact - uses: actions/download-artifact@v4 - continue-on-error: true - with: - name: release-info.json - - name: Indicating whether release info exist - id: release-info-file - env: - ARTIFACT_LOCAL_PATH: '${{ steps.release-info-artifact.outputs.download-path }}/release-info.json' - shell: bash - run: | - test -s "${ARTIFACT_LOCAL_PATH}" && echo '::set-output name=exists::true' - echo "::set-output name=releaseInfo::$(cat ${ARTIFACT_LOCAL_PATH})" + strategy: + matrix: + target_branch: ${{fromJSON(needs.test_build_deploy.outputs.wire_builds_target_branches)}} - - name: Checking out 'wire-server' + steps: + - name: Check out wire-builds uses: actions/checkout@v4 - if: ${{ steps.release-info-file.outputs.exists == 'true' }} with: - repository: 'wireapp/wire-server' + repository: wireapp/wire-builds + token: ${{secrets.WIRE_BUILDS_WRITE_ACCESS_GH_TOKEN}} + ref: ${{matrix.target_branch}} fetch-depth: 1 - - name: Changing Helm value of the account-pages chart - id: change-helm-value - if: ${{ steps.release-info-file.outputs.exists == 'true' }} + - name: Create new build in wire-build shell: bash run: | - sed --in-place --expression="s/ tag: .*/ tag: \"${{ fromJSON(steps.release-info-file.outputs.releaseInfo).imageTag }}\"/" ./charts/account-pages/values.yaml - git add ./charts/account-pages/values.yaml - echo "Upgrade account-pages version to ${{ fromJSON(steps.release-info-file.outputs.releaseInfo).imageTag }}" > ./changelog.d/0-release-notes/account-pages-upgrade - git add ./changelog.d/0-release-notes/account-pages-upgrade - echo "::set-output name=releaseUrl::${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/releases/tag/${{ fromJSON(steps.release-info-file.outputs.releaseInfo).releaseName }}" - - - name: Creating Pull Request - id: create-pr - if: ${{ steps.release-info-file.outputs.exists == 'true' }} - uses: peter-evans/create-pull-request@v5 - with: - draft: false - token: ${{ secrets.ZEBOT_GH_TOKEN }} - author: 'Zebot ' - branch: charts-update-account-pages-image-tag-${{ github.run_number }} - commit-message: 'chore: [charts] Update account-pages version' - title: 'Update account-pages version in Helm chart [skip ci]' - body: | - Image tag: `${{ fromJSON(steps.release-info-file.outputs.releaseInfo).imageTag }}` - Release: [`${{ fromJSON(steps.release-info-file.outputs.releaseInfo).releaseName }}`](${{ steps.change-helm-value.outputs.releaseUrl }}) - - - name: Printing Pull Request URL - if: ${{ steps.release-info-file.outputs.exists == 'true' }} - shell: bash - run: | - echo "PR: ${{ steps.create-pr.outputs.pull-request-url }}" - - - name: Delete release artifact - uses: geekyeggo/delete-artifact@v4 - with: - failOnError: false - name: | - release-info.json + set -eo pipefail + + chart_version="${{needs.test_build_deploy.outputs.chart_version}}" + + git config --global user.email "zebot@users.noreply.github.com" + git config --global user.name "Zebot" + + image_tag="${{needs.test_build_deploy.outputs.image_tag}}" + + for retry in $(seq 3); do + ( + set -e + + if (( retry > 1 )); then + echo "Retrying..." + fi + + git fetch --depth 1 origin "${{ matrix.target_branch }}" + git checkout "${{ matrix.target_branch }}" + git reset --hard @{upstream} + + build_json=$(cat ./build.json | \ + ./bin/set-chart-fields account-pages \ + "version=$chart_version" \ + "repo=https://s3-eu-west-1.amazonaws.com/public.wire.com/charts-webapp" \ + "meta.appVersion=$image_tag" \ + "meta.commitURL=${{github.event.head_commit.url}}" \ + "meta.commit=${{github.event.head_commit.id}}" \ + | ./bin/bump-prerelease ) + echo "$build_json" > ./build.json + + git add build.json + git commit -m "Bump account-pages to $chart_version" + git push origin "${{ matrix.target_branch }}" + + ) && break + done + if (( $? != 0 )); then + echo "Retrying didn't help. Failing the step." + exit 1 + fi diff --git a/bin/chart-next-version.sh b/bin/chart-next-version.sh new file mode 100755 index 0000000000..2cf61f9f7a --- /dev/null +++ b/bin/chart-next-version.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +# Wire +# Copyright (C) 2020 Wire Swiss GmbH +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see http://www.gnu.org/licenses/. + + +# +# This scripts determines the latest published release or prelease version +# of the sftd helm chart returns a semver bump of it on stdout. +# +# If the version in the helm chart source in ./charts/sftd/Chart.yaml +# is greater than the published version it is used in place of the latest +# published version. +# +# Usage: ./bin/chart-next-version.sh + +set -eo pipefail + +readonly bump_type=${1:?"Please specify bump type \"prerelease\" or \"release\""} + +# search latest version in helm repo +if [ "$bump_type" = "prerelease" ]; then + search_args="--devel" +else + if [ "$bump_type" = "release" ]; then + search_args="" + else + echo 1>&2 "Unknown bump_type $bump_type provided" + exit 1 + fi +fi +res=$(helm search repo charts-webapp/account-pages $search_args) +if [ "$res" == "No results found" ]; then + echo 1>&2 "Unexpected: no charts found" + exit 1 +else + version_latest=$(sed -nE '2{s/[^ \t]+[ \t]+([^ \t]+).*/\1/p}' <<< "$res") + if [ "$(./bin/semver validate "$version_latest")" != "valid" ]; then + echo 1>&2 "Could not determine version" + exit 1 + fi +fi + +# is hardcoded bigger? if yes then use it instead +version_src=$(yq -Mr '.version' ./charts/account-pages/Chart.yaml) +if [ "$(./bin/semver compare "$version_src" "$version_latest")" = "1" ]; then + echo 1>&2 "Harcoded version $version_src is newer than $version_latest, so using $version_src" + version_latest="$version_src" +fi + +echo 1>&2 "version_latest: $version_latest" + +if [ "$bump_type" = "prerelease" ]; then + if [ "$(./bin/semver get prerelease "$version_latest")" = "" ]; then + # this is a first prelease + # so let's create a new release (bump minor) + # and create a first prerelease for it + version_next=$(./bin/semver bump minor "$version_latest") + version_new=$(./bin/semver bump prerelease pre.1 "$version_next") + else + version_new=$(./bin/semver bump prerelease "$version_latest") + fi +else + version_new=$(./bin/semver bump minor "$version_latest") +fi + +echo "$version_new" diff --git a/bin/push_docker.js b/bin/push_docker.js index be8d170868..bd36ecb084 100644 --- a/bin/push_docker.js +++ b/bin/push_docker.js @@ -19,14 +19,31 @@ * */ +/** + * This script creates a Docker image of "wire-account" and uploads it to: + * https://quay.io/repository/wire/acount?tab=tags (private repository!) + * + * To run this script, you need to have Docker installed (i.e. "Docker Desktop for Mac"). The docker daemon (or Docker for Desktop app) has to be started before running this script. Make sure to set "DOCKER_USERNAME" and "DOCKER_PASSWORD" in your local ".env" file or system environment variables. + * + * Note: You must run "yarn bundle:staging" or "yarn bundle:prod" before creating the Docker image, otherwise the compiled JavaScript code (and other assets) won't be part of the bundle. + * + * Demo execution: + * yarn docker '' staging 'fb2f4f47f1e3eab3cd8df62c5cea6441cfb6f279' ./tag.txt + */ + const child = require('child_process'); const appConfigPkg = require('../app-config/package.json'); const pkg = require('../package.json'); -const distributionParam = process.argv[2] || ''; -const stageParam = process.argv[3] || ''; -const commitSha = process.env.GITHUB_SHA || 'COMMIT_ID'; -const commitId = commitSha.substring(0, 7); +/** Either empty (for our own cloud releases) or a suffix (i.e. "ey") for custom deployments */ +const distributionParam = process.argv[2]; +/** Either "staging" (for internal releases / staging bumps) or "production" (for cloud releases) */ +const stageParam = process.argv[3]; +/** Commit ID of https://github.com/wireapp/wire-team-settings (i.e. "fb2f4f47f1e3eab3cd8df62c5cea6441cfb6f279") */ +const commitSha = process.argv[4]; + +const versionTagOut = process.argv[5] || ''; + const configurationEntry = `wire-web-config-default-${ distributionParam ? distributionParam : stageParam === 'production' ? 'main' : 'staging' }`; @@ -36,22 +53,26 @@ const repository = `${dockerRegistryDomain}/wire/account${distributionParam ? `- const tags = []; if (stageParam) { - tags.push(`${repository}:${stageParam}`); -} -if (stageParam === 'production') { - tags.push(`${repository}:${pkg.version}-${configVersion}-${commitId}`); + const stageTag = `${repository}:${stageParam}`; + console.info(`Pushing stage tag "${stageTag}"`); + tags.push(stageTag); } +const commitShaLength = 7; +const commitId = commitSha.substring(0, commitShaLength); +const versionTag = `${pkg.version}-${configVersion}-${commitId}`; +console.info(`Pushing version tag "${versionTag}"`); +tags.push(`${repository}:${versionTag}`); + const dockerCommands = [ `echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin ${dockerRegistryDomain}`, - `docker build . --tag ${commitId}`, + `docker buildx build --platform linux/amd64 . --tag ${commitId}`, + `if [ "${versionTagOut}" != "" ]; then echo -n "${versionTag}" > "${versionTagOut}"; fi`, ]; tags.forEach(containerImageTagValue => { - dockerCommands.push( - `docker tag ${commitId} ${containerImageTagValue}`, - `docker push ${containerImageTagValue}`, - ); + dockerCommands.push(`docker tag ${commitId} ${containerImageTagValue}`); + dockerCommands.push(`docker push ${containerImageTagValue}`); }); dockerCommands.push(`docker logout ${dockerRegistryDomain}`); diff --git a/bin/semver b/bin/semver new file mode 100755 index 0000000000..9f7ff0e7f8 --- /dev/null +++ b/bin/semver @@ -0,0 +1,448 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: Apache-2.0 +# +# From https://raw.githubusercontent.com/fsaintjacques/semver-tool/3c76a6f9d113f4045f693845131185611a62162e/src/semver + +set -o errexit -o nounset -o pipefail + +NAT='0|[1-9][0-9]*' +ALPHANUM='[0-9]*[A-Za-z-][0-9A-Za-z-]*' +IDENT="$NAT|$ALPHANUM" +FIELD='[0-9A-Za-z-]+' + +SEMVER_REGEX="\ +^[vV]?\ +($NAT)\\.($NAT)\\.($NAT)\ +(\\-(${IDENT})(\\.(${IDENT}))*)?\ +(\\+${FIELD}(\\.${FIELD})*)?$" + +PROG=semver +PROG_VERSION="3.4.0" + +USAGE="\ +Usage: + $PROG bump major + $PROG bump minor + $PROG bump patch + $PROG bump prerel|prerelease [] + $PROG bump build + $PROG bump release + $PROG get major + $PROG get minor + $PROG get patch + $PROG get prerel|prerelease + $PROG get build + $PROG get release + $PROG compare + $PROG diff + $PROG validate + $PROG --help + $PROG --version + +Arguments: + A version must match the following regular expression: + \"${SEMVER_REGEX}\" + In English: + -- The version must match X.Y.Z[-PRERELEASE][+BUILD] + where X, Y and Z are non-negative integers. + -- PRERELEASE is a dot separated sequence of non-negative integers and/or + identifiers composed of alphanumeric characters and hyphens (with + at least one non-digit). Numeric identifiers must not have leading + zeros. A hyphen (\"-\") introduces this optional part. + -- BUILD is a dot separated sequence of identifiers composed of alphanumeric + characters and hyphens. A plus (\"+\") introduces this optional part. + + See definition. + + A string as defined by PRERELEASE above. Or, it can be a PRERELEASE + prototype string followed by a dot. + + A string as defined by BUILD above. + +Options: + -v, --version Print the version of this tool. + -h, --help Print this help message. + +Commands: + bump Bump by one of major, minor, patch; zeroing or removing + subsequent parts. \"bump prerel\" (or its synonym \"bump prerelease\") + sets the PRERELEASE part and removes any BUILD part. A trailing dot + in the argument introduces an incrementing numeric field + which is added or bumped. If no argument is provided, an + incrementing numeric field is introduced/bumped. \"bump build\" sets + the BUILD part. \"bump release\" removes any PRERELEASE or BUILD parts. + The bumped version is written to stdout. + + get Extract given part of , where part is one of major, minor, + patch, prerel (alternatively: prerelease), build, or release. + + compare Compare with , output to stdout the + following values: -1 if is newer, 0 if equal, 1 if + older. The BUILD part is not used in comparisons. + + diff Compare with , output to stdout the + difference between two versions by the release type (MAJOR, MINOR, + PATCH, PRERELEASE, BUILD). + + validate Validate if follows the SEMVER pattern (see + definition). Print 'valid' to stdout if the version is valid, otherwise + print 'invalid'. + +See also: + https://semver.org -- Semantic Versioning 2.0.0" + +function error { + echo -e "$1" >&2 + exit 1 +} + +function usage_help { + error "$USAGE" +} + +function usage_version { + echo -e "${PROG}: $PROG_VERSION" + exit 0 +} + +# normalize the "part" keywords to a canonical string. At present, +# only "prerelease" is normalized to "prerel". + +function normalize_part { + if [ "$1" == "prerelease" ] + then + echo "prerel" + else + echo "$1" + fi +} + +function validate_version { + local version=$1 + if [[ "$version" =~ $SEMVER_REGEX ]]; then + # if a second argument is passed, store the result in var named by $2 + if [ "$#" -eq "2" ]; then + local major=${BASH_REMATCH[1]} + local minor=${BASH_REMATCH[2]} + local patch=${BASH_REMATCH[3]} + local prere=${BASH_REMATCH[4]} + local build=${BASH_REMATCH[8]} + eval "$2=(\"$major\" \"$minor\" \"$patch\" \"$prere\" \"$build\")" + else + echo "$version" + fi + else + error "version $version does not match the semver scheme 'X.Y.Z(-PRERELEASE)(+BUILD)'. See help for more information." + fi +} + +function is_nat { + [[ "$1" =~ ^($NAT)$ ]] +} + +function is_null { + [ -z "$1" ] +} + +function order_nat { + [ "$1" -lt "$2" ] && { echo -1 ; return ; } + [ "$1" -gt "$2" ] && { echo 1 ; return ; } + echo 0 +} + +function order_string { + [[ $1 < $2 ]] && { echo -1 ; return ; } + [[ $1 > $2 ]] && { echo 1 ; return ; } + echo 0 +} + +# given two (named) arrays containing NAT and/or ALPHANUM fields, compare them +# one by one according to semver 2.0.0 spec. Return -1, 0, 1 if left array ($1) +# is less-than, equal, or greater-than the right array ($2). The longer array +# is considered greater-than the shorter if the shorter is a prefix of the longer. +# +function compare_fields { + local l="$1[@]" + local r="$2[@]" + local leftfield=( "${!l}" ) + local rightfield=( "${!r}" ) + local left + local right + + local i=$(( -1 )) + local order=$(( 0 )) + + while true + do + [ $order -ne 0 ] && { echo $order ; return ; } + + : $(( i++ )) + left="${leftfield[$i]}" + right="${rightfield[$i]}" + + is_null "$left" && is_null "$right" && { echo 0 ; return ; } + is_null "$left" && { echo -1 ; return ; } + is_null "$right" && { echo 1 ; return ; } + + is_nat "$left" && is_nat "$right" && { order=$(order_nat "$left" "$right") ; continue ; } + is_nat "$left" && { echo -1 ; return ; } + is_nat "$right" && { echo 1 ; return ; } + { order=$(order_string "$left" "$right") ; continue ; } + done +} + +# shellcheck disable=SC2206 # checked by "validate"; ok to expand prerel id's into array +function compare_version { + local order + validate_version "$1" V + validate_version "$2" V_ + + # compare major, minor, patch + + local left=( "${V[0]}" "${V[1]}" "${V[2]}" ) + local right=( "${V_[0]}" "${V_[1]}" "${V_[2]}" ) + + order=$(compare_fields left right) + [ "$order" -ne 0 ] && { echo "$order" ; return ; } + + # compare pre-release ids when M.m.p are equal + + local prerel="${V[3]:1}" + local prerel_="${V_[3]:1}" + local left=( ${prerel//./ } ) + local right=( ${prerel_//./ } ) + + # if left and right have no pre-release part, then left equals right + # if only one of left/right has pre-release part, that one is less than simple M.m.p + + [ -z "$prerel" ] && [ -z "$prerel_" ] && { echo 0 ; return ; } + [ -z "$prerel" ] && { echo 1 ; return ; } + [ -z "$prerel_" ] && { echo -1 ; return ; } + + # otherwise, compare the pre-release id's + + compare_fields left right +} + +# render_prerel -- return a prerel field with a trailing numeric string +# usage: render_prerel numeric [prefix-string] +# +function render_prerel { + if [ -z "$2" ] + then + echo "${1}" + else + echo "${2}${1}" + fi +} + +# extract_prerel -- extract prefix and trailing numeric portions of a pre-release part +# usage: extract_prerel prerel prerel_parts +# The prefix and trailing numeric parts are returned in "prerel_parts". +# +PREFIX_ALPHANUM='[.0-9A-Za-z-]*[.A-Za-z-]' +DIGITS='[0-9][0-9]*' +EXTRACT_REGEX="^(${PREFIX_ALPHANUM})*(${DIGITS})$" + +function extract_prerel { + local prefix; local numeric; + + if [[ "$1" =~ $EXTRACT_REGEX ]] + then # found prefix and trailing numeric parts + prefix="${BASH_REMATCH[1]}" + numeric="${BASH_REMATCH[2]}" + else # no numeric part + prefix="${1}" + numeric= + fi + + eval "$2=(\"$prefix\" \"$numeric\")" +} + +# bump_prerel -- return the new pre-release part based on previous pre-release part +# and prototype for bump +# usage: bump_prerel proto previous +# +function bump_prerel { + local proto; local prev_prefix; local prev_numeric; + + # case one: no trailing dot in prototype => simply replace previous with proto + if [[ ! ( "$1" =~ \.$ ) ]] + then + echo "$1" + return + fi + + proto="${1%.}" # discard trailing dot marker from prototype + + extract_prerel "${2#-}" prerel_parts # extract parts of previous pre-release +# shellcheck disable=SC2154 + prev_prefix="${prerel_parts[0]}" + prev_numeric="${prerel_parts[1]}" + + # case two: bump or append numeric to previous pre-release part + if [ "$proto" == "+" ] # dummy "+" indicates no prototype argument provided + then + if [ -n "$prev_numeric" ] + then + : $(( ++prev_numeric )) # previous pre-release is already numbered, bump it + render_prerel "$prev_numeric" "$prev_prefix" + else + render_prerel 1 "$prev_prefix" # append starting number + fi + return + fi + + # case three: set, bump, or append using prototype prefix + if [ "$prev_prefix" != "$proto" ] + then + render_prerel 1 "$proto" # proto not same pre-release; set and start at '1' + elif [ -n "$prev_numeric" ] + then + : $(( ++prev_numeric )) # pre-release is numbered; bump it + render_prerel "$prev_numeric" "$prev_prefix" + else + render_prerel 1 "$prev_prefix" # start pre-release at number '1' + fi +} + +function command_bump { + local new; local version; local sub_version; local command; + + command="$(normalize_part "$1")" + + case $# in + 2) case "$command" in + major|minor|patch|prerel|release) sub_version="+."; version=$2;; + *) usage_help;; + esac ;; + 3) case "$command" in + prerel|build) sub_version=$2 version=$3 ;; + *) usage_help;; + esac ;; + *) usage_help;; + esac + + validate_version "$version" parts + # shellcheck disable=SC2154 + local major="${parts[0]}" + local minor="${parts[1]}" + local patch="${parts[2]}" + local prere="${parts[3]}" + local build="${parts[4]}" + + case "$command" in + major) new="$((major + 1)).0.0";; + minor) new="${major}.$((minor + 1)).0";; + patch) new="${major}.${minor}.$((patch + 1))";; + release) new="${major}.${minor}.${patch}";; + prerel) new=$(validate_version "${major}.${minor}.${patch}-$(bump_prerel "$sub_version" "$prere")");; + build) new=$(validate_version "${major}.${minor}.${patch}${prere}+${sub_version}");; + *) usage_help ;; + esac + + echo "$new" + exit 0 +} + +function command_compare { + local v; local v_; + + case $# in + 2) v=$(validate_version "$1"); v_=$(validate_version "$2") ;; + *) usage_help ;; + esac + + set +u # need unset array element to evaluate to null + compare_version "$v" "$v_" + exit 0 +} + +function command_diff { + validate_version "$1" v1_parts + # shellcheck disable=SC2154 + local v1_major="${v1_parts[0]}" + local v1_minor="${v1_parts[1]}" + local v1_patch="${v1_parts[2]}" + local v1_prere="${v1_parts[3]}" + local v1_build="${v1_parts[4]}" + + validate_version "$2" v2_parts + # shellcheck disable=SC2154 + local v2_major="${v2_parts[0]}" + local v2_minor="${v2_parts[1]}" + local v2_patch="${v2_parts[2]}" + local v2_prere="${v2_parts[3]}" + local v2_build="${v2_parts[4]}" + + if [ "${v1_major}" != "${v2_major}" ]; then + echo "major" + elif [ "${v1_minor}" != "${v2_minor}" ]; then + echo "minor" + elif [ "${v1_patch}" != "${v2_patch}" ]; then + echo "patch" + elif [ "${v1_prere}" != "${v2_prere}" ]; then + echo "prerelease" + elif [ "${v1_build}" != "${v2_build}" ]; then + echo "build" + fi +} + +# shellcheck disable=SC2034 +function command_get { + local part version + + if [[ "$#" -ne "2" ]] || [[ -z "$1" ]] || [[ -z "$2" ]]; then + usage_help + exit 0 + fi + + part="$1" + version="$2" + + validate_version "$version" parts + local major="${parts[0]}" + local minor="${parts[1]}" + local patch="${parts[2]}" + local prerel="${parts[3]:1}" + local build="${parts[4]:1}" + local release="${major}.${minor}.${patch}" + + part="$(normalize_part "$part")" + + case "$part" in + major|minor|patch|release|prerel|build) echo "${!part}" ;; + *) usage_help ;; + esac + + exit 0 +} + +function command_validate { + if [[ "$#" -ne "1" ]]; then + usage_help + fi + + if [[ "$1" =~ $SEMVER_REGEX ]]; then + echo "valid" + else + echo "invalid" + fi + + exit 0 +} + +case $# in + 0) echo "Unknown command: $*"; usage_help;; +esac + +case $1 in + --help|-h) echo -e "$USAGE"; exit 0;; + --version|-v) usage_version ;; + bump) shift; command_bump "$@";; + get) shift; command_get "$@";; + compare) shift; command_compare "$@";; + diff) shift; command_diff "$@";; + validate) shift; command_validate "$@";; + *) echo "Unknown arguments: $*"; usage_help;; +esac diff --git a/charts/account-pages/.helmignore b/charts/account-pages/.helmignore new file mode 100644 index 0000000000..f0c1319444 --- /dev/null +++ b/charts/account-pages/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/charts/account-pages/Chart.yaml b/charts/account-pages/Chart.yaml new file mode 100644 index 0000000000..ba8f9b8bbe --- /dev/null +++ b/charts/account-pages/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +description: A Helm chart for the Wire account pages in Kubernetes +name: account-pages +version: 0.0.42 +appVersion: 0.0.1 diff --git a/charts/account-pages/README.md b/charts/account-pages/README.md new file mode 100644 index 0000000000..f2c38b5f64 --- /dev/null +++ b/charts/account-pages/README.md @@ -0,0 +1 @@ +Basic web application that provides a frontend with functionality for account activation and password reset diff --git a/charts/account-pages/templates/_helpers.tpl b/charts/account-pages/templates/_helpers.tpl new file mode 100644 index 0000000000..af896de0f4 --- /dev/null +++ b/charts/account-pages/templates/_helpers.tpl @@ -0,0 +1,25 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "account-pages.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "account-pages.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* Allow KubeVersion to be overridden. */}} +{{- define "kubeVersion" -}} + {{- default .Capabilities.KubeVersion.Version .Values.kubeVersionOverride -}} +{{- end -}} + +{{- define "includeSecurityContext" -}} + {{- (semverCompare ">= 1.24-0" (include "kubeVersion" .)) -}} +{{- end -}} diff --git a/charts/account-pages/templates/deployment.yaml b/charts/account-pages/templates/deployment.yaml new file mode 100644 index 0000000000..e99e8fb917 --- /dev/null +++ b/charts/account-pages/templates/deployment.yaml @@ -0,0 +1,64 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: account-pages + labels: + app: account-pages + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + replicas: {{ .Values.replicaCount }} + strategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 0 + maxSurge: {{ .Values.replicaCount | mul 2 }} + selector: + matchLabels: + app: account-pages + template: + metadata: + labels: + app: account-pages + release: {{ .Release.Name }} + spec: + containers: + - name: account-pages + {{- if .Values.image.digest }} + image: "{{ .Values.image.repository }}@{{ .Values.image.digest }}" + {{- else }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + {{- end }} + {{- if eq (include "includeSecurityContext" .) "true" }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 10 }} + {{- end }} + env: + - name: BACKEND_REST + value: https://{{ .Values.config.externalUrls.backendRest }} + - name: APP_BASE + value: https://{{ .Values.config.externalUrls.appHost }} + {{- range $key, $val := .Values.envVars }} + - name: {{ $key }} + value: {{ $val | quote }} + {{- end }} + ports: + - name: http + containerPort: {{ .Values.service.http.internalPort }} + readinessProbe: + httpGet: + path: /_health/ + port: {{ .Values.service.http.internalPort }} + scheme: HTTP + livenessProbe: + initialDelaySeconds: 30 + timeoutSeconds: 3 + httpGet: + path: /_health/ + port: {{ .Values.service.http.internalPort }} + scheme: HTTP + resources: +{{ toYaml .Values.resources | indent 12 }} + dnsPolicy: ClusterFirst + restartPolicy: Always diff --git a/charts/account-pages/values.yaml b/charts/account-pages/values.yaml new file mode 100644 index 0000000000..271c765128 --- /dev/null +++ b/charts/account-pages/values.yaml @@ -0,0 +1,60 @@ +# Default values for the account-pages. +replicaCount: 1 +resources: + requests: + memory: "128Mi" + cpu: "100m" + limits: + memory: "512Mi" + cpu: "1" +image: + repository: quay.io/wire/account + # tag: "2.2.1-v0.28.21-0-6bfd7c5" +service: + https: + externalPort: 443 + http: + internalPort: 8080 + +## The following has to be provided to deploy this chart + +#config: +# externalUrls: +# backendRest: nginz-https.wire.example +# backendWebsocket: nginz-ssl.wire.example +# appHost: account.wire.example + +# Some relevant environment options. For a comprehensive +# list of available variables, please refer to: +# https://github.com/wireapp/wire-web-config-wire/blob/master/wire-account/.env.defaults +# +# NOTE: Without an empty dictionary, you will see warnings +# when overriding envVars +envVars: {} +# E.g. +# envVars: +# FEATURE_ENABLE_DEBUG: "true" +# You are likely to need at least following CSP headers +# due to the fact that you are likely to do cross sub-domain requests +# i.e., from account.wire.example to nginz-https.wire.example +# CSP_EXTRA_CONNECT_SRC: "https://*.wire.example, wss://*.wire.example" +# CSP_EXTRA_IMG_SRC: "https://*.wire.example" +# CSP_EXTRA_SCRIPT_SRC: "https://*.wire.example" +# CSP_EXTRA_DEFAULT_SRC: "https://*.wire.example" +# CSP_EXTRA_FONT_SRC: "https://*.wire.example" +# CSP_EXTRA_FRAME_SRC: "https://*.wire.example" +# CSP_EXTRA_MANIFEST_SRC: "https://*.wire.example" +# CSP_EXTRA_OBJECT_SRC: "https://*.wire.example" +# CSP_EXTRA_MEDIA_SRC: "https://*.wire.example" +# CSP_EXTRA_PREFETCH_SRC: "https://*.wire.example" +# CSP_EXTRA_STYLE_SRC: "https://*.wire.example" +# CSP_EXTRA_WORKER_SRC: "https://*.wire.example" + +podSecurityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault diff --git a/package.json b/package.json index 0e10145a2e..7fc7416b3b 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "@types/react-router-dom": "5.3.3", "@types/webpack-env": "1.18.1", "@typescript-eslint/eslint-plugin": "6.7.0", - "@typescript-eslint/parser": "2.34.0", + "@typescript-eslint/parser": "^6.19.1", "@wireapp/copy-config": "2.1.7", "@wireapp/eslint-config": "1.4.0", "adm-zip": "0.5.10", @@ -48,14 +48,14 @@ "cross-env": "7.0.3", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.7", - "eslint": "6.8.0", + "eslint": "8.5.0", "eslint-config-prettier": "6.15.0", "eslint-plugin-babel": "5.3.1", "eslint-plugin-import": "2.27.5", "eslint-plugin-jest": "27.6.3", "eslint-plugin-jsdoc": "48.0.2", "eslint-plugin-no-unsanitized": "4.0.2", - "eslint-plugin-prettier": "3.4.1", + "eslint-plugin-prettier": "5.0", "eslint-plugin-react": "7.30.1", "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-simple-import-sort": "8.0.0", @@ -68,7 +68,7 @@ "lint-staged": "13.2.2", "os-browserify": "0.3.0", "path-browserify": "1.0.1", - "prettier": "2.8.8", + "prettier": "3.2.4", "react-hot-loader": "4.13.1", "simple-git": "3.19.0", "sort-json": "2.0.1", diff --git a/server/tsconfig.json b/server/tsconfig.json index 2c37318c54..2e5cb2bbc0 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -13,7 +13,7 @@ "outDir": "dist", "rootDirs": ["."], "sourceMap": true, - "target": "es6" + "target": "es6", }, - "exclude": ["node_modules"] + "exclude": ["node_modules"], } diff --git a/server/yarn.lock b/server/yarn.lock index 1b169fa71b..54c7237741 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -6073,7 +6073,6 @@ __metadata: resolution: "systeminformation@npm:5.21.24" bin: systeminformation: lib/cli.js - checksum: d3cfe6a1b1e58494ca0a149e5fcf39f0fa09cda2813a1b9cdf7b0265a2cfd1fb98f331e78c4a7a92c74e87c4c1d83c10ef5f8f8db6e134f8223d7aa41b5137a6 conditions: (os=darwin | os=linux | os=win32 | os=freebsd | os=openbsd | os=netbsd | os=sunos | os=android) languageName: node linkType: hard diff --git a/src/script/component/OpenWireButtons.test.tsx b/src/script/component/OpenWireButtons.test.tsx index f16a60f2d4..3ec352e300 100644 --- a/src/script/component/OpenWireButtons.test.tsx +++ b/src/script/component/OpenWireButtons.test.tsx @@ -35,7 +35,7 @@ describe('OpenWireButtons', () => { }; describe('on mobile', () => { it('shows open app & direct download', () => { - spyOn(Runtime, 'isMobileOS').and.returnValue(true); + jest.spyOn(Runtime, 'isMobileOS').mockReturnValue(true); const res = render(withTheme()); res.getByText('openWithApp'); @@ -46,15 +46,15 @@ describe('OpenWireButtons', () => { describe('on desktop', () => { beforeEach(() => { - spyOn(Runtime, 'isMobileOS').and.returnValue(false); - spyOn(Runtime, 'isMacOS').and.returnValue(true); + jest.spyOn(Runtime, 'isMobileOS').mockReturnValue(false); + jest.spyOn(Runtime, 'isMacOS').mockReturnValue(true); }); it('shows open app, webapp & direct download on MacOS', async () => { const res = render(withTheme()); - res.getByText('openWithApp'); - res.getByText('openWithBrowser'); - res.getByText('downloadApp'); + expect(res.getByText('openWithApp')).toBeTruthy(); + expect(res.getByText('openWithBrowser')).toBeTruthy(); + expect(res.getByText('downloadApp')).toBeTruthy(); }); it('only show join in webapp when in a self hosted env', async () => { diff --git a/src/script/page/ConversationJoin.test.tsx b/src/script/page/ConversationJoin.test.tsx index 21d1dfd3be..41c8703ed6 100644 --- a/src/script/page/ConversationJoin.test.tsx +++ b/src/script/page/ConversationJoin.test.tsx @@ -77,7 +77,7 @@ describe('ConversationJoin', () => { describe('on mobile', () => { it('shows open app & direct download', async () => { - spyOn(Runtime, 'isMobileOS').and.returnValue(true); + jest.spyOn(Runtime, 'isMobileOS').mockReturnValue(true); const validateConversationJoinSpy = jest.fn(() => Promise.resolve()); const conversationJoinPage = new ConversationJoinPage( @@ -105,8 +105,8 @@ describe('ConversationJoin', () => { describe('on desktop', () => { it('shows open app, webapp & direct download on MacOS', async () => { - spyOn(Runtime, 'isMobileOS').and.returnValue(false); - spyOn(Runtime, 'isMacOS').and.returnValue(true); + jest.spyOn(Runtime, 'isMobileOS').mockReturnValue(false); + jest.spyOn(Runtime, 'isMacOS').mockReturnValue(true); const validateConversationJoinSpy = jest.fn(() => Promise.resolve()); const conversationJoinPage = new ConversationJoinPage( @@ -132,8 +132,8 @@ describe('ConversationJoin', () => { }); it('shows open app, webapp & website download on non-MacOS', async () => { - spyOn(Runtime, 'isMobileOS').and.returnValue(false); - spyOn(Runtime, 'isMacOS').and.returnValue(false); + jest.spyOn(Runtime, 'isMobileOS').mockReturnValue(false); + jest.spyOn(Runtime, 'isMacOS').mockReturnValue(false); const validateConversationJoinSpy = jest.fn(() => Promise.resolve()); const conversationJoinPage = new ConversationJoinPage( diff --git a/src/script/page/UserProfile.test.tsx b/src/script/page/UserProfile.test.tsx index b986bdd5ac..722080e864 100644 --- a/src/script/page/UserProfile.test.tsx +++ b/src/script/page/UserProfile.test.tsx @@ -51,7 +51,7 @@ class UserProfilePage extends TestPage { describe('UserProfile', () => { describe('on mobile', () => { it('shows open app & direct download', async () => { - spyOn(Runtime, 'isMobileOS').and.returnValue(true); + jest.spyOn(Runtime, 'isMobileOS').mockReturnValue(true); const conversationJoinPage = new UserProfilePage( { @@ -71,8 +71,8 @@ describe('UserProfile', () => { describe('on desktop', () => { it('shows open app, webapp & direct download on MacOS', async () => { - spyOn(Runtime, 'isMobileOS').and.returnValue(false); - spyOn(Runtime, 'isMacOS').and.returnValue(true); + jest.spyOn(Runtime, 'isMobileOS').mockReturnValue(false); + jest.spyOn(Runtime, 'isMacOS').mockReturnValue(true); const conversationJoinPage = new UserProfilePage( { @@ -90,8 +90,8 @@ describe('UserProfile', () => { }); it('shows open app, webapp & website download on non-MacOS', async () => { - spyOn(Runtime, 'isMobileOS').and.returnValue(false); - spyOn(Runtime, 'isMacOS').and.returnValue(false); + jest.spyOn(Runtime, 'isMobileOS').mockReturnValue(false); + jest.spyOn(Runtime, 'isMacOS').mockReturnValue(false); const conversationJoinPage = new UserProfilePage( { diff --git a/tsconfig.json b/tsconfig.json index 7ca131cd54..37b0258e32 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,8 +20,8 @@ "target": "es6", "paths": { "resource/*": ["resource/*"], - "i18n/*": ["src/i18n/*"] - } + "i18n/*": ["src/i18n/*"], + }, }, - "exclude": ["node_modules", "server"] + "exclude": ["node_modules", "server"], } diff --git a/yarn.lock b/yarn.lock index 94320b46cf..2c161b18c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,13 @@ __metadata: version: 6 cacheKey: 8 +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -2215,6 +2222,23 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^1.0.5": + version: 1.4.1 + resolution: "@eslint/eslintrc@npm:1.4.1" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.4.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: cd3e5a8683db604739938b1c1c8b77927dc04fce3e28e0c88e7f2cd4900b89466baf83dfbad76b2b9e4d2746abdd00dd3f9da544d3e311633d8693f327d04cd7 + languageName: node + linkType: hard + "@floating-ui/core@npm:^1.4.1": version: 1.4.1 resolution: "@floating-ui/core@npm:1.4.1" @@ -2262,6 +2286,24 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.9.2": + version: 0.9.5 + resolution: "@humanwhocodes/config-array@npm:0.9.5" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.4 + checksum: 8ba6281bc0590f6c6eadeefc14244b5a3e3f5903445aadd1a32099ed80e753037674026ce1b3c945ab93561bea5eb29e3c5bff67060e230c295595ba517a3492 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 + languageName: node + linkType: hard + "@istanbuljs/load-nyc-config@npm:^1.0.0": version: 1.1.0 resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" @@ -2627,6 +2669,13 @@ __metadata: languageName: node linkType: hard +"@pkgr/core@npm:^0.1.0": + version: 0.1.1 + resolution: "@pkgr/core@npm:0.1.1" + checksum: 6f25fd2e3008f259c77207ac9915b02f1628420403b2630c92a07ff963129238c9262afc9e84344c7a23b5cc1f3965e2cd17e3798219f5fd78a63d144d3cceba + languageName: node + linkType: hard + "@polka/url@npm:^1.0.0-next.9": version: 1.0.0-next.11 resolution: "@polka/url@npm:1.0.0-next.11" @@ -2889,13 +2938,6 @@ __metadata: languageName: node linkType: hard -"@types/eslint-visitor-keys@npm:^1.0.0": - version: 1.0.0 - resolution: "@types/eslint-visitor-keys@npm:1.0.0" - checksum: a90f0b023e357a59ea04268e0387cfb0ea06703068cc48fe2ca97fa158bcf3c51a6611a56bdbdf763e3451150b92bba3fb5d0b689fc55f856cae8555ec366a63 - languageName: node - linkType: hard - "@types/eslint@npm:*": version: 7.2.6 resolution: "@types/eslint@npm:7.2.6" @@ -2980,7 +3022,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.5": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.5": version: 7.0.6 resolution: "@types/json-schema@npm:7.0.6" checksum: 3b1e5e049b065a41d2bc1f0c16e01dac5a4a1276bbe8b413657298f574d64a955d3b10bec9e7796fde0927f307e6fedbac1cf4da3604593c431899eea3ad0756 @@ -3220,34 +3262,21 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/experimental-utils@npm:2.34.0": - version: 2.34.0 - resolution: "@typescript-eslint/experimental-utils@npm:2.34.0" - dependencies: - "@types/json-schema": ^7.0.3 - "@typescript-eslint/typescript-estree": 2.34.0 - eslint-scope: ^5.0.0 - eslint-utils: ^2.0.0 - peerDependencies: - eslint: "*" - checksum: 3d267185a727dad276921d4b7b9d95247ffc50740f944c8f3f66ae1556b9f3529632bff4e921a9bfe0d0b0c55542ff2ff6479615a4f4a01645e49893f32b6350 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:2.34.0": - version: 2.34.0 - resolution: "@typescript-eslint/parser@npm:2.34.0" +"@typescript-eslint/parser@npm:^6.19.1": + version: 6.19.1 + resolution: "@typescript-eslint/parser@npm:6.19.1" dependencies: - "@types/eslint-visitor-keys": ^1.0.0 - "@typescript-eslint/experimental-utils": 2.34.0 - "@typescript-eslint/typescript-estree": 2.34.0 - eslint-visitor-keys: ^1.1.0 + "@typescript-eslint/scope-manager": 6.19.1 + "@typescript-eslint/types": 6.19.1 + "@typescript-eslint/typescript-estree": 6.19.1 + "@typescript-eslint/visitor-keys": 6.19.1 + debug: ^4.3.4 peerDependencies: - eslint: ^5.0.0 || ^6.0.0 + eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 2cd9890760bc1be48102e8cc2404b2c9323f049990de07b356d9f97b9d29b3cf905ef06b69eea8e0834b67eb54e1f58dcc67e20edd8c98f10cd11b8732fb6894 + checksum: cd29619da08a2d9b7123ba4d8240989c747f8e0d5672179d8b147e413ee1334d1fa48570b0c37cf0ae4e26a275fd2d268cbe702c6fed639d3331abbb3292570a languageName: node linkType: hard @@ -3261,6 +3290,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:6.19.1": + version: 6.19.1 + resolution: "@typescript-eslint/scope-manager@npm:6.19.1" + dependencies: + "@typescript-eslint/types": 6.19.1 + "@typescript-eslint/visitor-keys": 6.19.1 + checksum: 848cdebc16a3803e8a6d6035a7067605309a652bb2425f475f755b5ace4d80d2c17c8c8901f0f4759556da8d0a5b71024d472b85c3f3c70d0e6dcfe2a972ef35 + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:6.7.0": version: 6.7.0 resolution: "@typescript-eslint/scope-manager@npm:6.7.0" @@ -3295,6 +3334,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:6.19.1": + version: 6.19.1 + resolution: "@typescript-eslint/types@npm:6.19.1" + checksum: 598ce222b59c20432d06f60703d0c2dd16d9b2151569c192852136c57b8188e3ef6ef9fddaa2c136c9a756fcc7d873c0e29ec41cfd340564842287ef7b4571cd + languageName: node + linkType: hard + "@typescript-eslint/types@npm:6.7.0": version: 6.7.0 resolution: "@typescript-eslint/types@npm:6.7.0" @@ -3302,24 +3348,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:2.34.0": - version: 2.34.0 - resolution: "@typescript-eslint/typescript-estree@npm:2.34.0" - dependencies: - debug: ^4.1.1 - eslint-visitor-keys: ^1.1.0 - glob: ^7.1.6 - is-glob: ^4.0.1 - lodash: ^4.17.15 - semver: ^7.3.2 - tsutils: ^3.17.1 - peerDependenciesMeta: - typescript: - optional: true - checksum: 6eb689513765350daaf0ba12ef204061e12a8add557b4eafcc63fb0ab9345eee6ca68e64e4b88625a2b844802cfc44cbad47468840cfc990a40d27457ec75390 - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" @@ -3338,6 +3366,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:6.19.1": + version: 6.19.1 + resolution: "@typescript-eslint/typescript-estree@npm:6.19.1" + dependencies: + "@typescript-eslint/types": 6.19.1 + "@typescript-eslint/visitor-keys": 6.19.1 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + minimatch: 9.0.3 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: fb71a14aeee0468780219c5b8d39075f85d360b04ccd0ee88f4f0a615d2c232a6d3016e36d8c6eda2d9dfda86b4f4cc2c3d7582940fb29d33c7cf305e124d4e2 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:6.7.0": version: 6.7.0 resolution: "@typescript-eslint/typescript-estree@npm:6.7.0" @@ -3401,6 +3448,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:6.19.1": + version: 6.19.1 + resolution: "@typescript-eslint/visitor-keys@npm:6.19.1" + dependencies: + "@typescript-eslint/types": 6.19.1 + eslint-visitor-keys: ^3.4.1 + checksum: bdf057a42e776970a89cdd568e493e3ea7ec085544d8f318d33084da63c3395ad2c0fb9cef9f61ceeca41f5dab54ab064b7078fe596889005e412ec74d2d1ae4 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:6.7.0": version: 6.7.0 resolution: "@typescript-eslint/visitor-keys@npm:6.7.0" @@ -3795,6 +3852,15 @@ __metadata: languageName: node linkType: hard +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + "acorn-private-class-elements@npm:^0.2.7": version: 0.2.7 resolution: "acorn-private-class-elements@npm:0.2.7" @@ -3880,6 +3946,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.9.0": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c + languageName: node + linkType: hard + "adm-zip@npm:0.5.10": version: 0.5.10 resolution: "adm-zip@npm:0.5.10" @@ -3970,7 +4045,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5": +"ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:^6.12.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -3994,6 +4069,13 @@ __metadata: languageName: node linkType: hard +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e + languageName: node + linkType: hard + "ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0": version: 4.3.1 resolution: "ansi-escapes@npm:4.3.1" @@ -4028,13 +4110,6 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^4.1.0": - version: 4.1.1 - resolution: "ansi-regex@npm:4.1.1" - checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 - languageName: node - linkType: hard - "ansi-regex@npm:^6.0.1": version: 6.0.1 resolution: "ansi-regex@npm:6.0.1" @@ -4042,7 +4117,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": +"ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -4256,13 +4331,6 @@ __metadata: languageName: node linkType: hard -"astral-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "astral-regex@npm:1.0.0" - checksum: 93417fc0879531cd95ace2560a54df865c9461a3ac0714c60cbbaa5f1f85d2bee85489e78d82f70b911b71ac25c5f05fc5a36017f44c9bb33c701bee229ff848 - languageName: node - linkType: hard - "astral-regex@npm:^2.0.0": version: 2.0.0 resolution: "astral-regex@npm:2.0.0" @@ -4789,28 +4857,7 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001400": - version: 1.0.30001419 - resolution: "caniuse-lite@npm:1.0.30001419" - checksum: 7a4dc2794a6773574b5aebcd1c9c0d56159654821714152d8a0b04e261e1522bfd3d86589b8406ce81c7bf5b706118b73b2cb85d577ae433e303dd48ac9ff65f - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001449": - version: 1.0.30001489 - resolution: "caniuse-lite@npm:1.0.30001489" - checksum: 94585a351fd7661b855c83eace474db0ee5a617159b46f2eff1f6fe4b85d7a205418471fdec8cf5cd647a7f79958706d5e664c0bbf3c7c09118b35db9bb95a1b - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001517": - version: 1.0.30001520 - resolution: "caniuse-lite@npm:1.0.30001520" - checksum: 59991ad8f36cf282f81abbcc6074c3097c21914cdd54bd2b3f73ac9462f57fc74e90371cd22bcdff4d085d09da42a07dcea384cb81e4ac260496e1bd79e1fe7c - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001565": +"caniuse-lite@npm:^1.0.30001400, caniuse-lite@npm:^1.0.30001449, caniuse-lite@npm:^1.0.30001517, caniuse-lite@npm:^1.0.30001565": version: 1.0.30001579 resolution: "caniuse-lite@npm:1.0.30001579" checksum: 7539dcff74d2243a30c428393dc690c87fa34d7da36434731853e9bcfe783757763b2971f5cc878e25242a93e184e53f167d11bd74955af956579f7af71cc764 @@ -4833,7 +4880,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.0.0, chalk@npm:^2.1.0, chalk@npm:^2.3.0, chalk@npm:^2.4.2": +"chalk@npm:^2.0.0, chalk@npm:^2.3.0, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -4861,13 +4908,6 @@ __metadata: languageName: node linkType: hard -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d - languageName: node - linkType: hard - "cheerio@npm:^1.0.0-rc.3": version: 1.0.0-rc.3 resolution: "cheerio@npm:1.0.0-rc.3" @@ -4960,13 +5000,6 @@ __metadata: languageName: node linkType: hard -"cli-width@npm:^3.0.0": - version: 3.0.0 - resolution: "cli-width@npm:3.0.0" - checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6 - languageName: node - linkType: hard - "cliui@npm:^6.0.0": version: 6.0.0 resolution: "cliui@npm:6.0.0" @@ -5333,7 +5366,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^6.0.0, cross-spawn@npm:^6.0.5": +"cross-spawn@npm:^6.0.0": version: 6.0.5 resolution: "cross-spawn@npm:6.0.5" dependencies: @@ -5346,7 +5379,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -5417,7 +5450,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -5468,7 +5501,7 @@ __metadata: languageName: node linkType: hard -"deep-is@npm:~0.1.3": +"deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 @@ -5797,13 +5830,6 @@ __metadata: languageName: node linkType: hard -"emoji-regex@npm:^7.0.1": - version: 7.0.3 - resolution: "emoji-regex@npm:7.0.3" - checksum: 9159b2228b1511f2870ac5920f394c7e041715429a68459ebe531601555f11ea782a8e1718f969df2711d38c66268174407cbca57ce36485544f695c2dfdc96e - languageName: node - linkType: hard - "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -5863,6 +5889,16 @@ __metadata: languageName: node linkType: hard +"enquirer@npm:^2.3.5": + version: 2.4.1 + resolution: "enquirer@npm:2.4.1" + dependencies: + ansi-colors: ^4.1.1 + strip-ansi: ^6.0.1 + checksum: f080f11a74209647dbf347a7c6a83c8a47ae1ebf1e75073a808bc1088eb780aa54075bfecd1bcdb3e3c724520edb8e6ee05da031529436b421b71066fcc48cb5 + languageName: node + linkType: hard + "ensure-type@npm:^1.5.0": version: 1.5.1 resolution: "ensure-type@npm:1.5.1" @@ -6342,18 +6378,22 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-prettier@npm:3.4.1": - version: 3.4.1 - resolution: "eslint-plugin-prettier@npm:3.4.1" +"eslint-plugin-prettier@npm:5.0": + version: 5.0.1 + resolution: "eslint-plugin-prettier@npm:5.0.1" dependencies: prettier-linter-helpers: ^1.0.0 + synckit: ^0.8.5 peerDependencies: - eslint: ">=5.0.0" - prettier: ">=1.13.0" + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + prettier: ">=3.0.0" peerDependenciesMeta: + "@types/eslint": + optional: true eslint-config-prettier: optional: true - checksum: fa6a89f0d7cba1cc87064352f5a4a68dc3739448dd279bec2bced1bfa3b704467e603d13b69dcec853f8fa30b286b8b715912898e9da776e1b016cf0ee48bd99 + checksum: c2261033b97bafe99ccb7cc47c2fac6fa85b8bbc8b128042e52631f906b69e12afed2cdd9d7e3021cc892ee8dd4204a3574e1f32a0b718b4bb3b440944b6983b languageName: node linkType: hard @@ -6418,7 +6458,7 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.0.0, eslint-scope@npm:^5.1.1": +"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" dependencies: @@ -6428,21 +6468,24 @@ __metadata: languageName: node linkType: hard -"eslint-utils@npm:^1.4.3": - version: 1.4.3 - resolution: "eslint-utils@npm:1.4.3" +"eslint-scope@npm:^7.1.0": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" dependencies: - eslint-visitor-keys: ^1.1.0 - checksum: a20630e686034107138272f245c460f6d77705d1f4bb0628c1a1faf59fc800f441188916b3ec3b957394dc405aa200a3017dfa2b0fff0976e307a4e645a18d1e + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e languageName: node linkType: hard -"eslint-utils@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-utils@npm:2.1.0" +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" dependencies: - eslint-visitor-keys: ^1.1.0 - checksum: 27500938f348da42100d9e6ad03ae29b3de19ba757ae1a7f4a087bdcf83ac60949bbb54286492ca61fac1f5f3ac8692dd21537ce6214240bf95ad0122f24d71d + eslint-visitor-keys: ^2.0.0 + peerDependencies: + eslint: ">=5" + checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 languageName: node linkType: hard @@ -6453,57 +6496,65 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1": +"eslint-visitor-keys@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.1.0, eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 languageName: node linkType: hard -"eslint@npm:6.8.0": - version: 6.8.0 - resolution: "eslint@npm:6.8.0" +"eslint@npm:8.5.0": + version: 8.5.0 + resolution: "eslint@npm:8.5.0" dependencies: - "@babel/code-frame": ^7.0.0 + "@eslint/eslintrc": ^1.0.5 + "@humanwhocodes/config-array": ^0.9.2 ajv: ^6.10.0 - chalk: ^2.1.0 - cross-spawn: ^6.0.5 - debug: ^4.0.1 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 doctrine: ^3.0.0 - eslint-scope: ^5.0.0 - eslint-utils: ^1.4.3 - eslint-visitor-keys: ^1.1.0 - espree: ^6.1.2 - esquery: ^1.0.1 + enquirer: ^2.3.5 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.1.0 + eslint-utils: ^3.0.0 + eslint-visitor-keys: ^3.1.0 + espree: ^9.2.0 + esquery: ^1.4.0 esutils: ^2.0.2 - file-entry-cache: ^5.0.1 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 functional-red-black-tree: ^1.0.1 - glob-parent: ^5.0.0 - globals: ^12.1.0 + glob-parent: ^6.0.1 + globals: ^13.6.0 ignore: ^4.0.6 import-fresh: ^3.0.0 imurmurhash: ^0.1.4 - inquirer: ^7.0.0 is-glob: ^4.0.0 - js-yaml: ^3.13.1 + js-yaml: ^4.1.0 json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.3.0 - lodash: ^4.17.14 + levn: ^0.4.1 + lodash.merge: ^4.6.2 minimatch: ^3.0.4 - mkdirp: ^0.5.1 natural-compare: ^1.4.0 - optionator: ^0.8.3 + optionator: ^0.9.1 progress: ^2.0.0 - regexpp: ^2.0.1 - semver: ^6.1.2 - strip-ansi: ^5.2.0 - strip-json-comments: ^3.0.1 - table: ^5.2.3 + regexpp: ^3.2.0 + semver: ^7.2.1 + strip-ansi: ^6.0.1 + strip-json-comments: ^3.1.0 text-table: ^0.2.0 v8-compile-cache: ^2.0.3 bin: - eslint: ./bin/eslint.js - checksum: d4edbe69589ef194e7d3470a18632560c5399a5f685295bd59a11cddba4c6f7e03a137a15a21389f8f85712ebd82d0a628ee4e9cd4391113556029c486616e25 + eslint: bin/eslint.js + checksum: c1a9e26070520a308cc30b62ba0d37d5b115ed23987a93219819537bdea9398e6ebe57c27d97be36ecc83b5162c72e82ecb0a9e5b44b7992980f9be90eb5c4b3 languageName: node linkType: hard @@ -6518,6 +6569,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.2.0, espree@npm:^9.4.0": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + "esprima-next@npm:^5.7.0": version: 5.7.0 resolution: "esprima-next@npm:5.7.0" @@ -6538,16 +6600,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.0.1": - version: 1.4.0 - resolution: "esquery@npm:1.4.0" - dependencies: - estraverse: ^5.1.0 - checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 - languageName: node - linkType: hard - -"esquery@npm:^1.5.0": +"esquery@npm:^1.4.0, esquery@npm:^1.5.0": version: 1.5.0 resolution: "esquery@npm:1.5.0" dependencies: @@ -6720,17 +6773,6 @@ __metadata: languageName: node linkType: hard -"external-editor@npm:^3.0.3": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: ^0.7.0 - iconv-lite: ^0.4.24 - tmp: ^0.0.33 - checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 - languageName: node - linkType: hard - "extglob@npm:^2.0.4": version: 2.0.4 resolution: "extglob@npm:2.0.4" @@ -6781,7 +6823,7 @@ __metadata: languageName: node linkType: hard -"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": +"fast-levenshtein@npm:^2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c @@ -6813,15 +6855,6 @@ __metadata: languageName: node linkType: hard -"figures@npm:^3.0.0": - version: 3.2.0 - resolution: "figures@npm:3.2.0" - dependencies: - escape-string-regexp: ^1.0.5 - checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b - languageName: node - linkType: hard - "file-contents@npm:^0.2.4": version: 0.2.4 resolution: "file-contents@npm:0.2.4" @@ -6857,12 +6890,12 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^5.0.1": - version: 5.0.1 - resolution: "file-entry-cache@npm:5.0.1" +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" dependencies: - flat-cache: ^2.0.1 - checksum: 9014b17766815d59b8b789633aed005242ef857348c09be558bd85b4a24e16b0ad1e0e5229ccea7a2109f74ef1b3db1a559b58afe12b884f09019308711376fd + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 languageName: node linkType: hard @@ -6957,21 +6990,21 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^2.0.1": - version: 2.0.1 - resolution: "flat-cache@npm:2.0.1" +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" dependencies: - flatted: ^2.0.0 - rimraf: 2.6.3 - write: 1.0.3 - checksum: 0f5e66467658039e6fcaaccb363b28f43906ba72fab7ff2a4f6fcd5b4899679e13ca46d9fc6cc48b68ac925ae93137106d4aaeb79874c13f21f87a361705f1b1 + flatted: ^3.2.9 + keyv: ^4.5.3 + rimraf: ^3.0.2 + checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec languageName: node linkType: hard -"flatted@npm:^2.0.0": - version: 2.0.2 - resolution: "flatted@npm:2.0.2" - checksum: 473c754db7a529e125a22057098f1a4c905ba17b8cc269c3acf77352f0ffa6304c851eb75f6a1845f74461f560e635129ca6b0b8a78fb253c65cea4de3d776f2 +"flatted@npm:^3.2.9": + version: 3.2.9 + resolution: "flatted@npm:3.2.9" + checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 languageName: node linkType: hard @@ -7354,7 +7387,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.0.0, glob-parent@npm:^5.1.2": +"glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -7363,6 +7396,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.1": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + "glob-stream@npm:^6.1.0": version: 6.1.0 resolution: "glob-stream@npm:6.1.0" @@ -7388,7 +7430,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.0.5, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": +"glob@npm:^7.0.5, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.1.6 resolution: "glob@npm:7.1.6" dependencies: @@ -7468,12 +7510,12 @@ __metadata: languageName: node linkType: hard -"globals@npm:^12.1.0": - version: 12.4.0 - resolution: "globals@npm:12.4.0" +"globals@npm:^13.19.0, globals@npm:^13.6.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" dependencies: - type-fest: ^0.8.1 - checksum: 7ae5ee16a96f1e8d71065405f57da0e33267f6b070cd36a5444c7780dd28639b48b92413698ac64f04bf31594f9108878bd8cb158ecdf759c39e05634fefcca6 + type-fest: ^0.20.2 + checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c languageName: node linkType: hard @@ -7937,7 +7979,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": +"iconv-lite@npm:0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" dependencies: @@ -8060,27 +8102,6 @@ __metadata: languageName: node linkType: hard -"inquirer@npm:^7.0.0": - version: 7.3.3 - resolution: "inquirer@npm:7.3.3" - dependencies: - ansi-escapes: ^4.2.1 - chalk: ^4.1.0 - cli-cursor: ^3.1.0 - cli-width: ^3.0.0 - external-editor: ^3.0.3 - figures: ^3.0.0 - lodash: ^4.17.19 - mute-stream: 0.0.8 - run-async: ^2.4.0 - rxjs: ^6.6.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - through: ^2.3.6 - checksum: 4d387fc1eb6126acbd58cbdb9ad99d2887d181df86ab0c2b9abdf734e751093e2d5882c2b6dc7144d9ab16b7ab30a78a1d7f01fb6a2850a44aeb175d1e3f8778 - languageName: node - linkType: hard - "internal-slot@npm:^1.0.3": version: 1.0.3 resolution: "internal-slot@npm:1.0.3" @@ -8362,13 +8383,6 @@ __metadata: languageName: node linkType: hard -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 - languageName: node - linkType: hard - "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -9396,6 +9410,13 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + "json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" @@ -9479,6 +9500,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 + languageName: node + linkType: hard + "kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": version: 3.2.2 resolution: "kind-of@npm:3.2.2" @@ -9559,13 +9589,13 @@ __metadata: languageName: node linkType: hard -"levn@npm:^0.3.0, levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" dependencies: - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 languageName: node linkType: hard @@ -9711,7 +9741,14 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.x, lodash@npm:^4.0.0, lodash@npm:^4.15.0, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.7.0": +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lodash@npm:4.x, lodash@npm:^4.0.0, lodash@npm:^4.15.0, lodash@npm:^4.17.20, lodash@npm:^4.7.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -10012,6 +10049,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:9.0.3": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + "minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -10179,13 +10225,6 @@ __metadata: languageName: node linkType: hard -"mute-stream@npm:0.0.8": - version: 0.0.8 - resolution: "mute-stream@npm:0.0.8" - checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 - languageName: node - linkType: hard - "nanomatch@npm:^1.2.9": version: 1.2.13 resolution: "nanomatch@npm:1.2.13" @@ -10607,17 +10646,17 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.8.3": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" +"optionator@npm:^0.9.1": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" dependencies: - deep-is: ~0.1.3 - fast-levenshtein: ~2.0.6 - levn: ~0.3.0 - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - word-wrap: ~1.2.3 - checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 + "@aashutoshrathi/word-wrap": ^1.2.3 + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a languageName: node linkType: hard @@ -10644,13 +10683,6 @@ __metadata: languageName: node linkType: hard -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d - languageName: node - linkType: hard - "p-each-series@npm:^2.1.0": version: 2.2.0 resolution: "p-each-series@npm:2.2.0" @@ -10944,10 +10976,10 @@ __metadata: languageName: node linkType: hard -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a languageName: node linkType: hard @@ -10960,12 +10992,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:2.8.8": - version: 2.8.8 - resolution: "prettier@npm:2.8.8" +"prettier@npm:3.2.4": + version: 3.2.4 + resolution: "prettier@npm:3.2.4" bin: - prettier: bin-prettier.js - checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 + prettier: bin/prettier.cjs + checksum: 6ec9385a836e0b9bac549e585101c086d1521c31d7b882d5c8bb7d7646da0693da5f31f4fff6dc080710e5e2d34c85e6fb2f8766876b3645c8be2f33b9c3d1a3 languageName: node linkType: hard @@ -11503,10 +11535,10 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^2.0.1": - version: 2.0.1 - resolution: "regexpp@npm:2.0.1" - checksum: 1f41cf80ac08514c6665812e3dcc0673569431d3285db27053f8b237a758992fb55d6ddfbc264db399ff4f7a7db432900ca3a029daa28a75e0436231872091b1 +"regexpp@npm:^3.2.0": + version: 3.2.0 + resolution: "regexpp@npm:3.2.0" + checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 languageName: node linkType: hard @@ -11813,17 +11845,6 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:2.6.3": - version: 2.6.3 - resolution: "rimraf@npm:2.6.3" - dependencies: - glob: ^7.1.3 - bin: - rimraf: ./bin.js - checksum: 3ea587b981a19016297edb96d1ffe48af7e6af69660e3b371dbfc73722a73a0b0e9be5c88089fbeeb866c389c1098e07f64929c7414290504b855f54f901ab10 - languageName: node - linkType: hard - "rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" @@ -11852,13 +11873,6 @@ __metadata: languageName: node linkType: hard -"run-async@npm:^2.4.0": - version: 2.4.1 - resolution: "run-async@npm:2.4.1" - checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 - languageName: node - linkType: hard - "run-parallel@npm:^1.1.9": version: 1.1.10 resolution: "run-parallel@npm:1.1.10" @@ -11866,15 +11880,6 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^6.6.0": - version: 6.6.3 - resolution: "rxjs@npm:6.6.3" - dependencies: - tslib: ^1.9.0 - checksum: c7206389f5a91f89c2248aa9ef5ce73f979524c676e557ec2088b10ec138d91fd653ebee6cdb65532b6c05278eb3c8364ccd6feb9a499092d67731318cf05977 - languageName: node - linkType: hard - "rxjs@npm:^7.8.0": version: 7.8.1 resolution: "rxjs@npm:7.8.1" @@ -12031,7 +12036,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.3.7, semver@npm:^7.5.4": +"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.7, semver@npm:^7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -12256,17 +12261,6 @@ __metadata: languageName: node linkType: hard -"slice-ansi@npm:^2.1.0": - version: 2.1.0 - resolution: "slice-ansi@npm:2.1.0" - dependencies: - ansi-styles: ^3.2.0 - astral-regex: ^1.0.0 - is-fullwidth-code-point: ^2.0.0 - checksum: 4e82995aa59cef7eb03ef232d73c2239a15efa0ace87a01f3012ebb942e963fbb05d448ce7391efcd52ab9c32724164aba2086f5143e0445c969221dde3b6b1e - languageName: node - linkType: hard - "slice-ansi@npm:^3.0.0": version: 3.0.0 resolution: "slice-ansi@npm:3.0.0" @@ -12564,17 +12558,6 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^3.0.0": - version: 3.1.0 - resolution: "string-width@npm:3.1.0" - dependencies: - emoji-regex: ^7.0.1 - is-fullwidth-code-point: ^2.0.0 - strip-ansi: ^5.1.0 - checksum: 57f7ca73d201682816d573dc68bd4bb8e1dff8dc9fcf10470fdfc3474135c97175fec12ea6a159e67339b41e86963112355b64529489af6e7e70f94a7caf08b2 - languageName: node - linkType: hard - "string-width@npm:^4.1.0, string-width@npm:^4.2.0": version: 4.2.0 resolution: "string-width@npm:4.2.0" @@ -12726,15 +12709,6 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": - version: 5.2.0 - resolution: "strip-ansi@npm:5.2.0" - dependencies: - ansi-regex: ^4.1.0 - checksum: bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 - languageName: node - linkType: hard - "strip-ansi@npm:^6.0.0": version: 6.0.0 resolution: "strip-ansi@npm:6.0.0" @@ -12814,7 +12788,7 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.0.1": +"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 @@ -12897,15 +12871,13 @@ __metadata: languageName: node linkType: hard -"table@npm:^5.2.3": - version: 5.4.6 - resolution: "table@npm:5.4.6" +"synckit@npm:^0.8.5": + version: 0.8.8 + resolution: "synckit@npm:0.8.8" dependencies: - ajv: ^6.10.2 - lodash: ^4.17.14 - slice-ansi: ^2.1.0 - string-width: ^3.0.0 - checksum: 9e35d3efa788edc17237eef8852f8e4b9178efd65a7d115141777b2ee77df4b7796c05f4ed3712d858f98894ac5935a481ceeb6dcb9895e2f67a61cce0e63b6c + "@pkgr/core": ^0.1.0 + tslib: ^2.6.2 + checksum: 9ed5d33abb785f5f24e2531efd53b2782ca77abf7912f734d170134552b99001915531be5a50297aa45c5701b5c9041e8762e6cd7a38e41e2461c1e7fccdedf8 languageName: node linkType: hard @@ -13052,7 +13024,7 @@ __metadata: languageName: node linkType: hard -"through@npm:^2.3.6, through@npm:^2.3.8": +"through@npm:^2.3.8": version: 2.3.8 resolution: "through@npm:2.3.8" checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd @@ -13073,15 +13045,6 @@ __metadata: languageName: node linkType: hard -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: ~1.0.2 - checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 - languageName: node - linkType: hard - "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -13268,14 +13231,10 @@ __metadata: languageName: node linkType: hard -"tsutils@npm:^3.17.1": - version: 3.17.1 - resolution: "tsutils@npm:3.17.1" - dependencies: - tslib: ^1.8.1 - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - checksum: 0dd8c29b2f554d71179dfdd7c3a55b973c0d21ba2b28868ca2acc0bda7469e2ae94f7f454c0f342934b3a653ed4424bfa9c12fa84dac0e126408d6fcd9271510 +"tslib@npm:^2.6.2": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad languageName: node linkType: hard @@ -13290,12 +13249,12 @@ __metadata: languageName: node linkType: hard -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" dependencies: - prelude-ls: ~1.1.2 - checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a languageName: node linkType: hard @@ -13313,6 +13272,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + "type-fest@npm:^0.6.0": version: 0.6.0 resolution: "type-fest@npm:0.6.0" @@ -14071,7 +14037,7 @@ __metadata: "@types/react-router-dom": 5.3.3 "@types/webpack-env": 1.18.1 "@typescript-eslint/eslint-plugin": 6.7.0 - "@typescript-eslint/parser": 2.34.0 + "@typescript-eslint/parser": ^6.19.1 "@wireapp/api-client": 17.0.0 "@wireapp/commons": 4.4.10 "@wireapp/copy-config": 2.1.7 @@ -14087,14 +14053,14 @@ __metadata: dotenv-extended: 2.9.0 enzyme: 3.11.0 enzyme-adapter-react-16: 1.15.7 - eslint: 6.8.0 + eslint: 8.5.0 eslint-config-prettier: 6.15.0 eslint-plugin-babel: 5.3.1 eslint-plugin-import: 2.27.5 eslint-plugin-jest: 27.6.3 eslint-plugin-jsdoc: 48.0.2 eslint-plugin-no-unsanitized: 4.0.2 - eslint-plugin-prettier: 3.4.1 + eslint-plugin-prettier: 5.0 eslint-plugin-react: 7.30.1 eslint-plugin-react-hooks: 4.6.0 eslint-plugin-simple-import-sort: 8.0.0 @@ -14111,7 +14077,7 @@ __metadata: lint-staged: 13.2.2 os-browserify: 0.3.0 path-browserify: 1.0.1 - prettier: 2.8.8 + prettier: 3.2.4 react: 16.14.0 react-dom: 16.14.0 react-hot-loader: 4.13.1 @@ -14133,13 +14099,6 @@ __metadata: languageName: unknown linkType: soft -"word-wrap@npm:~1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f - languageName: node - linkType: hard - "wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" @@ -14181,15 +14140,6 @@ __metadata: languageName: node linkType: hard -"write@npm:1.0.3": - version: 1.0.3 - resolution: "write@npm:1.0.3" - dependencies: - mkdirp: ^0.5.1 - checksum: 6496197ceb2d6faeeb8b5fe2659ca804e801e4989dff9fb8a66fe76179ce4ccc378c982ef906733caea1220c8dbe05a666d82127959ac4456e70111af8b8df73 - languageName: node - linkType: hard - "ws@npm:7.5.3": version: 7.5.3 resolution: "ws@npm:7.5.3"