diff --git a/.eslintrc.js b/.eslintrc.js index e564479829..f57a392773 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -27,10 +27,7 @@ module.exports = { "cypress/**/*.ts", "test/**/*.{ts,tsx,js}", ], - extends: [ - "plugin:matrix-org/typescript", - "plugin:matrix-org/react", - ], + extends: ["plugin:matrix-org/typescript", "plugin:matrix-org/react"], // NOTE: These rules are frozen and new rules should not be added here. // New changes belong in https://github.com/matrix-org/eslint-plugin-matrix-org/ rules: { @@ -46,37 +43,51 @@ module.exports = { // TCHAP: for cypress only "@typescript-eslint/no-empty-interface": "off", // Ban matrix-js-sdk/src imports in favour of matrix-js-sdk/src/matrix imports to prevent unleashing hell. - "no-restricted-imports": ["error", { - "paths": [{ - "name": "matrix-js-sdk", - "message": "Please use matrix-js-sdk/src/matrix instead", - }, { - "name": "matrix-js-sdk/", - "message": "Please use matrix-js-sdk/src/matrix instead", - }, { - "name": "matrix-js-sdk/src", - "message": "Please use matrix-js-sdk/src/matrix instead", - }, { - "name": "matrix-js-sdk/src/", - "message": "Please use matrix-js-sdk/src/matrix instead", - }, { - "name": "matrix-js-sdk/src/index", - "message": "Please use matrix-js-sdk/src/matrix instead", - }, { - "name": "matrix-react-sdk", - "message": "Please use matrix-react-sdk/src/index instead", - }, { - "name": "matrix-react-sdk/", - "message": "Please use matrix-react-sdk/src/index instead", - }], - "patterns": [{ - "group": ["matrix-js-sdk/lib", "matrix-js-sdk/lib/", "matrix-js-sdk/lib/**"], - "message": "Please use matrix-js-sdk/src/* instead", - }, { - "group": ["matrix-react-sdk/lib", "matrix-react-sdk/lib/", "matrix-react-sdk/lib/**"], - "message": "Please use matrix-react-sdk/src/* instead", - }], - }], + "no-restricted-imports": [ + "error", + { + paths: [ + { + name: "matrix-js-sdk", + message: "Please use matrix-js-sdk/src/matrix instead", + }, + { + name: "matrix-js-sdk/", + message: "Please use matrix-js-sdk/src/matrix instead", + }, + { + name: "matrix-js-sdk/src", + message: "Please use matrix-js-sdk/src/matrix instead", + }, + { + name: "matrix-js-sdk/src/", + message: "Please use matrix-js-sdk/src/matrix instead", + }, + { + name: "matrix-js-sdk/src/index", + message: "Please use matrix-js-sdk/src/matrix instead", + }, + { + name: "matrix-react-sdk", + message: "Please use matrix-react-sdk/src/index instead", + }, + { + name: "matrix-react-sdk/", + message: "Please use matrix-react-sdk/src/index instead", + }, + ], + patterns: [ + { + group: ["matrix-js-sdk/lib", "matrix-js-sdk/lib/", "matrix-js-sdk/lib/**"], + message: "Please use matrix-js-sdk/src/* instead", + }, + { + group: ["matrix-react-sdk/lib", "matrix-react-sdk/lib/", "matrix-react-sdk/lib/**"], + message: "Please use matrix-react-sdk/src/* instead", + }, + ], + }, + ], }, }, { diff --git a/.github/ISSUE_TEMPLATE/bug-web.yml b/.github/ISSUE_TEMPLATE/bug-web.yml index 5a05b9ea51..932be397ba 100644 --- a/.github/ISSUE_TEMPLATE/bug-web.yml +++ b/.github/ISSUE_TEMPLATE/bug-web.yml @@ -2,83 +2,83 @@ name: Bug report for Tchap Web (in browser) description: File a bug report if you are using Element in a web browser like Firefox, Chrome, Edge, and so on. labels: [web, v4, bug] body: - - type: markdown - attributes: - value: | - Thanks for taking the time to fill out this bug report! + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! - Please report security issues by email to security@matrix.org - - type: textarea - id: reproduction-steps - attributes: - label: Steps to reproduce - description: Please attach screenshots, videos or logs if you can. - placeholder: Tell us what you see! - value: | - 1. Where are you starting? What can you see? - 2. What do you click? - 3. More steps… - validations: - required: true - - type: textarea - id: result - attributes: - label: Outcome - placeholder: Tell us what went wrong - value: | - #### What did you expect? + Please report security issues by email to security@matrix.org + - type: textarea + id: reproduction-steps + attributes: + label: Steps to reproduce + description: Please attach screenshots, videos or logs if you can. + placeholder: Tell us what you see! + value: | + 1. Where are you starting? What can you see? + 2. What do you click? + 3. More steps… + validations: + required: true + - type: textarea + id: result + attributes: + label: Outcome + placeholder: Tell us what went wrong + value: | + #### What did you expect? - #### What happened instead? - validations: - required: true - - type: input - id: os - attributes: - label: Operating system - placeholder: Windows, macOS, Ubuntu, Arch Linux… - validations: - required: false - - type: input - id: browser - attributes: - label: Browser information - description: Which browser are you using? Which version? - placeholder: e.g. Chromium Version 92.0.4515.131 - validations: - required: false - - type: input - id: webapp-url - attributes: - label: URL for webapp - description: Which URL are you using to access the webapp? If a private server, tell us what version of Element Web you are using. - placeholder: e.g. tchap.gouv.fr - validations: - required: false - - type: input - id: version - attributes: - label: Application version - description: You can find the version information in Settings -> Help & About. - placeholder: e.g. Element version 1.7.34, olm version 3.2.3 - validations: - required: false - - type: input - id: homeserver - attributes: - label: Homeserver - description: | - Which server is your account registered on? If it is a local or non-public homeserver, please tell us what is the homeserver implementation (ex: Synapse/Dendrite/etc.) and the version. - placeholder: e.g. matrix.org or Synapse 1.50.0rc1 - validations: - required: false - - type: dropdown - id: rageshake - attributes: - label: Will you send logs? - description: | - Did you know that you can send a /rageshake command from the web application to submit logs for this issue? Trigger the defect, then type `/rageshake` into the message input area followed by a description of the problem and send the command. You will be able to add a link to this defect report and submit anonymous logs to the developers. - options: - - "Yes" - - "No" - validations: - required: true + #### What happened instead? + validations: + required: true + - type: input + id: os + attributes: + label: Operating system + placeholder: Windows, macOS, Ubuntu, Arch Linux… + validations: + required: false + - type: input + id: browser + attributes: + label: Browser information + description: Which browser are you using? Which version? + placeholder: e.g. Chromium Version 92.0.4515.131 + validations: + required: false + - type: input + id: webapp-url + attributes: + label: URL for webapp + description: Which URL are you using to access the webapp? If a private server, tell us what version of Element Web you are using. + placeholder: e.g. tchap.gouv.fr + validations: + required: false + - type: input + id: version + attributes: + label: Application version + description: You can find the version information in Settings -> Help & About. + placeholder: e.g. Element version 1.7.34, olm version 3.2.3 + validations: + required: false + - type: input + id: homeserver + attributes: + label: Homeserver + description: | + Which server is your account registered on? If it is a local or non-public homeserver, please tell us what is the homeserver implementation (ex: Synapse/Dendrite/etc.) and the version. + placeholder: e.g. matrix.org or Synapse 1.50.0rc1 + validations: + required: false + - type: dropdown + id: rageshake + attributes: + label: Will you send logs? + description: | + Did you know that you can send a /rageshake command from the web application to submit logs for this issue? Trigger the defect, then type `/rageshake` into the message input area followed by a description of the problem and send the command. You will be able to add a link to this defect report and submit anonymous logs to the developers. + options: + - "Yes" + - "No" + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index d7a0cfb367..a0b8b8d76b 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - - name: Questions & support - url: https://tchap.beta.gouv.fr/#contact - about: Please ask and answer questions here. + - name: Questions & support + url: https://tchap.beta.gouv.fr/#contact + about: Please ask and answer questions here. diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md index 48d5f81fa4..babf9b2c03 100644 --- a/.github/ISSUE_TEMPLATE/custom.md +++ b/.github/ISSUE_TEMPLATE/custom.md @@ -1,10 +1,7 @@ --- name: Custom issue template about: Describe this issue template's purpose here. -title: '' -labels: '' -assignees: '' - +title: "" +labels: "" +assignees: "" --- - - diff --git a/.github/ISSUE_TEMPLATE/enhancement.yml b/.github/ISSUE_TEMPLATE/enhancement.yml index 4e86f6e8ff..921e7a4635 100644 --- a/.github/ISSUE_TEMPLATE/enhancement.yml +++ b/.github/ISSUE_TEMPLATE/enhancement.yml @@ -2,35 +2,35 @@ name: Enhancement request description: Do you have a suggestion or feature request? labels: [web, v4, enhancement] body: - - type: markdown - attributes: - value: | - Thank you for taking the time to propose an enhancement to an existing feature. - - type: textarea - id: usecase - attributes: - label: Your use case - description: What would you like to be able to do? Please feel welcome to include screenshots or mock ups. - placeholder: Tell us what you would like to do! - value: | - #### What would you like to do? + - type: markdown + attributes: + value: | + Thank you for taking the time to propose an enhancement to an existing feature. + - type: textarea + id: usecase + attributes: + label: Your use case + description: What would you like to be able to do? Please feel welcome to include screenshots or mock ups. + placeholder: Tell us what you would like to do! + value: | + #### What would you like to do? - #### Why would you like to do it? + #### Why would you like to do it? - #### How would you like to achieve it? - validations: - required: true - - type: textarea - id: alternative - attributes: - label: Have you considered any alternatives? - placeholder: A clear and concise description of any alternative solutions or features you've considered. - validations: - required: false - - type: textarea - id: additional-context - attributes: - label: Additional context - placeholder: Is there anything else you'd like to add? - validations: - required: false + #### How would you like to achieve it? + validations: + required: true + - type: textarea + id: alternative + attributes: + label: Have you considered any alternatives? + placeholder: A clear and concise description of any alternative solutions or features you've considered. + validations: + required: false + - type: textarea + id: additional-context + attributes: + label: Additional context + placeholder: Is there anything else you'd like to add? + validations: + required: false diff --git a/.github/workflows/add-issue-to-project.yaml b/.github/workflows/add-issue-to-project.yaml index 3874d39800..2b1888e5b4 100644 --- a/.github/workflows/add-issue-to-project.yaml +++ b/.github/workflows/add-issue-to-project.yaml @@ -3,47 +3,47 @@ # Note that your repo needs to be in the scope of the TRIAGE_TOKEN : you can add your repo in the settings of the organization secrets. name: Add issue to project on: - issues: - types: - - opened + issues: + types: + - opened jobs: - track_issue: - runs-on: ubuntu-latest - steps: - - name: Get project data - env: - GITHUB_TOKEN: ${{ secrets.TRIAGE_TOKEN }} - ORGANIZATION: tchapgouv - PROJECT_NUMBER: 8 - run: | - gh api graphql -f query=' - query($org: String!, $number: Int!) { - organization(login: $org){ - projectNext(number: $number) { - id - fields(first:20) { - nodes { - id - name - settings - } - } - } - } - }' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json + track_issue: + runs-on: ubuntu-latest + steps: + - name: Get project data + env: + GITHUB_TOKEN: ${{ secrets.TRIAGE_TOKEN }} + ORGANIZATION: tchapgouv + PROJECT_NUMBER: 8 + run: | + gh api graphql -f query=' + query($org: String!, $number: Int!) { + organization(login: $org){ + projectNext(number: $number) { + id + fields(first:20) { + nodes { + id + name + settings + } + } + } + } + }' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json - echo 'PROJECT_ID='$(jq '.data.organization.projectNext.id' project_data.json) >> $GITHUB_ENV + echo 'PROJECT_ID='$(jq '.data.organization.projectNext.id' project_data.json) >> $GITHUB_ENV - - name: Add issue to project - env: - GITHUB_TOKEN: ${{ secrets.TRIAGE_TOKEN }} - ISSUE_ID: ${{ github.event.issue.node_id }} - run: | - item_id="$( gh api graphql -f query=' - mutation($project:ID!, $issue:ID!) { - addProjectNextItem(input: {projectId: $project, contentId: $issue}) { - projectNextItem { - id - } - } - }' -f project=$PROJECT_ID -f issue=$ISSUE_ID --jq '.data.addProjectNextItem.projectNextItem.id')" + - name: Add issue to project + env: + GITHUB_TOKEN: ${{ secrets.TRIAGE_TOKEN }} + ISSUE_ID: ${{ github.event.issue.node_id }} + run: | + item_id="$( gh api graphql -f query=' + mutation($project:ID!, $issue:ID!) { + addProjectNextItem(input: {projectId: $project, contentId: $issue}) { + projectNextItem { + id + } + } + }' -f project=$PROJECT_ID -f issue=$ISSUE_ID --jq '.data.addProjectNextItem.projectNextItem.id')" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cdb3148df3..fb356ca8dc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,28 +2,28 @@ #tchap modification : use "./scripts/install-yarn-linked-repositories.sh" instead of "./scripts/layered.sh" name: Build on: - pull_request: { } - push: - branches: [ master ] + pull_request: {} + push: + branches: [master] # develop pushes and repository_dispatch handled in build_develop.yaml env: - # These must be set for fetchdep.sh to get the right branch - REPOSITORY: ${{ github.repository }} - PR_NUMBER: ${{ github.event.pull_request.number }} + # These must be set for fetchdep.sh to get the right branch + REPOSITORY: ${{ github.repository }} + PR_NUMBER: ${{ github.event.pull_request.number }} jobs: - build: - name: "Build" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 + build: + name: "Build" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 - - uses: actions/setup-node@v3 - with: - cache: 'yarn' - node-version: 16 + - uses: actions/setup-node@v3 + with: + cache: "yarn" + node-version: 16 - - name: Install Dependencies - run: "./scripts/install-yarn-linked-repositories.sh" + - name: Install Dependencies + run: "./scripts/install-yarn-linked-repositories.sh" - - name: Build - run: "yarn build" \ No newline at end of file + - name: Build + run: "yarn build" diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 402fedf877..0c9e368208 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -1,49 +1,49 @@ name: Create tag and release for tchap-web -on: - push: - tags: - - 'tchap-*' +on: + push: + tags: + - "tchap-*" jobs: - build-archive: - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - uses: actions/checkout@v3 - - name: Get Node Version - id: node_version - run: echo ::set-output name=node_version::$(node -e 'console.log(require("./package.json").engines.node)') - - name: Use Node.js ${{ steps.node_version.outputs.node_version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ steps.node_version.outputs.node_version }} - - name: Get Tchap Web Version - id: version - run: echo ::set-output name=version::$(node -e 'console.log(require("./package.json").version)') - - name: Build the archive ${{ steps.version.outputs.version }} for dev - run: scripts/package-github.sh - env: - CONFIG: dev - - name: Build the archive ${{ steps.version.outputs.version }} for preprod - run: scripts/package-github.sh - env: - CONFIG: preprod - - name: Build the archive ${{ steps.version.outputs.version }} for prod - run: scripts/package-github.sh - env: - CONFIG: prod - - name: Get current date - id: date - run: echo "::set-output name=date::$(date +'%Y%m%d')" - - name: Create tchap-web release - uses: ncipollo/release-action@v1 - with: - tag: "tchap-${{ steps.version.outputs.version }}" - generateReleaseNotes: true - artifacts: > - /home/runner/work/tchap-web-v4/tchap-web-v4/tchap-${{ steps.version.outputs.version }}-dev-${{ steps.date.outputs.date }}.tar.gz, - /home/runner/work/tchap-web-v4/tchap-web-v4/tchap-${{ steps.version.outputs.version }}-preprod-${{ steps.date.outputs.date }}.tar.gz, - /home/runner/work/tchap-web-v4/tchap-web-v4/tchap-${{ steps.version.outputs.version }}-prod-${{ steps.date.outputs.date }}.tar.gz - token: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + build-archive: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v3 + - name: Get Node Version + id: node_version + run: echo ::set-output name=node_version::$(node -e 'console.log(require("./package.json").engines.node)') + - name: Use Node.js ${{ steps.node_version.outputs.node_version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ steps.node_version.outputs.node_version }} + - name: Get Tchap Web Version + id: version + run: echo ::set-output name=version::$(node -e 'console.log(require("./package.json").version)') + - name: Build the archive ${{ steps.version.outputs.version }} for dev + run: scripts/package-github.sh + env: + CONFIG: dev + - name: Build the archive ${{ steps.version.outputs.version }} for preprod + run: scripts/package-github.sh + env: + CONFIG: preprod + - name: Build the archive ${{ steps.version.outputs.version }} for prod + run: scripts/package-github.sh + env: + CONFIG: prod + - name: Get current date + id: date + run: echo "::set-output name=date::$(date +'%Y%m%d')" + - name: Create tchap-web release + uses: ncipollo/release-action@v1 + with: + tag: "tchap-${{ steps.version.outputs.version }}" + generateReleaseNotes: true + artifacts: > + /home/runner/work/tchap-web-v4/tchap-web-v4/tchap-${{ steps.version.outputs.version }}-dev-${{ steps.date.outputs.date }}.tar.gz, + /home/runner/work/tchap-web-v4/tchap-web-v4/tchap-${{ steps.version.outputs.version }}-preprod-${{ steps.date.outputs.date }}.tar.gz, + /home/runner/work/tchap-web-v4/tchap-web-v4/tchap-${{ steps.version.outputs.version }}-prod-${{ steps.date.outputs.date }}.tar.gz + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/cypress.yaml b/.github/workflows/cypress.yaml index d58d124944..98fce0d16b 100644 --- a/.github/workflows/cypress.yaml +++ b/.github/workflows/cypress.yaml @@ -3,54 +3,52 @@ # tchap modification : use "./scripts/install-yarn-linked-repositories.sh" instead of "./scripts/layered.sh" name: Cypress End to End Tests on: - pull_request: { } - push: - branches: [ develop_tchap, master_tchap ] - #repository_dispatch: # :TCHAP: we don't use this - # types: [ element-web-notify ] + pull_request: {} + push: + branches: [develop_tchap, master_tchap] + #repository_dispatch: # :TCHAP: we don't use this + # types: [ element-web-notify ] env: - # :TCHAP: not needed for fetchdep.with.version.sh but leaving them otherwise it breaks. - # These must be set for fetchdep.sh to get the right branch - REPOSITORY: ${{ github.repository }} - PR_NUMBER: ${{ github.event.pull_request.number }} + # :TCHAP: not needed for fetchdep.with.version.sh but leaving them otherwise it breaks. + # These must be set for fetchdep.sh to get the right branch + REPOSITORY: ${{ github.repository }} + PR_NUMBER: ${{ github.event.pull_request.number }} jobs: - cypress: - name: Cypress - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v2 + cypress: + name: Cypress + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 - - name: Yarn cache - uses: actions/setup-node@v3 - with: - cache: 'yarn' - node-version: 16 - - - name: Install Dependencies - run: "./scripts/install-yarn-linked-repositories.sh" - - - name: Run Cypress tests - uses: cypress-io/github-action@v4.1.1 - with: - # The built-in Electron runner seems to grind to a halt trying - # to run the tests, so use chrome. - browser: chrome - #install: false # disable the default install, we used layered.with.version already. - start: yarn start - #start: npx serve -p 8080 webapp # If you have downloaded a build artifact, it will be in webapp dir. - wait-on: 'http://localhost:8080' - # wait for 3min, the build is long - wait-on-timeout: 180 - # record: true # todo record to dashboard, see action's doc - command: 'yarn test:cypress' - env: - E2E_TEST_USER_EMAIL: ${{ secrets.E2E_TEST_USER_EMAIL }} - E2E_TEST_USER_PASSWORD: ${{ secrets.E2E_TEST_USER_PASSWORD }} - E2E_TEST_USER_SECURITY_KEY: ${{ secrets.E2E_TEST_USER_SECURITY_KEY }} - E2E_TEST_USER_HOMESERVER_URL: 'https://matrix.agent1.tchap.incubateur.net' - E2E_TEST_USER_HOMESERVER_SHORT: 'agent1.tchap.incubateur.net' - # todo pass the Dashboard record key as an environment variable - # CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + - name: Yarn cache + uses: actions/setup-node@v3 + with: + cache: "yarn" + node-version: 16 + - name: Install Dependencies + run: "./scripts/install-yarn-linked-repositories.sh" + - name: Run Cypress tests + uses: cypress-io/github-action@v4.1.1 + with: + # The built-in Electron runner seems to grind to a halt trying + # to run the tests, so use chrome. + browser: chrome + #install: false # disable the default install, we used layered.with.version already. + start: yarn start + #start: npx serve -p 8080 webapp # If you have downloaded a build artifact, it will be in webapp dir. + wait-on: "http://localhost:8080" + # wait for 3min, the build is long + wait-on-timeout: 180 + # record: true # todo record to dashboard, see action's doc + command: "yarn test:cypress" + env: + E2E_TEST_USER_EMAIL: ${{ secrets.E2E_TEST_USER_EMAIL }} + E2E_TEST_USER_PASSWORD: ${{ secrets.E2E_TEST_USER_PASSWORD }} + E2E_TEST_USER_SECURITY_KEY: ${{ secrets.E2E_TEST_USER_SECURITY_KEY }} + E2E_TEST_USER_HOMESERVER_URL: "https://matrix.agent1.tchap.incubateur.net" + E2E_TEST_USER_HOMESERVER_SHORT: "agent1.tchap.incubateur.net" + # todo pass the Dashboard record key as an environment variable + # CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} diff --git a/.github/workflows/label-new-issues.yml b/.github/workflows/label-new-issues.yml index 7305b235be..9eea2f411f 100644 --- a/.github/workflows/label-new-issues.yml +++ b/.github/workflows/label-new-issues.yml @@ -2,19 +2,19 @@ # If the label is already present, this job runs successfully and does nothing. name: Label new issues on: - issues: - types: - - opened + issues: + types: + - opened jobs: - label_issue: - runs-on: ubuntu-latest - steps: - - uses: actions/github-script@v5 - with: - script: | - github.rest.issues.addLabels({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ['web'] - }) + label_issue: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v5 + with: + script: | + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['web'] + }) diff --git a/.github/workflows/static_analysis.yaml b/.github/workflows/static_analysis.yaml index 123e4de07c..13848236fe 100644 --- a/.github/workflows/static_analysis.yaml +++ b/.github/workflows/static_analysis.yaml @@ -2,91 +2,90 @@ #tchap modification : use "./scripts/install-yarn-linked-repositories.sh" instead of "./scripts/layered.sh" name: Static Analysis on: - pull_request: { } - push: - branches: [ develop, master ] - repository_dispatch: - types: [ element-web-notify ] + pull_request: {} + push: + branches: [develop, master] + repository_dispatch: + types: [element-web-notify] env: - # These must be set for fetchdep.sh to get the right branch - REPOSITORY: ${{ github.repository }} - PR_NUMBER: ${{ github.event.pull_request.number }} + # These must be set for fetchdep.sh to get the right branch + REPOSITORY: ${{ github.repository }} + PR_NUMBER: ${{ github.event.pull_request.number }} jobs: -# Removing until we fix the crash : -# Error: matrix-react-sdk/src/autocomplete/CommandProvider.tsx(38,24): error TS2589: -# Type instantiation is excessively deep and possibly infinite. -# ts_lint: -# name: "Typescript Syntax Check" -# runs-on: ubuntu-latest -# steps: -# - uses: actions/checkout@v2 -# -# - uses: actions/setup-node@v3 -# with: -# cache: 'yarn' -# node-version: 16 -# -# - name: Install Dependencies -# run: "./scripts/install-yarn-linked-repositories.sh" -# -# - name: Typecheck -# run: "yarn run lint:types" + # Removing until we fix the crash : + # Error: matrix-react-sdk/src/autocomplete/CommandProvider.tsx(38,24): error TS2589: + # Type instantiation is excessively deep and possibly infinite. + # ts_lint: + # name: "Typescript Syntax Check" + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v2 + # + # - uses: actions/setup-node@v3 + # with: + # cache: 'yarn' + # node-version: 16 + # + # - name: Install Dependencies + # run: "./scripts/install-yarn-linked-repositories.sh" + # + # - name: Typecheck + # run: "yarn run lint:types" -# tchap : tchap does not use extensively i18n -# i18n_lint: -# name: "i18n Check" -# uses: matrix-org/matrix-react-sdk/.github/workflows/i18n_check.yml@develop + # tchap : tchap does not use extensively i18n + # i18n_lint: + # name: "i18n Check" + # uses: matrix-org/matrix-react-sdk/.github/workflows/i18n_check.yml@develop - js_lint: - name: "ESLint" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 + js_lint: + name: "ESLint" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 - - uses: actions/setup-node@v3 - with: - cache: 'yarn' - node-version: 16 + - uses: actions/setup-node@v3 + with: + cache: "yarn" + node-version: 16 - # Does not need branch matching as only analyses this layer - - name: Install Deps - run: "yarn install --pure-lockfile" + # Does not need branch matching as only analyses this layer + - name: Install Deps + run: "yarn install --pure-lockfile" - - name: Run Linter - run: "yarn run lint:js" + - name: Run Linter + run: "yarn run lint:js" - style_lint: - name: "Style Lint" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 + style_lint: + name: "Style Lint" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 - - uses: actions/setup-node@v3 - with: - cache: 'yarn' - node-version: 16 + - uses: actions/setup-node@v3 + with: + cache: "yarn" + node-version: 16 - # Needs branch matching as it inherits .stylelintrc.js from matrix-react-sdk - - name: Install Dependencies - run: "./scripts/install-yarn-linked-repositories.sh" - - - name: Run Linter - run: "yarn run lint:style" + # Needs branch matching as it inherits .stylelintrc.js from matrix-react-sdk + - name: Install Dependencies + run: "./scripts/install-yarn-linked-repositories.sh" + - name: Run Linter + run: "yarn run lint:style" # tchap : analyse:unused-exports does not work well with tchap customisations, it raises exception for "default export" not used - #analyse_dead_code: - # name: "Analyse Dead Code" - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v2 +#analyse_dead_code: +# name: "Analyse Dead Code" +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v2 - # - uses: actions/setup-node@v3 - # with: - # cache: 'yarn' - # node-version: 16 +# - uses: actions/setup-node@v3 +# with: +# cache: 'yarn' +# node-version: 16 - # - name: Install Deps - # run: "scripts/install-yarn-linked-repositories.sh" +# - name: Install Deps +# run: "scripts/install-yarn-linked-repositories.sh" - # - name: Dead Code Analysis - # run: "yarn run analyse:unused-exports" \ No newline at end of file +# - name: Dead Code Analysis +# run: "yarn run analyse:unused-exports" diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 8fe0aef1a9..e0344d9944 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -2,39 +2,39 @@ #tchap modification : use "./scripts/install-yarn-linked-repositories.sh" instead of "./scripts/layered.sh" name: Tests on: - pull_request: { } - push: - branches: [ develop, master ] - repository_dispatch: - types: [ element-web-notify ] + pull_request: {} + push: + branches: [develop, master] + repository_dispatch: + types: [element-web-notify] env: - # These must be set for fetchdep.sh to get the right branch - REPOSITORY: ${{ github.repository }} - PR_NUMBER: ${{ github.event.pull_request.number }} + # These must be set for fetchdep.sh to get the right branch + REPOSITORY: ${{ github.repository }} + PR_NUMBER: ${{ github.event.pull_request.number }} jobs: - jest: - name: Jest - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v2 + jest: + name: Jest + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 - - name: Yarn cache - uses: actions/setup-node@v3 - with: - cache: 'yarn' - node-version: 16 + - name: Yarn cache + uses: actions/setup-node@v3 + with: + cache: "yarn" + node-version: 16 - - name: Install Dependencies - run: "./scripts/install-yarn-linked-repositories.sh" + - name: Install Dependencies + run: "./scripts/install-yarn-linked-repositories.sh" - - name: Run tests with coverage - run: "yarn coverage --ci" + - name: Run tests with coverage + run: "yarn coverage --ci" - - name: Upload Artifact - uses: actions/upload-artifact@v2 - with: - name: coverage - path: | - coverage - !coverage/lcov-report \ No newline at end of file + - name: Upload Artifact + uses: actions/upload-artifact@v2 + with: + name: coverage + path: | + coverage + !coverage/lcov-report diff --git a/README.md b/README.md index a353376ef2..d5717085f1 100644 --- a/README.md +++ b/README.md @@ -320,7 +320,7 @@ yarn install yarn start ``` -Alternatively, you can skip the above commands and only run the command below. The only difference is that both 'matrix-react-sdk and 'matrix-js-sdk' will be cloned inside the root project folder. +Alternatively, you can skip the above commands and only run the command below. The only difference is that both 'matrix-react-sdk and 'matrix-js-sdk' will be cloned inside the root project folder. ```bash ./scripts/install-yarn-linked-repositories.sh diff --git a/config.dev.json b/config.dev.json index c4c2b4d999..1ff86b5c27 100644 --- a/config.dev.json +++ b/config.dev.json @@ -36,19 +36,15 @@ "showLabsSettings": false, "features": { "feature_thread": true, - "feature_video_rooms" : false, - "feature_new_device_manager" : false, - "tchap_activate_cross_signing_and_secure_storage" : true, + "feature_video_rooms": false, + "feature_new_device_manager": false, + "tchap_activate_cross_signing_and_secure_storage": true, "tchap_disable_cross_signing_setup_toast": true }, "default_federate": true, "default_theme": "light", "roomDirectory": { - "servers": [ - "agent1.tchap.incubateur.net", - "agent2.tchap.incubateur.net", - "externe.tchap.incubateur.net" - ] + "servers": ["agent1.tchap.incubateur.net", "agent2.tchap.incubateur.net", "externe.tchap.incubateur.net"] }, "enable_presence_by_hs_url": { "https://matrix.agent1.tchap.incubateur.net": false, @@ -70,18 +66,17 @@ "RoomList.orderAlphabetically": false, "Spaces.allRoomsInHome": true, "layout": "bubble", - "custom_themes": [ - ] + "custom_themes": [] }, "branding": { "authHeaderLogoUrl": "themes/tchap/img/logos/tchap-logo.svg", "authFooterLinks": [ - { "text": "Gouvernement", "url": "https://www.gouvernement.fr"}, - {"text": "OpenData", "url": "https://www.data.gouv.fr"}, - {"text": "DINUM", "url": "https://numerique.gouv.fr"}, - {"text": "beta.gouv.fr", "url": "https://beta.gouv.fr"}, - {"text": "CGU", "url": "https://www.tchap.gouv.fr/cgu"}, - {"text": "FAQ", "url": "https://www.tchap.gouv.fr/faq"} + { "text": "Gouvernement", "url": "https://www.gouvernement.fr" }, + { "text": "OpenData", "url": "https://www.data.gouv.fr" }, + { "text": "DINUM", "url": "https://numerique.gouv.fr" }, + { "text": "beta.gouv.fr", "url": "https://beta.gouv.fr" }, + { "text": "CGU", "url": "https://www.tchap.gouv.fr/cgu" }, + { "text": "FAQ", "url": "https://www.tchap.gouv.fr/faq" } ], "welcome_background_url": "themes/tchap/img/backgrounds/tchap-bg.svg" }, diff --git a/config.preprod.json b/config.preprod.json index ef9d026c81..f948f145e3 100644 --- a/config.preprod.json +++ b/config.preprod.json @@ -31,9 +31,9 @@ "showLabsSettings": false, "features": { "feature_thread": true, - "feature_video_rooms" : false, - "feature_new_device_manager" : false, - "tchap_activate_cross_signing_and_secure_storage" : true, + "feature_video_rooms": false, + "feature_new_device_manager": false, + "tchap_activate_cross_signing_and_secure_storage": true, "tchap_disable_cross_signing_setup_toast": true }, "default_federate": true, @@ -60,19 +60,17 @@ "RoomList.orderAlphabetically": false, "Spaces.allRoomsInHome": true, "layout": "bubble", - "custom_themes": [ - - ] + "custom_themes": [] }, "branding": { "authHeaderLogoUrl": "themes/tchap/img/logos/tchap-logo.svg", "authFooterLinks": [ - { "text": "Gouvernement", "url": "https://www.gouvernement.fr"}, - {"text": "OpenData", "url": "https://www.data.gouv.fr"}, - {"text": "DINUM", "url": "https://numerique.gouv.fr"}, - {"text": "beta.gouv.fr", "url": "https://beta.gouv.fr"}, - {"text": "CGU", "url": "https://www.tchap.gouv.fr/cgu"}, - {"text": "FAQ", "url": "https://www.tchap.gouv.fr/faq"} + { "text": "Gouvernement", "url": "https://www.gouvernement.fr" }, + { "text": "OpenData", "url": "https://www.data.gouv.fr" }, + { "text": "DINUM", "url": "https://numerique.gouv.fr" }, + { "text": "beta.gouv.fr", "url": "https://beta.gouv.fr" }, + { "text": "CGU", "url": "https://www.tchap.gouv.fr/cgu" }, + { "text": "FAQ", "url": "https://www.tchap.gouv.fr/faq" } ], "welcome_background_url": "themes/tchap/img/backgrounds/tchap-bg.svg" }, diff --git a/config.prod.json b/config.prod.json index 7ebc4ff67f..21c8ca2ce7 100644 --- a/config.prod.json +++ b/config.prod.json @@ -106,9 +106,9 @@ "showLabsSettings": false, "features": { "feature_thread": true, - "feature_video_rooms" : false, - "feature_new_device_manager" : false, - "tchap_activate_cross_signing_and_secure_storage" : true, + "feature_video_rooms": false, + "feature_new_device_manager": false, + "tchap_activate_cross_signing_and_secure_storage": true, "tchap_disable_cross_signing_setup_toast": true }, "default_federate": true, @@ -168,19 +168,17 @@ "RoomList.orderAlphabetically": false, "Spaces.allRoomsInHome": true, "layout": "bubble", - "custom_themes": [ - - ] + "custom_themes": [] }, "branding": { "authHeaderLogoUrl": "themes/tchap/img/logos/tchap-logo.svg", "authFooterLinks": [ - { "text": "Gouvernement", "url": "https://www.gouvernement.fr"}, - {"text": "OpenData", "url": "https://www.data.gouv.fr"}, - {"text": "DINUM", "url": "https://numerique.gouv.fr"}, - {"text": "beta.gouv.fr", "url": "https://beta.gouv.fr"}, - {"text": "CGU", "url": "https://www.tchap.gouv.fr/cgu"}, - {"text": "FAQ", "url": "https://www.tchap.gouv.fr/faq"} + { "text": "Gouvernement", "url": "https://www.gouvernement.fr" }, + { "text": "OpenData", "url": "https://www.data.gouv.fr" }, + { "text": "DINUM", "url": "https://numerique.gouv.fr" }, + { "text": "beta.gouv.fr", "url": "https://beta.gouv.fr" }, + { "text": "CGU", "url": "https://www.tchap.gouv.fr/cgu" }, + { "text": "FAQ", "url": "https://www.tchap.gouv.fr/faq" } ], "welcome_background_url": "themes/tchap/img/backgrounds/tchap-bg.svg" }, diff --git a/config.sample.json b/config.sample.json index 2f9b6b4f4f..5a13d0189e 100644 --- a/config.sample.json +++ b/config.sample.json @@ -40,7 +40,7 @@ "show_labs_settings": false, "features": { "feature_thread": true, - "feature_video_rooms" : false + "feature_video_rooms": false }, "default_federate": true, "default_theme": "light", @@ -65,19 +65,17 @@ "MessageComposerInput.showPollsButton": false, "RoomList.orderAlphabetically": false, "Spaces.allRoomsInHome": true, - "custom_themes": [ - - ] + "custom_themes": [] }, "branding": { "authHeaderLogoUrl": "themes/tchap/img/logos/tchap-logo.svg", "authFooterLinks": [ - { "text": "Gouvernement", "url": "https://www.gouvernement.fr"}, - {"text": "OpenData", "url": "https://www.data.gouv.fr"}, - {"text": "DINUM", "url": "https://numerique.gouv.fr"}, - {"text": "beta.gouv.fr", "url": "https://beta.gouv.fr"}, - {"text": "CGU", "url": "https://www.tchap.gouv.fr/cgu"}, - {"text": "FAQ", "url": "https://www.tchap.gouv.fr/faq"} + { "text": "Gouvernement", "url": "https://www.gouvernement.fr" }, + { "text": "OpenData", "url": "https://www.data.gouv.fr" }, + { "text": "DINUM", "url": "https://numerique.gouv.fr" }, + { "text": "beta.gouv.fr", "url": "https://beta.gouv.fr" }, + { "text": "CGU", "url": "https://www.tchap.gouv.fr/cgu" }, + { "text": "FAQ", "url": "https://www.tchap.gouv.fr/faq" } ], "welcome_background_url": "themes/tchap/img/backgrounds/tchap-bg.svg" }, diff --git a/customisations.json b/customisations.json index 19f10db887..5d1cf2db62 100644 --- a/customisations.json +++ b/customisations.json @@ -1,26 +1,26 @@ { - "src/@types/tchap.ts": "src/@types/tchap.ts", - "src/async-components/views/dialogs/security/ExportE2eKeysDialog.tsx": "src/async-components/views/dialogs/security/TchapExportE2eKeysDialog.tsx", - "src/components/views/dialogs/CreateRoomDialog.tsx": "src/components/views/dialogs/TchapCreateRoomDialog.tsx", - "src/components/views/verification/VerificationComplete.tsx": "src/components/views/verification/TchapVerificationComplete.tsx", - "src/components/views/elements/TchapRoomTypeSelector.tsx": "src/components/views/elements/TchapRoomTypeSelector.tsx", - "src/customisations/ComponentVisibility.ts": "src/customisations/TchapComponentVisibility.ts", - "src/customisations/Media.ts": "src/customisations/ContentScanningMedia.ts", - "src/components/views/messages/DownloadActionButton.tsx": "src/customisations/components/views/messages/ContentScanningDownloadActionButton.tsx", - "src/components/views/messages/MAudioBody.tsx": "src/customisations/components/views/messages/ContentScanningAudioBody.tsx", - "src/components/views/messages/MFileBody.tsx": "src/customisations/components/views/messages/ContentScanningFileBody.tsx", - "src/components/views/messages/MImageBody.tsx": "src/customisations/components/views/messages/ContentScanningImageBody.tsx", - "src/components/views/messages/MImageReplyBody.tsx": "src/customisations/components/views/messages/ContentScanningImageReplyBody.tsx", - "src/components/views/messages/MStickerBody.tsx": "src/customisations/components/views/messages/ContentScanningStickerBody.tsx", - "src/components/views/messages/MVideoBody.tsx": "src/customisations/components/views/messages/ContentScanningVideoBody.tsx", - "src/components/views/messages/MVoiceMessageBody.tsx": "src/customisations/components/views/messages/ContentScanningVoiceMessageBody.tsx", - "src/components/views/messages/OriginalAudioBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MAudioBody.tsx", - "src/components/views/messages/OriginalFileBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MFileBody.tsx", - "src/components/views/messages/OriginalImageBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MImageBody.tsx", - "src/components/views/messages/OriginalImageReplyBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MImageReplyBody.tsx", - "src/components/views/messages/OriginalStickerBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MStickerBody.tsx", - "src/components/views/messages/OriginalVideoBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MVideoBody.tsx", - "src/components/views/messages/OriginalVoiceMessageBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MVoiceMessageBody.tsx", - "src/components/views/messages/UnknownBody.tsx": "src/components/views/messages/TchapUnknownBody.tsx", - "src/components/views/settings/JoinRuleSettings.tsx": "src/components/views/settings/TchapJoinRuleSettings.tsx" + "src/@types/tchap.ts": "src/@types/tchap.ts", + "src/async-components/views/dialogs/security/ExportE2eKeysDialog.tsx": "src/async-components/views/dialogs/security/TchapExportE2eKeysDialog.tsx", + "src/components/views/dialogs/CreateRoomDialog.tsx": "src/components/views/dialogs/TchapCreateRoomDialog.tsx", + "src/components/views/verification/VerificationComplete.tsx": "src/components/views/verification/TchapVerificationComplete.tsx", + "src/components/views/elements/TchapRoomTypeSelector.tsx": "src/components/views/elements/TchapRoomTypeSelector.tsx", + "src/customisations/ComponentVisibility.ts": "src/customisations/TchapComponentVisibility.ts", + "src/customisations/Media.ts": "src/customisations/ContentScanningMedia.ts", + "src/components/views/messages/DownloadActionButton.tsx": "src/customisations/components/views/messages/ContentScanningDownloadActionButton.tsx", + "src/components/views/messages/MAudioBody.tsx": "src/customisations/components/views/messages/ContentScanningAudioBody.tsx", + "src/components/views/messages/MFileBody.tsx": "src/customisations/components/views/messages/ContentScanningFileBody.tsx", + "src/components/views/messages/MImageBody.tsx": "src/customisations/components/views/messages/ContentScanningImageBody.tsx", + "src/components/views/messages/MImageReplyBody.tsx": "src/customisations/components/views/messages/ContentScanningImageReplyBody.tsx", + "src/components/views/messages/MStickerBody.tsx": "src/customisations/components/views/messages/ContentScanningStickerBody.tsx", + "src/components/views/messages/MVideoBody.tsx": "src/customisations/components/views/messages/ContentScanningVideoBody.tsx", + "src/components/views/messages/MVoiceMessageBody.tsx": "src/customisations/components/views/messages/ContentScanningVoiceMessageBody.tsx", + "src/components/views/messages/OriginalAudioBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MAudioBody.tsx", + "src/components/views/messages/OriginalFileBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MFileBody.tsx", + "src/components/views/messages/OriginalImageBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MImageBody.tsx", + "src/components/views/messages/OriginalImageReplyBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MImageReplyBody.tsx", + "src/components/views/messages/OriginalStickerBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MStickerBody.tsx", + "src/components/views/messages/OriginalVideoBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MVideoBody.tsx", + "src/components/views/messages/OriginalVoiceMessageBody.tsx": "node_modules/matrix-react-sdk/src/components/views/messages/MVoiceMessageBody.tsx", + "src/components/views/messages/UnknownBody.tsx": "src/components/views/messages/TchapUnknownBody.tsx", + "src/components/views/settings/JoinRuleSettings.tsx": "src/components/views/settings/TchapJoinRuleSettings.tsx" } diff --git a/cypress.config.ts b/cypress.config.ts index 51a63721fc..f4a32ff867 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -15,39 +15,38 @@ limitations under the License. */ // TCHAP: copied from matrix-rect-sdk -import { defineConfig } from 'cypress'; -import 'dotenv/config'; +import { defineConfig } from "cypress"; +import "dotenv/config"; // :TCHAP: Check for the env vars we need and crash if needed. const foundEnv = {}; const getVar = (name) => { const value = process.env[name]; if (!value) { - throw Error('Env var not found : cypress needs ' + name + - '. Set it in the .env file.'); + throw Error("Env var not found : cypress needs " + name + ". Set it in the .env file."); } foundEnv[name] = value; }; -getVar('E2E_TEST_USER_EMAIL'); -getVar('E2E_TEST_USER_PASSWORD'); -getVar('E2E_TEST_USER_SECURITY_KEY'); -getVar('E2E_TEST_USER_HOMESERVER_URL'); -getVar('E2E_TEST_USER_HOMESERVER_SHORT'); +getVar("E2E_TEST_USER_EMAIL"); +getVar("E2E_TEST_USER_PASSWORD"); +getVar("E2E_TEST_USER_SECURITY_KEY"); +getVar("E2E_TEST_USER_HOMESERVER_URL"); +getVar("E2E_TEST_USER_HOMESERVER_SHORT"); export default defineConfig({ - watchForFileChanges : false, + watchForFileChanges: false, videoUploadOnPasses: false, - projectId: 'ppvnzg', + projectId: "ppvnzg", experimentalInteractiveRunEvents: true, defaultCommandTimeout: 10000, chromeWebSecurity: false, e2e: { setupNodeEvents(on, config) { - return require('./cypress/plugins/index.ts').default(on, config); + return require("./cypress/plugins/index.ts").default(on, config); }, - baseUrl: 'http://localhost:8080', + baseUrl: "http://localhost:8080", experimentalSessionAndOrigin: true, - specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}', + specPattern: "cypress/e2e/**/*.{js,jsx,ts,tsx}", }, env: foundEnv, }); diff --git a/cypress/README.md b/cypress/README.md index d60dbfef16..e0b51bbc4f 100644 --- a/cypress/README.md +++ b/cypress/README.md @@ -4,12 +4,13 @@ Files in 'support' folder are automatically imported by Cypress # Run cypress -- run a local instance +- run a local instance + ``` yarn start ``` -- run cypress +- run cypress edit env vars with values according to which home server your local instance uses (dev, preprod, prod) @@ -19,15 +20,10 @@ E2E_TEST_USER_SECURITY_KEY='' E2E_TEST_USER_HOMESERVER_URL='' E2E_TEST_USER_HOMESERVER_SHORT='' - - -```yarn run cypress``` - - +`yarn run cypress` TODO : - - make all this run in CI ! Will need running a tchap-web server at http://localhost:8080. Cypress does not recommend that the server be started by cypress itself (https://docs.cypress.io/guides/references/best-practices#Web-Servers) - - clean up the server after each test : delete created rooms, log out, ... - - import/symlink/whatever the files we are using from matrix-react-sdk, instead of copying them to tchap-web repo. - +- make all this run in CI ! Will need running a tchap-web server at http://localhost:8080. Cypress does not recommend that the server be started by cypress itself (https://docs.cypress.io/guides/references/best-practices#Web-Servers) +- clean up the server after each test : delete created rooms, log out, ... +- import/symlink/whatever the files we are using from matrix-react-sdk, instead of copying them to tchap-web repo. diff --git a/cypress/e2e/create-room/create-room.spec.ts b/cypress/e2e/create-room/create-room.spec.ts index c467a263c1..8329d7d64f 100644 --- a/cypress/e2e/create-room/create-room.spec.ts +++ b/cypress/e2e/create-room/create-room.spec.ts @@ -27,7 +27,7 @@ function openCreateRoomDialog(): Chainable> { } describe("Create Room", () => { - const homeserverShortname = Cypress.env('E2E_TEST_USER_HOMESERVER_SHORT'); + const homeserverShortname = Cypress.env("E2E_TEST_USER_HOMESERVER_SHORT"); beforeEach(() => { cy.loginUser(); @@ -38,16 +38,16 @@ describe("Create Room", () => { // Note : This is simple and works, so good enough for now. But if we want to store the roomId at the end of the test instead, we could use “as” // for passing the value around : https://docs.cypress.io/guides/core-concepts/variables-and-aliases#Sharing-Context // Do NOT use a describe-level variable (like "let roomIdToCleanup") like we do in unit tests, cypress does not work like that. - cy.url().then(urlString => { - console.log('roomId url string', urlString); - console.log('roomId url string split', urlString.split('/#/room/')); - console.log('roomIdToCleanup', urlString.split('/#/room/')[1]); - const roomId = urlString.split('/#/room/')[1]; + cy.url().then((urlString) => { + console.log("roomId url string", urlString); + console.log("roomId url string split", urlString.split("/#/room/")); + console.log("roomIdToCleanup", urlString.split("/#/room/")[1]); + const roomId = urlString.split("/#/room/")[1]; if (roomId) { cy.leaveRoom(roomId); // todo also forgetRoom to save resources. } else { - console.error('Did not find roomId in url. Not cleaning up.'); + console.error("Did not find roomId in url. Not cleaning up."); } }); }); @@ -70,7 +70,7 @@ describe("Create Room", () => { cy.url().should("match", roomUrlRegex); cy.stopMeasuring("from-submit-to-room"); cy.get(".mx_RoomHeader_nametext").contains(name); - cy.get(".tc_RoomHeader_external").should('not.exist'); + cy.get(".tc_RoomHeader_external").should("not.exist"); }); //check that the mention "open to external users" is displayed diff --git a/cypress/e2e/login/login.spec.ts b/cypress/e2e/login/login.spec.ts index b364b6c8c5..79f69cae21 100644 --- a/cypress/e2e/login/login.spec.ts +++ b/cypress/e2e/login/login.spec.ts @@ -20,13 +20,13 @@ describe("Login", () => { // Set language for browser. // This is only needed before login, since the login function sets language setting for user. Most tests don't need this. const frenchLanguageBrowserOpts = { - onBeforeLoad(win):void { - Object.defineProperty(win.navigator, 'language', { value: 'fr-FR' }); - Object.defineProperty(win.navigator, 'languages', { value: ['fr'] }); - Object.defineProperty(win.navigator, 'accept_languages', { value: ['fr'] }); + onBeforeLoad(win): void { + Object.defineProperty(win.navigator, "language", { value: "fr-FR" }); + Object.defineProperty(win.navigator, "languages", { value: ["fr"] }); + Object.defineProperty(win.navigator, "accept_languages", { value: ["fr"] }); }, headers: { - 'Accept-Language': 'fr', + "Accept-Language": "fr", }, }; @@ -34,14 +34,13 @@ describe("Login", () => { cy.visit("/#/login", frenchLanguageBrowserOpts); }); - afterEach(() => { - }); + afterEach(() => {}); describe("m.login.password", () => { // Specify these values in env vars. You can use the .env file. See .env.example. // Will be replaced by a generated random user when we have a full docker setup - const username = Cypress.env('E2E_TEST_USER_EMAIL'); - const password = Cypress.env('E2E_TEST_USER_PASSWORD'); + const username = Cypress.env("E2E_TEST_USER_EMAIL"); + const password = Cypress.env("E2E_TEST_USER_PASSWORD"); beforeEach(() => { // We use a pre-existing user on dev backend. If random user was created each time, we would use : @@ -62,7 +61,7 @@ describe("Login", () => { cy.get(".mx_Login_submit").click(); //TODO: does not work if account has cross signing because the screen is /#/login "Vérifier cet appareil" - cy.url().should('contain', '/#/home'); + cy.url().should("contain", "/#/home"); cy.stopMeasuring("from-submit-to-home"); }); }); diff --git a/cypress/e2e/register/register.spec.ts b/cypress/e2e/register/register.spec.ts index b287b9dffa..8e4a89cac6 100644 --- a/cypress/e2e/register/register.spec.ts +++ b/cypress/e2e/register/register.spec.ts @@ -17,7 +17,7 @@ limitations under the License. /// describe("Registration", () => { - const homeserverUrl = Cypress.env('E2E_TEST_USER_HOMESERVER_URL'); + const homeserverUrl = Cypress.env("E2E_TEST_USER_HOMESERVER_URL"); beforeEach(() => { cy.visit("/#/register"); }); @@ -37,7 +37,7 @@ describe("Registration", () => { cy.get(".mx_ServerPickerDialog_otherHomeserver").type(homeserverUrl); cy.get(".mx_ServerPickerDialog_continue").click(); // wait for the dialog to go away - cy.get('.mx_ServerPickerDialog').should('not.exist'); + cy.get(".mx_ServerPickerDialog").should("not.exist"); cy.get("#mx_RegistrationForm_username").should("be.visible"); // Hide the server text as it contains the randomly allocated Synapse port @@ -70,14 +70,16 @@ describe("Registration", () => { cy.checkA11y(); cy.get(".mx_UseCaseSelection_skip .mx_AccessibleButton").click(); - cy.url().should('contain', '/#/home'); + cy.url().should("contain", "/#/home"); cy.stopMeasuring("from-submit-to-home"); const userMenuLabel = "Menu utilisateur"; cy.get(`[aria-label="${userMenuLabel}"]`).click(); const securityLabel = "Sécurité et vie privée"; cy.get(`[aria-label="${securityLabel}"]`).click(); - cy.get(".mx_DevicesPanel_myDevice .mx_DevicesPanel_deviceTrust .mx_E2EIcon") - .should("have.class", "mx_E2EIcon_verified"); + cy.get(".mx_DevicesPanel_myDevice .mx_DevicesPanel_deviceTrust .mx_E2EIcon").should( + "have.class", + "mx_E2EIcon_verified", + ); }); }); diff --git a/cypress/e2e/room-access-settings/room-access-settings.spec.ts b/cypress/e2e/room-access-settings/room-access-settings.spec.ts index efa06d4f77..05df86e114 100644 --- a/cypress/e2e/room-access-settings/room-access-settings.spec.ts +++ b/cypress/e2e/room-access-settings/room-access-settings.spec.ts @@ -4,10 +4,10 @@ import RoomUtils from "../../utils/room-utils"; import RandomUtils from "../../utils/random-utils"; describe("Check room access settings", () => { - const homeserverUrl = Cypress.env('E2E_TEST_USER_HOMESERVER_URL'); - const email = Cypress.env('E2E_TEST_USER_EMAIL'); - const password = Cypress.env('E2E_TEST_USER_PASSWORD'); - const today = new Date().toISOString().slice(0, 10).replace(/-/g, ''); + const homeserverUrl = Cypress.env("E2E_TEST_USER_HOMESERVER_URL"); + const email = Cypress.env("E2E_TEST_USER_EMAIL"); + const password = Cypress.env("E2E_TEST_USER_PASSWORD"); + const today = new Date().toISOString().slice(0, 10).replace(/-/g, ""); beforeEach(() => { cy.loginUser(homeserverUrl, email, password); @@ -18,109 +18,105 @@ describe("Check room access settings", () => { }); it("creates a public room and check access settings", () => { - const roomName = "test/"+today+"/public_room_check_access_settings"+RandomUtils.generateRandom(4); + const roomName = "test/" + today + "/public_room_check_access_settings" + RandomUtils.generateRandom(4); - RoomUtils.createPublicRoom(roomName) - .then((roomId) => { - RoomUtils.openRoomAccessSettings(roomName); + RoomUtils.createPublicRoom(roomName).then((roomId) => { + RoomUtils.openRoomAccessSettings(roomName); - //assert - cy.get('#joinRule-invite-description').should('not.exist'); - cy.get('#joinRule-restricted-description').should('not.exist'); - cy.get('#joinRule-public-description').should('exist'); + //assert + cy.get("#joinRule-invite-description").should("not.exist"); + cy.get("#joinRule-restricted-description").should("not.exist"); + cy.get("#joinRule-public-description").should("exist"); - //encryption switch should be off and disabled - cy.contains(".mx_SettingsFlag", /^Chiffré$/).within(() => { - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-checked', 'false'); - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-disabled', 'true'); - }); + //encryption switch should be off and disabled + cy.contains(".mx_SettingsFlag", /^Chiffré$/).within(() => { + cy.get(".mx_AccessibleButton").should("have.attr", "aria-checked", "false"); + cy.get(".mx_AccessibleButton").should("have.attr", "aria-disabled", "true"); + }); - //should not show more settings, nor invite guests - cy.contains('.mx_SettingsTab_section', /^Afficher les paramètres avancés$/).should('not.exist'); - cy.contains('.mx_SettingsFlag', /^Activer l’accès visiteur$/).should('not.exist'); + //should not show more settings, nor invite guests + cy.contains(".mx_SettingsTab_section", /^Afficher les paramètres avancés$/).should("not.exist"); + cy.contains(".mx_SettingsFlag", /^Activer l’accès visiteur$/).should("not.exist"); - cy.leaveRoom(roomId); - }); + cy.leaveRoom(roomId); + }); }); it("creates a private room and check access settings", () => { - const roomName = "test/"+today+"/private_room_check_access_settings"+RandomUtils.generateRandom(4); - - RoomUtils.createPrivateRoom(roomName) - .then((roomId) => { - RoomUtils.openRoomAccessSettings(roomName); - - //assert - cy.get('#joinRule-invite-description').should('exist'); - cy.get('#joinRule-restricted-description').should('not.exist'); - cy.get('#joinRule-public-description').should('not.exist'); - - //encryption switch should be on - cy.contains(".mx_SettingsFlag", /^Chiffré$/).within(() => { - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-checked', 'true'); - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-disabled', 'true'); - }); - - //external user access switch should not be on and not disabled - cy.contains(".mx_SettingsFlag", /^Autoriser les externes à rejoindre ce salon$/).within(() => { - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-checked', 'false'); - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-disabled', 'false'); - }); - - cy.leaveRoom(roomId); + const roomName = "test/" + today + "/private_room_check_access_settings" + RandomUtils.generateRandom(4); + + RoomUtils.createPrivateRoom(roomName).then((roomId) => { + RoomUtils.openRoomAccessSettings(roomName); + + //assert + cy.get("#joinRule-invite-description").should("exist"); + cy.get("#joinRule-restricted-description").should("not.exist"); + cy.get("#joinRule-public-description").should("not.exist"); + + //encryption switch should be on + cy.contains(".mx_SettingsFlag", /^Chiffré$/).within(() => { + cy.get(".mx_AccessibleButton").should("have.attr", "aria-checked", "true"); + cy.get(".mx_AccessibleButton").should("have.attr", "aria-disabled", "true"); }); + + //external user access switch should not be on and not disabled + cy.contains(".mx_SettingsFlag", /^Autoriser les externes à rejoindre ce salon$/).within(() => { + cy.get(".mx_AccessibleButton").should("have.attr", "aria-checked", "false"); + cy.get(".mx_AccessibleButton").should("have.attr", "aria-disabled", "false"); + }); + + cy.leaveRoom(roomId); + }); }); it("creates a private room with external and check access settings", () => { - const roomName = "test/"+today+"/external_room_check_access_settings"+RandomUtils.generateRandom(4); - - RoomUtils.createPrivateWithExternalRoom(roomName) - .then((roomId) => { - RoomUtils.openRoomAccessSettings(roomName); - - //assert - cy.get('#joinRule-invite-description').should('exist'); - cy.get('#joinRule-restricted-description').should('not.exist'); - cy.get('#joinRule-public-description').should('not.exist'); - - //encryption switch should be on - cy.contains(".mx_SettingsFlag", /^Chiffré$/).within(() => { - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-checked', 'true'); - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-disabled', 'true'); - }); - - // external user access switch should be on and disabled - cy.contains(".mx_SettingsFlag", /^Autoriser les externes à rejoindre ce salon$/).within(() => { - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-checked', 'true'); - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-disabled', 'true'); - }); - - cy.leaveRoom(roomId); + const roomName = "test/" + today + "/external_room_check_access_settings" + RandomUtils.generateRandom(4); + + RoomUtils.createPrivateWithExternalRoom(roomName).then((roomId) => { + RoomUtils.openRoomAccessSettings(roomName); + + //assert + cy.get("#joinRule-invite-description").should("exist"); + cy.get("#joinRule-restricted-description").should("not.exist"); + cy.get("#joinRule-public-description").should("not.exist"); + + //encryption switch should be on + cy.contains(".mx_SettingsFlag", /^Chiffré$/).within(() => { + cy.get(".mx_AccessibleButton").should("have.attr", "aria-checked", "true"); + cy.get(".mx_AccessibleButton").should("have.attr", "aria-disabled", "true"); + }); + + // external user access switch should be on and disabled + cy.contains(".mx_SettingsFlag", /^Autoriser les externes à rejoindre ce salon$/).within(() => { + cy.get(".mx_AccessibleButton").should("have.attr", "aria-checked", "true"); + cy.get(".mx_AccessibleButton").should("have.attr", "aria-disabled", "true"); }); + + cy.leaveRoom(roomId); + }); }); it("allow access for external users on a private room", () => { - const roomName = "test/"+today+"/private_room_change_external_access_settings"+RandomUtils.generateRandom(4); - - RoomUtils.createPrivateRoom(roomName) - .then((roomId) => { - RoomUtils.openRoomAccessSettings(roomName); - - // click on 'Allow the externals to join' this room - cy.get('[aria-label="Autoriser les externes à rejoindre ce salon"]').click(); - // click on the confirmation popup box - cy.get('[data-testid="dialog-primary-button"]').click(); - - //assert - cy.contains(".mx_SettingsFlag", /^Autoriser les externes à rejoindre ce salon$/).within(() => { - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-checked', 'true'); - cy.get('.mx_AccessibleButton').should('have.attr', 'aria-disabled', 'true'); - }); - //assert room header is updated - cy.get(".tc_RoomHeader_external").should("exist"); - - cy.leaveRoom(roomId); + const roomName = + "test/" + today + "/private_room_change_external_access_settings" + RandomUtils.generateRandom(4); + + RoomUtils.createPrivateRoom(roomName).then((roomId) => { + RoomUtils.openRoomAccessSettings(roomName); + + // click on 'Allow the externals to join' this room + cy.get('[aria-label="Autoriser les externes à rejoindre ce salon"]').click(); + // click on the confirmation popup box + cy.get('[data-testid="dialog-primary-button"]').click(); + + //assert + cy.contains(".mx_SettingsFlag", /^Autoriser les externes à rejoindre ce salon$/).within(() => { + cy.get(".mx_AccessibleButton").should("have.attr", "aria-checked", "true"); + cy.get(".mx_AccessibleButton").should("have.attr", "aria-disabled", "true"); }); + //assert room header is updated + cy.get(".tc_RoomHeader_external").should("exist"); + + cy.leaveRoom(roomId); + }); }); }); - diff --git a/cypress/e2e/settings/security.ts b/cypress/e2e/settings/security.ts index 3a7982a59a..818d67ebae 100644 --- a/cypress/e2e/settings/security.ts +++ b/cypress/e2e/settings/security.ts @@ -1,22 +1,25 @@ -describe('Check settings customization', () => { - const homeserverUrl = Cypress.env('E2E_TEST_USER_HOMESERVER_URL'); - const email = Cypress.env('E2E_TEST_USER_EMAIL'); - const password = Cypress.env('E2E_TEST_USER_PASSWORD'); +describe("Check settings customization", () => { + const homeserverUrl = Cypress.env("E2E_TEST_USER_HOMESERVER_URL"); + const email = Cypress.env("E2E_TEST_USER_EMAIL"); + const password = Cypress.env("E2E_TEST_USER_PASSWORD"); - beforeEach(() => { - cy.loginUser(homeserverUrl, email, password); - }); + beforeEach(() => { + cy.loginUser(homeserverUrl, email, password); + }); - it('show security configs without the things we dont like', () => { - cy.get(".mx_UserMenu_userAvatar").click(); - cy.get('[aria-label="Sécurité et vie privée"]').click(); + it("show security configs without the things we dont like", () => { + cy.get(".mx_UserMenu_userAvatar").click(); + cy.get('[aria-label="Sécurité et vie privée"]').click(); - /** - * The section "Recherche de message" has been deleted, it was between "Sauvegarde automatique des messages" and "Signature croisée" - * https://github.com/tchapgouv/tchap-web-v4/issues/466 - * see res/themes/tchap-common/css/_tchap_custom.pcss - */ - cy.get(':nth-child(4) > :nth-child(1) > .mx_SettingsTab_subheading').should("contain", "Sauvegarde automatique des messages"); - cy.get(':nth-child(3) > .mx_SettingsTab_subheading').should("contain", "Signature croisée"); - }) -}) \ No newline at end of file + /** + * The section "Recherche de message" has been deleted, it was between "Sauvegarde automatique des messages" and "Signature croisée" + * https://github.com/tchapgouv/tchap-web-v4/issues/466 + * see res/themes/tchap-common/css/_tchap_custom.pcss + */ + cy.get(":nth-child(4) > :nth-child(1) > .mx_SettingsTab_subheading").should( + "contain", + "Sauvegarde automatique des messages", + ); + cy.get(":nth-child(3) > .mx_SettingsTab_subheading").should("contain", "Signature croisée"); + }); +}); diff --git a/cypress/plugins/docker/index.ts b/cypress/plugins/docker/index.ts index 98f8c2584d..d900b3392c 100644 --- a/cypress/plugins/docker/index.ts +++ b/cypress/plugins/docker/index.ts @@ -25,11 +25,7 @@ import PluginConfigOptions = Cypress.PluginConfigOptions; // A cypress plugin to run docker commands -export function dockerRun(args: { - image: string; - containerName: string; - params?: string[]; -}): Promise { +export function dockerRun(args: { image: string; containerName: string; params?: string[] }): Promise { const userInfo = os.userInfo(); const params = args.params ?? []; @@ -39,37 +35,33 @@ export function dockerRun(args: { } return new Promise((resolve, reject) => { - childProcess.execFile('docker', [ - "run", - "--name", args.containerName, - "-d", - ...params, - args.image, - "run", - ], (err, stdout) => { - if (err) reject(err); - resolve(stdout.trim()); - }); + childProcess.execFile( + "docker", + ["run", "--name", args.containerName, "-d", ...params, args.image, "run"], + (err, stdout) => { + if (err) reject(err); + resolve(stdout.trim()); + }, + ); }); } -export function dockerExec(args: { - containerId: string; - params: string[]; -}): Promise { +export function dockerExec(args: { containerId: string; params: string[] }): Promise { return new Promise((resolve, reject) => { - childProcess.execFile("docker", [ - "exec", args.containerId, - ...args.params, - ], { encoding: 'utf8' }, (err, stdout, stderr) => { - if (err) { - console.log(stdout); - console.log(stderr); - reject(err); - return; - } - resolve(); - }); + childProcess.execFile( + "docker", + ["exec", args.containerId, ...args.params], + { encoding: "utf8" }, + (err, stdout, stderr) => { + if (err) { + console.log(stdout); + console.log(stderr); + reject(err); + return; + } + resolve(); + }, + ); }); } @@ -82,40 +74,29 @@ export async function dockerLogs(args: { const stderrFile = args.stderrFile ? await fse.open(args.stderrFile, "w") : "ignore"; await new Promise((resolve) => { - childProcess.spawn("docker", [ - "logs", - args.containerId, - ], { - stdio: ["ignore", stdoutFile, stderrFile], - }).once('close', resolve); + childProcess + .spawn("docker", ["logs", args.containerId], { + stdio: ["ignore", stdoutFile, stderrFile], + }) + .once("close", resolve); }); if (args.stdoutFile) await fse.close(stdoutFile); if (args.stderrFile) await fse.close(stderrFile); } -export function dockerStop(args: { - containerId: string; -}): Promise { +export function dockerStop(args: { containerId: string }): Promise { return new Promise((resolve, reject) => { - childProcess.execFile('docker', [ - "stop", - args.containerId, - ], err => { + childProcess.execFile("docker", ["stop", args.containerId], (err) => { if (err) reject(err); resolve(); }); }); } -export function dockerRm(args: { - containerId: string; -}): Promise { +export function dockerRm(args: { containerId: string }): Promise { return new Promise((resolve, reject) => { - childProcess.execFile('docker', [ - "rm", - args.containerId, - ], err => { + childProcess.execFile("docker", ["rm", args.containerId], (err) => { if (err) reject(err); resolve(); }); diff --git a/cypress/plugins/index.ts b/cypress/plugins/index.ts index 44dd93b829..8295ed8b68 100644 --- a/cypress/plugins/index.ts +++ b/cypress/plugins/index.ts @@ -27,7 +27,7 @@ import { log } from "./log"; /** * @type {Cypress.PluginConfig} */ -export default function(on: PluginEvents, config: PluginConfigOptions) { +export default function (on: PluginEvents, config: PluginConfigOptions) { docker(on, config); performance(on, config); synapseDocker(on, config); diff --git a/cypress/plugins/synapsedocker/index.ts b/cypress/plugins/synapsedocker/index.ts index 5227b5e4ac..91b9f8552a 100644 --- a/cypress/plugins/synapsedocker/index.ts +++ b/cypress/plugins/synapsedocker/index.ts @@ -54,11 +54,11 @@ async function cfgDirFromTemplate(template: string): Promise { if (!stats?.isDirectory) { throw new Error(`No such template: ${template}`); } - const tempDir = await fse.mkdtemp(path.join(os.tmpdir(), 'react-sdk-synapsedocker-')); + const tempDir = await fse.mkdtemp(path.join(os.tmpdir(), "react-sdk-synapsedocker-")); // copy the contents of the template dir, omitting homeserver.yaml as we'll template that console.log(`Copy ${templateDir} -> ${tempDir}`); - await fse.copy(templateDir, tempDir, { filter: f => path.basename(f) !== 'homeserver.yaml' }); + await fse.copy(templateDir, tempDir, { filter: (f) => path.basename(f) !== "homeserver.yaml" }); const registrationSecret = randB64Bytes(16); const macaroonSecret = randB64Bytes(16); @@ -102,11 +102,7 @@ async function synapseStart(template: string): Promise { const synapseId = await dockerRun({ image: "matrixdotorg/synapse:develop", containerName: `react-sdk-cypress-synapse-${crypto.randomBytes(4).toString("hex")}`, - params: [ - "--rm", - "-v", `${synCfg.configDir}:/data`, - "-p", `${synCfg.port}:8008/tcp`, - ], + params: ["--rm", "-v", `${synCfg.configDir}:/data`, "-p", `${synCfg.port}:8008/tcp`], }); console.log(`Started synapse with id ${synapseId} on port ${synCfg.port}.`); @@ -116,9 +112,12 @@ async function synapseStart(template: string): Promise { containerId: synapseId, params: [ "curl", - "--connect-timeout", "30", - "--retry", "30", - "--retry-delay", "1", + "--connect-timeout", + "30", + "--retry", + "30", + "--retry-delay", + "1", "--retry-all-errors", "--silent", "http://localhost:8008/health", diff --git a/cypress/plugins/synapsedocker/templates/COPYME/homeserver.yaml b/cypress/plugins/synapsedocker/templates/COPYME/homeserver.yaml index fab1bc1c45..cb58dc8661 100644 --- a/cypress/plugins/synapsedocker/templates/COPYME/homeserver.yaml +++ b/cypress/plugins/synapsedocker/templates/COPYME/homeserver.yaml @@ -5,21 +5,21 @@ pid_file: /data/homeserver.pid public_baseurl: http://localhost:8008/ # Listener is always port 8008 (configured in the container) listeners: - - port: 8008 - tls: false - bind_addresses: ['::'] - type: http - x_forwarded: true + - port: 8008 + tls: false + bind_addresses: ["::"] + type: http + x_forwarded: true - resources: - - names: [client, federation, consent] - compress: false + resources: + - names: [client, federation, consent] + compress: false # An sqlite in-memory database is fast & automatically wipes each time database: - name: "sqlite3" - args: - database: ":memory:" + name: "sqlite3" + args: + database: ":memory:" # Needs to be configured to log to the console like a good docker process log_config: "/data/log.config" @@ -27,20 +27,20 @@ log_config: "/data/log.config" rc_messages_per_second: 10000 rc_message_burst_count: 10000 rc_registration: - per_second: 10000 - burst_count: 10000 - -rc_login: - address: - per_second: 10000 - burst_count: 10000 - account: - per_second: 10000 - burst_count: 10000 - failed_attempts: per_second: 10000 burst_count: 10000 +rc_login: + address: + per_second: 10000 + burst_count: 10000 + account: + per_second: 10000 + burst_count: 10000 + failed_attempts: + per_second: 10000 + burst_count: 10000 + media_store_path: "/data/media_store" uploads_path: "/data/uploads" enable_registration: true @@ -54,19 +54,19 @@ form_secret: "{{FORM_SECRET}}" # Signing key must be here: it will be generated to this file signing_key_path: "/data/localhost.signing.key" email: - enable_notifs: false - smtp_host: "localhost" - smtp_port: 25 - smtp_user: "exampleusername" - smtp_pass: "examplepassword" - require_transport_security: False - notif_from: "Your Friendly %(app)s homeserver " - app_name: Matrix - notif_template_html: notif_mail.html - notif_template_text: notif_mail.txt - notif_for_new_users: True - client_base_url: "http://localhost/element" + enable_notifs: false + smtp_host: "localhost" + smtp_port: 25 + smtp_user: "exampleusername" + smtp_pass: "examplepassword" + require_transport_security: False + notif_from: "Your Friendly %(app)s homeserver " + app_name: Matrix + notif_template_html: notif_mail.html + notif_template_text: notif_mail.txt + notif_for_new_users: True + client_base_url: "http://localhost/element" trusted_key_servers: - - server_name: "matrix.org" + - server_name: "matrix.org" suppress_key_server_warning: true diff --git a/cypress/plugins/synapsedocker/templates/consent/homeserver.yaml b/cypress/plugins/synapsedocker/templates/consent/homeserver.yaml index 6decaeb5a0..d3a4fa520c 100644 --- a/cypress/plugins/synapsedocker/templates/consent/homeserver.yaml +++ b/cypress/plugins/synapsedocker/templates/consent/homeserver.yaml @@ -2,40 +2,40 @@ server_name: "localhost" pid_file: /data/homeserver.pid public_baseurl: "{{PUBLIC_BASEURL}}" listeners: - - port: 8008 - tls: false - bind_addresses: ['::'] - type: http - x_forwarded: true + - port: 8008 + tls: false + bind_addresses: ["::"] + type: http + x_forwarded: true - resources: - - names: [client, federation, consent] - compress: false + resources: + - names: [client, federation, consent] + compress: false database: - name: "sqlite3" - args: - database: ":memory:" + name: "sqlite3" + args: + database: ":memory:" log_config: "/data/log.config" rc_messages_per_second: 10000 rc_message_burst_count: 10000 rc_registration: - per_second: 10000 - burst_count: 10000 - -rc_login: - address: - per_second: 10000 - burst_count: 10000 - account: - per_second: 10000 - burst_count: 10000 - failed_attempts: per_second: 10000 burst_count: 10000 +rc_login: + address: + per_second: 10000 + burst_count: 10000 + account: + per_second: 10000 + burst_count: 10000 + failed_attempts: + per_second: 10000 + burst_count: 10000 + media_store_path: "/data/media_store" uploads_path: "/data/uploads" enable_registration: true @@ -47,38 +47,38 @@ macaroon_secret_key: "{{MACAROON_SECRET_KEY}}" form_secret: "{{FORM_SECRET}}" signing_key_path: "/data/localhost.signing.key" email: - enable_notifs: false - smtp_host: "localhost" - smtp_port: 25 - smtp_user: "exampleusername" - smtp_pass: "examplepassword" - require_transport_security: False - notif_from: "Your Friendly %(app)s homeserver " - app_name: Matrix - notif_template_html: notif_mail.html - notif_template_text: notif_mail.txt - notif_for_new_users: True - client_base_url: "http://localhost/element" + enable_notifs: false + smtp_host: "localhost" + smtp_port: 25 + smtp_user: "exampleusername" + smtp_pass: "examplepassword" + require_transport_security: False + notif_from: "Your Friendly %(app)s homeserver " + app_name: Matrix + notif_template_html: notif_mail.html + notif_template_text: notif_mail.txt + notif_for_new_users: True + client_base_url: "http://localhost/element" user_consent: - template_dir: /data/res/templates/privacy - version: 1.0 - server_notice_content: - msgtype: m.text - body: >- - To continue using this homeserver you must review and agree to the - terms and conditions at %(consent_uri)s - send_server_notice_to_guests: True - block_events_error: >- - To continue using this homeserver you must review and agree to the - terms and conditions at %(consent_uri)s - require_at_registration: true + template_dir: /data/res/templates/privacy + version: 1.0 + server_notice_content: + msgtype: m.text + body: >- + To continue using this homeserver you must review and agree to the + terms and conditions at %(consent_uri)s + send_server_notice_to_guests: True + block_events_error: >- + To continue using this homeserver you must review and agree to the + terms and conditions at %(consent_uri)s + require_at_registration: true server_notices: - system_mxid_localpart: notices - system_mxid_display_name: "Server Notices" - system_mxid_avatar_url: "mxc://localhost:5005/oumMVlgDnLYFaPVkExemNVVZ" - room_name: "Server Notices" + system_mxid_localpart: notices + system_mxid_display_name: "Server Notices" + system_mxid_avatar_url: "mxc://localhost:5005/oumMVlgDnLYFaPVkExemNVVZ" + room_name: "Server Notices" trusted_key_servers: - - server_name: "matrix.org" + - server_name: "matrix.org" suppress_key_server_warning: true diff --git a/cypress/plugins/synapsedocker/templates/consent/res/templates/privacy/en/1.0.html b/cypress/plugins/synapsedocker/templates/consent/res/templates/privacy/en/1.0.html index d4959b4bcb..8ee888518a 100644 --- a/cypress/plugins/synapsedocker/templates/consent/res/templates/privacy/en/1.0.html +++ b/cypress/plugins/synapsedocker/templates/consent/res/templates/privacy/en/1.0.html @@ -1,23 +1,19 @@ - + - - Test Privacy policy - - - {% if has_consented %} -

- Thank you, you've already accepted the license. -

- {% else %} -

- Please accept the license! -

-
- - - - -
- {% endif %} - - \ No newline at end of file + + Test Privacy policy + + + {% if has_consented %} +

Thank you, you've already accepted the license.

+ {% else %} +

Please accept the license!

+
+ + + + +
+ {% endif %} + + diff --git a/cypress/plugins/synapsedocker/templates/consent/res/templates/privacy/en/success.html b/cypress/plugins/synapsedocker/templates/consent/res/templates/privacy/en/success.html index abe27d87ca..0345001e75 100644 --- a/cypress/plugins/synapsedocker/templates/consent/res/templates/privacy/en/success.html +++ b/cypress/plugins/synapsedocker/templates/consent/res/templates/privacy/en/success.html @@ -1,9 +1,9 @@ - + - - Test Privacy policy - - -

Danke schon

- - \ No newline at end of file + + Test Privacy policy + + +

Danke schon

+ + diff --git a/cypress/plugins/synapsedocker/templates/default/homeserver.yaml b/cypress/plugins/synapsedocker/templates/default/homeserver.yaml index 347dadc88f..aaad3420b9 100644 --- a/cypress/plugins/synapsedocker/templates/default/homeserver.yaml +++ b/cypress/plugins/synapsedocker/templates/default/homeserver.yaml @@ -2,60 +2,60 @@ server_name: "localhost" pid_file: /data/homeserver.pid public_baseurl: "{{PUBLIC_BASEURL}}" listeners: - - port: 8008 - tls: false - bind_addresses: ['::'] - type: http - x_forwarded: true + - port: 8008 + tls: false + bind_addresses: ["::"] + type: http + x_forwarded: true - resources: - - names: [client] - compress: false + resources: + - names: [client] + compress: false database: - name: "sqlite3" - args: - database: ":memory:" + name: "sqlite3" + args: + database: ":memory:" log_config: "/data/log.config" rc_messages_per_second: 10000 rc_message_burst_count: 10000 rc_registration: - per_second: 10000 - burst_count: 10000 + per_second: 10000 + burst_count: 10000 rc_joins: - local: - per_second: 9999 - burst_count: 9999 - remote: + local: + per_second: 9999 + burst_count: 9999 + remote: + per_second: 9999 + burst_count: 9999 +rc_joins_per_room: per_second: 9999 burst_count: 9999 -rc_joins_per_room: - per_second: 9999 - burst_count: 9999 rc_3pid_validation: - per_second: 1000 - burst_count: 1000 - -rc_invites: - per_room: - per_second: 1000 - burst_count: 1000 - per_user: per_second: 1000 burst_count: 1000 +rc_invites: + per_room: + per_second: 1000 + burst_count: 1000 + per_user: + per_second: 1000 + burst_count: 1000 + rc_login: - address: - per_second: 10000 - burst_count: 10000 - account: - per_second: 10000 - burst_count: 10000 - failed_attempts: - per_second: 10000 - burst_count: 10000 + address: + per_second: 10000 + burst_count: 10000 + account: + per_second: 10000 + burst_count: 10000 + failed_attempts: + per_second: 10000 + burst_count: 10000 media_store_path: "/data/media_store" uploads_path: "/data/uploads" @@ -69,8 +69,8 @@ form_secret: "{{FORM_SECRET}}" signing_key_path: "/data/localhost.signing.key" trusted_key_servers: - - server_name: "matrix.org" + - server_name: "matrix.org" suppress_key_server_warning: true ui_auth: - session_timeout: "300s" + session_timeout: "300s" diff --git a/cypress/plugins/utils/port.ts b/cypress/plugins/utils/port.ts index 064ccc7cf9..156ba866d5 100644 --- a/cypress/plugins/utils/port.ts +++ b/cypress/plugins/utils/port.ts @@ -17,7 +17,7 @@ limitations under the License. import * as net from "net"; export async function getFreePort(): Promise { - return new Promise(resolve => { + return new Promise((resolve) => { const srv = net.createServer(); srv.listen(0, () => { const port = (srv.address()).port; diff --git a/cypress/support/app.ts b/cypress/support/app.ts index 322b9785f3..3e9d75173a 100644 --- a/cypress/support/app.ts +++ b/cypress/support/app.ts @@ -32,7 +32,7 @@ declare global { } Cypress.Commands.add("tweakConfig", (tweaks: Record): Chainable => { - return cy.window().then(win => { + return cy.window().then((win) => { // note: we can't *set* the object because the window version is effectively a pointer. for (const [k, v] of Object.entries(tweaks)) { // @ts-ignore - for some reason it's not picking up on global.d.ts types. @@ -42,4 +42,4 @@ Cypress.Commands.add("tweakConfig", (tweaks: Record): Chainable void) | undefined, - skipFailures?: boolean, -): void => { - return originalFn(context, { - ...options, - rules: { - // Disable contrast checking for now as we have too many issues with it - 'color-contrast': { - enabled: false, +Cypress.Commands.overwrite( + "checkA11y", + ( + originalFn: Chainable["checkA11y"], + context?: string | Node | axe.ContextObject | undefined, + options: Options = {}, + violationCallback?: ((violations: axe.Result[]) => void) | undefined, + skipFailures?: boolean, + ): void => { + return originalFn( + context, + { + ...options, + rules: { + // Disable contrast checking for now as we have too many issues with it + "color-contrast": { + enabled: false, + }, + ...options.rules, + }, }, - ...options.rules, - }, - }, violationCallback ?? terminalLog, skipFailures); -}); + violationCallback ?? terminalLog, + skipFailures, + ); + }, +); diff --git a/cypress/support/bot.ts b/cypress/support/bot.ts index ba0d8b8a26..319beacfdf 100644 --- a/cypress/support/bot.ts +++ b/cypress/support/bot.ts @@ -77,8 +77,8 @@ Cypress.Commands.add("getBot", (synapse: SynapseInstance, opts: CreateBotOpts): opts = Object.assign({}, defaultCreateBotOptions, opts); const username = Cypress._.uniqueId("userId_"); const password = Cypress._.uniqueId("password_"); - return cy.registerUser(synapse, username, password, opts.displayName).then(credentials => { - return cy.window({ log: false }).then(win => { + return cy.registerUser(synapse, username, password, opts.displayName).then((credentials) => { + return cy.window({ log: false }).then((win) => { const cli = new win.matrixcs.MatrixClient({ baseUrl: synapse.baseUrl, userId: credentials.userId, @@ -102,12 +102,17 @@ Cypress.Commands.add("getBot", (synapse: SynapseInstance, opts: CreateBotOpts): } return cy.wrap( - cli.initCrypto() + cli + .initCrypto() .then(() => cli.setGlobalErrorOnUnknownDevices(false)) .then(() => cli.startClient()) - .then(() => cli.bootstrapCrossSigning({ - authUploadDeviceSigningKeys: async func => { await func({}); }, - })) + .then(() => + cli.bootstrapCrossSigning({ + authUploadDeviceSigningKeys: async (func) => { + await func({}); + }, + }), + ) .then(() => cli), ); }); @@ -128,13 +133,15 @@ Cypress.Commands.add("botJoinRoomByName", (cli: MatrixClient, roomName: string): return cy.wrap(Promise.reject()); }); -Cypress.Commands.add("botSendMessage", ( - cli: MatrixClient, - roomId: string, - message: string, -): Chainable => { - return cy.wrap(cli.sendMessage(roomId, { - msgtype: "m.text", - body: message, - }), { log: false }); -}); +Cypress.Commands.add( + "botSendMessage", + (cli: MatrixClient, roomId: string, message: string): Chainable => { + return cy.wrap( + cli.sendMessage(roomId, { + msgtype: "m.text", + body: message, + }), + { log: false }, + ); + }, +); diff --git a/cypress/support/client.ts b/cypress/support/client.ts index b0531866bd..7f5884f018 100644 --- a/cypress/support/client.ts +++ b/cypress/support/client.ts @@ -67,7 +67,7 @@ declare global { roomId: string, threadId: string | null, eventType: string, - content: IContent + content: IContent, ): Chainable; /** * @param {string} name @@ -140,23 +140,24 @@ declare global { } Cypress.Commands.add("getClient", (): Chainable => { - return cy.window({ log: false }).then(win => win.mxMatrixClientPeg.matrixClient); + return cy.window({ log: false }).then((win) => win.mxMatrixClientPeg.matrixClient); }); Cypress.Commands.add("getDmRooms", (userId: string): Chainable => { - return cy.getClient() - .then(cli => cli.getAccountData("m.direct")?.getContent>()) - .then(dmRoomMap => dmRoomMap[userId] ?? []); + return cy + .getClient() + .then((cli) => cli.getAccountData("m.direct")?.getContent>()) + .then((dmRoomMap) => dmRoomMap[userId] ?? []); }); Cypress.Commands.add("createRoom", (options: ICreateRoomOpts): Chainable => { - return cy.window({ log: false }).then(async win => { + return cy.window({ log: false }).then(async (win) => { const cli = win.mxMatrixClientPeg.matrixClient; const resp = await cli.createRoom(options); const roomId = resp.room_id; if (!cli.getRoom(roomId)) { - await new Promise(resolve => { + await new Promise((resolve) => { const onRoom = (room: Room) => { if (room.roomId === roomId) { cli.off(win.matrixcs.ClientEvent.Room, onRoom); @@ -175,7 +176,7 @@ Cypress.Commands.add("createSpace", (options: ICreateRoomOpts): Chainable => { - return cy.getClient().then(async (cli: MatrixClient) => { - return cli.sendEvent(roomId, threadId, eventType, content); - }); -}); +Cypress.Commands.add( + "sendEvent", + (roomId: string, threadId: string | null, eventType: string, content: IContent): Chainable => { + return cy.getClient().then(async (cli: MatrixClient) => { + return cli.sendEvent(roomId, threadId, eventType, content); + }); + }, +); Cypress.Commands.add("setDisplayName", (name: string): Chainable<{}> => { return cy.getClient().then(async (cli: MatrixClient) => { @@ -222,17 +221,19 @@ Cypress.Commands.add("setAvatarUrl", (url: string): Chainable<{}> => { }); Cypress.Commands.add("bootstrapCrossSigning", () => { - cy.window({ log: false }).then(win => { + cy.window({ log: false }).then((win) => { win.mxMatrixClientPeg.matrixClient.bootstrapCrossSigning({ - authUploadDeviceSigningKeys: async func => { await func({}); }, + authUploadDeviceSigningKeys: async (func) => { + await func({}); + }, }); }); }); Cypress.Commands.add("joinRoom", (roomIdOrAlias: string): Chainable => { - return cy.getClient().then(cli => cli.joinRoom(roomIdOrAlias)); + return cy.getClient().then((cli) => cli.joinRoom(roomIdOrAlias)); }); Cypress.Commands.add("leaveRoom", (roomId: string): Chainable<{}> => { - return cy.getClient().then(cli => cli.leave(roomId)); + return cy.getClient().then((cli) => cli.leave(roomId)); }); diff --git a/cypress/support/clipboard.ts b/cypress/support/clipboard.ts index 5e80ed8361..795caee595 100644 --- a/cypress/support/clipboard.ts +++ b/cypress/support/clipboard.ts @@ -41,7 +41,7 @@ declare global { } Cypress.Commands.add("mockClipboard", () => { - cy.window({ log: false }).then(win => { + cy.window({ log: false }).then((win) => { win.navigator.clipboard.writeText = (text) => { copyText = text; return Promise.resolve(); @@ -54,4 +54,4 @@ Cypress.Commands.add("getClipboardText", (): Chainable => { }); // Needed to make this file a module -export { }; +export {}; diff --git a/cypress/support/composer.ts b/cypress/support/composer.ts index ae6c8bef87..347c581a47 100644 --- a/cypress/support/composer.ts +++ b/cypress/support/composer.ts @@ -33,7 +33,7 @@ declare global { } Cypress.Commands.add("getComposer", (isRightPanel?: boolean): Chainable => { - const panelClass = isRightPanel ? '.mx_RightPanel' : '.mx_RoomView_body'; + const panelClass = isRightPanel ? ".mx_RightPanel" : ".mx_RoomView_body"; return cy.get(`${panelClass} .mx_MessageComposer`); }); @@ -41,8 +41,8 @@ Cypress.Commands.add("openMessageComposerOptions", (isRightPanel?: boolean): Cha cy.getComposer(isRightPanel).within(() => { cy.get('[aria-label="More options"]').click(); }); - return cy.get('.mx_MessageComposer_Menu'); + return cy.get(".mx_MessageComposer_Menu"); }); // Needed to make this file a module -export { }; +export {}; diff --git a/cypress/support/iframes.ts b/cypress/support/iframes.ts index 27bd5e0b8e..03bd653e3b 100644 --- a/cypress/support/iframes.ts +++ b/cypress/support/iframes.ts @@ -35,11 +35,15 @@ declare global { // Inspired by https://www.cypress.io/blog/2020/02/12/working-with-iframes-in-cypress/ Cypress.Commands.add("accessIframe", (selector: string): Chainable> => { - return cy.get(selector) - .its("0.contentDocument.body").should("not.be.empty") - // Cypress loses types in the mess of wrapping, so force cast - .then(cy.wrap) as Chainable>; + return ( + cy + .get(selector) + .its("0.contentDocument.body") + .should("not.be.empty") + // Cypress loses types in the mess of wrapping, so force cast + .then(cy.wrap) as Chainable> + ); }); // Needed to make this file a module -export { }; +export {}; diff --git a/cypress/support/labs.ts b/cypress/support/labs.ts index 3fff154e14..f069589173 100644 --- a/cypress/support/labs.ts +++ b/cypress/support/labs.ts @@ -33,10 +33,13 @@ declare global { } Cypress.Commands.add("enableLabsFeature", (feature: string): Chainable => { - return cy.window({ log: false }).then(win => { - win.localStorage.setItem(`mx_labs_feature_${feature}`, "true"); - }).then(() => null); + return cy + .window({ log: false }) + .then((win) => { + win.localStorage.setItem(`mx_labs_feature_${feature}`, "true"); + }) + .then(() => null); }); // Needed to make this file a module -export { }; +export {}; diff --git a/cypress/support/login.ts b/cypress/support/login.ts index 4cdfd6a84d..cab377a54d 100644 --- a/cypress/support/login.ts +++ b/cypress/support/login.ts @@ -47,63 +47,72 @@ declare global { } // eslint-disable-next-line max-len -Cypress.Commands.add("initTestUser", (synapse: SynapseInstance, displayName: string, prelaunchFn?: () => void): Chainable => { - // XXX: work around Cypress not clearing IDB between tests - cy.window({ log: false }).then(win => { - win.indexedDB.databases().then(databases => { - databases.forEach(database => { - win.indexedDB.deleteDatabase(database.name); +Cypress.Commands.add( + "initTestUser", + (synapse: SynapseInstance, displayName: string, prelaunchFn?: () => void): Chainable => { + // XXX: work around Cypress not clearing IDB between tests + cy.window({ log: false }).then((win) => { + win.indexedDB.databases().then((databases) => { + databases.forEach((database) => { + win.indexedDB.deleteDatabase(database.name); + }); }); }); - }); - const username = Cypress._.uniqueId("userId_"); - const password = Cypress._.uniqueId("password_"); - return cy.registerUser(synapse, username, password, displayName).then(() => { - const url = `${synapse.baseUrl}/_matrix/client/r0/login`; - return cy.request<{ - access_token: string; - user_id: string; - device_id: string; - home_server: string; - }>({ - url, - method: "POST", - body: { - "type": "m.login.password", - "identifier": { - "type": "m.id.user", - "user": username, - }, - "password": password, - }, - }); - }).then(response => { - cy.window({ log: false }).then(win => { - // Seed the localStorage with the required credentials - win.localStorage.setItem("mx_hs_url", synapse.baseUrl); - win.localStorage.setItem("mx_user_id", response.body.user_id); - win.localStorage.setItem("mx_access_token", response.body.access_token); - win.localStorage.setItem("mx_device_id", response.body.device_id); - win.localStorage.setItem("mx_is_guest", "false"); - win.localStorage.setItem("mx_has_pickle_key", "false"); - win.localStorage.setItem("mx_has_access_token", "true"); + const username = Cypress._.uniqueId("userId_"); + const password = Cypress._.uniqueId("password_"); + return cy + .registerUser(synapse, username, password, displayName) + .then(() => { + const url = `${synapse.baseUrl}/_matrix/client/r0/login`; + return cy.request<{ + access_token: string; + user_id: string; + device_id: string; + home_server: string; + }>({ + url, + method: "POST", + body: { + type: "m.login.password", + identifier: { + type: "m.id.user", + user: username, + }, + password: password, + }, + }); + }) + .then((response) => { + cy.window({ log: false }).then((win) => { + // Seed the localStorage with the required credentials + win.localStorage.setItem("mx_hs_url", synapse.baseUrl); + win.localStorage.setItem("mx_user_id", response.body.user_id); + win.localStorage.setItem("mx_access_token", response.body.access_token); + win.localStorage.setItem("mx_device_id", response.body.device_id); + win.localStorage.setItem("mx_is_guest", "false"); + win.localStorage.setItem("mx_has_pickle_key", "false"); + win.localStorage.setItem("mx_has_access_token", "true"); - // Ensure the language is set to a consistent value - win.localStorage.setItem("mx_local_settings", '{"language":"en"}'); - }); + // Ensure the language is set to a consistent value + win.localStorage.setItem("mx_local_settings", '{"language":"en"}'); + }); - prelaunchFn?.(); + prelaunchFn?.(); - return cy.visit("/").then(() => { - // wait for the app to load - return cy.get(".mx_MatrixChat", { timeout: 15000 }); - }).then(() => ({ - password, - accessToken: response.body.access_token, - userId: response.body.user_id, - deviceId: response.body.device_id, - homeServer: response.body.home_server, - })); - }); -}); + return cy + .visit("/") + .then(() => { + // wait for the app to load + return cy.get(".mx_MatrixChat", { timeout: 15000 }); + }) + .then(() => ({ + password, + accessToken: response.body.access_token, + userId: response.body.user_id, + deviceId: response.body.device_id, + homeServer: response.body.home_server, + })); + }); + }, +); diff --git a/cypress/support/loginToRemoteHomeserver.ts b/cypress/support/loginToRemoteHomeserver.ts index 49644e7277..58d933966d 100644 --- a/cypress/support/loginToRemoteHomeserver.ts +++ b/cypress/support/loginToRemoteHomeserver.ts @@ -37,78 +37,78 @@ declare global { * @param password Optional. The password of an existing user in this homeserver * @return UserCredentials for the logged in user. */ - loginUser( - homeserverUrl?: string, - email?: string, - password?: string, - ): Chainable; + loginUser(homeserverUrl?: string, email?: string, password?: string): Chainable; } } } -Cypress.Commands.add("loginUser", ( - homeserverUrl?: string, - email?: string, - password?: string, -): Chainable => { - homeserverUrl = homeserverUrl ?? Cypress.env('E2E_TEST_USER_HOMESERVER_URL'); - email = email ?? Cypress.env('E2E_TEST_USER_EMAIL'); - password = password ?? Cypress.env('E2E_TEST_USER_PASSWORD'); +Cypress.Commands.add( + "loginUser", + (homeserverUrl?: string, email?: string, password?: string): Chainable => { + homeserverUrl = homeserverUrl ?? Cypress.env("E2E_TEST_USER_HOMESERVER_URL"); + email = email ?? Cypress.env("E2E_TEST_USER_EMAIL"); + password = password ?? Cypress.env("E2E_TEST_USER_PASSWORD"); - // XXX: work around Cypress not clearing IDB between tests - // Otherwise Cypress clears all localstorage and cookies between tests. - // https://github.com/cypress-io/cypress/issues/1208 - cy.window({ log: false }).then(win => { - win.indexedDB.databases().then(databases => { - databases.forEach(database => { - win.indexedDB.deleteDatabase(database.name); + // XXX: work around Cypress not clearing IDB between tests + // Otherwise Cypress clears all localstorage and cookies between tests. + // https://github.com/cypress-io/cypress/issues/1208 + cy.window({ log: false }).then((win) => { + win.indexedDB.databases().then((databases) => { + databases.forEach((database) => { + win.indexedDB.deleteDatabase(database.name); + }); }); }); - }); - const url = `${homeserverUrl}/_matrix/client/r0/login`; + const url = `${homeserverUrl}/_matrix/client/r0/login`; - return cy.request<{ - access_token: string; - user_id: string; - device_id: string; - home_server: string; - }>({ - url, - method: "POST", - body: { - "type": "m.login.password", - "identifier": { - "type": "m.id.thirdparty", - "medium": "email", - "address": email, - }, - "password": password, - }, - }).then(response => { - cy.window({ log: false }).then(win => { - // Seed the localStorage with the required credentials - win.localStorage.setItem("mx_hs_url", homeserverUrl); - win.localStorage.setItem("mx_user_id", response.body.user_id); - win.localStorage.setItem("mx_access_token", response.body.access_token); - win.localStorage.setItem("mx_device_id", response.body.device_id); - win.localStorage.setItem("mx_is_guest", "false"); - win.localStorage.setItem("mx_has_pickle_key", "false"); - win.localStorage.setItem("mx_has_access_token", "true"); + return cy + .request<{ + access_token: string; + user_id: string; + device_id: string; + home_server: string; + }>({ + url, + method: "POST", + body: { + type: "m.login.password", + identifier: { + type: "m.id.thirdparty", + medium: "email", + address: email, + }, + password: password, + }, + }) + .then((response) => { + cy.window({ log: false }).then((win) => { + // Seed the localStorage with the required credentials + win.localStorage.setItem("mx_hs_url", homeserverUrl); + win.localStorage.setItem("mx_user_id", response.body.user_id); + win.localStorage.setItem("mx_access_token", response.body.access_token); + win.localStorage.setItem("mx_device_id", response.body.device_id); + win.localStorage.setItem("mx_is_guest", "false"); + win.localStorage.setItem("mx_has_pickle_key", "false"); + win.localStorage.setItem("mx_has_access_token", "true"); - // Ensure the language is set to a consistent value - win.localStorage.setItem("mx_local_settings", '{"language":"fr"}'); - }); + // Ensure the language is set to a consistent value + win.localStorage.setItem("mx_local_settings", '{"language":"fr"}'); + }); - return cy.visit("/").then(() => { - // wait for the app to load - return cy.get(".mx_MatrixChat", { timeout: 15000 }); - }).then(() => ({ - password, - accessToken: response.body.access_token, - userId: response.body.user_id, - deviceId: response.body.device_id, - homeServer: response.body.home_server, - })); - }); -}); + return cy + .visit("/") + .then(() => { + // wait for the app to load + return cy.get(".mx_MatrixChat", { timeout: 15000 }); + }) + .then(() => ({ + password, + accessToken: response.body.access_token, + userId: response.body.user_id, + deviceId: response.body.device_id, + homeServer: response.body.home_server, + })); + }); + }, +); diff --git a/cypress/support/network.ts b/cypress/support/network.ts index 73df049c6c..fc2a35029d 100644 --- a/cypress/support/network.ts +++ b/cypress/support/network.ts @@ -33,30 +33,38 @@ declare global { Cypress.Commands.add("goOffline", (): void => { cy.log("Going offline"); - cy.window({ log: false }).then(win => { - cy.intercept("**/_matrix/**", { - headers: { - "Authorization": "Bearer " + win.mxMatrixClientPeg.matrixClient.getAccessToken(), + cy.window({ log: false }).then((win) => { + cy.intercept( + "**/_matrix/**", + { + headers: { + Authorization: "Bearer " + win.mxMatrixClientPeg.matrixClient.getAccessToken(), + }, }, - }, req => { - req.destroy(); - }); + (req) => { + req.destroy(); + }, + ); }); }); Cypress.Commands.add("goOnline", (): void => { cy.log("Going online"); - cy.window({ log: false }).then(win => { - cy.intercept("**/_matrix/**", { - headers: { - "Authorization": "Bearer " + win.mxMatrixClientPeg.matrixClient.getAccessToken(), + cy.window({ log: false }).then((win) => { + cy.intercept( + "**/_matrix/**", + { + headers: { + Authorization: "Bearer " + win.mxMatrixClientPeg.matrixClient.getAccessToken(), + }, + }, + (req) => { + req.continue(); }, - }, req => { - req.continue(); - }); + ); win.dispatchEvent(new Event("online")); }); }); // Needed to make this file a module -export { }; +export {}; diff --git a/cypress/support/percy.ts b/cypress/support/percy.ts index f190e7a514..f5e30a58fc 100644 --- a/cypress/support/percy.ts +++ b/cypress/support/percy.ts @@ -15,7 +15,7 @@ limitations under the License. */ /// -import { SnapshotOptions as PercySnapshotOptions } from '@percy/core'; +import { SnapshotOptions as PercySnapshotOptions } from "@percy/core"; declare global { // eslint-disable-next-line @typescript-eslint/no-namespace @@ -39,16 +39,16 @@ declare global { Cypress.Commands.add("percySnapshotElement", { prevSubject: "element" }, (subject, name, options) => { cy.percySnapshot(name, { - domTransformation: documentClone => scope(documentClone, subject.selector), + domTransformation: (documentClone) => scope(documentClone, subject.selector), ...options, }); }); function scope(documentClone: Document, selector: string): Document { const element = documentClone.querySelector(selector); - documentClone.querySelector('body').innerHTML = element.outerHTML; + documentClone.querySelector("body").innerHTML = element.outerHTML; return documentClone; } -export { }; +export {}; diff --git a/cypress/support/performance.ts b/cypress/support/performance.ts index bbd1fe217d..5ae1e17ba0 100644 --- a/cypress/support/performance.ts +++ b/cypress/support/performance.ts @@ -63,7 +63,7 @@ Cypress.on("window:before:unload", (event: BeforeUnloadEvent) => { if (doc.location.href === "about:blank") return; const win = doc.defaultView as AUTWindow; if (!win.mxPerformanceMonitor) return; - const entries = win.mxPerformanceMonitor.getEntries().filter(entry => { + const entries = win.mxPerformanceMonitor.getEntries().filter((entry) => { return entry.name.startsWith("cy:"); }); if (!entries || entries.length === 0) return; @@ -71,4 +71,4 @@ Cypress.on("window:before:unload", (event: BeforeUnloadEvent) => { }); // Needed to make this file a module -export { }; +export {}; diff --git a/cypress/support/settings.ts b/cypress/support/settings.ts index ec07df93aa..8c13ef8b1a 100644 --- a/cypress/support/settings.ts +++ b/cypress/support/settings.ts @@ -102,26 +102,27 @@ declare global { } Cypress.Commands.add("getSettingsStore", (): Chainable => { - return cy.window({ log: false }).then(win => win.mxSettingsStore); + return cy.window({ log: false }).then((win) => win.mxSettingsStore); }); -Cypress.Commands.add("setSettingValue", ( - name: string, - roomId: string, - level: SettingLevel, - value: any, -): Chainable => { - return cy.getSettingsStore().then(async (store: typeof SettingsStore) => { - return store.setValue(name, roomId, level, value); - }); -}); +Cypress.Commands.add( + "setSettingValue", + (name: string, roomId: string, level: SettingLevel, value: any): Chainable => { + return cy.getSettingsStore().then(async (store: typeof SettingsStore) => { + return store.setValue(name, roomId, level, value); + }); + }, +); // eslint-disable-next-line max-len -Cypress.Commands.add("getSettingValue", (name: string, roomId?: string, excludeDefault?: boolean): Chainable => { - return cy.getSettingsStore().then((store: typeof SettingsStore) => { - return store.getValue(name, roomId, excludeDefault); - }); -}); +Cypress.Commands.add( + "getSettingValue", + (name: string, roomId?: string, excludeDefault?: boolean): Chainable => { + return cy.getSettingsStore().then((store: typeof SettingsStore) => { + return store.getValue(name, roomId, excludeDefault); + }); + }, +); Cypress.Commands.add("openUserMenu", (): Chainable> => { cy.get('[aria-label="User menu"]').click(); @@ -162,16 +163,24 @@ Cypress.Commands.add("closeDialog", (): Chainable> => { }); Cypress.Commands.add("joinBeta", (name: string): Chainable> => { - return cy.get(".mx_BetaCard_title").contains(name).closest(".mx_BetaCard").within(() => { - return cy.get(".mx_BetaCard_buttons").contains("Join the beta").click(); - }); + return cy + .get(".mx_BetaCard_title") + .contains(name) + .closest(".mx_BetaCard") + .within(() => { + return cy.get(".mx_BetaCard_buttons").contains("Join the beta").click(); + }); }); Cypress.Commands.add("leaveBeta", (name: string): Chainable> => { - return cy.get(".mx_BetaCard_title").contains(name).closest(".mx_BetaCard").within(() => { - return cy.get(".mx_BetaCard_buttons").contains("Leave the beta").click(); - }); + return cy + .get(".mx_BetaCard_title") + .contains(name) + .closest(".mx_BetaCard") + .within(() => { + return cy.get(".mx_BetaCard_buttons").contains("Leave the beta").click(); + }); }); // Needed to make this file a module -export { }; +export {}; diff --git a/cypress/support/synapse.ts b/cypress/support/synapse.ts index 5696e8c015..c8af95c577 100644 --- a/cypress/support/synapse.ts +++ b/cypress/support/synapse.ts @@ -16,7 +16,7 @@ limitations under the License. /// -import * as crypto from 'crypto'; +import * as crypto from "crypto"; import Chainable = Cypress.Chainable; import AUTWindow = Cypress.AUTWindow; @@ -64,7 +64,7 @@ function stopSynapse(synapse?: SynapseInstance): Chainable { if (!synapse) return; // Navigate away from app to stop the background network requests which will race with Synapse shutting down return cy.window({ log: false }).then((win) => { - win.location.href = 'about:blank'; + win.location.href = "about:blank"; cy.task("synapseStop", synapse.synapseId); }); } @@ -83,38 +83,42 @@ function registerUser( displayName?: string, ): Chainable { const url = `${synapse.baseUrl}/_synapse/admin/v1/register`; - return cy.then(() => { - // get a nonce - return cy.request<{ nonce: string }>({ url }); - }).then(response => { - const { nonce } = response.body; - const mac = crypto.createHmac('sha1', synapse.registrationSecret).update( - `${nonce}\0${username}\0${password}\0notadmin`, - ).digest('hex'); + return cy + .then(() => { + // get a nonce + return cy.request<{ nonce: string }>({ url }); + }) + .then((response) => { + const { nonce } = response.body; + const mac = crypto + .createHmac("sha1", synapse.registrationSecret) + .update(`${nonce}\0${username}\0${password}\0notadmin`) + .digest("hex"); - return cy.request<{ - access_token: string; - user_id: string; - home_server: string; - device_id: string; - }>({ - url, - method: "POST", - body: { - nonce, - username, - password, - mac, - admin: false, - displayname: displayName, - }, - }); - }).then(response => ({ - homeServer: response.body.home_server, - accessToken: response.body.access_token, - userId: response.body.user_id, - deviceId: response.body.device_id, - })); + return cy.request<{ + access_token: string; + user_id: string; + home_server: string; + device_id: string; + }>({ + url, + method: "POST", + body: { + nonce, + username, + password, + mac, + admin: false, + displayname: displayName, + }, + }); + }) + .then((response) => ({ + homeServer: response.body.home_server, + accessToken: response.body.access_token, + userId: response.body.user_id, + deviceId: response.body.device_id, + })); } Cypress.Commands.add("startSynapse", startSynapse); diff --git a/cypress/support/timeline.ts b/cypress/support/timeline.ts index 28a9705fdb..1c4bcdc05f 100644 --- a/cypress/support/timeline.ts +++ b/cypress/support/timeline.ts @@ -38,17 +38,19 @@ export interface Message { } Cypress.Commands.add("scrollToTop", (): void => { - cy.get(".mx_RoomView_timeline .mx_ScrollPanel").scrollTo("top", { duration: 100 }).then(ref => { - if (ref.scrollTop() > 0) { - return cy.scrollToTop(); - } - }); + cy.get(".mx_RoomView_timeline .mx_ScrollPanel") + .scrollTo("top", { duration: 100 }) + .then((ref) => { + if (ref.scrollTop() > 0) { + return cy.scrollToTop(); + } + }); }); Cypress.Commands.add("findEventTile", (sender: string, body: string): Chainable => { // We can't just use a bunch of `.contains` here due to continuations meaning that the events don't // have their own rendered sender displayname so we have to walk the list to keep track of the sender. - return cy.get(".mx_RoomView_MessageList .mx_EventTile").then(refs => { + return cy.get(".mx_RoomView_MessageList .mx_EventTile").then((refs) => { let latestSender: string; for (let i = 0; i < refs.length; i++) { const ref = refs.eq(i); @@ -65,4 +67,4 @@ Cypress.Commands.add("findEventTile", (sender: string, body: string): Chainable< }); // Needed to make this file a module -export { }; +export {}; diff --git a/cypress/support/util.ts b/cypress/support/util.ts index e8f48b4bcc..b86bbc27d5 100644 --- a/cypress/support/util.ts +++ b/cypress/support/util.ts @@ -29,7 +29,7 @@ declare global { interface cy { all( - commands: T + commands: T, ): Cypress.Chainable<{ [P in keyof T]: ChainableValue }>; queue: any; } @@ -59,16 +59,16 @@ cy.all = function all(commands): Cypress.Chainable { return cy.wrap( // @see https://lodash.com/docs/4.17.15#lodash Cypress._(commands) - .map(cmd => { + .map((cmd) => { return cmd[chainStart] ? cmd[chainStart].attributes : Cypress._.find(cy.queue.get(), { - attributes: { chainerId: cmd.chainerId }, - }).attributes; + attributes: { chainerId: cmd.chainerId }, + }).attributes; }) .concat(stopCommand.attributes) .slice(1) - .map(cmd => { + .map((cmd) => { return cmd.prev.get("subject"); }) .value(), @@ -79,4 +79,4 @@ cy.all = function all(commands): Cypress.Chainable { }; // Needed to make this file a module -export { }; +export {}; diff --git a/cypress/support/views.ts b/cypress/support/views.ts index 6b853e4722..45337cd558 100644 --- a/cypress/support/views.ts +++ b/cypress/support/views.ts @@ -70,4 +70,4 @@ Cypress.Commands.add("viewSpaceHomeByName", (name: string): Chainable { return cy.createRoom(TchapCreateRoom.roomCreateOptions(roomName, TchapRoomType.Forum, false).createOpts); @@ -13,10 +13,9 @@ export default class RoomUtils { } public static openRoomAccessSettings(roomName: string): Chainable> { //open room - cy.get('[aria-label="'+roomName+'"]').click(); - cy.get('.mx_RoomHeader_chevron').click(); + cy.get('[aria-label="' + roomName + '"]').click(); + cy.get(".mx_RoomHeader_chevron").click(); cy.get('[aria-label="Paramètres"] > .mx_IconizedContextMenu_label').click(); return cy.get('[data-testid="settings-tab-ROOM_SECURITY_TAB"] > .mx_TabbedView_tabLabel_text').click(); } } - diff --git a/package.json b/package.json index b328185467..5de64b9877 100644 --- a/package.json +++ b/package.json @@ -1,282 +1,282 @@ { - "name": "element-web", - "productName": "Tchap", - "version": "4.2.0-1.11.25", - "description": "A feature-rich client for Matrix.org", - "author": "DINUM", - "repository": { - "type": "git", - "url": "https://github.com/tchapgouv/tchap-web-v4" - }, - "license": "Apache-2.0", - "files": [ - "lib", - "res", - "src", - "webpack.config.js", - "scripts", - "docs", - "release.sh", - "deploy", - "CHANGELOG.md", - "CONTRIBUTING.rst", - "LICENSE", - "README.md", - "AUTHORS.rst", - "package.json", - "contribute.json" - ], - "style": "bundle.css", - "scripts": { - "i18n": "matrix-gen-i18n", - "prunei18n": "matrix-prune-i18n", - "diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && matrix-gen-i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json", - "clean": "rimraf lib webapp", - "build": "yarn clean && yarn build:genfiles && yarn build:bundle", - "build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats", - "build:jitsi": "node scripts/build-jitsi.js", - "build:res": "node scripts/copy-res.js", - "build:genfiles": "yarn build:res && yarn build:jitsi && yarn build:module_system", - "build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js", - "build:bundle": "webpack --progress --bail --mode production", - "build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json", - "build:module_system": "tsc --project ./tsconfig.module_system.json && node ./lib/module_system/scripts/install.js", - "build:github": "yarn build:genfiles && yarn build:bundle", - "dist": "scripts/package.sh", - "scalingo-postbuild": "scripts/package-scalingo-prod.sh", - "start": "export VERSION=$(scripts/get-version-from-package-json.sh) && yarn build:module_system && concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js\"", - "start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js --https\"", - "start:res": "yarn build:jitsi && node scripts/copy-res.js -w", - "start:js": "webpack-dev-server --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --mode development --disable-host-check --hot", - "lint": "yarn lint:types && yarn lint:js && yarn lint:style", - "lint:js": "yarn lint:js:src && yarn lint:js:module_system", - "lint:js:src": "eslint --max-warnings 100 src test && prettier --check .", - "lint:js:module_system": "eslint --max-warnings 100 --config .eslintrc-module_system.js module_system", - "lint:js-fix": "yarn lint:js-fix:src && yarn lint:js-fix:module_system", - "lint:js-fix:src": "prettier --write . && eslint --fix src test", - "lint:js-fix:module_system": "eslint --fix --config .eslintrc-module_system.js module_system", - "lint:types": "yarn lint:types:src && yarn lint:types:module_system", - "lint:types:src": "tsc --noEmit --jsx react", - "lint:types:module_system": "tsc --noEmit --project ./tsconfig.module_system.json", - "lint:style": "stylelint \"res/css/**/*.pcss\"", - "test": "jest", - "test:cypress": "cypress run", - "test:cypress:open": "cypress open", - "coverage": "yarn test --coverage", - "analyse:unused-exports": "node ./scripts/analyse_unused_exports.js", - "postinstall": "./scripts/apply_patches.sh", - "patch-package": "patch-package", - "patches-reapply": "rm -rf node_modules/matrix-react-sdk; rm -rf node_modules/matrix-js-sdk; yarn install --force", - "patch-make": "node scripts/makePatch.ts" - }, - "dependencies": { - "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.12.tgz", - "@matrix-org/react-sdk-module-api": "^0.0.4", - "gfm.css": "^1.1.2", - "jsrsasign": "^10.5.25", - "katex": "^0.16.0", - "matrix-js-sdk": "23.5.0", - "matrix-react-sdk": "3.68.0", - "matrix-widget-api": "^1.1.1", - "prop-types": "^15.7.2", - "react": "17.0.2", - "react-dom": "17.0.2", - "sanitize-html": "^2.3.2", - "ua-parser-js": "^1.0.0" - }, - "resolutions": { - "@types/react-dom": "17.0.19", - "@types/react": "17.0.53" - }, - "devDependencies-comments": { - "tchap-added": { - "@wojtekmaj/enzyme-adapter-react-17": "^0.6.7", - "enzyme": "^3.11.0", - "enzyme-to-json": "^3.6.2" - } - }, - "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/eslint-parser": "^7.12.10", - "@babel/eslint-plugin": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.7", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.10", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@babel/register": "^7.12.10", - "@babel/runtime": "^7.12.5", - "@casualbot/jest-sonar-reporter": "^2.2.5", - "@percy/cli": "^1.3.0", - "@percy/cypress": "^3.1.1", - "@principalstudio/html-webpack-inject-preload": "^1.2.7", - "@sentry/webpack-plugin": "^1.18.1", - "@svgr/webpack": "^5.5.0", - "@testing-library/react": "^12.1.5", - "@types/flux": "^3.1.9", - "@types/jest": "^29.0.0", - "@types/jsrsasign": "^10.5.4", - "@types/modernizr": "^3.5.3", - "@types/node": "^16", - "@types/react": "17.0.53", - "@types/react-dom": "17.0.19", - "@types/sanitize-html": "^2.3.1", - "@types/ua-parser-js": "^0.7.36", - "@typescript-eslint/eslint-plugin": "^5.45.0", - "@typescript-eslint/parser": "^5.45.0", - "@wojtekmaj/enzyme-adapter-react-17": "^0.6.7", - "allchange": "^1.0.6", - "autoprefixer": "^10.4.8", - "axe-core": "^4.4.3", - "babel-jest": "^29.0.0", - "babel-loader": "^8.2.2", - "chokidar": "^3.5.1", - "concurrently": "^7.0.0", - "cpx": "^1.5.0", - "css-loader": "^4", - "cypress": "^10.3.0", - "cypress-axe": "^1.0.0", - "cypress-real-events": "^1.7.1", - "dotenv": "^16.0.2", - "enzyme": "^3.11.0", - "enzyme-to-json": "^3.6.2", - "eslint": "8.35.0", - "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-deprecate": "^0.7.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-matrix-org": "^1.0.0", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-unicorn": "^45.0.0", - "extract-text-webpack-plugin": "^4.0.0-beta.0", - "fake-indexeddb": "^4.0.0", - "fetch-mock-jest": "^1.5.1", - "file-loader": "^6.0.0", - "fs-extra": "^11.0.0", - "html-webpack-plugin": "^4.5.2", - "jest": "^29.0.0", - "jest-canvas-mock": "^2.3.0", - "jest-environment-jsdom": "^29.0.0", - "jest-mock": "^29.0.0", - "jest-raw-loader": "^1.0.1", - "jest-sonar-reporter": "^2.0.0", - "json-loader": "^0.5.7", - "loader-utils": "^3.0.0", - "matrix-mock-request": "^2.5.0", - "matrix-web-i18n": "^1.3.0", - "mini-css-extract-plugin": "^1", - "minimist": "^1.2.6", - "mkdirp": "^2.0.0", - "modernizr": "^3.12.0", - "node-fetch": "^2.6.7", - "optimize-css-assets-webpack-plugin": "^6.0.0", - "patch-package": "^6.5.1", - "postcss": "^8.4.16", - "postcss-easings": "^2.0.0", - "postcss-hexrgba": "2.0.1", - "postcss-import": "^12.0.1", - "postcss-loader": "^3.0.0", - "postcss-mixins": "^6.2.3", - "postcss-nested": "^4.2.3", - "postcss-preset-env": "^6.7.0", - "postcss-scss": "^4.0.4", - "postcss-simple-vars": "^5.0.2", - "postinstall-postinstall": "^2.1.0", - "prettier": "2.8.4", - "raw-loader": "^4.0.2", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "shell-escape": "^0.2.0", - "simple-proxy-agent": "^1.1.0", - "string-replace-loader": "3", - "style-loader": "2", - "stylelint": "^15.0.0", - "stylelint-config-prettier": "^9.0.4", - "stylelint-config-standard": "^30.0.0", - "stylelint-scss": "^4.2.0", - "terser-webpack-plugin": "^4.0.0", - "ts-prune": "^0.10.3", - "typescript": "4.9.5", - "webpack": "^4.46.0", - "webpack-cli": "^3.3.12", - "webpack-dev-server": "^3.11.2", - "worker-loader": "^3.0.0", - "worklet-loader": "^2.0.0", - "yaml": "^2.0.1" - }, - "jest-comments": { - "README": "For the tests to work, you need matrix-react-sdk to be git-cloned and yarn linked into this project.", - "snapshotSerializers": "used for jest snapshot", - "testEnvironment": "switch to jsdom like in matrix-react-sdk", - "testMatch": "execute only tests in unit-tests directory", - "setupFilesAfterEnv": "duplicate enzyme configuration in our own setup file '/test/setupTests.js'", - "moduleNameMapper": "use mapper from element-web, helps at mocking {module, ressources} directly with regexp", - "transformIgnorePatterns": "make regexp inline {matrix-js-sdk|matrix-react-sdk} else it does not work" - }, - "jest": { - "snapshotSerializers": [ - "enzyme-to-json/serializer" - ], - "testEnvironment": "jsdom", - "testEnvironmentOptions": { - "url": "http://localhost/" + "name": "element-web", + "productName": "Tchap", + "version": "4.2.0-1.11.25", + "description": "A feature-rich client for Matrix.org", + "author": "DINUM", + "repository": { + "type": "git", + "url": "https://github.com/tchapgouv/tchap-web-v4" }, - "testMatch": [ - "/test/unit-tests/**/*-test.[tj]s?(x)" - ], - "setupFiles": [ - "jest-canvas-mock" - ], - "setupFilesAfterEnv": [ - "/test/setupTests.js", - "/node_modules/matrix-react-sdk/test/setupTests.js" + "license": "Apache-2.0", + "files": [ + "lib", + "res", + "src", + "webpack.config.js", + "scripts", + "docs", + "release.sh", + "deploy", + "CHANGELOG.md", + "CONTRIBUTING.rst", + "LICENSE", + "README.md", + "AUTHORS.rst", + "package.json", + "contribute.json" ], - "moduleNameMapper": { - "\\.(css|scss|pcss)$": "/__mocks__/cssMock.js", - "\\.(gif|png|ttf|woff2)$": "/node_modules/matrix-react-sdk/__mocks__/imageMock.js", - "\\.svg$": "/node_modules/matrix-react-sdk/__mocks__/svg.js", - "\\$webapp/i18n/languages.json": "/node_modules/matrix-react-sdk/__mocks__/languages.json", - "^react$": "/node_modules/react", - "^react-dom$": "/node_modules/react-dom", - "^matrix-js-sdk$": "/node_modules/matrix-js-sdk/src", - "^matrix-react-sdk$": "/node_modules/matrix-react-sdk/src", - "decoderWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js", - "decoderWorker\\.min\\.wasm": "/node_modules/matrix-react-sdk/__mocks__/empty.js", - "waveWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js", - "context-filter-polyfill": "/node_modules/matrix-react-sdk/__mocks__/empty.js", - "FontManager.ts": "/node_modules/matrix-react-sdk/__mocks__/FontManager.js", - "workers/(.+)\\.worker\\.ts": "/node_modules/matrix-react-sdk/__mocks__/workerMock.js", - "^!!raw-loader!.*": "jest-raw-loader", - "RecorderWorklet": "/node_modules/matrix-react-sdk/__mocks__/empty.js", - "MImageBody": "/src/customisations/components/views/messages/ContentScanningImageBody.tsx", - "../../../../../../src/components/views/messages/OriginalFileBody": "/node_modules/matrix-react-sdk/src/components/views/messages/MImageBody.tsx", - "MAudioBody": "/src/customisations/components/views/messages/ContentScanningAudioBody.tsx", - "../../../../../../src/components/views/messages/OriginalAudioBody": "/node_modules/matrix-react-sdk/src/components/views/messages/MAudioBody.tsx", - "MStickerBody": "/src/customisations/components/views/messages/ContentScanningStickerBody.tsx" + "style": "bundle.css", + "scripts": { + "i18n": "matrix-gen-i18n", + "prunei18n": "matrix-prune-i18n", + "diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && matrix-gen-i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json", + "clean": "rimraf lib webapp", + "build": "yarn clean && yarn build:genfiles && yarn build:bundle", + "build-stats": "yarn clean && yarn build:genfiles && yarn build:bundle-stats", + "build:jitsi": "node scripts/build-jitsi.js", + "build:res": "node scripts/copy-res.js", + "build:genfiles": "yarn build:res && yarn build:jitsi && yarn build:module_system", + "build:modernizr": "modernizr -c .modernizr.json -d src/vector/modernizr.js", + "build:bundle": "webpack --progress --bail --mode production", + "build:bundle-stats": "webpack --progress --bail --mode production --json > webpack-stats.json", + "build:module_system": "tsc --project ./tsconfig.module_system.json && node ./lib/module_system/scripts/install.js", + "build:github": "yarn build:genfiles && yarn build:bundle", + "dist": "scripts/package.sh", + "scalingo-postbuild": "scripts/package-scalingo-prod.sh", + "start": "export VERSION=$(scripts/get-version-from-package-json.sh) && yarn build:module_system && concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js\"", + "start:https": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n res,element-js \"yarn start:res\" \"yarn start:js --https\"", + "start:res": "yarn build:jitsi && node scripts/copy-res.js -w", + "start:js": "webpack-dev-server --output-filename=bundles/_dev_/[name].js --output-chunk-filename=bundles/_dev_/[name].js -w --mode development --disable-host-check --hot", + "lint": "yarn lint:types && yarn lint:js && yarn lint:style", + "lint:js": "yarn lint:js:src && yarn lint:js:module_system", + "lint:js:src": "eslint --max-warnings 100 src test && prettier --check .", + "lint:js:module_system": "eslint --max-warnings 100 --config .eslintrc-module_system.js module_system", + "lint:js-fix": "yarn lint:js-fix:src && yarn lint:js-fix:module_system", + "lint:js-fix:src": "prettier --write . && eslint --fix src test", + "lint:js-fix:module_system": "eslint --fix --config .eslintrc-module_system.js module_system", + "lint:types": "yarn lint:types:src && yarn lint:types:module_system", + "lint:types:src": "tsc --noEmit --jsx react", + "lint:types:module_system": "tsc --noEmit --project ./tsconfig.module_system.json", + "lint:style": "stylelint \"res/css/**/*.pcss\"", + "test": "jest", + "test:cypress": "cypress run", + "test:cypress:open": "cypress open", + "coverage": "yarn test --coverage", + "analyse:unused-exports": "node ./scripts/analyse_unused_exports.js", + "postinstall": "./scripts/apply_patches.sh", + "patch-package": "patch-package", + "patches-reapply": "rm -rf node_modules/matrix-react-sdk; rm -rf node_modules/matrix-js-sdk; yarn install --force", + "patch-make": "node scripts/makePatch.ts" }, - "transformIgnorePatterns": [ - "/node_modules/(?!matrix-js-sdk|matrix-react-sdk).+$" - ], - "coverageReporters": [ - "text-summary", - "lcov" - ], - "testResultsProcessor": "@casualbot/jest-sonar-reporter" - }, - "@casualbot/jest-sonar-reporter": { - "outputDirectory": "coverage", - "outputName": "jest-sonar-report.xml", - "relativePaths": true - }, - "engines": { - "comment-2022-11-07": "matrix-js-sdk requires >=16.0.0. SSL librairies do not work with 18 and 19. 17 has incompatibilities with some deps.", - "node": "^16" - } + "dependencies": { + "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.12.tgz", + "@matrix-org/react-sdk-module-api": "^0.0.4", + "gfm.css": "^1.1.2", + "jsrsasign": "^10.5.25", + "katex": "^0.16.0", + "matrix-js-sdk": "23.5.0", + "matrix-react-sdk": "3.68.0", + "matrix-widget-api": "^1.1.1", + "prop-types": "^15.7.2", + "react": "17.0.2", + "react-dom": "17.0.2", + "sanitize-html": "^2.3.2", + "ua-parser-js": "^1.0.0" + }, + "resolutions": { + "@types/react-dom": "17.0.19", + "@types/react": "17.0.53" + }, + "devDependencies-comments": { + "tchap-added": { + "@wojtekmaj/enzyme-adapter-react-17": "^0.6.7", + "enzyme": "^3.11.0", + "enzyme-to-json": "^3.6.2" + } + }, + "devDependencies": { + "@babel/core": "^7.12.10", + "@babel/eslint-parser": "^7.12.10", + "@babel/eslint-plugin": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.10", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@babel/register": "^7.12.10", + "@babel/runtime": "^7.12.5", + "@casualbot/jest-sonar-reporter": "^2.2.5", + "@percy/cli": "^1.3.0", + "@percy/cypress": "^3.1.1", + "@principalstudio/html-webpack-inject-preload": "^1.2.7", + "@sentry/webpack-plugin": "^1.18.1", + "@svgr/webpack": "^5.5.0", + "@testing-library/react": "^12.1.5", + "@types/flux": "^3.1.9", + "@types/jest": "^29.0.0", + "@types/jsrsasign": "^10.5.4", + "@types/modernizr": "^3.5.3", + "@types/node": "^16", + "@types/react": "17.0.53", + "@types/react-dom": "17.0.19", + "@types/sanitize-html": "^2.3.1", + "@types/ua-parser-js": "^0.7.36", + "@typescript-eslint/eslint-plugin": "^5.45.0", + "@typescript-eslint/parser": "^5.45.0", + "@wojtekmaj/enzyme-adapter-react-17": "^0.6.7", + "allchange": "^1.0.6", + "autoprefixer": "^10.4.8", + "axe-core": "^4.4.3", + "babel-jest": "^29.0.0", + "babel-loader": "^8.2.2", + "chokidar": "^3.5.1", + "concurrently": "^7.0.0", + "cpx": "^1.5.0", + "css-loader": "^4", + "cypress": "^10.3.0", + "cypress-axe": "^1.0.0", + "cypress-real-events": "^1.7.1", + "dotenv": "^16.0.2", + "enzyme": "^3.11.0", + "enzyme-to-json": "^3.6.2", + "eslint": "8.35.0", + "eslint-config-google": "^0.14.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-deprecate": "^0.7.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-matrix-org": "^1.0.0", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-unicorn": "^45.0.0", + "extract-text-webpack-plugin": "^4.0.0-beta.0", + "fake-indexeddb": "^4.0.0", + "fetch-mock-jest": "^1.5.1", + "file-loader": "^6.0.0", + "fs-extra": "^11.0.0", + "html-webpack-plugin": "^4.5.2", + "jest": "^29.0.0", + "jest-canvas-mock": "^2.3.0", + "jest-environment-jsdom": "^29.0.0", + "jest-mock": "^29.0.0", + "jest-raw-loader": "^1.0.1", + "jest-sonar-reporter": "^2.0.0", + "json-loader": "^0.5.7", + "loader-utils": "^3.0.0", + "matrix-mock-request": "^2.5.0", + "matrix-web-i18n": "^1.3.0", + "mini-css-extract-plugin": "^1", + "minimist": "^1.2.6", + "mkdirp": "^2.0.0", + "modernizr": "^3.12.0", + "node-fetch": "^2.6.7", + "optimize-css-assets-webpack-plugin": "^6.0.0", + "patch-package": "^6.5.1", + "postcss": "^8.4.16", + "postcss-easings": "^2.0.0", + "postcss-hexrgba": "2.0.1", + "postcss-import": "^12.0.1", + "postcss-loader": "^3.0.0", + "postcss-mixins": "^6.2.3", + "postcss-nested": "^4.2.3", + "postcss-preset-env": "^6.7.0", + "postcss-scss": "^4.0.4", + "postcss-simple-vars": "^5.0.2", + "postinstall-postinstall": "^2.1.0", + "prettier": "2.8.4", + "raw-loader": "^4.0.2", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "shell-escape": "^0.2.0", + "simple-proxy-agent": "^1.1.0", + "string-replace-loader": "3", + "style-loader": "2", + "stylelint": "^15.0.0", + "stylelint-config-prettier": "^9.0.4", + "stylelint-config-standard": "^30.0.0", + "stylelint-scss": "^4.2.0", + "terser-webpack-plugin": "^4.0.0", + "ts-prune": "^0.10.3", + "typescript": "4.9.5", + "webpack": "^4.46.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.2", + "worker-loader": "^3.0.0", + "worklet-loader": "^2.0.0", + "yaml": "^2.0.1" + }, + "jest-comments": { + "README": "For the tests to work, you need matrix-react-sdk to be git-cloned and yarn linked into this project.", + "snapshotSerializers": "used for jest snapshot", + "testEnvironment": "switch to jsdom like in matrix-react-sdk", + "testMatch": "execute only tests in unit-tests directory", + "setupFilesAfterEnv": "duplicate enzyme configuration in our own setup file '/test/setupTests.js'", + "moduleNameMapper": "use mapper from element-web, helps at mocking {module, ressources} directly with regexp", + "transformIgnorePatterns": "make regexp inline {matrix-js-sdk|matrix-react-sdk} else it does not work" + }, + "jest": { + "snapshotSerializers": [ + "enzyme-to-json/serializer" + ], + "testEnvironment": "jsdom", + "testEnvironmentOptions": { + "url": "http://localhost/" + }, + "testMatch": [ + "/test/unit-tests/**/*-test.[tj]s?(x)" + ], + "setupFiles": [ + "jest-canvas-mock" + ], + "setupFilesAfterEnv": [ + "/test/setupTests.js", + "/node_modules/matrix-react-sdk/test/setupTests.js" + ], + "moduleNameMapper": { + "\\.(css|scss|pcss)$": "/__mocks__/cssMock.js", + "\\.(gif|png|ttf|woff2)$": "/node_modules/matrix-react-sdk/__mocks__/imageMock.js", + "\\.svg$": "/node_modules/matrix-react-sdk/__mocks__/svg.js", + "\\$webapp/i18n/languages.json": "/node_modules/matrix-react-sdk/__mocks__/languages.json", + "^react$": "/node_modules/react", + "^react-dom$": "/node_modules/react-dom", + "^matrix-js-sdk$": "/node_modules/matrix-js-sdk/src", + "^matrix-react-sdk$": "/node_modules/matrix-react-sdk/src", + "decoderWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js", + "decoderWorker\\.min\\.wasm": "/node_modules/matrix-react-sdk/__mocks__/empty.js", + "waveWorker\\.min\\.js": "/node_modules/matrix-react-sdk/__mocks__/empty.js", + "context-filter-polyfill": "/node_modules/matrix-react-sdk/__mocks__/empty.js", + "FontManager.ts": "/node_modules/matrix-react-sdk/__mocks__/FontManager.js", + "workers/(.+)\\.worker\\.ts": "/node_modules/matrix-react-sdk/__mocks__/workerMock.js", + "^!!raw-loader!.*": "jest-raw-loader", + "RecorderWorklet": "/node_modules/matrix-react-sdk/__mocks__/empty.js", + "MImageBody": "/src/customisations/components/views/messages/ContentScanningImageBody.tsx", + "../../../../../../src/components/views/messages/OriginalFileBody": "/node_modules/matrix-react-sdk/src/components/views/messages/MImageBody.tsx", + "MAudioBody": "/src/customisations/components/views/messages/ContentScanningAudioBody.tsx", + "../../../../../../src/components/views/messages/OriginalAudioBody": "/node_modules/matrix-react-sdk/src/components/views/messages/MAudioBody.tsx", + "MStickerBody": "/src/customisations/components/views/messages/ContentScanningStickerBody.tsx" + }, + "transformIgnorePatterns": [ + "/node_modules/(?!matrix-js-sdk|matrix-react-sdk).+$" + ], + "coverageReporters": [ + "text-summary", + "lcov" + ], + "testResultsProcessor": "@casualbot/jest-sonar-reporter" + }, + "@casualbot/jest-sonar-reporter": { + "outputDirectory": "coverage", + "outputName": "jest-sonar-report.xml", + "relativePaths": true + }, + "engines": { + "comment-2022-11-07": "matrix-js-sdk requires >=16.0.0. SSL librairies do not work with 18 and 19. 17 has incompatibilities with some deps.", + "node": "^16" + } } diff --git a/patches/README.md b/patches/README.md index c8a5d3e9b1..3db27dc462 100644 --- a/patches/README.md +++ b/patches/README.md @@ -1,14 +1,15 @@ -How to make patches ---- - - Make some changes to dependencies files (matrix-react-sdk or matrix-js-sdk) : in node_modules/matrix-react-sdk, or in the yarn-linked repo if you are using yarn links. - - add the info for your new patch `my-new-patch-name` in `patches/patches.json` - - run `yarn patch-make my-new-patch-name` +## How to make patches + +- Make some changes to dependencies files (matrix-react-sdk or matrix-js-sdk) : in node_modules/matrix-react-sdk, or in the yarn-linked repo if you are using yarn links. +- add the info for your new patch `my-new-patch-name` in `patches/patches.json` +- run `yarn patch-make my-new-patch-name` Wwhen you have made edits to the files, recreate the patch by running again : `yarn patch-make my-new-patch-name` Note : if you are making a patch while your local env has yarn links, patch-package will take longer time to run "Diffing your files with clean files". But it does work. ## How to deal with patch conflicts + Patch files are generated by machines, and should not be edited by humans, it will cause errors. Humans confronted with a conflict between two versions of a patch file should solve the conflict by hand in the code files, and then regenerate the patch file. @@ -18,6 +19,7 @@ Imagine you have a conflict in file Conflict.tsx, which causes a conflict in the Conflict.tsx is in node_modules/matrix-react-sdk, so it is gitignored, so the conflict appears in git only on the patch file. You have this situation : (timeline is read from bottom to top) + ``` * merge conflict between develop_tchap and my-feature-branch ! |\ @@ -28,6 +30,7 @@ You have this situation : (timeline is read from bottom to top) ``` What you can do : (timeline is read from bottom to top) + ``` * merge my-feature-branch into develop_tchap : no more confict ! |\ @@ -45,6 +48,7 @@ What you can do : (timeline is read from bottom to top) When you check out a branch, watch out that since Conflicted.tsx is gitignored, the changes are not applied to it. Conflict.tsx's version is still the one of the previous branch you were at. To get the version of Conflicted.tsx corresponding to the branch you just checked out, you can recreate it cleanly : + ``` yarn patches-reapply ``` diff --git a/patches/patches.json b/patches/patches.json index 6f4061706c..a55736666d 100644 --- a/patches/patches.json +++ b/patches/patches.json @@ -1,217 +1,174 @@ { - "are-external-users-allowed-in-room": { - "package": "matrix-react-sdk", - "files": [ - "src/components/views/rooms/RoomHeader.tsx", - "res/css/views/rooms/_RoomHeader.pcss" - ], - "description": "TODO: Remplir ici" - }, - "show-icon-on-public-room": { - "package": "matrix-react-sdk", - "files": [ - "src/components/views/avatars/DecoratedRoomAvatar.tsx" - ] - }, - "simplify-exchange-key-message": { - "package": "matrix-react-sdk", - "files": [ - "src/components/views/dialogs/IncomingSasDialog.tsx", - "src/components/views/dialogs/VerificationRequestDialog.tsx", - "src/components/views/verification/TchapVerificationComplete.tsx", - "src/components/views/right_panel/VerificationPanel.tsx", - "src/components/views/verification/VerificationComplete.tsx" - ] - }, - "better-help-settings": { - "package": "matrix-react-sdk", - "files": [ - "src/components/views/settings/tabs/user/HelpUserSettingsTab.tsx", - "src/components/views/elements/AccessibleButton.tsx" - ] - }, - "better-help-settings-2": { - "package": "matrix-react-sdk", - "files": [ - "src/components/views/dialogs/BugReportDialog.tsx" - ] - }, - "content-scanner": { - "package": "matrix-react-sdk", - "files": [ - "src/components/views/messages/MAudioBody.tsx", - "src/components/views/messages/MImageBody.tsx", - "src/components/views/messages/MImageReplyBody.tsx", - "src/components/views/messages/MStickerBody.tsx", - "src/components/views/messages/MVideoBody.tsx", - "src/components/views/messages/MVoiceMessageBody.tsx" - ] - }, - "disable-access-options": { - "package": "matrix-react-sdk", - "files": [ - "src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx" - ] - }, - "forgot-password": { - "package": "matrix-react-sdk", - "files": [ - "src/components/structures/auth/ForgotPassword.tsx", - "src/components/structures/auth/forgot-password/EnterEmail.tsx" - ] - }, - "hide-room-alias-settings": { - "package": "matrix-react-sdk", - "files": [ - "src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx" - ] - }, - - "login": { - "package": "matrix-react-sdk", - "files": [ - "src/components/structures/auth/Login.tsx", - "src/components/views/auth/PasswordLogin.tsx" - ] - }, - "registration-for-mainlining": { - "package": "matrix-react-sdk", - "files": [ - "src/components/structures/auth/Registration.tsx", - "src/components/views/auth/RegistrationForm.tsx" - ] - }, - "password-policy": { - "package": "matrix-react-sdk", - "files": [ - "src/components/views/auth/PassphraseField.tsx" - ] - }, - "public-room-server-list": { - "package": "matrix-react-sdk", - "files": [ - "res/css/views/directory/_NetworkDropdown.pcss", - "src/components/views/directory/NetworkDropdown.tsx", - "src/i18n/strings/en_EN.json", - "src/i18n/strings/fr.json" - ] - }, - "auto-accept-tac": { - "package": "matrix-react-sdk", - "files": [ - "src/IdentityAuthClient.tsx", - "src/Terms.ts" - ] - }, - "hide-discovery-email-phone-settings": { - "package": "matrix-react-sdk", - "files": [ - "src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx" - ] - }, - "hide-location-if-no-map-server": { - "package": "matrix-react-sdk", - "files": [ - "src/components/views/rooms/MessageComposer.tsx" - ] - }, - "activate-expired-account-panel": { - "package": "matrix-js-sdk", - "files": [ - "src/http-api/interface.ts", - "src/http-api/fetch.ts", - "src/sync.ts" - ] - }, - "cross-signing-ui": { - "comments": "reword cross-signing dialogs and remove confirmation dialog", - "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/406,https://github.com/tchapgouv/tchap-web-v4/issues/487", - "package": "matrix-react-sdk", - "files": [ - "src/async-components/views/dialogs/security/CreateSecretStorageDialog.tsx", - "src/toasts/SetupEncryptionToast.ts", - "src/components/structures/auth/CompleteSecurity.tsx", - "res/css/views/auth/_CompleteSecurityBody.pcss", - "src/components/structures/auth/SetupEncryptionBody.tsx", - "src/components/views/rooms/DecryptionFailureBar.tsx" - ] - }, - "temp-settings-remove-enable-email-notifications-option": { - "comments": "Notifications by email is currently not activated on Tchap backend. So we must remove this option.", - "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/405", - "package": "matrix-react-sdk", - "files": [ - "src/components/views/settings/Notifications.tsx" - ] - }, - "in-invite-dialog-add-text-indicating-that-we-can-invite-multiple-people": { - "github-issue" : "https://github.com/tchapgouv/tchap-web-v4/issues/342", - "package": "matrix-react-sdk", - "files": [ - "res/css/views/dialogs/_InviteDialog.pcss" - ] - }, - "fix-inviting-a-person-already-present-in-the-room" : { - "comments": "When inviting by its email adress someone already in the room, the error message was wrong and break the invitation process", - "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/394", - "package": "matrix-react-sdk", - "files": [ - "src/utils/MultiInviter.ts" - ] - }, - "activate-cross-signing-and-secure-storage-js": { - "comments": "introduce a feature flag for activating cross signing and secure storage", - "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/433", - "package": "matrix-js-sdk", - "files": [ - "src/client.ts" - ] - }, - "activate-cross-signing-and-secure-storage-react": { - "comments" : "introduce a feature flag for activating cross signing and secure storage (unify previous patches)", - "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/433", - "package": "matrix-react-sdk", - "files": [ - "src/components/views/settings/SecureBackupPanel.tsx", - "src/components/views/settings/CrossSigningPanel.tsx", - "src/components/structures/MatrixChat.tsx", - "src/components/views/settings/DevicesPanel.tsx" - ] - }, - "add-a-help-tab-in-menu-to-redirect-to-external-tchap-faq": { - "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/395", - "package": "matrix-react-sdk", - "files": [ - "src/components/structures/UserMenu.tsx", - "res/css/structures/_UserMenu.pcss" - ] - }, - "ux-improvements-for-xsss": { - "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/442", - "package": "matrix-react-sdk", - "files": [ - "src/components/views/dialogs/security/AccessSecretStorageDialog.tsx" - ] - }, - "use-the-term-people-not-direct-messages": { - "github-issue" : "https://github.com/tchapgouv/tchap-web-v4/issues/448", - "package": "matrix-react-sdk", - "files": [ - "src/components/views/dialogs/SpacePreferencesDialog.tsx", - "src/components/views/context_menus/RoomContextMenu.tsx", - "src/components/views/settings/tabs/user/SidebarUserSettingsTab.tsx", - "src/components/views/spaces/QuickSettingsButton.tsx", - "src/components/views/rooms/RoomList.tsx", - "src/stores/spaces/index.ts" - ] - }, - "remove-thread-buttons": { - "github-issue" : "https://github.com/tchapgouv/tchap-web-v4/issues/472; ", - "package": "matrix-react-sdk", - "files": [ - "src/components/views/context_menus/MessageContextMenu.tsx", - "src/components/views/messages/MessageActionBar.tsx", - "src/components/views/right_panel/RoomHeaderButtons.tsx" - ] - } + "are-external-users-allowed-in-room": { + "package": "matrix-react-sdk", + "files": ["src/components/views/rooms/RoomHeader.tsx", "res/css/views/rooms/_RoomHeader.pcss"], + "description": "TODO: Remplir ici" + }, + "show-icon-on-public-room": { + "package": "matrix-react-sdk", + "files": ["src/components/views/avatars/DecoratedRoomAvatar.tsx"] + }, + "simplify-exchange-key-message": { + "package": "matrix-react-sdk", + "files": [ + "src/components/views/dialogs/IncomingSasDialog.tsx", + "src/components/views/dialogs/VerificationRequestDialog.tsx", + "src/components/views/verification/TchapVerificationComplete.tsx", + "src/components/views/right_panel/VerificationPanel.tsx", + "src/components/views/verification/VerificationComplete.tsx" + ] + }, + "better-help-settings": { + "package": "matrix-react-sdk", + "files": [ + "src/components/views/settings/tabs/user/HelpUserSettingsTab.tsx", + "src/components/views/elements/AccessibleButton.tsx" + ] + }, + "better-help-settings-2": { + "package": "matrix-react-sdk", + "files": ["src/components/views/dialogs/BugReportDialog.tsx"] + }, + "content-scanner": { + "package": "matrix-react-sdk", + "files": [ + "src/components/views/messages/MAudioBody.tsx", + "src/components/views/messages/MImageBody.tsx", + "src/components/views/messages/MImageReplyBody.tsx", + "src/components/views/messages/MStickerBody.tsx", + "src/components/views/messages/MVideoBody.tsx", + "src/components/views/messages/MVoiceMessageBody.tsx" + ] + }, + "disable-access-options": { + "package": "matrix-react-sdk", + "files": ["src/components/views/settings/tabs/room/SecurityRoomSettingsTab.tsx"] + }, + "forgot-password": { + "package": "matrix-react-sdk", + "files": [ + "src/components/structures/auth/ForgotPassword.tsx", + "src/components/structures/auth/forgot-password/EnterEmail.tsx" + ] + }, + "hide-room-alias-settings": { + "package": "matrix-react-sdk", + "files": ["src/components/views/settings/tabs/room/GeneralRoomSettingsTab.tsx"] + }, + + "login": { + "package": "matrix-react-sdk", + "files": ["src/components/structures/auth/Login.tsx", "src/components/views/auth/PasswordLogin.tsx"] + }, + "registration-for-mainlining": { + "package": "matrix-react-sdk", + "files": ["src/components/structures/auth/Registration.tsx", "src/components/views/auth/RegistrationForm.tsx"] + }, + "password-policy": { + "package": "matrix-react-sdk", + "files": ["src/components/views/auth/PassphraseField.tsx"] + }, + "public-room-server-list": { + "package": "matrix-react-sdk", + "files": [ + "res/css/views/directory/_NetworkDropdown.pcss", + "src/components/views/directory/NetworkDropdown.tsx", + "src/i18n/strings/en_EN.json", + "src/i18n/strings/fr.json" + ] + }, + "auto-accept-tac": { + "package": "matrix-react-sdk", + "files": ["src/IdentityAuthClient.tsx", "src/Terms.ts"] + }, + "hide-discovery-email-phone-settings": { + "package": "matrix-react-sdk", + "files": ["src/components/views/settings/tabs/user/GeneralUserSettingsTab.tsx"] + }, + "hide-location-if-no-map-server": { + "package": "matrix-react-sdk", + "files": ["src/components/views/rooms/MessageComposer.tsx"] + }, + "activate-expired-account-panel": { + "package": "matrix-js-sdk", + "files": ["src/http-api/interface.ts", "src/http-api/fetch.ts", "src/sync.ts"] + }, + "cross-signing-ui": { + "comments": "reword cross-signing dialogs and remove confirmation dialog", + "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/406,https://github.com/tchapgouv/tchap-web-v4/issues/487", + "package": "matrix-react-sdk", + "files": [ + "src/async-components/views/dialogs/security/CreateSecretStorageDialog.tsx", + "src/toasts/SetupEncryptionToast.ts", + "src/components/structures/auth/CompleteSecurity.tsx", + "res/css/views/auth/_CompleteSecurityBody.pcss", + "src/components/structures/auth/SetupEncryptionBody.tsx", + "src/components/views/rooms/DecryptionFailureBar.tsx" + ] + }, + "temp-settings-remove-enable-email-notifications-option": { + "comments": "Notifications by email is currently not activated on Tchap backend. So we must remove this option.", + "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/405", + "package": "matrix-react-sdk", + "files": ["src/components/views/settings/Notifications.tsx"] + }, + "in-invite-dialog-add-text-indicating-that-we-can-invite-multiple-people": { + "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/342", + "package": "matrix-react-sdk", + "files": ["res/css/views/dialogs/_InviteDialog.pcss"] + }, + "fix-inviting-a-person-already-present-in-the-room": { + "comments": "When inviting by its email adress someone already in the room, the error message was wrong and break the invitation process", + "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/394", + "package": "matrix-react-sdk", + "files": ["src/utils/MultiInviter.ts"] + }, + "activate-cross-signing-and-secure-storage-js": { + "comments": "introduce a feature flag for activating cross signing and secure storage", + "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/433", + "package": "matrix-js-sdk", + "files": ["src/client.ts"] + }, + "activate-cross-signing-and-secure-storage-react": { + "comments": "introduce a feature flag for activating cross signing and secure storage (unify previous patches)", + "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/433", + "package": "matrix-react-sdk", + "files": [ + "src/components/views/settings/SecureBackupPanel.tsx", + "src/components/views/settings/CrossSigningPanel.tsx", + "src/components/structures/MatrixChat.tsx", + "src/components/views/settings/DevicesPanel.tsx" + ] + }, + "add-a-help-tab-in-menu-to-redirect-to-external-tchap-faq": { + "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/395", + "package": "matrix-react-sdk", + "files": ["src/components/structures/UserMenu.tsx", "res/css/structures/_UserMenu.pcss"] + }, + "ux-improvements-for-xsss": { + "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/442", + "package": "matrix-react-sdk", + "files": ["src/components/views/dialogs/security/AccessSecretStorageDialog.tsx"] + }, + "use-the-term-people-not-direct-messages": { + "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/448", + "package": "matrix-react-sdk", + "files": [ + "src/components/views/dialogs/SpacePreferencesDialog.tsx", + "src/components/views/context_menus/RoomContextMenu.tsx", + "src/components/views/settings/tabs/user/SidebarUserSettingsTab.tsx", + "src/components/views/spaces/QuickSettingsButton.tsx", + "src/components/views/rooms/RoomList.tsx", + "src/stores/spaces/index.ts" + ] + }, + "remove-thread-buttons": { + "github-issue": "https://github.com/tchapgouv/tchap-web-v4/issues/472; ", + "package": "matrix-react-sdk", + "files": [ + "src/components/views/context_menus/MessageContextMenu.tsx", + "src/components/views/messages/MessageActionBar.tsx", + "src/components/views/right_panel/RoomHeaderButtons.tsx" + ] + } } diff --git a/res/css/views/avatars/_TchapDecoratedRoomAvatar.pcss b/res/css/views/avatars/_TchapDecoratedRoomAvatar.pcss index a60ced7139..8a9534d8eb 100644 --- a/res/css/views/avatars/_TchapDecoratedRoomAvatar.pcss +++ b/res/css/views/avatars/_TchapDecoratedRoomAvatar.pcss @@ -8,7 +8,7 @@ Copyright 2022 DINUM mask-size: contain; mask-repeat: no-repeat; background: var(--secondary-content); - mask-image: url('../../../img/tchap/padlock-forum.svg'); + mask-image: url("../../../img/tchap/padlock-forum.svg"); background-color: var(--forum-color); bottom: -25%; right: -25%; @@ -22,7 +22,7 @@ Copyright 2022 DINUM mask-size: contain; mask-repeat: no-repeat; background: var(--secondary-content); - mask-image: url('../../../img/tchap/padlock-private.svg'); + mask-image: url("../../../img/tchap/padlock-private.svg"); background-color: var(--private-color); bottom: -25%; right: -25%; @@ -36,7 +36,7 @@ Copyright 2022 DINUM mask-size: contain; mask-repeat: no-repeat; background: var(--secondary-content); - mask-image: url('../../../img/tchap/padlock-external.svg'); + mask-image: url("../../../img/tchap/padlock-external.svg"); background-color: var(--external-color); bottom: -25%; right: -25%; diff --git a/res/css/views/dialogs/_TchapServerPickerDialog.pcss b/res/css/views/dialogs/_TchapServerPickerDialog.pcss index 827a2f43a8..46566d4c58 100644 --- a/res/css/views/dialogs/_TchapServerPickerDialog.pcss +++ b/res/css/views/dialogs/_TchapServerPickerDialog.pcss @@ -3,7 +3,6 @@ Copyright 2022 DINUM */ .mx_ServerPickerDialog { - .mx_ServerPickerDialog_radioGroup { margin-bottom: 24px; } diff --git a/res/css/views/elements/BlockedIcon.pcss b/res/css/views/elements/BlockedIcon.pcss index bca6630156..e7ddccbc56 100644 --- a/res/css/views/elements/BlockedIcon.pcss +++ b/res/css/views/elements/BlockedIcon.pcss @@ -17,7 +17,7 @@ .mx_BlockedIcon { background-color: #f07a12; border-radius: 4px; - content: ''; + content: ""; display: inline-block; height: 40px; position: relative; @@ -25,10 +25,10 @@ &::after { background-color: #fff; - content: ''; + content: ""; height: 20px; left: 10px; - mask-image: url('../../../img/blocked.svg'); + mask-image: url("../../../img/blocked.svg"); mask-position: center; mask-repeat: no-repeat; mask-size: contain; diff --git a/res/css/views/elements/_TchapRoomTypeSelector.pcss b/res/css/views/elements/_TchapRoomTypeSelector.pcss index 6a7a0e1747..0b28adbc96 100644 --- a/res/css/views/elements/_TchapRoomTypeSelector.pcss +++ b/res/css/views/elements/_TchapRoomTypeSelector.pcss @@ -3,7 +3,7 @@ flex-direction: column; gap: 24px; - >.tc_TchapRoomTypeSelector_RadioButton { + > .tc_TchapRoomTypeSelector_RadioButton { flex-grow: 0; flex-shrink: 1; display: flex; diff --git a/res/css/views/messages/ContentScanningFileBody.pcss b/res/css/views/messages/ContentScanningFileBody.pcss index 06d09c5faf..4fcb36bd81 100644 --- a/res/css/views/messages/ContentScanningFileBody.pcss +++ b/res/css/views/messages/ContentScanningFileBody.pcss @@ -59,10 +59,10 @@ limitations under the License. &::before { background-color: #fff; // hardcoded - content: ''; + content: ""; height: 17px; left: 7px; - mask-image: url('../../../img/blocked.svg'); + mask-image: url("../../../img/blocked.svg"); mask-position: center; mask-repeat: no-repeat; mask-size: contain; diff --git a/res/themes/tchap-common/css/_tchap_custom.pcss b/res/themes/tchap-common/css/_tchap_custom.pcss index 79fabeda45..f11e07a9e6 100644 --- a/res/themes/tchap-common/css/_tchap_custom.pcss +++ b/res/themes/tchap-common/css/_tchap_custom.pcss @@ -5,11 +5,18 @@ display: none; } /* hide the passphrase option in the setup options of the secure storage */ -#mx_Dialog_StaticContainer > div > div.mx_Dialog > div.mx_CreateSecretStorageDialog > div:nth-child(2) > form > div.mx_CreateSecretStorageDialog_primaryContainer > label:nth-child(2) { +#mx_Dialog_StaticContainer + > div + > div.mx_Dialog + > div.mx_CreateSecretStorageDialog + > div:nth-child(2) + > form + > div.mx_CreateSecretStorageDialog_primaryContainer + > label:nth-child(2) { display: none; } /* hide the "Recherche de message" section in security user settings */ -div.mx_SettingsTab.mx_SecurityUserSettingsTab > div:nth-child(4) > div:nth-child(2){ +div.mx_SettingsTab.mx_SecurityUserSettingsTab > div:nth-child(4) > div:nth-child(2) { display: none; -} \ No newline at end of file +} diff --git a/res/themes/tchap-light/css/_tchap_custom_vars.pcss b/res/themes/tchap-light/css/_tchap_custom_vars.pcss index 667cac4f92..493a5d81ad 100644 --- a/res/themes/tchap-light/css/_tchap_custom_vars.pcss +++ b/res/themes/tchap-light/css/_tchap_custom_vars.pcss @@ -3,14 +3,14 @@ should be loaded before res/themes/light-custom/css/_custom.pcss */ body { --accent: #000091; - --primary-color: #4C69F6; - --warning-color: #E1000F; + --primary-color: #4c69f6; + --warning-color: #e1000f; --confirmation-color: #0dbd8b; --private-color: #eb5757; --external-color: #f07a12; --forum-color: #27ae60; --sidebar-color: #c0d8ef; - --roomlist-background-color: #EDF1F7; + --roomlist-background-color: #edf1f7; --roomlist-text-color: #2e2f32; --roomlist-text-secondary-color: #61708b; --roomlist-highlights-color: #ffffff; @@ -33,9 +33,9 @@ body { /* if using getComputedStyle(document.body).getPropertyValue it's better to leave no space */ /* stylelint-disable-next-line declaration-colon-space-after */ - --avatar-background-colors_0:#8F96A4; + --avatar-background-colors_0: #8f96a4; /* stylelint-disable-next-line declaration-colon-space-after */ - --avatar-background-colors_1:#8F96A4; + --avatar-background-colors_1: #8f96a4; /* stylelint-disable-next-line declaration-colon-space-after */ - --avatar-background-colors_2:#8F96A4; + --avatar-background-colors_2: #8f96a4; } diff --git a/res/themes/tchap-light/css/tchap-light.pcss b/res/themes/tchap-light/css/tchap-light.pcss index d2f0f2fb2e..f5592ebae5 100644 --- a/res/themes/tchap-light/css/tchap-light.pcss +++ b/res/themes/tchap-light/css/tchap-light.pcss @@ -6,6 +6,6 @@ @import "../../../../node_modules/matrix-react-sdk/res/themes/light-custom/css/_custom.pcss"; /* match css --vars to pcss $vars */ @import "../../../../node_modules/matrix-react-sdk/res/themes/light/css/_mods.pcss"; @import "../../../../node_modules/matrix-react-sdk/res/css/_components.pcss"; /* css of all components */ -@import url("highlight.js/styles/atom-one-light.css");/* taken from matrix theme, don't know what it is */ +@import url("highlight.js/styles/atom-one-light.css"); /* taken from matrix theme, don't know what it is */ @import "../../tchap-common/css/_tchap_custom.pcss"; /* import override from the common folder */ @import "_tchap_custom.pcss"; diff --git a/scripts/checkPatchFile.js b/scripts/checkPatchFile.js index 1d84c8c881..dbde9cd558 100644 --- a/scripts/checkPatchFile.js +++ b/scripts/checkPatchFile.js @@ -1,69 +1,74 @@ -const fs = require('fs'); +const fs = require("fs"); function checkForDuplicateFiles(patchFile) { - console.log("Checking patch file for files that are patched twice..."); - const findFirstDuplicate = (arr) => { - const sortedArr = arr.slice().sort(); - for (let i = 0; i < sortedArr.length - 1; i++) { - if (sortedArr[i + 1] == sortedArr[i]) { - return sortedArr[i]; - } - } - return; - } + console.log("Checking patch file for files that are patched twice..."); + const findFirstDuplicate = (arr) => { + const sortedArr = arr.slice().sort(); + for (let i = 0; i < sortedArr.length - 1; i++) { + if (sortedArr[i + 1] == sortedArr[i]) { + return sortedArr[i]; + } + } + return; + }; - let fileList = [] - Object.values(patchFile).forEach(patchInfo => { - fileList = fileList.concat(patchInfo.files); - }); - const dup = findFirstDuplicate(fileList); - if (dup) { - console.error("This file is used in two different patches:", dup); - console.error("The changes of the two packages will be mixed up. Don't do this."); - process.exit(1); - } - console.log("... no files that are patched twice."); -}; + let fileList = []; + Object.values(patchFile).forEach((patchInfo) => { + fileList = fileList.concat(patchInfo.files); + }); + const dup = findFirstDuplicate(fileList); + if (dup) { + console.error("This file is used in two different patches:", dup); + console.error("The changes of the two packages will be mixed up. Don't do this."); + process.exit(1); + } + console.log("... no files that are patched twice."); +} function checkForMissingPatchDirs(patchFile, patchDirs) { - console.log("Checking for missing patch directories..."); - const patchNames = Object.keys(patchFile); - patchNames.forEach(patchName => { - const found = patchDirs.find(patchDir => patchDir === patchName); - if (!found) { - console.error("\nPATCH PROBLEM!") - console.error("The patch", patchName, "is listed in patches.json but there is no corresponding directory in /patches."); - console.error("Either remove it from patches.json, or use yarn patch-make to make the missing patch file."); - console.error("\n"); - process.exit(1); - } - }); - console.log("... no missing patch directories."); + console.log("Checking for missing patch directories..."); + const patchNames = Object.keys(patchFile); + patchNames.forEach((patchName) => { + const found = patchDirs.find((patchDir) => patchDir === patchName); + if (!found) { + console.error("\nPATCH PROBLEM!"); + console.error( + "The patch", + patchName, + "is listed in patches.json but there is no corresponding directory in /patches.", + ); + console.error("Either remove it from patches.json, or use yarn patch-make to make the missing patch file."); + console.error("\n"); + process.exit(1); + } + }); + console.log("... no missing patch directories."); } function checkForMissingElementsInPatchFile(patchFile, patchDirs) { - console.log("Checking for missing elements in patches.json..."); - const patchNames = Object.keys(patchFile); - patchDirs.forEach(patchDir => { - const found = patchNames.find(patchName => patchName === patchDir); - if (!found) { - console.error("\nPATCH PROBLEM!") - console.error("The patch", patchDir, "has a directory in /patches, but it is not listed in patches.json."); - console.error("Either add it to patches.json, or remove the directory in /patches."); - console.error("\n"); - process.exit(1); - } - }); - console.log("... no missing elements in patches.json."); + console.log("Checking for missing elements in patches.json..."); + const patchNames = Object.keys(patchFile); + patchDirs.forEach((patchDir) => { + const found = patchNames.find((patchName) => patchName === patchDir); + if (!found) { + console.error("\nPATCH PROBLEM!"); + console.error("The patch", patchDir, "has a directory in /patches, but it is not listed in patches.json."); + console.error("Either add it to patches.json, or remove the directory in /patches."); + console.error("\n"); + process.exit(1); + } + }); + console.log("... no missing elements in patches.json."); } const getPatchDirs = () => { - return fs.readdirSync("patches", { withFileTypes: true }) - .filter(file => file.isDirectory()) - .map(dir => dir.name); -} + return fs + .readdirSync("patches", { withFileTypes: true }) + .filter((file) => file.isDirectory()) + .map((dir) => dir.name); +}; -const patchFile = require('../patches/patches.json'); +const patchFile = require("../patches/patches.json"); const patchDirs = getPatchDirs(); checkForDuplicateFiles(patchFile); checkForMissingPatchDirs(patchFile, patchDirs); diff --git a/scripts/makePatch.ts b/scripts/makePatch.ts index ee3c9add1b..28c763168a 100644 --- a/scripts/makePatch.ts +++ b/scripts/makePatch.ts @@ -1,12 +1,12 @@ -const patchFile = require('../patches/patches.json'); +const patchFile = require("../patches/patches.json"); if (process.argv.length !== 3) { - console.log("\nMissing patch name."); - console.log("Usage : node makePatch.js my-patch-name"); - console.log("my-patch-name should be listed in patches/patches.json"); - console.log("Known patch names :", Object.keys(patchFile)); - console.log("Aborting.\n"); - process.exit(1); + console.log("\nMissing patch name."); + console.log("Usage : node makePatch.js my-patch-name"); + console.log("my-patch-name should be listed in patches/patches.json"); + console.log("Known patch names :", Object.keys(patchFile)); + console.log("Aborting.\n"); + process.exit(1); } // Run patch file check. @@ -17,18 +17,18 @@ if (process.argv.length !== 3) { const patchName = process.argv[2]; const patchInfo = patchFile[patchName]; if (!patchInfo) { - console.log("Your patch name is not listed in patches/patches.json. Aborting."); - process.exit(1); + console.log("Your patch name is not listed in patches/patches.json. Aborting."); + process.exit(1); } -const fileList = patchInfo.files.join('|'); +const fileList = patchInfo.files.join("|"); const command = `yarn patch-package --patch-dir patches/${patchName} --include "${fileList}" ${patchInfo.package}`; -var child = require('child_process').exec(command); +var child = require("child_process").exec(command); // use event hooks to provide a callback to execute when data are available: -child.stdout.on('data', function(data) { - console.log(data.toString()); +child.stdout.on("data", function (data) { + console.log(data.toString()); }); -child.stderr.on('data', function(data) { - console.error(data.toString()); +child.stderr.on("data", function (data) { + console.error(data.toString()); }); diff --git a/src/@types/tchap.ts b/src/@types/tchap.ts index a44964ec5a..2bcc52d78c 100644 --- a/src/@types/tchap.ts +++ b/src/@types/tchap.ts @@ -1,18 +1,18 @@ export enum TchapRoomType { - Direct = "direct", - Private = "private", - External = "external", - Forum = "forum", - Unknown = "unknown", + Direct = "direct", + Private = "private", + External = "external", + Forum = "forum", + Unknown = "unknown", } export enum TchapRoomAccessRule { - Unrestricted = "unrestricted", // accessible to externals - Restricted = "restricted" // not accessible to externals + Unrestricted = "unrestricted", // accessible to externals + Restricted = "restricted", // not accessible to externals } export interface TchapIAccessRuleEventContent { - rule: TchapRoomAccessRule; // eslint-disable-line camelcase + rule: TchapRoomAccessRule; // eslint-disable-line camelcase } export const TchapRoomAccessRulesEventId = "im.vector.room.access_rules"; diff --git a/src/app/initTchap.ts b/src/app/initTchap.ts index 4da7a4e7ae..fa0904dec9 100644 --- a/src/app/initTchap.ts +++ b/src/app/initTchap.ts @@ -31,7 +31,7 @@ export async function needsRefreshForVersion4(): Promise { if (TchapVersionManagement.getAppVersion()) { const previousAppVersion: string = TchapVersionManagement.getAppVersion(); const previousAppMajorVersion: number = parseInt(previousAppVersion.charAt(0), 10); - return (!isNaN(previousAppMajorVersion) && previousAppMajorVersion < 4); + return !isNaN(previousAppMajorVersion) && previousAppMajorVersion < 4; } // If there is no tchap app version, it could be that this is a first install of tchap, or that saving the version has failed in the past, or @@ -39,8 +39,10 @@ export async function needsRefreshForVersion4(): Promise { try { // Read version of matrix-js-sdk:riot-web-sync, if it is lower than version 4, refresh is needed. // Note : version 4 of the store happens to coincide with tchap-web v4, but it's unrelated. - const previousStoreVersion: number = - await TchapVersionManagement.getStoreVersion(indexedDB, TchapVersionManagement.SYNC_STORE_NAME); + const previousStoreVersion: number = await TchapVersionManagement.getStoreVersion( + indexedDB, + TchapVersionManagement.SYNC_STORE_NAME, + ); return previousStoreVersion < 4; } catch (error) { // Do not refresh (safety first, avoid creating an infinite clearCacheAndReload loop !) @@ -53,33 +55,29 @@ export async function needsRefreshForVersion4(): Promise { * Force refresh after the client has started */ export function queueClearCacheAndReload() { - const clearCacheAndReloadId = defaultDispatcher.register( - (payload: ActionPayload) => { - if (payload.action === "client_started") { - //unregister callback once the work is done - defaultDispatcher.unregister(clearCacheAndReloadId); - //:tchap: use localstorage instead of matric idDB ? - TchapVersionManagement.clearCacheAndReload(); - } - }, - ); + const clearCacheAndReloadId = defaultDispatcher.register((payload: ActionPayload) => { + if (payload.action === "client_started") { + //unregister callback once the work is done + defaultDispatcher.unregister(clearCacheAndReloadId); + //:tchap: use localstorage instead of matric idDB ? + TchapVersionManagement.clearCacheAndReload(); + } + }); } /** * Save app version to localstorage after the client has started */ export function queueOverideUserSettings() { - const saveVersionId = defaultDispatcher.register( - (payload: ActionPayload) => { - if (payload.action === "client_started") { - //override user settings - TchapUserSettings.override(); + const saveVersionId = defaultDispatcher.register((payload: ActionPayload) => { + if (payload.action === "client_started") { + //override user settings + TchapUserSettings.override(); - //unregister callback once the work is done - defaultDispatcher.unregister(saveVersionId); - } - }, - ); + //unregister callback once the work is done + defaultDispatcher.unregister(saveVersionId); + } + }); } export function saveAppVersionInLocalStorage() { diff --git a/src/async-components/views/dialogs/security/TchapExportE2eKeysDialog.tsx b/src/async-components/views/dialogs/security/TchapExportE2eKeysDialog.tsx index 12934b6baa..a99ad63eb0 100644 --- a/src/async-components/views/dialogs/security/TchapExportE2eKeysDialog.tsx +++ b/src/async-components/views/dialogs/security/TchapExportE2eKeysDialog.tsx @@ -14,16 +14,16 @@ See the License for the specific language governing permissions and limitations under the License. */ -import FileSaver from 'file-saver'; -import React, { ComponentType } from 'react'; +import FileSaver from "file-saver"; +import React, { ComponentType } from "react"; import BaseDialog from "matrix-react-sdk/src/components/views/dialogs/BaseDialog"; import { IDialogProps } from "matrix-react-sdk/src/components/views/dialogs/IDialogProps"; -import { _t } from 'matrix-react-sdk/src/languageHandler'; +import { _t } from "matrix-react-sdk/src/languageHandler"; import Field from "matrix-react-sdk/src/components/views/elements/Field"; -import Modal from 'matrix-react-sdk/src/Modal'; -import * as MegolmExportEncryption from 'matrix-react-sdk/src/utils/MegolmExportEncryption'; +import Modal from "matrix-react-sdk/src/Modal"; +import * as MegolmExportEncryption from "matrix-react-sdk/src/utils/MegolmExportEncryption"; import { KeysStartingWith } from "matrix-react-sdk/src/@types/common"; -import { MatrixClient } from 'matrix-js-sdk/src/client'; +import { MatrixClient } from "matrix-js-sdk/src/client"; import { logger } from "matrix-js-sdk/src/logger"; import "../../../../../res/css/views/dialogs/_TchapExportE2eKeysDialog.pcss"; @@ -73,42 +73,43 @@ export default class TchapExportE2eKeysDialog extends React.Component { - return this.props.matrixClient.exportRoomKeys(); - }).then((k) => { - return MegolmExportEncryption.encryptMegolmKeyFile( - JSON.stringify(k), passphrase, - ); - }).then((f) => { - const blob = new Blob([f], { - type: 'text/plain;charset=us-ascii', - }); - FileSaver.saveAs(blob, 'tchap-keys.txt'); - // :TCHAP: don't close too fast - }).then(() => { - // :TCHAP: added a confirmation modal - Modal.createDialogAsync( - import( - "./TchapExportE2eKeysSuccessDialog" - ) as unknown as Promise>, - { - allowLogout: this.props.allowLogout, - onFinished: (res) => { - this.props.onFinished(res); + Promise.resolve() + .then(() => { + return this.props.matrixClient.exportRoomKeys(); + }) + .then((k) => { + return MegolmExportEncryption.encryptMegolmKeyFile(JSON.stringify(k), passphrase); + }) + .then((f) => { + const blob = new Blob([f], { + type: "text/plain;charset=us-ascii", + }); + FileSaver.saveAs(blob, "tchap-keys.txt"); + // :TCHAP: don't close too fast + }) + .then(() => { + // :TCHAP: added a confirmation modal + Modal.createDialogAsync( + import("./TchapExportE2eKeysSuccessDialog") as unknown as Promise>, + { + allowLogout: this.props.allowLogout, + onFinished: (res) => { + this.props.onFinished(res); + }, }, - }, - ); - }).catch((e) => { - logger.error("Error exporting e2e keys:", e); - if (this.unmounted) { - return; - } - const msg = e.friendlyText || _t('Unknown error'); - this.setState({ - errStr: msg, - phase: Phase.Edit, + ); + }) + .catch((e) => { + logger.error("Error exporting e2e keys:", e); + if (this.unmounted) { + return; + } + const msg = e.friendlyText || _t("Unknown error"); + this.setState({ + errStr: msg, + phase: Phase.Edit, + }); }); - }); this.setState({ errStr: null, @@ -128,15 +129,15 @@ export default class TchapExportE2eKeysDialog extends React.Component
-

- { _t( - 'If you do not have another connected device, ' + - 'we advise you to save your keys in a file on your device.', +

+ {_t( + "If you do not have another connected device, " + + "we advise you to save your keys in a file on your device.", {}, - { b: (sub) => { sub } }, - ) } + { b: (sub) => {sub} }, + )}

-

- { _t( - 'This file will be protected by a password, ' + - 'which will be asked next time you log in, ' + - 'when you will import the keys to unlock your messages.', - ) } +

+ {_t( + "This file will be protected by a password, " + + "which will be asked next time you log in, " + + "when you will import the keys to unlock your messages.", + )}

-

- { _t('Create your Tchap Key password (minimum 8 characters)') } +

+ {_t("Create your Tchap Key password (minimum 8 characters)")}

-
- { this.state.errStr } -
-
-
-
+
{this.state.errStr}
+
+
+
this.onPassphraseChange(e, "passphrase1")} + label={_t("Your Tchap Key password")} + onChange={(e) => this.onPassphraseChange(e, "passphrase1")} size={64} type="password" value={this.state.passphrase1} />
-
-
+
+
this.onPassphraseChange(e, "passphrase2")} + label={_t("Confirm your Tchap Key password")} + onChange={(e) => this.onPassphraseChange(e, "passphrase2")} size={64} type="password" value={this.state.passphrase2} @@ -209,15 +209,15 @@ export default class TchapExportE2eKeysDialog extends React.Component
-
+
diff --git a/src/async-components/views/dialogs/security/TchapExportE2eKeysSuccessDialog.tsx b/src/async-components/views/dialogs/security/TchapExportE2eKeysSuccessDialog.tsx index 0b77a5ea8d..5db1ff2f5f 100644 --- a/src/async-components/views/dialogs/security/TchapExportE2eKeysSuccessDialog.tsx +++ b/src/async-components/views/dialogs/security/TchapExportE2eKeysSuccessDialog.tsx @@ -14,12 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React from 'react'; +import React from "react"; import BaseDialog from "matrix-react-sdk/src/components/views/dialogs/BaseDialog"; -import dis from 'matrix-react-sdk/src/dispatcher/dispatcher'; -import { _t } from 'matrix-react-sdk/src/languageHandler'; +import dis from "matrix-react-sdk/src/dispatcher/dispatcher"; +import { _t } from "matrix-react-sdk/src/languageHandler"; -import { TchapAnchor } from '../../../../components/common/TchapAnchor'; +import { TchapAnchor } from "../../../../components/common/TchapAnchor"; import KeySavedImage from "../../../../../res/img/tchap/key-saved.svg"; import "../../../../../res/css/views/dialogs/_TchapExportE2eKeysSuccessDialog.pcss"; @@ -39,48 +39,43 @@ export default class TchapExportE2eKeysSuccessDialog extends React.Component
- Export logo + Export logo

- { _t( - 'Your Tchap Keys (encryption keys) have been successful saved ' + - 'in the tchap-keys.txt file. You can import them ' + - 'when you login again to unlock your messages ' + - '(find out more).', + {_t( + "Your Tchap Keys (encryption keys) have been successful saved " + + "in the tchap-keys.txt file. You can import them " + + "when you login again to unlock your messages " + + "(find out more).", {}, { a: (sub) => ( - { sub } + + {sub} ), - b: (sub) => { sub }, + b: (sub) => {sub}, }, - ) } + )}

-
+
diff --git a/src/components/common/TchapAnchor.tsx b/src/components/common/TchapAnchor.tsx index 97d5082546..7915a8f078 100644 --- a/src/components/common/TchapAnchor.tsx +++ b/src/components/common/TchapAnchor.tsx @@ -16,12 +16,8 @@ export const TchapAnchor: React.FC = ({ openInNewTab, }: TchapAnchorProps) => { return ( - - { children } + + {children} ); }; diff --git a/src/components/views/dialogs/ExpiredAccountDialog.tsx b/src/components/views/dialogs/ExpiredAccountDialog.tsx index cece80f55f..4f76c6b131 100644 --- a/src/components/views/dialogs/ExpiredAccountDialog.tsx +++ b/src/components/views/dialogs/ExpiredAccountDialog.tsx @@ -1,10 +1,10 @@ /* eslint-disable max-len */ -import React from 'react'; -import { _t } from 'matrix-react-sdk/src/languageHandler'; -import BaseDialog from 'matrix-react-sdk/src/components/views/dialogs/BaseDialog'; -import DialogButtons from 'matrix-react-sdk/src/components/views/elements/DialogButtons'; +import React from "react"; +import { _t } from "matrix-react-sdk/src/languageHandler"; +import BaseDialog from "matrix-react-sdk/src/components/views/dialogs/BaseDialog"; +import DialogButtons from "matrix-react-sdk/src/components/views/elements/DialogButtons"; -import TchapUtils from '../../../util/TchapUtils'; +import TchapUtils from "../../../util/TchapUtils"; interface IProps { onFinished(): void; @@ -13,9 +13,9 @@ interface IProps { } interface IState { - emailDelay: number;//delay betwenn 2 emails in seconds, by default 30 + emailDelay: number; //delay betwenn 2 emails in seconds, by default 30 isAccountExpired: boolean; //todo: not used yet - newEmailSentTimestamp: number;//timestamp + newEmailSentTimestamp: number; //timestamp ProcessState: ProcessState; } @@ -24,7 +24,7 @@ enum ProcessState { EMAIL_SUCCESS, EMAIL_FAILURE, ACCOUNT_STILL_EXPIRED, - ACCOUNT_RENEWED + ACCOUNT_RENEWED, } /** * Expired Account is displayed when the user account is expired. It can not be cancel until the account is renewed. @@ -45,8 +45,10 @@ export default class ExpiredAccountDialog extends React.Component { @@ -77,49 +79,52 @@ export default class ExpiredAccountDialog extends React.Component { this.setState({ - newEmailSentTimestamp: success? Date.now() : this.state.newEmailSentTimestamp, - ProcessState: success? ProcessState.EMAIL_SUCCESS : ProcessState.EMAIL_FAILURE, + newEmailSentTimestamp: success ? Date.now() : this.state.newEmailSentTimestamp, + ProcessState: success ? ProcessState.EMAIL_SUCCESS : ProcessState.EMAIL_FAILURE, }); }); }; render() { - let titleMessage = _t('The validity period of your account has expired'); - let descriptionMessage =

{ _t('An email has been sent to you. Click on the link it contains, click below.') }

; + let titleMessage = _t("The validity period of your account has expired"); + let descriptionMessage = ( +

{_t("An email has been sent to you. Click on the link it contains, click below.")}

+ ); let alertMessage = null; - let requestNewEmailButton = ; - let okButtonText = _t('I renewed the validity of my account'); + let requestNewEmailButton = ; + let okButtonText = _t("I renewed the validity of my account"); switch (this.state.ProcessState) { case ProcessState.EMAIL_MUST_WAIT: //don't know which class should decorate this message, it is not really an error //its goal is to avoid users to click twice or more on the button and spam themselves - alertMessage =

{ _t( - "Wait for at least %(wait)s seconds between two emails", { wait: this.state.emailDelay }, - ) }

; + alertMessage = ( +

+ {_t("Wait for at least %(wait)s seconds between two emails", { wait: this.state.emailDelay })} +

+ ); break; case ProcessState.EMAIL_FAILURE: - alertMessage =

{ _t( - "The email was not sent sucessfully, please retry in a moment", - ) }

; + alertMessage = ( +

{_t("The email was not sent sucessfully, please retry in a moment")}

+ ); break; case ProcessState.EMAIL_SUCCESS: - alertMessage =

{ _t( - "A new email has been sent", - ) }

; + alertMessage =

{_t("A new email has been sent")}

; break; case ProcessState.ACCOUNT_STILL_EXPIRED: - alertMessage =

- { _t("Your account is still expired, please follow the link in the email you have received to renew it") } -

; + alertMessage = ( +

+ {_t( + "Your account is still expired, please follow the link in the email you have received to renew it", + )} +

+ ); break; case ProcessState.ACCOUNT_RENEWED: - titleMessage = _t('Congratulations, your account has been renewed'); - descriptionMessage = -

- { _t('The app will reload now') } -

; - okButtonText = _t('Reload the app'); + titleMessage = _t("Congratulations, your account has been renewed"); + descriptionMessage =

{_t("The app will reload now")}

; + okButtonText = _t("Reload the app"); alertMessage = null; requestNewEmailButton = null; break; @@ -128,23 +133,23 @@ export default class ExpiredAccountDialog extends React.Component - { alertMessage } -
- - { descriptionMessage } - + {alertMessage} +
+ {descriptionMessage}
- - { requestNewEmailButton } + {requestNewEmailButton} ); diff --git a/src/components/views/dialogs/TchapCreateRoomDialog.tsx b/src/components/views/dialogs/TchapCreateRoomDialog.tsx index a8f8c7b03a..9748a189db 100644 --- a/src/components/views/dialogs/TchapCreateRoomDialog.tsx +++ b/src/components/views/dialogs/TchapCreateRoomDialog.tsx @@ -14,8 +14,8 @@ Except when importing from other customisation files. Then imports must use rela */ import React, { ChangeEvent, createRef, KeyboardEvent } from "react"; import { Room } from "matrix-js-sdk/src/models/room"; -import withValidation, { IFieldState } from 'matrix-react-sdk/src/components/views/elements/Validation'; -import { _t } from 'matrix-react-sdk/src/languageHandler'; +import withValidation, { IFieldState } from "matrix-react-sdk/src/components/views/elements/Validation"; +import { _t } from "matrix-react-sdk/src/languageHandler"; import { IOpts } from "matrix-react-sdk/src/createRoom"; import { getKeyBindingsManager } from "matrix-react-sdk/src/KeyBindingsManager"; import { KeyBindingAction } from "matrix-react-sdk/src/accessibility/KeyboardShortcuts"; @@ -23,7 +23,7 @@ import Field from "matrix-react-sdk/src/components/views/elements/Field"; import DialogButtons from "matrix-react-sdk/src/components/views/elements/DialogButtons"; import BaseDialog from "matrix-react-sdk/src/components/views/dialogs/BaseDialog"; -import TchapUtils from '../../../util/TchapUtils'; +import TchapUtils from "../../../util/TchapUtils"; import TchapRoomTypeSelector from "./../elements/TchapRoomTypeSelector"; import { TchapRoomType } from "../../../@types/tchap"; import TchapCreateRoom from "../../../lib/createTchapRoom"; @@ -111,8 +111,10 @@ export default class TchapCreateRoomDialog extends React.Component { - return this.state.tchapRoomType === TchapRoomType.Forum && this.state.showFederateSwitch ? this.state.forumFederationSwitchValue : true; - } + return this.state.tchapRoomType === TchapRoomType.Forum && this.state.showFederateSwitch + ? this.state.forumFederationSwitchValue + : true; + }; private onOk = async () => { const activeElement = document.activeElement as HTMLElement; @@ -122,12 +124,16 @@ export default class TchapCreateRoomDialog extends React.Component(resolve => this.setState({}, resolve)); + await new Promise((resolve) => this.setState({}, resolve)); if (this.state.nameIsValid) { - this.props.onFinished(true, TchapCreateRoom.roomCreateOptions( - this.state.name, - this.state.tchapRoomType, - this.isSelectedRoomFederated())); + this.props.onFinished( + true, + TchapCreateRoom.roomCreateOptions( + this.state.name, + this.state.tchapRoomType, + this.isSelectedRoomFederated(), + ), + ); } else { let field; if (!this.state.nameIsValid) { @@ -156,7 +162,7 @@ export default class TchapCreateRoomDialog extends React.Component -
- + onCancel={this.onCancel} + /> ); } diff --git a/src/components/views/dialogs/TchapLogoutDialog.tsx b/src/components/views/dialogs/TchapLogoutDialog.tsx index 5158951428..2814d017a4 100644 --- a/src/components/views/dialogs/TchapLogoutDialog.tsx +++ b/src/components/views/dialogs/TchapLogoutDialog.tsx @@ -32,7 +32,7 @@ interface IProps { export default class TchapLogoutDialog extends React.Component { static defaultProps = { - onFinished: function() { }, + onFinished: function () {}, }; constructor(props) { @@ -70,73 +70,56 @@ export default class TchapLogoutDialog extends React.Component { render() { const dialogContent = (
-
+

- { _t( + {_t( "Without your Tchap Keys, you won't be able to read your messages" + - " at your next login because they will be locked. It's a Tchap safety measure.", + " at your next login because they will be locked. It's a Tchap safety measure.", {}, { - b: (sub) => { sub }, + b: (sub) => {sub}, }, - ) } + )}

- Login logo + Login logo

- { _t( - "Can you currently read your messages on another device?" - + " You can disconnect. This other device automatically backs up" - + " your Tchat Keys and messages.", + {_t( + "Can you currently read your messages on another device?" + + " You can disconnect. This other device automatically backs up" + + " your Tchat Keys and messages.", {}, { - b: (sub) => { sub }, + b: (sub) => {sub}, }, - ) } + )}

-
- Export logo + Export logo

- { _t( - "You don't have another device connected to Tchap?" - + " Back up your Tchap Keys. These keys will unlock current messages," - + " but not those received after saving.", + {_t( + "You don't have another device connected to Tchap?" + + " Back up your Tchap Keys. These keys will unlock current messages," + + " but not those received after saving.", {}, { - b: (sub) => { sub }, + b: (sub) => {sub}, }, - ) } + )}

-
@@ -154,7 +137,7 @@ export default class TchapLogoutDialog extends React.Component { hasCancel={true} onFinished={this.onFinished} > - { dialogContent } + {dialogContent} ); } diff --git a/src/components/views/elements/BlockedIcon.tsx b/src/components/views/elements/BlockedIcon.tsx index 3453aacc4e..1c64c63618 100644 --- a/src/components/views/elements/BlockedIcon.tsx +++ b/src/components/views/elements/BlockedIcon.tsx @@ -17,7 +17,7 @@ import "../../../../res/css/views/elements/BlockedIcon.pcss"; import React from "react"; -import classNames from 'classnames'; +import classNames from "classnames"; interface BlockedIconProps { className: string; diff --git a/src/components/views/elements/ContentScanningStatus.tsx b/src/components/views/elements/ContentScanningStatus.tsx index 46defe8474..8977382af3 100644 --- a/src/components/views/elements/ContentScanningStatus.tsx +++ b/src/components/views/elements/ContentScanningStatus.tsx @@ -32,39 +32,39 @@ interface ContentScanningStatusProps { export const ContentScanningStatus: React.FC = (props: ContentScanningStatusProps) => { const [theme, setTheme] = useState(SettingsStore.getValue("theme")); - SettingsStore.watchSetting("theme", null, (...[,,, value]) => { + SettingsStore.watchSetting("theme", null, (...[, , , value]) => { setTheme(value); }); if (props.status === "scanning") { - return
- - { _t("Scanning") } - -
; + return ( +
+ + {_t("Scanning")} + +
+ ); } if (props.status === "unsafe") { - return
- - { _t("Content blocked") } - -
; + return ( +
+ + {_t("Content blocked")} + +
+ ); } if (props.status === "error") { - return
- - { _t("Scan unavailable") } - -
; + return ( +
+ + {_t("Scan unavailable")} + +
+ ); } - return
{ _t("Trusted") }
; + return
{_t("Trusted")}
; }; diff --git a/src/components/views/elements/TchapRoomTypeSelector.tsx b/src/components/views/elements/TchapRoomTypeSelector.tsx index 8e871b7b0d..8ea9828a6e 100644 --- a/src/components/views/elements/TchapRoomTypeSelector.tsx +++ b/src/components/views/elements/TchapRoomTypeSelector.tsx @@ -2,9 +2,9 @@ Copyright 2022 DINUM */ -import React from 'react'; +import React from "react"; import classNames from "classnames"; -import { _t } from 'matrix-react-sdk/src/languageHandler'; +import { _t } from "matrix-react-sdk/src/languageHandler"; import StyledRadioButton from "matrix-react-sdk/src/components/views/elements/StyledRadioButton"; import LabelledToggleSwitch from "matrix-react-sdk/src/components/views/elements/LabelledToggleSwitch"; @@ -44,88 +44,76 @@ export default class TchapRoomTypeSelector extends React.Component + value={this.props.forumFederationSwitchValue} + />
); } - return
- - - -
- ; + return ( +
+ + + +
+ ); } } diff --git a/src/components/views/messages/TchapUnknownBody.tsx b/src/components/views/messages/TchapUnknownBody.tsx index b3523b62ad..19c8dfa8b6 100644 --- a/src/components/views/messages/TchapUnknownBody.tsx +++ b/src/components/views/messages/TchapUnknownBody.tsx @@ -4,7 +4,7 @@ import React, { forwardRef } from "react"; import { MatrixEvent } from "matrix-js-sdk/src/matrix"; -import { _t } from 'matrix-react-sdk/src/languageHandler'; // :TCHAP: +import { _t } from "matrix-react-sdk/src/languageHandler"; // :TCHAP: interface IProps { mxEvent: MatrixEvent; children?: React.ReactNode; @@ -14,12 +14,13 @@ export default forwardRef(({ mxEvent, children }: IProps, ref: React.RefObject - { userFriendlyText } - { children } + {userFriendlyText} + {children}
); } @@ -28,8 +29,8 @@ export default forwardRef(({ mxEvent, children }: IProps, ref: React.RefObject - { text } - { children } + {text} + {children}
); }); diff --git a/src/components/views/rooms/TchapExternalRoomHeader.tsx b/src/components/views/rooms/TchapExternalRoomHeader.tsx index abf688151f..604a390c35 100644 --- a/src/components/views/rooms/TchapExternalRoomHeader.tsx +++ b/src/components/views/rooms/TchapExternalRoomHeader.tsx @@ -1,10 +1,10 @@ -import { MatrixEvent, Room, RoomStateEvent } from 'matrix-js-sdk/src/matrix'; -import { useTypedEventEmitter } from 'matrix-react-sdk/src/hooks/useEventEmitter'; -import React, { useState } from 'react'; +import { MatrixEvent, Room, RoomStateEvent } from "matrix-js-sdk/src/matrix"; +import { useTypedEventEmitter } from "matrix-react-sdk/src/hooks/useEventEmitter"; +import React, { useState } from "react"; import { _t } from "matrix-react-sdk/src/languageHandler"; -import { TchapRoomAccessRule, TchapRoomAccessRulesEventId } from '../../../@types/tchap'; -import TchapRoomUtils from '../../../util/TchapRoomUtils'; +import { TchapRoomAccessRule, TchapRoomAccessRulesEventId } from "../../../@types/tchap"; +import TchapRoomUtils from "../../../util/TchapRoomUtils"; export interface IProps { room?: Room; @@ -31,17 +31,13 @@ function useExternalAllowed(room: Room): boolean { return isExternalAllowed; } -export default function TchapExternalRoomHeader({ - room, -}: IProps) { +export default function TchapExternalRoomHeader({ room }: IProps) { //configure the use hook for this state variable const isExternalAllowed = useExternalAllowed(room); - return ( - isExternalAllowed ? -
- { _t("External users allowed") } -
- : null); + return isExternalAllowed ? ( +
+ {_t("External users allowed")} +
+ ) : null; } - diff --git a/src/components/views/settings/TchapJoinRuleSettings.tsx b/src/components/views/settings/TchapJoinRuleSettings.tsx index cbf889b3dd..48ac9e3095 100644 --- a/src/components/views/settings/TchapJoinRuleSettings.tsx +++ b/src/components/views/settings/TchapJoinRuleSettings.tsx @@ -27,7 +27,9 @@ import RoomAvatar from "matrix-react-sdk/src/components/views/avatars/RoomAvatar import { MatrixClientPeg } from "matrix-react-sdk/src/MatrixClientPeg"; import Modal from "matrix-react-sdk/src/Modal"; import ManageRestrictedJoinRuleDialog from "matrix-react-sdk/src/components/views/dialogs/ManageRestrictedJoinRuleDialog"; -import RoomUpgradeWarningDialog, { IFinishedOpts } from "matrix-react-sdk/src/components/views/dialogs/RoomUpgradeWarningDialog"; +import RoomUpgradeWarningDialog, { + IFinishedOpts, +} from "matrix-react-sdk/src/components/views/dialogs/RoomUpgradeWarningDialog"; import { upgradeRoom } from "matrix-react-sdk/src/utils/RoomUpgrade"; import { arrayHasDiff } from "matrix-react-sdk/src/utils/arrays"; import { useLocalEcho } from "matrix-react-sdk/src/hooks/useLocalEcho"; @@ -42,7 +44,7 @@ import QuestionDialog from "matrix-react-sdk/src/components/views/dialogs/Questi import TchapUIFeature from "../../../util/TchapUIFeature"; import { TchapRoomAccessRule, TchapIAccessRuleEventContent, TchapRoomAccessRulesEventId } from "../../../@types/tchap"; - interface IProps { +interface IProps { room: Room; promptUpgrade?: boolean; closeSettingsFn(): void; @@ -55,25 +57,25 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh const cli = room.client; const roomSupportsRestricted = doesRoomVersionSupport(room.getVersion(), PreferredRoomVersions.RestrictedRooms); - const preferredRestrictionVersion = !roomSupportsRestricted && promptUpgrade - ? PreferredRoomVersions.RestrictedRooms - : undefined; + const preferredRestrictionVersion = + !roomSupportsRestricted && promptUpgrade ? PreferredRoomVersions.RestrictedRooms : undefined; const disabled = !room.currentState.mayClientSendStateEvent(EventType.RoomJoinRules, cli); const [content, setContent] = useLocalEcho( () => room.currentState.getStateEvents(EventType.RoomJoinRules, "")?.getContent(), - content => cli.sendStateEvent(room.roomId, EventType.RoomJoinRules, content, ""), + (content) => cli.sendStateEvent(room.roomId, EventType.RoomJoinRules, content, ""), onError, ); const { join_rule: joinRule = JoinRule.Invite } = content || {}; - const restrictedAllowRoomIds = joinRule === JoinRule.Restricted - ? content.allow?.filter(o => o.type === RestrictedAllowType.RoomMembership).map(o => o.room_id) - : undefined; + const restrictedAllowRoomIds = + joinRule === JoinRule.Restricted + ? content.allow?.filter((o) => o.type === RestrictedAllowType.RoomMembership).map((o) => o.room_id) + : undefined; const [contentTchapAccessRule, setTchapAccessRule] = useLocalEcho( () => room.currentState.getStateEvents(TchapRoomAccessRulesEventId, "")?.getContent(), - content => cli.sendStateEvent(room.roomId, TchapRoomAccessRulesEventId, content, ""), + (content) => cli.sendStateEvent(room.roomId, TchapRoomAccessRulesEventId, content, ""), onError, ); const { rule: accessRule = undefined } = contentTchapAccessRule || {}; @@ -85,11 +87,15 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh } const matrixClient = MatrixClientPeg.get(); - const { finished } = Modal.createDialog(ManageRestrictedJoinRuleDialog, { - matrixClient, - room, - selected, - }, "mx_ManageRestrictedJoinRuleDialog_wrapper"); + const { finished } = Modal.createDialog( + ManageRestrictedJoinRuleDialog, + { + matrixClient, + room, + selected, + }, + "mx_ManageRestrictedJoinRuleDialog_wrapper", + ); const [roomIds] = await finished; return roomIds; @@ -115,9 +121,7 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh // :TCHAP: do we need to add the following condition as well (joinRule === JoinRule.Restricted && !restrictedAllowRoomIds?.length)? if (joinRule === JoinRule.Invite) { - let privateRoomDescription =
- { _t("Only invited people can join.") } -
; + let privateRoomDescription =
{_t("Only invited people can join.")}
; // :TCHAP: We could add functions in 'TchapUtils' to determine the type of room and rely on this logic to display components as we did in Android : // :TCHAP: https://github.com/tchapgouv/tchap-android/blob/develop/vector/src/main/java/fr/gouv/tchap/core/utils/RoomUtils.kt#L31 if (accessRule) { @@ -125,28 +129,30 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh const onExternalAccessChange = async () => { Modal.createDialog(QuestionDialog, { title: _t("Allow external users to join this room"), - description: _t('This action is irreversible.') + " " - + _t('Are you sure you want to allow the externals to join this room ?'), + description: + _t("This action is irreversible.") + + " " + + _t("Are you sure you want to allow the externals to join this room ?"), button: _t("OK"), onFinished: (confirmed) => { if (!confirmed) return; - setTchapAccessRule({ "rule": TchapRoomAccessRule.Unrestricted }); + setTchapAccessRule({ rule: TchapRoomAccessRule.Unrestricted }); }, }); }; - privateRoomDescription =
+ privateRoomDescription = (
- { _t("Only invited people can join.") } +
{_t("Only invited people can join.")}
+ + +
- - - -
; + ); } definitions.push({ @@ -159,10 +165,12 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh definitions.push({ value: JoinRule.Public, label: _t("Public"), - description: <> - { _t("Anyone can find and join.") } - { aliasWarning } - , + description: ( + <> + {_t("Anyone can find and join.")} + {aliasWarning} + + ), }); } @@ -173,17 +181,17 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh if (roomSupportsRestricted || preferredRestrictionVersion || joinRule === JoinRule.Restricted) { let upgradeRequiredPill; if (preferredRestrictionVersion) { - upgradeRequiredPill = - { _t("Upgrade required") } - ; + upgradeRequiredPill = ( + {_t("Upgrade required")} + ); } let description; if (joinRule === JoinRule.Restricted && restrictedAllowRoomIds?.length) { // only show the first 4 spaces we know about, so that the UI doesn't grow out of proportion there are lots. const shownSpaces = restrictedAllowRoomIds - .map(roomId => cli.getRoom(roomId)) - .filter(room => room?.isSpaceRoom()) + .map((roomId) => cli.getRoom(roomId)) + .filter((room) => room?.isSpaceRoom()) .slice(0, 4); let moreText; @@ -211,9 +219,9 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh setContent({ join_rule: JoinRule.Restricted, - allow: newAllowRoomIds.map(roomId => ({ - "type": RestrictedAllowType.RoomMembership, - "room_id": roomId, + allow: newAllowRoomIds.map((roomId) => ({ + type: RestrictedAllowType.RoomMembership, + room_id: roomId, })), }); }; @@ -228,44 +236,60 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh } }; - description =
- - { _t("Anyone in a space can find and join. Edit which spaces can access here.", {}, { - a: sub => - { sub } - , - }) } - - -
-

{ _t("Spaces with access") }

- { shownSpaces.map(room => { - return - - { room.name } - ; - }) } - { moreText && { moreText } } + description = ( +
+ + {_t( + "Anyone in a space can find and join. Edit which spaces can access here.", + {}, + { + a: (sub) => ( + + {sub} + + ), + }, + )} + + +
+

{_t("Spaces with access")}

+ {shownSpaces.map((room) => { + return ( + + + {room.name} + + ); + })} + {moreText && {moreText}} +
-
; + ); } else if (SpaceStore.instance.activeSpaceRoom) { - description = _t("Anyone in can find and join. You can select other spaces too.", {}, { - spaceName: () => { SpaceStore.instance.activeSpaceRoom.name }, - }); + description = _t( + "Anyone in can find and join. You can select other spaces too.", + {}, + { + spaceName: () => {SpaceStore.instance.activeSpaceRoom.name}, + }, + ); } else { description = _t("Anyone in a space can find and join. You can select multiple spaces."); } definitions.splice(1, 0, { value: JoinRule.Restricted, - label: <> - { _t("Space members") } - { upgradeRequiredPill } - , + label: ( + <> + {_t("Space members")} + {upgradeRequiredPill} + + ), description, // if there are 0 allowed spaces then render it as invite only instead checked: joinRule === JoinRule.Restricted && !!restrictedAllowRoomIds?.length, @@ -288,24 +312,33 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh let warning: JSX.Element; const userId = cli.getUserId(); - const unableToUpdateSomeParents = Array.from(SpaceStore.instance.getKnownParents(room.roomId)) - .some(roomId => !cli.getRoom(roomId)?.currentState.maySendStateEvent(EventType.SpaceChild, userId)); + const unableToUpdateSomeParents = Array.from(SpaceStore.instance.getKnownParents(room.roomId)).some( + (roomId) => !cli.getRoom(roomId)?.currentState.maySendStateEvent(EventType.SpaceChild, userId), + ); if (unableToUpdateSomeParents) { - warning = - { _t("This room is in some spaces you're not an admin of. " + - "In those spaces, the old room will still be shown, " + - "but people will be prompted to join the new one.") } - ; + warning = ( + + {_t( + "This room is in some spaces you're not an admin of. " + + "In those spaces, the old room will still be shown, " + + "but people will be prompted to join the new one.", + )} + + ); } Modal.createDialog(RoomUpgradeWarningDialog, { roomId: room.roomId, targetVersion, - description: <> - { _t("This upgrade will allow members of selected spaces " + - "access to this room without an invite.") } - { warning } - , + description: ( + <> + {_t( + "This upgrade will allow members of selected spaces " + + "access to this room without an invite.", + )} + {warning} + + ), doUpgrade: async ( opts: IFinishedOpts, fn: (progressText: string, progress: number, total: number) => void, @@ -317,22 +350,30 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh true, true, true, - progress => { + (progress) => { const total = 2 + progress.updateSpacesTotal + progress.inviteUsersTotal; if (!progress.roomUpgraded) { fn(_t("Upgrading room"), 0, total); } else if (!progress.roomSynced) { fn(_t("Loading new room"), 1, total); } else if (progress.inviteUsersProgress < progress.inviteUsersTotal) { - fn(_t("Sending invites... (%(progress)s out of %(count)s)", { - progress: progress.inviteUsersProgress, - count: progress.inviteUsersTotal, - }), 2 + progress.inviteUsersProgress, total); + fn( + _t("Sending invites... (%(progress)s out of %(count)s)", { + progress: progress.inviteUsersProgress, + count: progress.inviteUsersTotal, + }), + 2 + progress.inviteUsersProgress, + total, + ); } else if (progress.updateSpacesProgress < progress.updateSpacesTotal) { - fn(_t("Updating spaces... (%(progress)s out of %(count)s)", { - progress: progress.updateSpacesProgress, - count: progress.updateSpacesTotal, - }), 2 + progress.inviteUsersProgress + progress.updateSpacesProgress, total); + fn( + _t("Updating spaces... (%(progress)s out of %(count)s)", { + progress: progress.updateSpacesProgress, + count: progress.updateSpacesTotal, + }), + 2 + progress.inviteUsersProgress + progress.updateSpacesProgress, + total, + ); } }, ); @@ -371,9 +412,9 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh // pre-set the accepted spaces with the currently viewed one as per the microcopy if (joinRule === JoinRule.Restricted) { - newContent.allow = restrictedAllowRoomIds.map(roomId => ({ - "type": RestrictedAllowType.RoomMembership, - "room_id": roomId, + newContent.allow = restrictedAllowRoomIds.map((roomId) => ({ + type: RestrictedAllowType.RoomMembership, + room_id: roomId, })); } @@ -393,4 +434,3 @@ const JoinRuleSettings = ({ room, promptUpgrade, aliasWarning, onError, beforeCh }; export default JoinRuleSettings; - diff --git a/src/components/views/verification/TchapVerificationComplete.tsx b/src/components/views/verification/TchapVerificationComplete.tsx index 1b7e9a1264..483e3ab5b8 100644 --- a/src/components/views/verification/TchapVerificationComplete.tsx +++ b/src/components/views/verification/TchapVerificationComplete.tsx @@ -14,8 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React from 'react'; -import { _t } from 'matrix-react-sdk/src/languageHandler'; +import React from "react"; +import { _t } from "matrix-react-sdk/src/languageHandler"; import DialogButtons from "matrix-react-sdk/src/components/views/elements/DialogButtons"; interface IProps { @@ -24,13 +24,16 @@ interface IProps { export default class TchapVerificationComplete extends React.Component { public render(): React.ReactNode { - return
-

{ _t("Verified!") }

-

{ _t("The sharing of your Tchap Keys has succeeded. Your messages will be unlocked.") }

- -
; + return ( +
+

{_t("Verified!")}

+

{_t("The sharing of your Tchap Keys has succeeded. Your messages will be unlocked.")}

+ +
+ ); } } diff --git a/src/content-scanner/ContentScanner.ts b/src/content-scanner/ContentScanner.ts index 04e11533c1..3ee112ab5f 100644 --- a/src/content-scanner/ContentScanner.ts +++ b/src/content-scanner/ContentScanner.ts @@ -57,8 +57,7 @@ export class ContentScanner { private hasKey = false; private cachedScans = new Map>(); - constructor(private scannerUrl: string) { - } + constructor(private scannerUrl: string) {} public urlForMxc(mxc: string, width?: number, height?: number, method?: ResizeMethod): string { const matrixUrl = getHttpUriForMxc(this.scannerUrl, mxc, width, height, method); @@ -115,7 +114,7 @@ export class ContentScanner { }, }); } else { - const url = this.scannerUrl + `/_matrix/media_proxy/unstable/scan/${mxc.substring('mxc://'.length)}`; + const url = this.scannerUrl + `/_matrix/media_proxy/unstable/scan/${mxc.substring("mxc://".length)}`; response = await fetch(url); } @@ -124,8 +123,9 @@ export class ContentScanner { } private async fetchKey() { - const response = await fetch(this.scannerUrl + "/_matrix/media_proxy/unstable/public_key") - .then(r => r.json()); + const response = await fetch(this.scannerUrl + "/_matrix/media_proxy/unstable/public_key").then((r) => + r.json(), + ); this.mcsKey.set_recipient_key(response["public_key"]); this.hasKey = true; } @@ -144,7 +144,8 @@ export class ContentScanner { } private static get contentScannerUrl(): string { - return (SdkConfig.get() as ContentScannerConfig)?.content_scanner?.url - ?? MatrixClientPeg.get().getHomeserverUrl(); + return ( + (SdkConfig.get() as ContentScannerConfig)?.content_scanner?.url ?? MatrixClientPeg.get().getHomeserverUrl() + ); } } diff --git a/src/customisations/ContentScanningMedia.ts b/src/customisations/ContentScanningMedia.ts index 55affff738..354c6e61a2 100644 --- a/src/customisations/ContentScanningMedia.ts +++ b/src/customisations/ContentScanningMedia.ts @@ -31,8 +31,7 @@ import { ContentScanner } from "./../content-scanner/ContentScanner"; * Routes all media through a content scanner. */ export class Media { - constructor(public readonly prepared: IPreparedMedia) { - } + constructor(public readonly prepared: IPreparedMedia) {} /** * True if the media appears to be encrypted. Actual file contents may vary. @@ -111,9 +110,9 @@ export class Media { */ public getSquareThumbnailHttp(dim: number): string { if (this.hasThumbnail) { - return this.getThumbnailHttp(dim, dim, 'crop'); + return this.getThumbnailHttp(dim, dim, "crop"); } - return this.getThumbnailOfSourceHttp(dim, dim, 'crop'); + return this.getThumbnailOfSourceHttp(dim, dim, "crop"); } /** diff --git a/src/customisations/components/views/messages/ContentScanningAudioBody.tsx b/src/customisations/components/views/messages/ContentScanningAudioBody.tsx index 31d252da03..8d7f07f8de 100644 --- a/src/customisations/components/views/messages/ContentScanningAudioBody.tsx +++ b/src/customisations/components/views/messages/ContentScanningAudioBody.tsx @@ -45,21 +45,20 @@ export default class ContentScanningAudioBody extends React.PureComponent { - const isSafe = ok1 && ok2; - this.setState({ - isScanning: false, - isSafe, + Promise.all([this.media.scanSource(), this.media.scanThumbnail()]) + .then(async ([ok1, ok2]) => { + const isSafe = ok1 && ok2; + this.setState({ + isScanning: false, + isSafe, + }); + }) + .catch(() => { + this.setState({ + isScanning: false, + hasError: true, + }); }); - }).catch(() => { - this.setState({ - isScanning: false, - hasError: true, - }); - }); } public render() { @@ -67,10 +66,12 @@ export default class ContentScanningAudioBody extends React.PureComponent; } - return
- - -
; + return ( +
+ + +
+ ); } private get media(): Media { diff --git a/src/customisations/components/views/messages/ContentScanningDownloadActionButton.tsx b/src/customisations/components/views/messages/ContentScanningDownloadActionButton.tsx index 818f5abafe..be3e38140c 100644 --- a/src/customisations/components/views/messages/ContentScanningDownloadActionButton.tsx +++ b/src/customisations/components/views/messages/ContentScanningDownloadActionButton.tsx @@ -79,20 +79,19 @@ export default class ContentScanningDownloadActionButton extends React.PureCompo }); const media = this.props.mediaEventHelperGet().media as any as Media; - const safe = await Promise.all([ - media.scanSource(), - media.scanThumbnail(), - ]).then(([ok1, ok2]) => { - const isSafe = ok1 && ok2; - this.setState({ - downloadState: isSafe ? DownloadState.Safe : DownloadState.Untrusted, + const safe = await Promise.all([media.scanSource(), media.scanThumbnail()]) + .then(([ok1, ok2]) => { + const isSafe = ok1 && ok2; + this.setState({ + downloadState: isSafe ? DownloadState.Safe : DownloadState.Untrusted, + }); + return isSafe; + }) + .catch(() => { + this.setState({ + downloadState: DownloadState.Error, + }); }); - return isSafe; - }).catch(() => { - this.setState({ - downloadState: DownloadState.Error, - }); - }); if (!safe) { // do not download unsafe content @@ -138,19 +137,21 @@ export default class ContentScanningDownloadActionButton extends React.PureCompo } const classes = classNames({ - 'mx_MessageActionBar_iconButton': true, - 'mx_MessageActionBar_downloadButton': true, - 'mx_MessageActionBar_downloadSpinnerButton': hasSpinner, + mx_MessageActionBar_iconButton: true, + mx_MessageActionBar_downloadButton: true, + mx_MessageActionBar_downloadSpinnerButton: hasSpinner, }); - return - { icon } - ; + return ( + + {icon} + + ); } private renderBlockedIcon(): JSX.Element { @@ -162,10 +163,8 @@ export default class ContentScanningDownloadActionButton extends React.PureCompo } private get disabled(): boolean { - return [ - DownloadState.Scanning, - DownloadState.Error, - DownloadState.Untrusted, - ].includes(this.state.downloadState); + return [DownloadState.Scanning, DownloadState.Error, DownloadState.Untrusted].includes( + this.state.downloadState, + ); } } diff --git a/src/customisations/components/views/messages/ContentScanningFileBody.tsx b/src/customisations/components/views/messages/ContentScanningFileBody.tsx index bfbafbd5ee..039ae0df28 100644 --- a/src/customisations/components/views/messages/ContentScanningFileBody.tsx +++ b/src/customisations/components/views/messages/ContentScanningFileBody.tsx @@ -56,48 +56,37 @@ export default class ContentScanningFileBody extends React.PureComponent { - const isSafe = ok1 && ok2; - this.setState({ - isScanning: false, - isSafe, + Promise.all([this.media.scanSource(), this.media.scanThumbnail()]) + .then(([ok1, ok2]) => { + const isSafe = ok1 && ok2; + this.setState({ + isScanning: false, + isSafe, + }); + }) + .catch(() => { + this.setState({ + isScanning: false, + hasError: true, + }); }); - }).catch(() => { - this.setState({ - isScanning: false, - hasError: true, - }); - }); } public render() { if (this.state.isScanning) { - return ( - - { this.placeholder } - - ); + return {this.placeholder}; } else if (this.state.hasError) { - return ( - - { this.placeholder } - - ); + return {this.placeholder}; } else if (!this.state.isSafe) { - return ( - - { this.placeholder } - - ); + return {this.placeholder}; } - return
- - -
; + return ( +
+ + +
+ ); } private get placeholder(): React.ReactNode { @@ -115,17 +104,19 @@ export default class ContentScanningFileBody extends React.PureComponent; } - placeholder = <> -
- { this.icon } - - - { presentableTextForFile(this.content, _t("Attachment"), true, true) } - - -
- { text } - ; + placeholder = ( + <> +
+ {this.icon} + + + {presentableTextForFile(this.content, _t("Attachment"), true, true)} + + +
+ {text} + + ); } return placeholder; @@ -138,7 +129,11 @@ export default class ContentScanningFileBody extends React.PureComponent; if (this.state.isScanning) { - icon = ; + icon = ( + + + + ); } else if (this.state.hasError || !this.state.isSafe) { icon = ; } diff --git a/src/customisations/components/views/messages/ContentScanningImageBody.tsx b/src/customisations/components/views/messages/ContentScanningImageBody.tsx index 5c6333aa41..9ca1f7b023 100644 --- a/src/customisations/components/views/messages/ContentScanningImageBody.tsx +++ b/src/customisations/components/views/messages/ContentScanningImageBody.tsx @@ -16,9 +16,9 @@ limitations under the License. import "../../../../../res/css/views/messages/ContentScanningImageBody.pcss"; -import React from 'react'; +import React from "react"; import { IBodyProps } from "matrix-react-sdk/src/components/views/messages/IBodyProps"; -import Spinner from 'matrix-react-sdk/src/components/views/elements/Spinner'; +import Spinner from "matrix-react-sdk/src/components/views/elements/Spinner"; import { IMediaEventContent } from "matrix-react-sdk/src/customisations/models/IMediaEventContent"; import { presentableTextForFile } from "matrix-react-sdk/src/utils/FileUtils"; import { _t } from "matrix-react-sdk/src/languageHandler"; @@ -49,21 +49,20 @@ export default class ContentScanningImageBody extends React.Component { - const isSafe = ok1 && ok2; - this.setState({ - isScanning: false, - isSafe, + Promise.all([this.media.scanSource(), this.media.scanThumbnail()]) + .then(async ([ok1, ok2]) => { + const isSafe = ok1 && ok2; + this.setState({ + isScanning: false, + isSafe, + }); + }) + .catch(() => { + this.setState({ + isScanning: false, + hasError: true, + }); }); - }).catch(() => { - this.setState({ - isScanning: false, - hasError: true, - }); - }); } public render() { @@ -83,32 +82,40 @@ export default class ContentScanningImageBody extends React.Component -
- -
- - ; + return ( + <> +
+ +
+ + + ); } else if (this.state.hasError) { - return <> -
- -
- - ; + return ( + <> +
+ +
+ + + ); } else if (!this.state.isSafe) { - return <> -
- -
- - ; + return ( + <> +
+ +
+ + + ); } - return <> - { this.renderOriginal() } - - ; + return ( + <> + {this.renderOriginal()} + + + ); } protected renderOriginal() { diff --git a/src/customisations/components/views/messages/ContentScanningImageReplyBody.tsx b/src/customisations/components/views/messages/ContentScanningImageReplyBody.tsx index 001f581027..95cac9e051 100644 --- a/src/customisations/components/views/messages/ContentScanningImageReplyBody.tsx +++ b/src/customisations/components/views/messages/ContentScanningImageReplyBody.tsx @@ -15,7 +15,7 @@ */ import React from "react"; -import Spinner from 'matrix-react-sdk/src/components/views/elements/Spinner'; +import Spinner from "matrix-react-sdk/src/components/views/elements/Spinner"; import { IBodyProps } from "matrix-react-sdk/src/components/views/messages/IBodyProps"; import { IMediaEventContent } from "matrix-react-sdk/src/customisations/models/IMediaEventContent"; import { _t } from "matrix-react-sdk/src/languageHandler"; @@ -43,51 +43,58 @@ export default class ContentScanningImageReplyBody extends React.PureComponent { - const isSafe = ok1 && ok2; - this.setState({ - isScanning: false, - isSafe, + Promise.all([this.media.scanSource(), this.media.scanThumbnail()]) + .then(async ([ok1, ok2]) => { + const isSafe = ok1 && ok2; + this.setState({ + isScanning: false, + isSafe, + }); + }) + .catch(() => { + this.setState({ + isScanning: false, + hasError: true, + }); }); - }).catch(() => { - this.setState({ - isScanning: false, - hasError: true, - }); - }); } public render() { if (this.state.isScanning) { - return <> -
- -
- - ; + return ( + <> +
+ +
+ + + ); } else if (this.state.hasError) { - return <> -
- -
- - ; + return ( + <> +
+ +
+ + + ); } else if (!this.state.isSafe) { - return <> -
- -
- - ; + return ( + <> +
+ +
+ + + ); } - return <> - { this.renderOriginal() } - - ; + return ( + <> + {this.renderOriginal()} + + + ); } protected renderOriginal() { diff --git a/src/customisations/components/views/messages/ContentScanningStickerBody.tsx b/src/customisations/components/views/messages/ContentScanningStickerBody.tsx index 76e7f6765b..a4f7072c2c 100644 --- a/src/customisations/components/views/messages/ContentScanningStickerBody.tsx +++ b/src/customisations/components/views/messages/ContentScanningStickerBody.tsx @@ -16,9 +16,9 @@ limitations under the License. import "../../../../../res/css/views/messages/ContentScanningImageBody.pcss"; -import React from 'react'; +import React from "react"; import { IBodyProps } from "matrix-react-sdk/src/components/views/messages/IBodyProps"; -import Spinner from 'matrix-react-sdk/src/components/views/elements/Spinner'; +import Spinner from "matrix-react-sdk/src/components/views/elements/Spinner"; import { IMediaEventContent } from "matrix-react-sdk/src/customisations/models/IMediaEventContent"; import { presentableTextForFile } from "matrix-react-sdk/src/utils/FileUtils"; import { _t } from "matrix-react-sdk/src/languageHandler"; @@ -47,21 +47,20 @@ export default class ContentScanningStickerBody extends React.Component { - const isSafe = ok1 && ok2; - this.setState({ - isScanning: false, - isSafe, + Promise.all([this.media.scanSource(), this.media.scanThumbnail()]) + .then(async ([ok1, ok2]) => { + const isSafe = ok1 && ok2; + this.setState({ + isScanning: false, + isSafe, + }); + }) + .catch(() => { + this.setState({ + isScanning: false, + hasError: true, + }); }); - }).catch(() => { - this.setState({ - isScanning: false, - hasError: true, - }); - }); } public render() { @@ -75,32 +74,40 @@ export default class ContentScanningStickerBody extends React.Component -
- -
- - ; + return ( + <> +
+ +
+ + + ); } else if (this.state.hasError) { - return <> -
- -
- - ; + return ( + <> +
+ +
+ + + ); } else if (!this.state.isSafe) { - return <> -
- -
- - ; + return ( + <> +
+ +
+ + + ); } - return <> - { this.renderOriginal() } - - ; + return ( + <> + {this.renderOriginal()} + + + ); } protected renderOriginal() { diff --git a/src/customisations/components/views/messages/ContentScanningVideoBody.tsx b/src/customisations/components/views/messages/ContentScanningVideoBody.tsx index 523a74427e..89f91fcd0f 100644 --- a/src/customisations/components/views/messages/ContentScanningVideoBody.tsx +++ b/src/customisations/components/views/messages/ContentScanningVideoBody.tsx @@ -16,9 +16,9 @@ limitations under the License. import "../../../../../res/css/views/messages/ContentScanningVideoBody.pcss"; -import React from 'react'; +import React from "react"; import { IBodyProps } from "matrix-react-sdk/src/components/views/messages/IBodyProps"; -import Spinner from 'matrix-react-sdk/src/components/views/elements/Spinner'; +import Spinner from "matrix-react-sdk/src/components/views/elements/Spinner"; import { IMediaEventContent } from "matrix-react-sdk/src/customisations/models/IMediaEventContent"; import { presentableTextForFile } from "matrix-react-sdk/src/utils/FileUtils"; import { _t } from "matrix-react-sdk/src/languageHandler"; @@ -47,21 +47,20 @@ export default class ContentScanningVideoBody extends React.Component { - const isSafe = ok1 && ok2; - this.setState({ - isScanning: false, - isSafe, + Promise.all([this.media.scanSource(), this.media.scanThumbnail()]) + .then(async ([ok1, ok2]) => { + const isSafe = ok1 && ok2; + this.setState({ + isScanning: false, + isSafe, + }); + }) + .catch(() => { + this.setState({ + isScanning: false, + hasError: true, + }); }); - }).catch(() => { - this.setState({ - isScanning: false, - hasError: true, - }); - }); } public render() { @@ -75,32 +74,40 @@ export default class ContentScanningVideoBody extends React.Component -
- -
- - ; + return ( + <> +
+ +
+ + + ); } else if (this.state.hasError) { - return <> -
- -
- - ; + return ( + <> +
+ +
+ + + ); } else if (!this.state.isSafe) { - return <> -
- -
- - ; + return ( + <> +
+ +
+ + + ); } - return <> - - - ; + return ( + <> + + + + ); } private get media(): Media { diff --git a/src/customisations/components/views/messages/ContentScanningVoiceMessageBody.tsx b/src/customisations/components/views/messages/ContentScanningVoiceMessageBody.tsx index e8290a4699..c45b0ee740 100644 --- a/src/customisations/components/views/messages/ContentScanningVoiceMessageBody.tsx +++ b/src/customisations/components/views/messages/ContentScanningVoiceMessageBody.tsx @@ -45,21 +45,20 @@ export default class ContentScanningVoiceMessageBody extends React.PureComponent hasError: false, }; - Promise.all([ - this.media.scanSource(), - this.media.scanThumbnail(), - ]).then(async ([ok1, ok2]) => { - const isSafe = ok1 && ok2; - this.setState({ - isScanning: false, - isSafe, + Promise.all([this.media.scanSource(), this.media.scanThumbnail()]) + .then(async ([ok1, ok2]) => { + const isSafe = ok1 && ok2; + this.setState({ + isScanning: false, + isSafe, + }); + }) + .catch(() => { + this.setState({ + isScanning: false, + hasError: true, + }); }); - }).catch(() => { - this.setState({ - isScanning: false, - hasError: true, - }); - }); } public render() { @@ -67,10 +66,12 @@ export default class ContentScanningVoiceMessageBody extends React.PureComponent return ; } - return
- - -
; + return ( +
+ + +
+ ); } private get media(): Media { diff --git a/src/lib/ExpiredAccountHandler.ts b/src/lib/ExpiredAccountHandler.ts index d489659349..a2cc271544 100644 --- a/src/lib/ExpiredAccountHandler.ts +++ b/src/lib/ExpiredAccountHandler.ts @@ -15,7 +15,7 @@ import TchapUtils from "../util/TchapUtils"; * The class is instantiated in the default export, thus it is created only once at the first import. */ class ExpiredAccountHandler { - private boundOnExpiredAccountEvent: any;//the listener function; + private boundOnExpiredAccountEvent: any; //the listener function; private dispatcher: MatrixDispatcher; private isPanelOpen: boolean; private isAccountExpired: boolean; @@ -31,17 +31,15 @@ class ExpiredAccountHandler { * register the listener after the Matrix Client has been initialized but before it is started */ public register() { - const expiredRegistrationId = this.dispatcher.register( - (payload: ActionPayload) => { - if (payload.action === "will_start_client") { - console.log(":tchap: register a listener for HttpApiEvent.ORG_MATRIX_EXPIRED_ACCOUNT events"); - const cli = MatrixClientPeg.get(); - cli.on(HttpApiEvent.ORG_MATRIX_EXPIRED_ACCOUNT, this.boundOnExpiredAccountEvent); - //unregister callback once the work is done - this.dispatcher.unregister(expiredRegistrationId); - } - }, - ); + const expiredRegistrationId = this.dispatcher.register((payload: ActionPayload) => { + if (payload.action === "will_start_client") { + console.log(":tchap: register a listener for HttpApiEvent.ORG_MATRIX_EXPIRED_ACCOUNT events"); + const cli = MatrixClientPeg.get(); + cli.on(HttpApiEvent.ORG_MATRIX_EXPIRED_ACCOUNT, this.boundOnExpiredAccountEvent); + //unregister callback once the work is done + this.dispatcher.unregister(expiredRegistrationId); + } + }); } /** @@ -63,23 +61,31 @@ class ExpiredAccountHandler { } private async showExpirationPanel() { - Modal.createDialog(ExpiredAccountDialog, { - onRequestNewEmail: () => { - return TchapUtils.requestNewExpiredAccountEmail(); + Modal.createDialog( + ExpiredAccountDialog, + { + onRequestNewEmail: () => { + return TchapUtils.requestNewExpiredAccountEmail(); + }, + //check that the account is not expired when finishing + onFinished: async () => { + this.isPanelOpen = false; + PlatformPeg.get().reload(); + }, + //todo: define which static/dynamic settings are needed for this dialog }, - //check that the account is not expired when finishing - onFinished: async () => { - this.isPanelOpen = false; - PlatformPeg.get().reload(); + null, + false, + true, + { + //close panel only if account is not expired + onBeforeClose: async () => { + //verify that the account is not expired anymore + this.isAccountExpired = await TchapUtils.isAccountExpired(); + return Promise.resolve(!this.isAccountExpired); + }, }, - //todo: define which static/dynamic settings are needed for this dialog - }, null, false, true, { - //close panel only if account is not expired - onBeforeClose: async () => { - //verify that the account is not expired anymore - this.isAccountExpired = await TchapUtils.isAccountExpired(); - return Promise.resolve(!this.isAccountExpired); - } }); + ); } } diff --git a/src/lib/IncomingKeyRequestHandler.ts b/src/lib/IncomingKeyRequestHandler.ts index dccb9df7f3..b22ffda386 100644 --- a/src/lib/IncomingKeyRequestHandler.ts +++ b/src/lib/IncomingKeyRequestHandler.ts @@ -1,9 +1,7 @@ -import { IncomingRoomKeyRequest, verificationMethods } from 'matrix-js-sdk/src/crypto'; -import VerificationRequestDialog from 'matrix-react-sdk/src/components/views/dialogs/VerificationRequestDialog'; -import Modal from 'matrix-react-sdk/src/Modal'; -import { - hideToast as hideUnverifiedSessionsToast -} from "matrix-react-sdk/src/toasts/UnverifiedSessionToast"; +import { IncomingRoomKeyRequest, verificationMethods } from "matrix-js-sdk/src/crypto"; +import VerificationRequestDialog from "matrix-react-sdk/src/components/views/dialogs/VerificationRequestDialog"; +import Modal from "matrix-react-sdk/src/Modal"; +import { hideToast as hideUnverifiedSessionsToast } from "matrix-react-sdk/src/toasts/UnverifiedSessionToast"; /** * :tchap: inspired from @@ -14,7 +12,7 @@ export default class KeyRequestHandler { private _currentUser: string; private _currentDevice: string; // MAP - private _pendingKeyRequests= new Map>>();//Map> + private _pendingKeyRequests = new Map>>(); //Map> constructor(matrixClient) { this._matrixClient = matrixClient; @@ -39,15 +37,14 @@ export default class KeyRequestHandler { const deviceId: string = keyRequest.deviceId; const requestId: string = keyRequest.requestId; - console.log(":tchap: receiving a legacy key request event for device ",deviceId, " requestId ", requestId); + console.log(":tchap: receiving a legacy key request event for device ", deviceId, " requestId ", requestId); //This instruction hides the toast that appears when a new device is detected //As we are receiving a legacy incomingroomkeyrequest we can assume the veryfing //will occur via this process and hide the toast - console.log(":tchap: hidding UnverifiedSessionsToast for ",deviceId); + console.log(":tchap: hidding UnverifiedSessionsToast for ", deviceId); hideUnverifiedSessionsToast(deviceId); - if (!this._pendingKeyRequests.has(userId)) { this._pendingKeyRequests.set(userId, new Map>()); } @@ -85,10 +82,7 @@ export default class KeyRequestHandler { const requestId = cancellation.requestId; if (userId === this._currentUser && deviceId === this._currentDevice) { - console.log( - ":tchap: room key request cancellation for the user we currently have a" - + " dialog open for", - ); + console.log(":tchap: room key request cancellation for the user we currently have a" + " dialog open for"); // TODO: update the dialog. For now, we just ignore the // cancellation. return; @@ -186,11 +180,7 @@ export default class KeyRequestHandler { }); */ const cli = this._matrixClient; - const verificationRequestPromise = cli.legacyDeviceVerification( - userId, - deviceId, - verificationMethods.SAS, - ); + const verificationRequestPromise = cli.legacyDeviceVerification(userId, deviceId, verificationMethods.SAS); /* Modal.createDialog(VerificationRequestDialog, { verificationRequestPromise, member: cli.getUser(userId), diff --git a/src/lib/createTchapRoom.ts b/src/lib/createTchapRoom.ts index 3c6aad2f8b..e5680fcd1c 100644 --- a/src/lib/createTchapRoom.ts +++ b/src/lib/createTchapRoom.ts @@ -17,7 +17,8 @@ export default class TchapCreateRoom { static roomCreateOptions( name: string, tchapRoomType: TchapRoomType, - federate: boolean = DEFAULT_FEDERATE_VALUE): IOpts { + federate: boolean = DEFAULT_FEDERATE_VALUE, + ): IOpts { const opts: IOpts = {}; const createRoomOpts: ICreateRoomOpts = {}; opts.createOpts = createRoomOpts; @@ -26,12 +27,12 @@ export default class TchapCreateRoom { createRoomOpts.name = name; opts.guestAccess = false; //guest access are not authorized in tchap - createRoomOpts.creation_content = { 'm.federate': federate }; + createRoomOpts.creation_content = { "m.federate": federate }; createRoomOpts.initial_state = createRoomOpts.initial_state || []; switch (tchapRoomType) { case TchapRoomType.Forum: { - //"Forum" only for tchap members and not encrypted + //"Forum" only for tchap members and not encrypted createRoomOpts.visibility = Visibility.Public; createRoomOpts.preset = Preset.PublicChat; // Here we could have used createRoomOpts.accessRule directly, @@ -42,7 +43,7 @@ export default class TchapCreateRoom { rule: TchapRoomAccessRule.Restricted, }, type: TchapRoomAccessRulesEventId, - state_key: '', + state_key: "", }); opts.joinRule = JoinRule.Public; @@ -51,7 +52,7 @@ export default class TchapCreateRoom { break; } case TchapRoomType.Private: { - //"Salon", only for tchap member and encrypted + //"Salon", only for tchap member and encrypted createRoomOpts.visibility = Visibility.Private; createRoomOpts.preset = Preset.PrivateChat; createRoomOpts.initial_state.push({ @@ -59,7 +60,7 @@ export default class TchapCreateRoom { rule: TchapRoomAccessRule.Restricted, }, type: TchapRoomAccessRulesEventId, - state_key: '', + state_key: "", }); opts.joinRule = JoinRule.Invite; opts.encryption = true; @@ -67,7 +68,7 @@ export default class TchapCreateRoom { break; } case TchapRoomType.External: { - //open to external and encrypted, + //open to external and encrypted, createRoomOpts.visibility = Visibility.Private; createRoomOpts.preset = Preset.PrivateChat; createRoomOpts.initial_state.push({ @@ -75,7 +76,7 @@ export default class TchapCreateRoom { rule: TchapRoomAccessRule.Unrestricted, }, type: TchapRoomAccessRulesEventId, - state_key: '', + state_key: "", }); opts.joinRule = JoinRule.Invite; opts.encryption = true; diff --git a/src/util/TchapRoomUtils.ts b/src/util/TchapRoomUtils.ts index 1fa7ec693c..f330b25282 100644 --- a/src/util/TchapRoomUtils.ts +++ b/src/util/TchapRoomUtils.ts @@ -1,4 +1,3 @@ - /** * Tchap Room utils. */ @@ -17,8 +16,7 @@ export default class TchapRoomUtils { return this.getTchapRoomTypeInternal(isEncrypted, tchapRoomAccessRule); } - static getTchapRoomTypeInternal( - isEncrypted: boolean, tchapRoomAccessRule: TchapRoomAccessRule): TchapRoomType { + static getTchapRoomTypeInternal(isEncrypted: boolean, tchapRoomAccessRule: TchapRoomAccessRule): TchapRoomType { if (!isEncrypted) { return TchapRoomType.Forum; } diff --git a/src/util/TchapStrongPassword.tsx b/src/util/TchapStrongPassword.tsx index bb1563c310..7f76402d62 100644 --- a/src/util/TchapStrongPassword.tsx +++ b/src/util/TchapStrongPassword.tsx @@ -2,7 +2,7 @@ import React from "react"; import { IFieldState, IValidationResult } from "matrix-react-sdk/src/components/views/elements/Validation"; import { _t } from "matrix-react-sdk/src/languageHandler"; -import TchapApi from './TchapApi'; +import TchapApi from "./TchapApi"; import TchapUtils from "./TchapUtils"; /** @@ -10,7 +10,7 @@ import TchapUtils from "./TchapUtils"; * File copied from v2 and modified. */ export default class TchapStrongPassword { - private static passwordRules: { ruleName: string, ruleValue: number|string} | null = null; + private static passwordRules: { ruleName: string; ruleValue: number | string } | null = null; /** * Query password_policy rules from a homeserver, and cache them. @@ -37,20 +37,17 @@ export default class TchapStrongPassword { const applyRule = (ruleName: string, ruleValue): string => { switch (ruleName) { case "m.minimum_length": - return this.minimumLength(passwordValue, ruleValue) ? "" : - _t("a minimum of %(number)s characters", { number: ruleValue }); + return this.minimumLength(passwordValue, ruleValue) + ? "" + : _t("a minimum of %(number)s characters", { number: ruleValue }); case "m.require_digit": - return this.requireDigit(passwordValue, ruleValue) ? "" : - _t("a number"); + return this.requireDigit(passwordValue, ruleValue) ? "" : _t("a number"); case "m.require_symbol": - return this.requireSymbol(passwordValue, ruleValue) ? "" : - _t("a symbol"); + return this.requireSymbol(passwordValue, ruleValue) ? "" : _t("a symbol"); case "m.require_lowercase": - return this.requireLowercase(passwordValue, ruleValue) ? "" : - _t("a lowercase letter"); + return this.requireLowercase(passwordValue, ruleValue) ? "" : _t("a lowercase letter"); case "m.require_uppercase": - return this.requireUppercase(passwordValue, ruleValue) ? "" : - _t("an uppercase letter"); + return this.requireUppercase(passwordValue, ruleValue) ? "" : _t("an uppercase letter"); default: throw new Error("Unknown password rule : " + ruleName); } @@ -75,18 +72,12 @@ export default class TchapStrongPassword { feedback: (
- { _t("Your password must include:") } + {_t("Your password must include:")}
    - { - errors.map((error) => { - return ( -
  • - { error } -
  • - ); - }) - } + {errors.map((error) => { + return
  • {error}
  • ; + })}
), @@ -99,28 +90,28 @@ export default class TchapStrongPassword { private static requireUppercase(passwordValue: string, required: boolean): boolean { if (required) { - return (/[A-Z]/.test(passwordValue)); + return /[A-Z]/.test(passwordValue); } return true; } private static requireSymbol(passwordValue: string, required: boolean): boolean { if (required) { - return (/[^a-zA-Z0-9]/.test(passwordValue)); + return /[^a-zA-Z0-9]/.test(passwordValue); } return true; } private static requireDigit(passwordValue: string, required: boolean): boolean { if (required) { - return (/[0-9]/.test(passwordValue)); + return /[0-9]/.test(passwordValue); } return true; } private static requireLowercase(passwordValue: string, required: boolean): boolean { if (required) { - return (/[a-z]/.test(passwordValue)); + return /[a-z]/.test(passwordValue); } return true; } diff --git a/src/util/TchapUIFeature.ts b/src/util/TchapUIFeature.ts index 1b9fbac021..a4926ecfa0 100644 --- a/src/util/TchapUIFeature.ts +++ b/src/util/TchapUIFeature.ts @@ -27,31 +27,38 @@ export default class TchapUIFeature { public static activateClearCacheAndReloadAtVersion4 = true; /** - * This flag controls whether to activate cross-signing and secure storage. It is not static because the MatrixClient + * This flag controls whether to activate cross-signing and secure storage. It is not static because the MatrixClient * needs to be initialized to access the config.json (where the flag is set) */ - public static isCrossSigningAndSecureStorageActive = () : Boolean => { - //retrieve the feature flag from the config.json features flag section. + public static isCrossSigningAndSecureStorageActive = (): Boolean => { + //retrieve the feature flag from the config.json features flag section. //beware SdkConfig does not like to be invoked before the MatrixClient is initialized - const isCrossSigningAndSecureStorageActive = SdkConfig.get("features")['tchap_activate_cross_signing_and_secure_storage']; - console.log(":tchap: tchap_activate_cross_signing_and_secure_storage from config.json: ", isCrossSigningAndSecureStorageActive); + const isCrossSigningAndSecureStorageActive = + SdkConfig.get("features")["tchap_activate_cross_signing_and_secure_storage"]; + console.log( + ":tchap: tchap_activate_cross_signing_and_secure_storage from config.json: ", + isCrossSigningAndSecureStorageActive, + ); return isCrossSigningAndSecureStorageActive; }; /** - * This flag activates cross-signing and secure storage. But it also hides the xsss setup toast. + * This flag activates cross-signing and secure storage. But it also hides the xsss setup toast. * needs to be initialized to access the config.json (where the flag is set) */ - public static isCrossSigningSetupToastDisabled = () : Boolean => { - //retrieve the feature flag from the config.json features flag section. - //beware SdkConfig does not like to be invoked before the MatrixClient is initialized - const isCrossSigningSetupToastDisabled = SdkConfig.get("features")['tchap_disable_cross_signing_setup_toast']; - console.log(":tchap: tchap_disable_cross_signing_setup_toast from config.json: ", isCrossSigningSetupToastDisabled); - return isCrossSigningSetupToastDisabled; - }; - - /** + public static isCrossSigningSetupToastDisabled = (): Boolean => { + //retrieve the feature flag from the config.json features flag section. + //beware SdkConfig does not like to be invoked before the MatrixClient is initialized + const isCrossSigningSetupToastDisabled = SdkConfig.get("features")["tchap_disable_cross_signing_setup_toast"]; + console.log( + ":tchap: tchap_disable_cross_signing_setup_toast from config.json: ", + isCrossSigningSetupToastDisabled, + ); + return isCrossSigningSetupToastDisabled; + }; + + /** * This flag controls whether to force incoming key legacy verification (usefull for older mobile device than android 2.6, ios 2.2.3) */ - public static forceLegacyIncomingRoomKeyVerification = true; + public static forceLegacyIncomingRoomKeyVerification = true; } diff --git a/src/util/TchapUserSettings.ts b/src/util/TchapUserSettings.ts index 06b7f9c61f..71e49bdcdf 100644 --- a/src/util/TchapUserSettings.ts +++ b/src/util/TchapUserSettings.ts @@ -8,10 +8,10 @@ export default class TchapUserSettings { * Override User Settings */ public static override() { - if(!TchapUIFeature.isCrossSigningAndSecureStorageActive()){ + if (!TchapUIFeature.isCrossSigningAndSecureStorageActive()) { //hard code this option in to order to hide secure storage in the user info > sessions panel console.log(":tchap: hardcode e2ee.manuallyVerifyAllSessions to true"); - SettingsStore.setValue('e2ee.manuallyVerifyAllSessions', null, SettingLevel.DEVICE, true); + SettingsStore.setValue("e2ee.manuallyVerifyAllSessions", null, SettingLevel.DEVICE, true); } } } diff --git a/src/util/TchapUtils.ts b/src/util/TchapUtils.ts index 09195a235a..63ee9f2c47 100644 --- a/src/util/TchapUtils.ts +++ b/src/util/TchapUtils.ts @@ -2,7 +2,7 @@ import { MatrixClientPeg } from "matrix-react-sdk/src/MatrixClientPeg"; import SdkConfig from "matrix-react-sdk/src/SdkConfig"; import AutoDiscoveryUtils from "matrix-react-sdk/src/utils/AutoDiscoveryUtils"; import { ValidatedServerConfig } from "matrix-react-sdk/src/utils/ValidatedServerConfig"; -import { findMapStyleUrl } from 'matrix-react-sdk/src/utils/location'; +import { findMapStyleUrl } from "matrix-react-sdk/src/utils/location"; import TchapApi from "./TchapApi"; @@ -12,15 +12,15 @@ import TchapApi from "./TchapApi"; export default class TchapUtils { /** - * Return a short value for getDomain(). - * @returns {string} The shortened value of getDomain(). - */ + * Return a short value for getDomain(). + * @returns {string} The shortened value of getDomain(). + */ static getShortDomain(): string { const cli = MatrixClientPeg.get(); const baseDomain = cli.getDomain(); - const domain = baseDomain.split('.tchap.gouv.fr')[0].split('.').reverse().filter(Boolean)[0]; + const domain = baseDomain.split(".tchap.gouv.fr")[0].split(".").reverse().filter(Boolean)[0]; - return this.capitalize(domain) || 'Tchap'; + return this.capitalize(domain) || "Tchap"; } /** @@ -29,23 +29,23 @@ export default class TchapUtils { * @returns { showForumFederationSwitch: boolean, forumFederationSwitchDefaultValue?: boolean } options */ public static getRoomFederationOptions(): { - showForumFederationSwitch: boolean, - forumFederationSwitchDefaultValue?: boolean + showForumFederationSwitch: boolean; + forumFederationSwitchDefaultValue?: boolean; } { const cli = MatrixClientPeg.get(); const baseDomain = cli.getDomain(); // Only show the federate switch to defense users : it's difficult to understand, so we avoid // displaying it unless it's really necessary. - if (baseDomain === 'agent.intradef.tchap.gouv.fr') { + if (baseDomain === "agent.intradef.tchap.gouv.fr") { return { showForumFederationSwitch: true, - forumFederationSwitchDefaultValue: false - } + forumFederationSwitchDefaultValue: false, + }; } return { - showForumFederationSwitch: false + showForumFederationSwitch: false, }; } @@ -60,13 +60,13 @@ export default class TchapUtils { } static findHomeServerNameFromUrl = (url: string): string => { - const homeServerList = SdkConfig.get()['homeserver_list']; - const homeserver = homeServerList.find(homeServer => homeServer.base_url === url); + const homeServerList = SdkConfig.get()["homeserver_list"]; + const homeserver = homeServerList.find((homeServer) => homeServer.base_url === url); return homeserver.server_name; }; static randomHomeServer = () => { - const homeServerList = SdkConfig.get()['homeserver_list']; + const homeServerList = SdkConfig.get()["homeserver_list"]; return homeServerList[Math.floor(Math.random() * homeServerList.length)]; }; @@ -75,17 +75,19 @@ export default class TchapUtils { * @param email Note : if email is invalid, this function still works and returns the externs server. (todo : fix) * @returns */ - static fetchHomeserverForEmail = async (email: string): Promise => { + static fetchHomeserverForEmail = async ( + email: string, + ): Promise => { const randomHomeServer = this.randomHomeServer(); const infoUrl = "/_matrix/identity/api/v1/info?medium=email&address="; return fetch(randomHomeServer.base_url + infoUrl + email) .then((response) => { if (!response.ok) { - throw new Error('Could not find homeserver for this email'); + throw new Error("Could not find homeserver for this email"); } return response.json(); }) - .then(response => { + .then((response) => { // Never returns error : anything that doesn't match a homeserver (even invalid email) returns "externe". const serverUrl = "https://matrix." + response.hs; return { @@ -94,7 +96,7 @@ export default class TchapUtils { }; }) .catch((error) => { - console.error('Could not find homeserver for this email', error); + console.error("Could not find homeserver for this email", error); return; }); }; @@ -121,7 +123,9 @@ export default class TchapUtils { }, }; const validatedServerConf = AutoDiscoveryUtils.buildValidatedConfigFromDiscovery( - discoveryResult['m.homeserver'].server_name, discoveryResult); + discoveryResult["m.homeserver"].server_name, + discoveryResult, + ); return validatedServerConf; }; @@ -164,26 +168,30 @@ export default class TchapUtils { * tchap-web, because tchap-web gets a "M_THREEPID_IN_USE" error from backend which is confusing. * We should fix this bug and remove this custom function. */ - static makeTchapRegistrationUrl( - params: {client_secret: string, hs_url: string, is_url: string, session_id: string}): string { - let url: string = params.hs_url + window.location.pathname + '#/register'; + static makeTchapRegistrationUrl(params: { + client_secret: string; + hs_url: string; + is_url: string; + session_id: string; + }): string { + let url: string = params.hs_url + window.location.pathname + "#/register"; const keys = Object.keys(params); for (let i = 0; i < keys.length; ++i) { if (i === 0) { - url += '?'; + url += "?"; } else { - url += '&'; + url += "&"; } const k = keys[i]; - url += k + '=' + encodeURIComponent(params[k]); + url += k + "=" + encodeURIComponent(params[k]); } return url; } /** * Request a new validity email for a user account (expired or not). - * @returns true if the mail was sent succesfully, false otherwise + * @returns true if the mail was sent succesfully, false otherwise */ static async requestNewExpiredAccountEmail(): Promise { console.log(":tchap: Requesting an email to renew to account"); @@ -192,19 +200,21 @@ export default class TchapUtils { //const url = `${homeserverUrl}/_matrix/client/unstable/account_validity/send_mail`; const url = `${homeserverUrl}${TchapApi.accountValidityResendEmailUrl}`; const options = { - method: 'POST', + method: "POST", headers: { Authorization: `Bearer ${accessToken}`, }, }; - return fetch(url, options).then((response) => { - console.log(":tchap: email NewExpiredAccountEmail sent", response); - return true; - }).catch((err) => { - console.error(":tchap: email NewExpiredAccountEmail error", err); - return false; - }); + return fetch(url, options) + .then((response) => { + console.log(":tchap: email NewExpiredAccountEmail sent", response); + return true; + }) + .catch((err) => { + console.error(":tchap: email NewExpiredAccountEmail error", err); + return false; + }); } /** @@ -221,7 +231,7 @@ export default class TchapUtils { try { await MatrixClientPeg.get().getProfileInfo(matrixId); } catch (err) { - if (err.errcode === 'ORG_MATRIX_EXPIRED_ACCOUNT') { + if (err.errcode === "ORG_MATRIX_EXPIRED_ACCOUNT") { return true; } } diff --git a/src/util/TchapVersionManagement.ts b/src/util/TchapVersionManagement.ts index 758b1abcec..f61289fe5c 100644 --- a/src/util/TchapVersionManagement.ts +++ b/src/util/TchapVersionManagement.ts @@ -7,7 +7,7 @@ export default class TchapVersionManagement { /** * replicate the behaviour of the button Clear Cache and Reload, and clear browser cache on firefox - * https://github.com/matrix-org/matrix-react-sdk/blob/3c5c2bef6dbac51ce6e1864056523815ca4c38d9/src/components/views/settings/tabs/user/HelpUserSettingsTab.tsx#L308 + * https://github.com/matrix-org/matrix-react-sdk/blob/3c5c2bef6dbac51ce6e1864056523815ca4c38d9/src/components/views/settings/tabs/user/HelpUserSettingsTab.tsx#L308 * @returns nothing */ public static clearCacheAndReload(): void { @@ -16,11 +16,13 @@ export default class TchapVersionManagement { if (!PlatformPeg.get()) return; MatrixClientPeg.get().stopClient(); - MatrixClientPeg.get().store.deleteAllData().then(() => { - // The bool parameter of reload() works only in firefox, but most of our users use firefox. - // @ts-expect-error: reload has no official parameter - window.location.reload(true); - }); + MatrixClientPeg.get() + .store.deleteAllData() + .then(() => { + // The bool parameter of reload() works only in firefox, but most of our users use firefox. + // @ts-expect-error: reload has no official parameter + window.location.reload(true); + }); } /** @@ -55,7 +57,7 @@ export default class TchapVersionManagement { } resolve(version); }; - req.onerror = ev => reject(req.error); + req.onerror = (ev) => reject(req.error); }); } diff --git a/src/vector/index.ts b/src/vector/index.ts index 1811179c81..63d46a3962 100644 --- a/src/vector/index.ts +++ b/src/vector/index.ts @@ -22,9 +22,15 @@ import { logger } from "matrix-js-sdk/src/logger"; // These are things that can run before the skin loads - be careful not to reference the react-sdk though. import { parseQsFromFragment } from "./url_utils"; -import './modernizr'; +import "./modernizr"; // eslint-disable-next-line max-len -import { queueClearCacheAndReload, queueOverideUserSettings, needsRefreshForVersion4, saveAppVersionInLocalStorage, registerExpiredAccountListener } from "../app/initTchap"; +import { + queueClearCacheAndReload, + queueOverideUserSettings, + needsRefreshForVersion4, + saveAppVersionInLocalStorage, + registerExpiredAccountListener, +} from "../app/initTchap"; // Require common CSS here; this will make webpack process it into bundle.css. // Our own CSS (which is themed) is imported via separate webpack entry points diff --git a/test/setupTests.js b/test/setupTests.js index 6b1f25aef2..a635d8c445 100644 --- a/test/setupTests.js +++ b/test/setupTests.js @@ -1,4 +1,3 @@ - //is duplicated from matrix-react-sdk/test/setupTests.js in order to work import Adapter from "@wojtekmaj/enzyme-adapter-react-17"; // eslint-disable-next-line deprecate/import diff --git a/test/unit-tests/components/views/dialogs/TchapCreateRoomDialog-test.tsx b/test/unit-tests/components/views/dialogs/TchapCreateRoomDialog-test.tsx index c077d884ee..771b16e09e 100644 --- a/test/unit-tests/components/views/dialogs/TchapCreateRoomDialog-test.tsx +++ b/test/unit-tests/components/views/dialogs/TchapCreateRoomDialog-test.tsx @@ -1,15 +1,14 @@ - -import React from 'react'; +import React from "react"; // eslint-disable-next-line deprecate/import -import { mount, ReactWrapper } from 'enzyme'; +import { mount, ReactWrapper } from "enzyme"; // eslint-disable-next-line deprecate/import -import { act } from 'react-dom/test-utils'; -import toJson from 'enzyme-to-json'; -import { MatrixClientPeg } from 'matrix-react-sdk/src/MatrixClientPeg'; +import { act } from "react-dom/test-utils"; +import toJson from "enzyme-to-json"; +import { MatrixClientPeg } from "matrix-react-sdk/src/MatrixClientPeg"; import { EventEmitter } from "events"; -import { TchapRoomType } from '../../../../../src/@types/tchap'; -import TchapUtils from '../../../../../src/util/TchapUtils'; +import { TchapRoomType } from "../../../../../src/@types/tchap"; +import TchapUtils from "../../../../../src/util/TchapUtils"; import TchapCreateRoomDialog from "../../../../../src/components/views/dialogs/TchapCreateRoomDialog"; //mocking module with jest.mock should be done outside the test. Before any import of the mocked module. @@ -45,14 +44,13 @@ describe("TchapCreateRoomDialog", () => { //simulate the submit of the form const submitForm = async (wrapper: ReactWrapper) => { act(() => { - wrapper.find('form').simulate('submit', { preventDefault: () => { } }); + wrapper.find("form").simulate("submit", { preventDefault: () => {} }); }); await new Promise(process.nextTick); }; // build a new component using enzyme - const getComponent = (props = {}): ReactWrapper => - mount(); + const getComponent = (props = {}): ReactWrapper => mount(); /* // Note : you can also build a shallow component https://fr.reactjs.org/docs/shallow-renderer.html @@ -68,26 +66,33 @@ describe("TchapCreateRoomDialog", () => { //mock matrix client mockClient = new MockClient(); - jest.spyOn(MatrixClientPeg, 'get').mockReturnValue(mockClient); + jest.spyOn(MatrixClientPeg, "get").mockReturnValue(mockClient); //mock tchap utils - jest.spyOn(TchapUtils, 'getShortDomain').mockReturnValue("AGENT"); - jest.spyOn(TchapUtils, 'getRoomFederationOptions').mockReturnValue( - { showForumFederationSwitch: true, forumFederationSwitchDefaultValue: false }); + jest.spyOn(TchapUtils, "getShortDomain").mockReturnValue("AGENT"); + jest.spyOn(TchapUtils, "getRoomFederationOptions").mockReturnValue({ + showForumFederationSwitch: true, + forumFederationSwitchDefaultValue: false, + }); }); - it('should render the whole component with with the allow access switch', () => { - jest.spyOn(TchapUtils, 'getRoomFederationOptions').mockReturnValue( - { showForumFederationSwitch: true, forumFederationSwitchDefaultValue: false }); + it("should render the whole component with with the allow access switch", () => { + jest.spyOn(TchapUtils, "getRoomFederationOptions").mockReturnValue({ + showForumFederationSwitch: true, + forumFederationSwitchDefaultValue: false, + }); const component = getComponent(); const allowAccessSwitch = component.find(".mx_SettingsFlag"); expect(toJson(allowAccessSwitch)).toMatchSnapshot( - "allow access switch is present, allows other domain than AGENT"); + "allow access switch is present, allows other domain than AGENT", + ); }); - it('should render the room dialog without the allow access switch', () => { - jest.spyOn(TchapUtils, 'getRoomFederationOptions').mockReturnValue( - { showForumFederationSwitch: false, forumFederationSwitchDefaultValue: false }); + it("should render the room dialog without the allow access switch", () => { + jest.spyOn(TchapUtils, "getRoomFederationOptions").mockReturnValue({ + showForumFederationSwitch: false, + forumFederationSwitchDefaultValue: false, + }); const component = getComponent(); const allowAccessSwitch = component.find(".mx_SettingsFlag"); expect(allowAccessSwitch).toEqual({}); @@ -136,11 +141,11 @@ describe("TchapCreateRoomDialog", () => { }, initial_state: [ { - "content": { - "rule": "restricted", + content: { + rule: "restricted", }, - "state_key": "", - "type": "im.vector.room.access_rules", + state_key: "", + type: "im.vector.room.access_rules", }, ], visibility: "private", @@ -179,11 +184,11 @@ describe("TchapCreateRoomDialog", () => { }, initial_state: [ { - "content": { - "rule": "restricted", + content: { + rule: "restricted", }, - "state_key": "", - "type": "im.vector.room.access_rules", + state_key: "", + type: "im.vector.room.access_rules", }, ], visibility: "public", @@ -222,11 +227,11 @@ describe("TchapCreateRoomDialog", () => { }, initial_state: [ { - "content": { - "rule": "restricted", + content: { + rule: "restricted", }, - "state_key": "", - "type": "im.vector.room.access_rules", + state_key: "", + type: "im.vector.room.access_rules", }, ], visibility: "public", @@ -265,11 +270,11 @@ describe("TchapCreateRoomDialog", () => { }, initial_state: [ { - "content": { - "rule": "restricted", + content: { + rule: "restricted", }, - "state_key": "", - "type": "im.vector.room.access_rules", + state_key: "", + type: "im.vector.room.access_rules", }, ], visibility: "public", @@ -307,11 +312,11 @@ describe("TchapCreateRoomDialog", () => { }, initial_state: [ { - "content": { - "rule": "unrestricted", + content: { + rule: "unrestricted", }, - "state_key": "", - "type": "im.vector.room.access_rules", + state_key: "", + type: "im.vector.room.access_rules", }, ], visibility: "private", diff --git a/test/unit-tests/components/views/settings/TchapJoinRuleSettings-test.tsx b/test/unit-tests/components/views/settings/TchapJoinRuleSettings-test.tsx index a1ac50ce5e..a6cc48ae83 100644 --- a/test/unit-tests/components/views/settings/TchapJoinRuleSettings-test.tsx +++ b/test/unit-tests/components/views/settings/TchapJoinRuleSettings-test.tsx @@ -1,8 +1,12 @@ import React from "react"; import { render, screen } from "@testing-library/react"; -import { mocked } from 'jest-mock'; -import { createTestClient, mkStubRoom, mockStateEventImplementation, mkEvent } - from "matrix-react-sdk/test/test-utils/test-utils"; +import { mocked } from "jest-mock"; +import { + createTestClient, + mkStubRoom, + mockStateEventImplementation, + mkEvent, +} from "matrix-react-sdk/test/test-utils/test-utils"; import { JoinRule, MatrixClient, Room } from "matrix-js-sdk/src/matrix"; import TchapJoinRuleSettings from "../../../../../src/components/views/settings/TchapJoinRuleSettings"; @@ -15,24 +19,26 @@ function mkStubRoomWithInviteRule(roomId: string, name: string, client: MatrixCl return stubRoom; } -const makeAccessEvent = (rule: TchapRoomAccessRule = TchapRoomAccessRule.Restricted) => mkEvent({ - type: TchapRoomAccessRulesEventId, event: true, content: { - rule: rule, - }, -} as any); +const makeAccessEvent = (rule: TchapRoomAccessRule = TchapRoomAccessRule.Restricted) => + mkEvent({ + type: TchapRoomAccessRulesEventId, + event: true, + content: { + rule: rule, + }, + } as any); function mkStubRoomWithAccessRule( roomId: string, name: string, client: MatrixClient, joinRule: JoinRule, - accessRule: TchapRoomAccessRule): Room { + accessRule: TchapRoomAccessRule, +): Room { const stubRoom: Room = mkStubRoom(roomId, name, client); stubRoom.getJoinRule = jest.fn().mockReturnValue(joinRule); stubRoom.currentState.getJoinRule = jest.fn().mockReturnValue(joinRule); - const events = [ - makeAccessEvent(accessRule), - ]; + const events = [makeAccessEvent(accessRule)]; mocked(stubRoom.currentState).getStateEvents.mockImplementation(mockStateEventImplementation(events)); return stubRoom; } @@ -67,7 +73,12 @@ describe("TchapJoinRule", () => { //build stub private room const props = { room: mkStubRoomWithAccessRule( - "roomId", "roomName", createTestClient(), JoinRule.Invite, TchapRoomAccessRule.Restricted), + "roomId", + "roomName", + createTestClient(), + JoinRule.Invite, + TchapRoomAccessRule.Restricted, + ), closeSettingsFn() {}, onError(error: Error) {}, }; diff --git a/test/unit-tests/lib/createTchapRoom-test.ts b/test/unit-tests/lib/createTchapRoom-test.ts index 5cfaf6023e..dc59bf6805 100644 --- a/test/unit-tests/lib/createTchapRoom-test.ts +++ b/test/unit-tests/lib/createTchapRoom-test.ts @@ -1,11 +1,10 @@ -import { TchapRoomType } from '../../../src/@types/tchap'; -import TchapCreateRoom from '../../../src/lib/createTchapRoom'; +import { TchapRoomType } from "../../../src/@types/tchap"; +import TchapCreateRoom from "../../../src/lib/createTchapRoom"; // todo(estellecomment) : these tests are redundant with TchapCreateRoomDialog-test. Either remove them or modify TchapCreateRoomDialog // to not edit state directly. describe("Create room options", () => { - beforeEach(() => { - }); + beforeEach(() => {}); it("builds option for private room", (done) => { const privateRoomExpectedOpts = { @@ -16,11 +15,11 @@ describe("Create room options", () => { }, initial_state: [ { - "content": { - "rule": "restricted", + content: { + rule: "restricted", }, - "state_key": "", - "type": "im.vector.room.access_rules", + state_key: "", + type: "im.vector.room.access_rules", }, ], visibility: "private", @@ -31,8 +30,9 @@ describe("Create room options", () => { encryption: true, historyVisibility: "invited", }; - expect(TchapCreateRoom.roomCreateOptions("testName", TchapRoomType.Private)) - .toStrictEqual(privateRoomExpectedOpts); + expect(TchapCreateRoom.roomCreateOptions("testName", TchapRoomType.Private)).toStrictEqual( + privateRoomExpectedOpts, + ); done(); }); @@ -45,11 +45,11 @@ describe("Create room options", () => { }, initial_state: [ { - "content": { - "rule": "restricted", + content: { + rule: "restricted", }, - "state_key": "", - "type": "im.vector.room.access_rules", + state_key: "", + type: "im.vector.room.access_rules", }, ], visibility: "public", @@ -60,8 +60,9 @@ describe("Create room options", () => { encryption: false, historyVisibility: "shared", }; - expect(TchapCreateRoom.roomCreateOptions("testName", TchapRoomType.Forum, false)) - .toStrictEqual(publicRoomWithoutFederationExpectedOpts); + expect(TchapCreateRoom.roomCreateOptions("testName", TchapRoomType.Forum, false)).toStrictEqual( + publicRoomWithoutFederationExpectedOpts, + ); done(); }); @@ -74,11 +75,11 @@ describe("Create room options", () => { }, initial_state: [ { - "content": { - "rule": "restricted", + content: { + rule: "restricted", }, - "state_key": "", - "type": "im.vector.room.access_rules", + state_key: "", + type: "im.vector.room.access_rules", }, ], visibility: "public", @@ -89,8 +90,9 @@ describe("Create room options", () => { encryption: false, historyVisibility: "shared", }; - expect(TchapCreateRoom.roomCreateOptions("testName", TchapRoomType.Forum, true)) - .toStrictEqual(publicRoomWithFederationExpectedOpts); + expect(TchapCreateRoom.roomCreateOptions("testName", TchapRoomType.Forum, true)).toStrictEqual( + publicRoomWithFederationExpectedOpts, + ); done(); }); @@ -103,11 +105,11 @@ describe("Create room options", () => { }, initial_state: [ { - "content": { - "rule": "unrestricted", + content: { + rule: "unrestricted", }, - "state_key": "", - "type": "im.vector.room.access_rules", + state_key: "", + type: "im.vector.room.access_rules", }, ], visibility: "private", @@ -118,8 +120,9 @@ describe("Create room options", () => { encryption: true, historyVisibility: "invited", }; - expect(TchapCreateRoom.roomCreateOptions("testName", TchapRoomType.External)) - .toStrictEqual(externalRoomExpectedOpts); + expect(TchapCreateRoom.roomCreateOptions("testName", TchapRoomType.External)).toStrictEqual( + externalRoomExpectedOpts, + ); done(); }); diff --git a/test/unit-tests/util/TchapRoomUtils-test.ts b/test/unit-tests/util/TchapRoomUtils-test.ts index 682e0e16bf..fb4b10e290 100644 --- a/test/unit-tests/util/TchapRoomUtils-test.ts +++ b/test/unit-tests/util/TchapRoomUtils-test.ts @@ -1,16 +1,16 @@ - -import { TchapRoomAccessRule, TchapRoomType } from '../../../src/@types/tchap'; -import TchapRoomUtils from '../../../src/util/TchapRoomUtils'; +import { TchapRoomAccessRule, TchapRoomType } from "../../../src/@types/tchap"; +import TchapRoomUtils from "../../../src/util/TchapRoomUtils"; describe("Provides utils method to get room type and state", () => { - beforeEach(() => { - }); + beforeEach(() => {}); it("returns room type depending on encryption and access rule", (done) => { - expect(TchapRoomUtils.getTchapRoomTypeInternal(true, TchapRoomAccessRule.Restricted)) - .toStrictEqual(TchapRoomType.Private); - expect(TchapRoomUtils.getTchapRoomTypeInternal(true, TchapRoomAccessRule.Unrestricted)) - .toStrictEqual(TchapRoomType.External); + expect(TchapRoomUtils.getTchapRoomTypeInternal(true, TchapRoomAccessRule.Restricted)).toStrictEqual( + TchapRoomType.Private, + ); + expect(TchapRoomUtils.getTchapRoomTypeInternal(true, TchapRoomAccessRule.Unrestricted)).toStrictEqual( + TchapRoomType.External, + ); expect(TchapRoomUtils.getTchapRoomTypeInternal(true, "any")).toStrictEqual(TchapRoomType.Unknown); expect(TchapRoomUtils.getTchapRoomTypeInternal(true, undefined)).toStrictEqual(TchapRoomType.Unknown); done(); diff --git a/webpack.config.js b/webpack.config.js index 6c5d446b3c..081c0ffdfe 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -36,7 +36,8 @@ const cssThemes = { //"theme-legacy-light": "./node_modules/matrix-react-sdk/res/themes/legacy-light/css/legacy-light.pcss", //"theme-legacy-dark": "./node_modules/matrix-react-sdk/res/themes/legacy-dark/css/legacy-dark.pcss", //"theme-light": "./node_modules/matrix-react-sdk/res/themes/light/css/light.pcss", - "theme-light-high-contrast": "./node_modules/matrix-react-sdk/res/themes/light-high-contrast/css/light-high-contrast.pcss", + "theme-light-high-contrast": + "./node_modules/matrix-react-sdk/res/themes/light-high-contrast/css/light-high-contrast.pcss", //"theme-dark": "./node_modules/matrix-react-sdk/res/themes/dark/css/dark.pcss", //"theme-light-custom": "./node_modules/matrix-react-sdk/res/themes/light-custom/css/light-custom.pcss", //"theme-dark-custom": "./node_modules/matrix-react-sdk/res/themes/dark-custom/css/dark-custom.pcss", @@ -50,8 +51,11 @@ function getActiveThemes() { // :old: :TCHAP: being thrown on login page. // :old: :TCHAP: Browsers recover, but e2e tests crash, so we add both themes in default here. // Default to `light,dark` theme when the MATRIX_THEMES environment variable is not defined. - const theme = process.env.MATRIX_THEMES ?? 'light,dark'; - return theme.split(',').map(x => x.trim()).filter(Boolean); + const theme = process.env.MATRIX_THEMES ?? "light,dark"; + return theme + .split(",") + .map((x) => x.trim()) + .filter(Boolean); } // See docs/customisations.md @@ -127,11 +131,11 @@ module.exports = (env, argv) => { const imports = ACTIVE_THEMES.map((t) => { if (useHMR) { //:tchap: path is taken from src/vector/devcss.ts more info -> search "use theming" - return cssThemes[`theme-${ t }`].replace(".", "../../"); + return cssThemes[`theme-${t}`].replace(".", "../../"); } // return cssThemes[`theme-${t}`].replace("./node_modules/", ""); // theme import path - return cssThemes[`theme-${ t }`]; + return cssThemes[`theme-${t}`]; }); const s = JSON.stringify(ACTIVE_THEMES); return ` @@ -339,34 +343,34 @@ module.exports = (env, argv) => { */ useHMR ? { - loader: "style-loader", - /** + loader: "style-loader", + /** * If we refactor the `theme.js` in `matrix-react-sdk` a little bit, * we could try using `lazyStyleTag` here to add and remove styles on demand, * that would nicely resolve issues of race conditions for themes, * at least for development purposes. */ - options: { - insert: function insertBeforeAt(element) { - const parent = document.querySelector("head"); - // We're in iframe - if (!window.MX_DEV_ACTIVE_THEMES) { - parent.appendChild(element); - return; - } - // Properly disable all other instances of themes - element.disabled = true; - element.onload = () => { - element.disabled = true; - }; - const theme = + options: { + insert: function insertBeforeAt(element) { + const parent = document.querySelector("head"); + // We're in iframe + if (!window.MX_DEV_ACTIVE_THEMES) { + parent.appendChild(element); + return; + } + // Properly disable all other instances of themes + element.disabled = true; + element.onload = () => { + element.disabled = true; + }; + const theme = window.MX_DEV_ACTIVE_THEMES[window.MX_insertedThemeStylesCounter]; - element.setAttribute("data-mx-theme", theme); - window.MX_insertedThemeStylesCounter++; - parent.appendChild(element); - }, - }, - } + element.setAttribute("data-mx-theme", theme); + window.MX_insertedThemeStylesCounter++; + parent.appendChild(element); + }, + }, + } : MiniCssExtractPlugin.loader, { loader: "css-loader", @@ -516,7 +520,7 @@ module.exports = (env, argv) => { esModule: false, name: "[name].[hash:7].[ext]", outputPath: getAssetOutputPath, - publicPath: function(url, resourcePath) { + publicPath: function (url, resourcePath) { const outputPath = getAssetOutputPath(url, resourcePath); return toPublicPath(outputPath); }, @@ -528,7 +532,7 @@ module.exports = (env, argv) => { esModule: false, name: "[name].[hash:7].[ext]", outputPath: getAssetOutputPath, - publicPath: function(url, resourcePath) { + publicPath: function (url, resourcePath) { const outputPath = getAssetOutputPath(url, resourcePath); return toPublicPath(outputPath); }, @@ -546,7 +550,7 @@ module.exports = (env, argv) => { esModule: false, name: "[name].[hash:7].[ext]", outputPath: getAssetOutputPath, - publicPath: function(url, resourcePath) { + publicPath: function (url, resourcePath) { // CSS image usages end up in the `bundles/[hash]` output // directory, so we adjust the final path to navigate up // twice. @@ -570,7 +574,7 @@ module.exports = (env, argv) => { esModule: false, name: "[name].[hash:7].[ext]", outputPath: getAssetOutputPath, - publicPath: function(url, resourcePath) { + publicPath: function (url, resourcePath) { // CSS image usages end up in the `bundles/[hash]` output // directory, so we adjust the final path to navigate up // twice. @@ -586,7 +590,7 @@ module.exports = (env, argv) => { esModule: false, name: "[name].[hash:7].[ext]", outputPath: getAssetOutputPath, - publicPath: function(url, resourcePath) { + publicPath: function (url, resourcePath) { const outputPath = getAssetOutputPath(url, resourcePath); return toPublicPath(outputPath); }, diff --git a/yarn.lock b/yarn.lock index 03cef79f89..87f38e87f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,9 +21,9 @@ "@octokit/plugin-rest-endpoint-methods" "^5.13.0" "@actions/http-client@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.0.1.tgz#873f4ca98fe32f6839462a6f046332677322f99c" - integrity sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.1.0.tgz#b6d8c3934727d6a50d10d19f00a711a964599a9f" + integrity sha512-BonhODnXr3amchh4qkmjPMUO8mFi/zLaaCeCAJZqch8iQqyDnVIkySjB38VHAC8IJ+bnlgfOqlhpyCUZHlQsqw== dependencies: tunnel "^0.0.6" @@ -48,20 +48,20 @@ integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== "@babel/core@^7.0.0", "@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13" - integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.3.tgz#cf1c877284a469da5d1ce1d1e53665253fae712e" + integrity sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.0" + "@babel/generator" "^7.21.3" "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.21.0" + "@babel/helper-module-transforms" "^7.21.2" "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.0" + "@babel/parser" "^7.21.3" "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" + "@babel/traverse" "^7.21.3" + "@babel/types" "^7.21.3" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -69,9 +69,9 @@ semver "^6.3.0" "@babel/eslint-parser@^7.12.10": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz#4f68f6b0825489e00a24b41b6a1ae35414ecd2f4" - integrity sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ== + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.21.3.tgz#d79e822050f2de65d7f368a076846e7184234af7" + integrity sha512-kfhmPimwo6k4P8zxNs8+T7yR44q1LdpsZdE1NkCsVlfiuTPRfnGgjaF8Qgug9q9Pou17u6wneYF0lDCZJATMFg== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" @@ -84,12 +84,12 @@ dependencies: eslint-rule-composer "^0.3.0" -"@babel/generator@^7.21.0", "@babel/generator@^7.21.1", "@babel/generator@^7.7.2": - version "7.21.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd" - integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA== +"@babel/generator@^7.21.3", "@babel/generator@^7.7.2": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.3.tgz#232359d0874b392df04045d72ce2fd9bb5045fce" + integrity sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA== dependencies: - "@babel/types" "^7.21.0" + "@babel/types" "^7.21.3" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -195,7 +195,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.0", "@babel/helper-module-transforms@^7.21.2": +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": version "7.21.2" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== @@ -307,10 +307,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.5", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" - integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.5", "@babel/parser@^7.20.7", "@babel/parser@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.3.tgz#1d285d67a19162ff9daa358d4cb41d50c06220b3" + integrity sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -659,9 +659,9 @@ "@babel/template" "^7.20.7" "@babel/plugin-transform-destructuring@^7.20.2": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz#8bda578f71620c7de7c93af590154ba331415454" - integrity sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA== + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" + integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -777,9 +777,9 @@ "@babel/helper-replace-supers" "^7.18.6" "@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz#0ee349e9d1bc96e78e3b37a7af423a4078a7083f" - integrity sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA== + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" + integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -791,9 +791,9 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz#3f02c784e0b711970d7d8ccc96c4359d64e27ac7" - integrity sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g== + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz#b32a5556100d424b25e388dd689050d78396884d" + integrity sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -894,10 +894,11 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typescript@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz#f0956a153679e3b377ae5b7f0143427151e4c848" - integrity sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg== + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" + integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-create-class-features-plugin" "^7.21.0" "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-typescript" "^7.20.0" @@ -1062,26 +1063,26 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/traverse@^7.18.5", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.7.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.2.tgz#ac7e1f27658750892e815e60ae90f382a46d8e75" - integrity sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw== +"@babel/traverse@^7.18.5", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.3", "@babel/traverse@^7.7.2": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.3.tgz#4747c5e7903d224be71f90788b06798331896f67" + integrity sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.1" + "@babel/generator" "^7.21.3" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.21.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.2" - "@babel/types" "^7.21.2" + "@babel/parser" "^7.21.3" + "@babel/types" "^7.21.3" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" - integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw== +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.3.tgz#4865a5357ce40f64e3400b0f3b737dc6d4f64d05" + integrity sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg== dependencies: "@babel/helper-string-parser" "^7.19.4" "@babel/helper-validator-identifier" "^7.19.1" @@ -1101,6 +1102,11 @@ uuid "8.3.2" xml "1.0.1" +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + "@csstools/convert-colors@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" @@ -1111,7 +1117,7 @@ resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.0.1.tgz#ff02629c7c95d1f4f8ea84d5ef1173461610535e" integrity sha512-B9/8PmOtU6nBiibJg0glnNktQDZ3rZnGn/7UmDfrm2vMtrdlXO3p7ErE95N0up80IRk9YEtB5jyj/TmQ1WH3dw== -"@csstools/css-tokenizer@^2.0.1": +"@csstools/css-tokenizer@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.0.tgz#fee4de3d444db3ce9007f3af6474af8ba3e4b930" integrity sha512-dtqFyoJBHUxGi9zPZdpCKP1xk8tq6KPHJ/NY4qWXiYo6IcSGwzk3L8x2XzZbbyOyBs9xQARoGveU2AsgLj6D2A== @@ -1122,25 +1128,62 @@ integrity sha512-X2/OuzEbjaxhzm97UJ+95GrMeT29d1Ib+Pu+paGLuRWZnWRK9sI9r3ikmKXPWGA1C4y4JEdBEFpp9jEqCvLeRA== "@csstools/selector-specificity@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz#c9c61d9fe5ca5ac664e1153bb0aa0eba1c6d6308" - integrity sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" + integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== + +"@cypress/request@^2.88.10": + version "2.88.11" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.11.tgz#5a4c7399bc2d7e7ed56e92ce5acb620c8b187047" + integrity sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + http-signature "~1.3.6" + 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.3" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^8.3.2" -"@eslint-community/eslint-utils@^4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.1.2.tgz#14ca568ddaa291dd19a4a54498badc18c6cfab78" - integrity sha512-7qELuQWWjVDdVsFQ5+beUl+KPczrEDA7S3zM4QUd/bJl7oXgsmpXaEVqrRTnOBqenOV4rWf2kVZk2Ot085zPWA== +"@cypress/xvfb@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + +"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz#a556790523a351b4e47e9d385f47265eaaf9780a" + integrity sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA== dependencies: eslint-visitor-keys "^3.3.0" +"@eslint-community/regexpp@^4.4.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.4.1.tgz#087cb8d9d757bb22e9c9946c9c0c2bf8806830f1" + integrity sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw== + "@eslint/eslintrc@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.0.tgz#943309d8697c52fc82c076e90c1c74fbbe69dbff" - integrity sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A== + version "2.0.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.1.tgz#7888fe7ec8f21bc26d646dbd2c11cd776e21192d" + integrity sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" + espree "^9.5.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -1193,61 +1236,61 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.4.3.tgz#1f25a99f7f860e4c46423b5b1038262466fadde1" - integrity sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A== +"@jest/console@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.5.0.tgz#593a6c5c0d3f75689835f1b3b4688c4f8544cb57" + integrity sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ== dependencies: - "@jest/types" "^29.4.3" + "@jest/types" "^29.5.0" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.4.3" - jest-util "^29.4.3" + jest-message-util "^29.5.0" + jest-util "^29.5.0" slash "^3.0.0" -"@jest/core@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.4.3.tgz#829dd65bffdb490de5b0f69e97de8e3b5eadd94b" - integrity sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ== - dependencies: - "@jest/console" "^29.4.3" - "@jest/reporters" "^29.4.3" - "@jest/test-result" "^29.4.3" - "@jest/transform" "^29.4.3" - "@jest/types" "^29.4.3" +"@jest/core@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.5.0.tgz#76674b96904484e8214614d17261cc491e5f1f03" + integrity sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ== + dependencies: + "@jest/console" "^29.5.0" + "@jest/reporters" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^29.4.3" - jest-config "^29.4.3" - jest-haste-map "^29.4.3" - jest-message-util "^29.4.3" + jest-changed-files "^29.5.0" + jest-config "^29.5.0" + jest-haste-map "^29.5.0" + jest-message-util "^29.5.0" jest-regex-util "^29.4.3" - jest-resolve "^29.4.3" - jest-resolve-dependencies "^29.4.3" - jest-runner "^29.4.3" - jest-runtime "^29.4.3" - jest-snapshot "^29.4.3" - jest-util "^29.4.3" - jest-validate "^29.4.3" - jest-watcher "^29.4.3" + jest-resolve "^29.5.0" + jest-resolve-dependencies "^29.5.0" + jest-runner "^29.5.0" + jest-runtime "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" + jest-watcher "^29.5.0" micromatch "^4.0.4" - pretty-format "^29.4.3" + pretty-format "^29.5.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.4.3.tgz#9fe2f3169c3b33815dc4bd3960a064a83eba6548" - integrity sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA== +"@jest/environment@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.5.0.tgz#9152d56317c1fdb1af389c46640ba74ef0bb4c65" + integrity sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ== dependencies: - "@jest/fake-timers" "^29.4.3" - "@jest/types" "^29.4.3" + "@jest/fake-timers" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" - jest-mock "^29.4.3" + jest-mock "^29.5.0" "@jest/expect-utils@^28.1.3": version "28.1.3" @@ -1256,53 +1299,53 @@ dependencies: jest-get-type "^28.0.2" -"@jest/expect-utils@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.4.3.tgz#95ce4df62952f071bcd618225ac7c47eaa81431e" - integrity sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ== +"@jest/expect-utils@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" + integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== dependencies: jest-get-type "^29.4.3" -"@jest/expect@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.4.3.tgz#d31a28492e45a6bcd0f204a81f783fe717045c6e" - integrity sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ== +"@jest/expect@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.5.0.tgz#80952f5316b23c483fbca4363ce822af79c38fba" + integrity sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g== dependencies: - expect "^29.4.3" - jest-snapshot "^29.4.3" + expect "^29.5.0" + jest-snapshot "^29.5.0" -"@jest/fake-timers@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.4.3.tgz#31e982638c60fa657d310d4b9d24e023064027b0" - integrity sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw== +"@jest/fake-timers@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.5.0.tgz#d4d09ec3286b3d90c60bdcd66ed28d35f1b4dc2c" + integrity sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg== dependencies: - "@jest/types" "^29.4.3" + "@jest/types" "^29.5.0" "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^29.4.3" - jest-mock "^29.4.3" - jest-util "^29.4.3" + jest-message-util "^29.5.0" + jest-mock "^29.5.0" + jest-util "^29.5.0" -"@jest/globals@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.4.3.tgz#63a2c4200d11bc6d46f12bbe25b07f771fce9279" - integrity sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA== +"@jest/globals@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.5.0.tgz#6166c0bfc374c58268677539d0c181f9c1833298" + integrity sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ== dependencies: - "@jest/environment" "^29.4.3" - "@jest/expect" "^29.4.3" - "@jest/types" "^29.4.3" - jest-mock "^29.4.3" + "@jest/environment" "^29.5.0" + "@jest/expect" "^29.5.0" + "@jest/types" "^29.5.0" + jest-mock "^29.5.0" -"@jest/reporters@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.4.3.tgz#0a68a0c0f20554760cc2e5443177a0018969e353" - integrity sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg== +"@jest/reporters@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.5.0.tgz#985dfd91290cd78ddae4914ba7921bcbabe8ac9b" + integrity sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.4.3" - "@jest/test-result" "^29.4.3" - "@jest/transform" "^29.4.3" - "@jest/types" "^29.4.3" + "@jest/console" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" "@jridgewell/trace-mapping" "^0.3.15" "@types/node" "*" chalk "^4.0.0" @@ -1315,9 +1358,9 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.4.3" - jest-util "^29.4.3" - jest-worker "^29.4.3" + jest-message-util "^29.5.0" + jest-util "^29.5.0" + jest-worker "^29.5.0" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" @@ -1346,42 +1389,42 @@ callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.4.3.tgz#e13d973d16c8c7cc0c597082d5f3b9e7f796ccb8" - integrity sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA== +"@jest/test-result@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.5.0.tgz#7c856a6ca84f45cc36926a4e9c6b57f1973f1408" + integrity sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ== dependencies: - "@jest/console" "^29.4.3" - "@jest/types" "^29.4.3" + "@jest/console" "^29.5.0" + "@jest/types" "^29.5.0" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz#0862e876a22993385a0f3e7ea1cc126f208a2898" - integrity sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw== +"@jest/test-sequencer@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz#34d7d82d3081abd523dbddc038a3ddcb9f6d3cc4" + integrity sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ== dependencies: - "@jest/test-result" "^29.4.3" + "@jest/test-result" "^29.5.0" graceful-fs "^4.2.9" - jest-haste-map "^29.4.3" + jest-haste-map "^29.5.0" slash "^3.0.0" -"@jest/transform@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.4.3.tgz#f7d17eac9cb5bb2e1222ea199c7c7e0835e0c037" - integrity sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg== +"@jest/transform@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.5.0.tgz#cf9c872d0965f0cbd32f1458aa44a2b1988b00f9" + integrity sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.4.3" + "@jest/types" "^29.5.0" "@jridgewell/trace-mapping" "^0.3.15" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^2.0.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.4.3" + jest-haste-map "^29.5.0" jest-regex-util "^29.4.3" - jest-util "^29.4.3" + jest-util "^29.5.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" @@ -1399,10 +1442,10 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jest/types@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.4.3.tgz#9069145f4ef09adf10cec1b2901b2d390031431f" - integrity sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA== +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== dependencies: "@jest/schemas" "^29.4.3" "@types/istanbul-lib-coverage" "^2.0.0" @@ -1510,14 +1553,14 @@ integrity sha512-uL5kf7MqC+GxsGJtimPVbFliyaFinohTHSzohz31JTysktHsjRR2SC+vV7sy2/dstTWVdG9EGOnohyPsB+oi3A== "@matrix-org/matrix-sdk-crypto-js@^0.1.0-alpha.3": - version "0.1.0-alpha.4" - resolved "https://registry.yarnpkg.com/@matrix-org/matrix-sdk-crypto-js/-/matrix-sdk-crypto-js-0.1.0-alpha.4.tgz#1b20294e0354c3dcc9c7dc810d883198a4042f04" - integrity sha512-mdaDKrw3P5ZVCpq0ioW0pV6ihviDEbS8ZH36kpt9stLKHwwDSopPogE6CkQhi0B1jn1yBUtOYi32mBV/zcOR7g== + version "0.1.0-alpha.5" + resolved "https://registry.yarnpkg.com/@matrix-org/matrix-sdk-crypto-js/-/matrix-sdk-crypto-js-0.1.0-alpha.5.tgz#60ede2c43b9d808ba8cf46085a3b347b290d9658" + integrity sha512-2KjAgWNGfuGLNjJwsrs6gGX157vmcTfNrA4u249utgnMPbJl7QwuUqh1bGxQ0PpK06yvZjgPlkna0lTbuwtuQw== "@matrix-org/matrix-wysiwyg@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@matrix-org/matrix-wysiwyg/-/matrix-wysiwyg-1.1.1.tgz#a07b13097e72a9bae220a647527d6418c5423827" - integrity sha512-pp7poyd3vfC/P34ZRj6u2oyLJuex77egeSsIA1MPowBqtrIAmHkji9xviBdXPcDss2zEI4EZuX77JWXtAfaz7Q== + version "1.4.0" + resolved "https://registry.yarnpkg.com/@matrix-org/matrix-wysiwyg/-/matrix-wysiwyg-1.4.0.tgz#b04f4c05c8117c0917f9a1401bb1d9c5f976052c" + integrity sha512-NIxX1oia61zut/DA7fUCCQfOhWKLbVDmPrDeUeX40NgXZRROhLPF1/jcOKgAnXK8yqflmNrVlX/dlUVcfj/kqw== "@matrix-org/olm@https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.12.tgz": version "3.2.12" @@ -1688,20 +1731,167 @@ dependencies: "@octokit/openapi-types" "^12.11.0" +"@percy/cli-app@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/cli-app/-/cli-app-1.21.0.tgz#d7a1fa5d0d1f0e1a5ab70d5f90dcd19ea739a5ab" + integrity sha512-kkYMTGEk33nsLIIKx57LzheK7WZK77Y52c+DAwnV1FDpzDvhpP4eLEpXwarTIapN76O4wZndFlX4zm07U9Cvfw== + dependencies: + "@percy/cli-command" "1.21.0" + "@percy/cli-exec" "1.21.0" + +"@percy/cli-build@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/cli-build/-/cli-build-1.21.0.tgz#f32784e5c477ce339d7565c70f33f1355076af90" + integrity sha512-LRvGsTl6bw6zNMOQ36emjdIdkvCEUAbRRp2nryBODMpJ8YUd1NcXw/qLVM2bzpJcTmeBXR76Yjgi1VhFZrNZlg== + dependencies: + "@percy/cli-command" "1.21.0" + +"@percy/cli-command@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/cli-command/-/cli-command-1.21.0.tgz#2165ec56b537ffbcbc38f569c6033ac2f8b05464" + integrity sha512-ZfjDMgUQRQonJT106Y89NVDzVd2qDmwQ+4oC0AyGgE5h1cHAEaPoYV8LnMvpjbvFYni+jbeZvHNANMP7Ut2yOQ== + dependencies: + "@percy/config" "1.21.0" + "@percy/core" "1.21.0" + "@percy/logger" "1.21.0" + +"@percy/cli-config@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/cli-config/-/cli-config-1.21.0.tgz#befb77cad4f6b0131059fd5a0c6bfa0710b95714" + integrity sha512-7Wn3L/XkKhVWixH4/oPJV66jD6LBCma6pT/bzbKuV5Hlpscel2xz3p8JSDOvxQJl1eSRtjwhI1HP/0OT6EX5dg== + dependencies: + "@percy/cli-command" "1.21.0" + +"@percy/cli-exec@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/cli-exec/-/cli-exec-1.21.0.tgz#96b232c74a119e7feddcbe7ac8ba3835f99da2e7" + integrity sha512-Uwqw1WqXzYXk4WQLyRWkQJ4Tdm7/bUOOa2HJU/J5kGLDmoSRNX/TesobFy8ii55mB0QV2hkZnMkAFPwzfxaCSw== + dependencies: + "@percy/cli-command" "1.21.0" + cross-spawn "^7.0.3" + which "^2.0.2" + +"@percy/cli-snapshot@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/cli-snapshot/-/cli-snapshot-1.21.0.tgz#59e725ec49c520701b704677f2e35309d8b28aed" + integrity sha512-DR0yPRCCRFGXrDwfAmC/26yF4CGMTAWNgIKFgeQcPGgjkdXOSmm04fhU36QBU5S66B2gmSjEG0mfh+2oOD68EQ== + dependencies: + "@percy/cli-command" "1.21.0" + yaml "^2.0.0" + +"@percy/cli-upload@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/cli-upload/-/cli-upload-1.21.0.tgz#4bbeb2c404ec3e1bc25d841ddac8c67fc7e34c88" + integrity sha512-NDh6NiirUgdnrNergiwtQceA0TjcT5vK6dzuE6pscwksvb9vzx+tvvbBcVBhpEQt+FmIoYDdqb8FVzMqxd5wEg== + dependencies: + "@percy/cli-command" "1.21.0" + fast-glob "^3.2.11" + image-size "^1.0.0" + +"@percy/cli@^1.3.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/cli/-/cli-1.21.0.tgz#acd8e6acc2d0b868d7a733829df618ada9842c15" + integrity sha512-capaTXkj/L0Itn8VpDY/ePkHM9InaqwTRTK+IHGTA2HsRlpiNotunDAv8cNJ/fBMoRBh1Bki7tEWIp6zB+KmBQ== + dependencies: + "@percy/cli-app" "1.21.0" + "@percy/cli-build" "1.21.0" + "@percy/cli-command" "1.21.0" + "@percy/cli-config" "1.21.0" + "@percy/cli-exec" "1.21.0" + "@percy/cli-snapshot" "1.21.0" + "@percy/cli-upload" "1.21.0" + "@percy/client" "1.21.0" + "@percy/logger" "1.21.0" + +"@percy/client@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/client/-/client-1.21.0.tgz#d18403d973e4efa81a223e1c7041b3dc1bd651fa" + integrity sha512-IKFcMYcibWQjisjmS4K9HK7TbjPK4fnVeh/3Uq7Da0ejiu5qBvLn49aNcYfnrguPqaUcgIvLvpcgtHeH+srv/g== + dependencies: + "@percy/env" "1.21.0" + "@percy/logger" "1.21.0" + +"@percy/config@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/config/-/config-1.21.0.tgz#651f6a78c92a26da2f0b7d6ce24b91541cb343ee" + integrity sha512-s6XFBhjP0fGVg8onapDwebGNIdwMgdidZW5q0HziBiQVqfwh/83NkDlCq+c6/JU5P0Y5DArxCIFDVUfiLkcs4A== + dependencies: + "@percy/logger" "1.21.0" + ajv "^8.6.2" + cosmiconfig "^7.0.0" + yaml "^2.0.0" + +"@percy/core@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/core/-/core-1.21.0.tgz#47598d1004c46ac1d0bbc1f8b93c91337be9f7cb" + integrity sha512-YFBTiRghq1m9t0/4ZUFWgS8LJ4DYugcMDoZ04yKWsIjRDcALwHAZahYpBZRcHkmfqB/kqLB5IYoyc6rel+PNeA== + dependencies: + "@percy/client" "1.21.0" + "@percy/config" "1.21.0" + "@percy/dom" "1.21.0" + "@percy/logger" "1.21.0" + content-disposition "^0.5.4" + cross-spawn "^7.0.3" + extract-zip "^2.0.1" + fast-glob "^3.2.11" + micromatch "^4.0.4" + mime-types "^2.1.34" + path-to-regexp "^6.2.0" + rimraf "^3.0.2" + ws "^8.0.0" + +"@percy/cypress@^3.1.1": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@percy/cypress/-/cypress-3.1.2.tgz#a087d3c59a6b155eab5fdb4c237526b9cfacbc22" + integrity sha512-JXrGDZbqwkzQd2h5T5D7PvqoucNaiMh4ChPp8cLQiEtRuLHta9nf1lEuXH+jnatGL2j+3jJFIHJ0L7XrgVnvQA== + dependencies: + "@percy/sdk-utils" "^1.3.1" + +"@percy/dom@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/dom/-/dom-1.21.0.tgz#6ef90f6fbeff4189b57bcb2d5dd4c56bf5d36191" + integrity sha512-OKpS9EPnUrMx3Mu9L7QiqEtc+yAUz3gbXrbRlrPAljyRAmmBe9p5vy0hKtP8wO1vxjumqmtxNABpz5bc70CJ2Q== + +"@percy/env@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/env/-/env-1.21.0.tgz#59a03bb8c1ba4cda8ed646ecdde1f1b748997909" + integrity sha512-rqbACxivUTkpAJnjk/7IosFdh2vdz1SVGV0KXFf2xtEuUb7YhYrYixhf/6xE81o93C+pxrlXYWkgUSaMhZpP5A== + +"@percy/logger@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/logger/-/logger-1.21.0.tgz#b23ef7b38a1f89612d272e090eec39419f04d864" + integrity sha512-qKKSFP25X+a50vpjUSolI8WSQ2YAunS6K4brdTRemgvc48Wlkv3541SP8iMK5BAy3Nn4u0KRiwkstvyRr1tXlA== + +"@percy/sdk-utils@^1.3.1": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@percy/sdk-utils/-/sdk-utils-1.21.0.tgz#57b2ce73e7ea9a86e9f69d40e89f56f8dd294476" + integrity sha512-ZI6QbIhMZvE3P73ar7aeXcjSk8/czlS7h55QBynoJNorwimq5xed1CGPHu00uQsCO6dXeEKTfxQcqbCypRE6Hw== + "@principalstudio/html-webpack-inject-preload@^1.2.7": version "1.2.7" resolved "https://registry.yarnpkg.com/@principalstudio/html-webpack-inject-preload/-/html-webpack-inject-preload-1.2.7.tgz#0c1f0b32a34d814b36ce84111f89990441cc64e8" integrity sha512-KJKkiKG63ugBjf8U0e9jUcI9CLPTFIsxXplEDE0oi3mPpxd90X9SJovo3W2l7yh/ARKIYXhQq8fSXUN7M29TzQ== +"@sentry-internal/tracing@7.44.2": + version "7.44.2" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.44.2.tgz#d0cb9dcf88d68818c00d7cf42cddc8aa0ea89889" + integrity sha512-3nteYNWiQDbO4yROBqduWTVR0Jah+FiU/2Tz44FcWvWyBboRP4gggaN7BDJahRwbhcRQKE9lTjGCbQLgNOuUCw== + dependencies: + "@sentry/core" "7.44.2" + "@sentry/types" "7.44.2" + "@sentry/utils" "7.44.2" + tslib "^1.9.3" + "@sentry/browser@^7.0.0": - version "7.39.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.39.0.tgz#e52669f0105257aeac799394df7b9a9bbb186449" - integrity sha512-LSa89bLDfGK33ArrgutVU8p4UDb809BgOn29qe/YPUL/Wor+cO59XoEmKVmXEqMZYEVjsaUVoBanUoxXKSlYgw== - dependencies: - "@sentry/core" "7.39.0" - "@sentry/replay" "7.39.0" - "@sentry/types" "7.39.0" - "@sentry/utils" "7.39.0" + version "7.44.2" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.44.2.tgz#455576e73ed439f1758f096fee4125482a46ee93" + integrity sha512-pF2lyXkIjjCoIWUHN17zGO0R2n0/5yb7k+LehbEC1UhvSEBZW/zrRS+AeebjVF0eG2Wir3SoSe4TWt+CRQFOiA== + dependencies: + "@sentry-internal/tracing" "7.44.2" + "@sentry/core" "7.44.2" + "@sentry/replay" "7.44.2" + "@sentry/types" "7.44.2" + "@sentry/utils" "7.44.2" tslib "^1.9.3" "@sentry/cli@^1.74.6": @@ -1716,45 +1906,42 @@ proxy-from-env "^1.1.0" which "^2.0.2" -"@sentry/core@7.39.0": - version "7.39.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.39.0.tgz#501febb80832f7a5160b9c30883a7f985bd3fdd0" - integrity sha512-45WJIcWWCQnZ8zhHtcrkJjQ4YydmzMWY4pmRuBG7Qp+zrCT6ISoyODcjY+SCHFdvXkiYFi8+bFZa1qG3YQnnYw== +"@sentry/core@7.44.2": + version "7.44.2" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.44.2.tgz#e33b2880e83cc4aaaa3d1b8a160588484d0e2624" + integrity sha512-m2nOHP4YX+kmWFQTzgBEsdblCuNFSB7017oLaR6/VH0a0mVWdrW7Q1gHMpw4/08uWRiA+oC2dXqCH7A1FwfGIQ== dependencies: - "@sentry/types" "7.39.0" - "@sentry/utils" "7.39.0" + "@sentry/types" "7.44.2" + "@sentry/utils" "7.44.2" tslib "^1.9.3" -"@sentry/replay@7.39.0": - version "7.39.0" - resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.39.0.tgz#49d55ab29f9f7d74057f057b89e3a7f0382a1154" - integrity sha512-pL5JMk/fOx9KFbNBnqoJQwx7X0ZM4BrypWMzkGKsoENjm5sn6pB/dtO4N4k3gmIy929a89d1qL+HbxHAAxFylQ== +"@sentry/replay@7.44.2": + version "7.44.2" + resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.44.2.tgz#5932f9330d07587f3cfcd8f1e19a0a5ee09fdbaa" + integrity sha512-3KO0QE0OvH0I2hP7yU3W511nEQ55yHN5jWL6V/ay2PlUR1hCw42g8/o9zARq4qw1t4k5ZY6M36ZMqnQQwISqeA== dependencies: - "@sentry/core" "7.39.0" - "@sentry/types" "7.39.0" - "@sentry/utils" "7.39.0" + "@sentry/core" "7.44.2" + "@sentry/types" "7.44.2" + "@sentry/utils" "7.44.2" "@sentry/tracing@^7.0.0": - version "7.39.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.39.0.tgz#50c1d99c68fffabe0c57d9dd99c49326e6a59319" - integrity sha512-bSRdUMzp/n54J+Qf4hHC4WVvdv4vZEv3NEbNNsnIZNAhnVAq6QB9VzsGRJZ12PqxJU3StDuqLiZFVOmGxETCkQ== + version "7.44.2" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.44.2.tgz#92d9056b96a44e553e2fcec3ef0351ef820d956b" + integrity sha512-z8wqPgpaQ4EaxPRZdx4MEWfbySSpHlYO7URJPvudyhsezDr33kyZ79QYiZP3KexoHud7gsjnkI1u/DqjdEhDng== dependencies: - "@sentry/core" "7.39.0" - "@sentry/types" "7.39.0" - "@sentry/utils" "7.39.0" - tslib "^1.9.3" + "@sentry-internal/tracing" "7.44.2" -"@sentry/types@7.39.0": - version "7.39.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.39.0.tgz#06c51d94ebb3446615f109352648d4b8c0b35ad0" - integrity sha512-5Y83Y8O3dT5zT2jTKEIPMcpn5lUm05KRMaCXuw0sRsv4r9TbBUKeqiSU1LjowT8rB/XNy8m7DHav8+NmogPaJw== +"@sentry/types@7.44.2": + version "7.44.2" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.44.2.tgz#c8acdd884f4daf03f3e813935e9e16da71473247" + integrity sha512-vdGb2BAelXRitgKWRBF1cCAoisLsbugUaJzrGCQoIoS3lYpZ8d8r2zELE7cNoVObVoQbUHF/WFhXVv8cumj+RA== -"@sentry/utils@7.39.0": - version "7.39.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.39.0.tgz#1a0af30d3b4032feea8a89d94a3ba72c29834ba6" - integrity sha512-/ZxlPgm1mGgmuMckCTc9iyqDuFTEYNEoMB53IjVFz8ann+37OiWB7Py/QV1rEEsv3xKrGbA8thhRhV9E1sjTlQ== +"@sentry/utils@7.44.2": + version "7.44.2" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.44.2.tgz#a2f77713fec4471076e79e050c75561c21ad8abb" + integrity sha512-PzL4Z0fhIHfQacfWvgiAs+drcm4Nc45Tc8PW1RdOZtHxzhGAYZYAPniDGML586Mnlu19QM6kGHiDu+CBgnnXAQ== dependencies: - "@sentry/types" "7.39.0" + "@sentry/types" "7.44.2" tslib "^1.9.3" "@sentry/webpack-plugin@^1.18.1": @@ -2059,9 +2246,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.0.0": - version "29.4.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.4.0.tgz#a8444ad1704493e84dbf07bb05990b275b3b9206" - integrity sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ== + version "29.5.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.0.tgz#337b90bbcfe42158f39c2fb5619ad044bbb518ac" + integrity sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -2086,9 +2273,9 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/jsrsasign@^10.5.4": - version "10.5.5" - resolved "https://registry.yarnpkg.com/@types/jsrsasign/-/jsrsasign-10.5.5.tgz#8c804f57fb416e536699478fb77c251be5dcce6e" - integrity sha512-M2Et4hgTigFoArTu6ylK3hYFEH+UuXfgFXRXZ+flpCfux8j7fQ2D+0zEwiu6ehx0h5otaauhLSFzMzEtNA784A== + version "10.5.7" + resolved "https://registry.yarnpkg.com/@types/jsrsasign/-/jsrsasign-10.5.7.tgz#78b4ae30cba5555aa033f034c2675985d8e82165" + integrity sha512-55VLNhEmTd9y44KFj2+U17PJlejRg3FR/+krDNmh8s6wIvbvyMUZI8r94aRbh++PcPTv7xr2ao0z5gh2oLaebg== "@types/mapbox__point-geometry@*", "@types/mapbox__point-geometry@^0.1.2": version "0.1.2" @@ -2120,14 +2307,19 @@ integrity sha512-jhMOZSS0UGYTS9pqvt6q3wtT3uvOSve5piTEmTMx3zzTuBLvSIMxSIBIc3d5lajVD5h4xc41AMZD2M5orN3PxA== "@types/node@*": - version "18.14.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.2.tgz#c076ed1d7b6095078ad3cf21dfeea951842778b1" - integrity sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA== + version "18.15.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.5.tgz#3af577099a99c61479149b716183e70b5239324a" + integrity sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew== + +"@types/node@^14.14.31": + version "14.18.40" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.40.tgz#773945366f7531d60473087be12b819f300e3e69" + integrity sha512-pGteXO/JQX7wPxGR8lyT+doqjMa7XvlVowwrDwLfX92k5SdLkk4cwC7CYSLBxrenw/R5oQwKioVIak7ZgplM3g== "@types/node@^16": - version "16.18.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.13.tgz#c572f8837094c6e3b73918a68674c784f6877fc0" - integrity sha512-l0/3XZ153UTlNOnZK8xSNoJlQda9/WnYgiTdcKKPJSZjdjI9MU+A9oMXOesAWLSnqAaaJhj3qfQsU07Dr8OUwg== + version "16.18.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.18.tgz#06cb0eeb5a0175d26d99b7acf4db613ca30cb07f" + integrity sha512-fwGw1uvQAzabxL1pyoknPlJIF2t7+K90uTqynleKRx24n3lYcxWa3+KByLhgkF8GEAK2c7hC8Ki0RkNM5H15jQ== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -2191,22 +2383,32 @@ integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/sanitize-html@^2.3.1": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.8.0.tgz#c53d3114d832734fc299568a3458a49f9edc1eef" - integrity sha512-Uih6caOm3DsBYnVGOYn0A9NoTNe1c4aPStmHC/YA2JrpP9kx//jzaRcIklFvSpvVQEcpl/ZCr4DgISSf/YxTvg== + version "2.9.0" + resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.9.0.tgz#5b609f7592de22ef80a0930c39670329753dca1b" + integrity sha512-4fP/kEcKNj2u39IzrxWYuf/FnCCwwQCpif6wwY6ROUS1EPRIfWJjGkY3HIowY1EX/VbX5e86yq8AAE7UPMgATg== dependencies: htmlparser2 "^8.0.0" "@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== "@types/semver@^7.3.12": version "7.3.13" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== +"@types/sinonjs__fake-timers@8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" + integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== + +"@types/sizzle@^2.3.2": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" + integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== + "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -2266,94 +2468,101 @@ integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.8": - version "17.0.22" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" - integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== + version "17.0.23" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.23.tgz#a7db3a2062c95ca1a5e0d5d5ddb6521cbc649e35" + integrity sha512-yuogunc04OnzGQCrfHx+Kk883Q4X0aSwmYZhKjI21m+SVYzjIbrWl8dOOwSv5hf2Um2pdCOXWo9isteZTNXUZQ== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.45.0": - version "5.54.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz#2c821ad81b2c786d142279a8292090f77d1881f4" - integrity sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw== +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== dependencies: - "@typescript-eslint/scope-manager" "5.54.0" - "@typescript-eslint/type-utils" "5.54.0" - "@typescript-eslint/utils" "5.54.0" + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^5.45.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.56.0.tgz#e4fbb4d6dd8dab3e733485c1a44a02189ae75364" + integrity sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.56.0" + "@typescript-eslint/type-utils" "5.56.0" + "@typescript-eslint/utils" "5.56.0" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" - regexpp "^3.2.0" semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/parser@^5.45.0": - version "5.54.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.54.0.tgz#def186eb1b1dbd0439df0dacc44fb6d8d5c417fe" - integrity sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ== + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.56.0.tgz#42eafb44b639ef1dbd54a3dbe628c446ca753ea6" + integrity sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg== dependencies: - "@typescript-eslint/scope-manager" "5.54.0" - "@typescript-eslint/types" "5.54.0" - "@typescript-eslint/typescript-estree" "5.54.0" + "@typescript-eslint/scope-manager" "5.56.0" + "@typescript-eslint/types" "5.56.0" + "@typescript-eslint/typescript-estree" "5.56.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.54.0": - version "5.54.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz#74b28ac9a3fc8166f04e806c957adb8c1fd00536" - integrity sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg== +"@typescript-eslint/scope-manager@5.56.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.56.0.tgz#62b4055088903b5254fa20403010e1c16d6ab725" + integrity sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw== dependencies: - "@typescript-eslint/types" "5.54.0" - "@typescript-eslint/visitor-keys" "5.54.0" + "@typescript-eslint/types" "5.56.0" + "@typescript-eslint/visitor-keys" "5.56.0" -"@typescript-eslint/type-utils@5.54.0": - version "5.54.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz#390717216eb61393a0cad2995da154b613ba7b26" - integrity sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ== +"@typescript-eslint/type-utils@5.56.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.56.0.tgz#e6f004a072f09c42e263dc50e98c70b41a509685" + integrity sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A== dependencies: - "@typescript-eslint/typescript-estree" "5.54.0" - "@typescript-eslint/utils" "5.54.0" + "@typescript-eslint/typescript-estree" "5.56.0" + "@typescript-eslint/utils" "5.56.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.54.0": - version "5.54.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.54.0.tgz#7d519df01f50739254d89378e0dcac504cab2740" - integrity sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ== +"@typescript-eslint/types@5.56.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.56.0.tgz#b03f0bfd6fa2afff4e67c5795930aff398cbd834" + integrity sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w== -"@typescript-eslint/typescript-estree@5.54.0": - version "5.54.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz#f6f3440cabee8a43a0b25fa498213ebb61fdfe99" - integrity sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ== +"@typescript-eslint/typescript-estree@5.56.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.56.0.tgz#48342aa2344649a03321e74cab9ccecb9af086c3" + integrity sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg== dependencies: - "@typescript-eslint/types" "5.54.0" - "@typescript-eslint/visitor-keys" "5.54.0" + "@typescript-eslint/types" "5.56.0" + "@typescript-eslint/visitor-keys" "5.56.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.54.0": - version "5.54.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.54.0.tgz#3db758aae078be7b54b8ea8ea4537ff6cd3fbc21" - integrity sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw== +"@typescript-eslint/utils@5.56.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.56.0.tgz#db64705409b9a15546053fb4deb2888b37df1f41" + integrity sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA== dependencies: + "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.54.0" - "@typescript-eslint/types" "5.54.0" - "@typescript-eslint/typescript-estree" "5.54.0" + "@typescript-eslint/scope-manager" "5.56.0" + "@typescript-eslint/types" "5.56.0" + "@typescript-eslint/typescript-estree" "5.56.0" eslint-scope "^5.1.1" - eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.54.0": - version "5.54.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz#846878afbf0cd67c19cfa8d75947383d4490db8f" - integrity sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA== +"@typescript-eslint/visitor-keys@5.56.0": + version "5.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.56.0.tgz#f19eb297d972417eb13cb69b35b3213e13cc214f" + integrity sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q== dependencies: - "@typescript-eslint/types" "5.54.0" + "@typescript-eslint/types" "5.56.0" eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.9.0": @@ -2614,7 +2823,7 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: +ajv@^8.0.1, ajv@^8.6.2: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2648,7 +2857,12 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-escapes@^4.2.1: +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -2723,6 +2937,11 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +arch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2764,6 +2983,14 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -2885,6 +3112,18 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" @@ -2920,6 +3159,11 @@ async@^2.4.1, async@^2.6.4: dependencies: lodash "^4.17.14" +async@^3.2.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2935,6 +3179,18 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +autoprefixer@^10.4.8: + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + autoprefixer@^9.6.1: version "9.8.8" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" @@ -2958,15 +3214,30 @@ await-lock@^2.1.0: resolved "https://registry.yarnpkg.com/await-lock/-/await-lock-2.2.2.tgz#a95a9b269bfd2f69d22b17a321686f551152bcef" integrity sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw== -babel-jest@^29.0.0, babel-jest@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.4.3.tgz#478b84d430972b277ad67dd631be94abea676792" - integrity sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw== +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + +axe-core@^4.4.3: + version "4.6.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" + integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== + +babel-jest@^29.0.0, babel-jest@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5" + integrity sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q== dependencies: - "@jest/transform" "^29.4.3" + "@jest/transform" "^29.5.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.4.3" + babel-preset-jest "^29.5.0" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -2992,10 +3263,10 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz#ad1dfb5d31940957e00410ef7d9b2aa94b216101" - integrity sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q== +babel-plugin-jest-hoist@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a" + integrity sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -3044,12 +3315,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz#bb926b66ae253b69c6e3ef87511b8bb5c53c5b52" - integrity sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw== +babel-preset-jest@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2" + integrity sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg== dependencies: - babel-plugin-jest-hoist "^29.4.3" + babel-plugin-jest-hoist "^29.5.0" babel-preset-current-node-syntax "^1.0.0" babel-runtime@^6.9.2: @@ -3080,7 +3351,7 @@ base64-arraybuffer-es6@^0.7.0: resolved "https://registry.yarnpkg.com/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.7.0.tgz#dbe1e6c87b1bf1ca2875904461a7de40f21abc86" integrity sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw== -base64-js@^1.0.2: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3103,6 +3374,13 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + before-after-hook@^2.2.0: version "2.2.3" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" @@ -3130,7 +3408,12 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bluebird@^3.5.5: +blob-util@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + +bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -3315,6 +3598,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -3339,6 +3627,14 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" @@ -3419,6 +3715,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cachedir@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -3498,10 +3799,15 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001449: - version "1.0.30001458" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001458.tgz#871e35866b4654a7d25eccca86864f411825540c" - integrity sha512-lQ1VlUUq5q9ro9X+5gOEyH7i3vm+AYVT1WDCVB69XOZ17KZRhnZ9J0Sqz7wTHQaLBJccNCHq8/Ww5LlOIZbB0w== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: + version "1.0.30001469" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz#3dd505430c8522fdc9f94b4a19518e330f5c945a" + integrity sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" @@ -3525,6 +3831,11 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +check-more-types@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== + cheerio-select@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" @@ -3683,6 +3994,30 @@ cli-color@^2.0.0: memoizee "^0.4.15" timers-ext "^0.1.7" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-table3@~0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -3780,7 +4115,12 @@ colord@^2.9.1, colord@^2.9.3: resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== -combined-stream@^1.0.8: +colorette@^2.0.16: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -3797,6 +4137,11 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" @@ -3812,6 +4157,11 @@ commander@^8.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -3897,7 +4247,7 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== -content-disposition@0.5.4: +content-disposition@0.5.4, content-disposition@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== @@ -3947,9 +4297,9 @@ copy-descriptor@^0.1.0: integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== core-js-compat@^3.25.1: - version "3.29.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.29.0.tgz#1b8d9eb4191ab112022e7f6364b99b65ea52f528" - integrity sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ== + version "3.29.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.29.1.tgz#15c0fb812ea27c973c18d425099afa50b934b41b" + integrity sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA== dependencies: browserslist "^4.21.5" @@ -3959,9 +4309,14 @@ core-js@^2.4.0: integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.0.0: - version "3.29.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.29.0.tgz#0273e142b67761058bcde5615c503c7406b572d6" - integrity sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg== + version "3.29.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.29.1.tgz#40ff3b41588b091aaed19ca1aa5cb111803fa9a6" + integrity sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== core-util-is@~1.0.0: version "1.0.3" @@ -3989,10 +4344,10 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.0.tgz#947e174c796483ccf0a48476c24e4fefb7e1aea8" - integrity sha512-0tLZ9URlPGU7JsKq0DQOQ3FoRsYX8xDZ7xMiATQfaiGMz7EHowNkbU9u1coAOmnh9p/1ySpm0RB3JNWRXM5GCg== +cosmiconfig@^8.1.0: + version "8.1.3" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" + integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== dependencies: import-fresh "^3.2.1" js-yaml "^4.1.0" @@ -4081,7 +4436,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4343,6 +4698,64 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A== +cypress-axe@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cypress-axe/-/cypress-axe-1.4.0.tgz#e67482bfe9e740796bf77c7823f19781a8a2faff" + integrity sha512-Ut7NKfzjyKm0BEbt2WxuKtLkIXmx6FD2j0RwdvO/Ykl7GmB/qRQkwbKLk3VP35+83hiIr8GKD04PDdrTK5BnyA== + +cypress-real-events@^1.7.1: + version "1.7.6" + resolved "https://registry.yarnpkg.com/cypress-real-events/-/cypress-real-events-1.7.6.tgz#6f17e0b2ceea1d6dc60f6737d8f84cc517bbbb4c" + integrity sha512-yP6GnRrbm6HK5q4DH6Nnupz37nOfZu/xn1xFYqsE2o4G73giPWQOdu6375QYpwfU1cvHNCgyD2bQ2hPH9D7NMw== + +cypress@^10.3.0: + version "10.11.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.11.0.tgz#e9fbdd7638bae3d8fb7619fd75a6330d11ebb4e8" + integrity sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA== + dependencies: + "@cypress/request" "^2.88.10" + "@cypress/xvfb" "^1.2.4" + "@types/node" "^14.14.31" + "@types/sinonjs__fake-timers" "8.1.1" + "@types/sizzle" "^2.3.2" + arch "^2.2.0" + blob-util "^2.0.2" + bluebird "^3.7.2" + buffer "^5.6.0" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + cli-cursor "^3.1.0" + cli-table3 "~0.6.1" + commander "^5.1.0" + common-tags "^1.8.0" + dayjs "^1.10.4" + debug "^4.3.2" + enquirer "^2.3.6" + eventemitter2 "6.4.7" + execa "4.1.0" + executable "^4.1.1" + extract-zip "2.0.1" + figures "^3.2.0" + fs-extra "^9.1.0" + getos "^3.2.1" + is-ci "^3.0.0" + is-installed-globally "~0.4.0" + lazy-ass "^1.6.0" + listr2 "^3.8.3" + lodash "^4.17.21" + log-symbols "^4.0.0" + minimist "^1.2.6" + ospath "^1.2.2" + pretty-bytes "^5.6.0" + proxy-from-env "1.0.0" + request-progress "^3.0.0" + semver "^7.3.2" + supports-color "^8.1.1" + tmp "~0.2.1" + untildify "^4.0.0" + yauzl "^2.10.0" + d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -4351,6 +4764,13 @@ d@1, d@^1.0.1: es5-ext "^0.10.50" type "^1.0.1" +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" @@ -4370,6 +4790,11 @@ date-names@^0.1.11: resolved "https://registry.yarnpkg.com/date-names/-/date-names-0.1.13.tgz#c4358f6f77c8056e2f5ea68fdbb05f0bf1e53bd0" integrity sha512-IxxoeD9tdx8pXVcmqaRlPvrXIsSrSrIZzfzlOkm9u+hyzKp5Wk/odt9O/gd7Ockzy8n/WHeEpTVJ2bF3mMV4LA== +dayjs@^1.10.4: + version "1.11.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" + integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -4384,7 +4809,7 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: dependencies: ms "2.1.2" -debug@^3.2.7: +debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -4460,9 +4885,9 @@ deep-is@^0.1.3, deep-is@~0.1.3: integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.3.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" - integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-gateway@^4.2.0: version "4.2.0" @@ -4804,15 +5229,23 @@ earcut@^2.2.4: resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.284: - version "1.4.313" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.313.tgz#ff95f01926ab748c65beb23fc55f2f178e7a24a9" - integrity sha512-QckB9OVqr2oybjIrbMI99uF+b9+iTja5weFe0ePbqLb5BHqXOJUO1SG6kDj/1WtWPRIBr51N153AEq8m7HuIaA== + version "1.4.337" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.337.tgz#710168240b2dc5fe5eb5f8e4ef9c16d70aedc0ba" + integrity sha512-W8gdzXG86mVPoc56eM8YA+QiLxaAxJ8cmDjxZgfhLLWVvZQxyA918w5tX2JEWApZta45T1/sYcmFHTsTOUE3nw== elliptic@^6.5.3: version "6.5.4" @@ -4888,12 +5321,19 @@ enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: memory-fs "^0.5.0" tapable "^1.0.0" +enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + entities@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: +entities@^4.2.0, entities@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== @@ -4968,17 +5408,17 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" - integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== dependencies: + array-buffer-byte-length "^1.0.0" available-typed-arrays "^1.0.5" call-bind "^1.0.2" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.0" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" @@ -4986,8 +5426,8 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.4" - is-array-buffer "^3.0.1" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" @@ -4995,11 +5435,12 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: is-string "^1.0.7" is-typed-array "^1.1.10" is-weakref "^1.0.2" - object-inspect "^1.12.2" + object-inspect "^1.12.3" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" string.prototype.trimend "^1.0.6" string.prototype.trimstart "^1.0.6" typed-array-length "^1.0.4" @@ -5130,9 +5571,9 @@ eslint-config-google@^0.14.0: integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== eslint-config-prettier@^8.5.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz#dec1d29ab728f4fa63061774e1672ac4e363d207" - integrity sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA== + version "8.8.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" + integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== eslint-import-resolver-node@^0.3.7: version "0.3.7" @@ -5321,10 +5762,10 @@ eslint@8.35.0: strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== +espree@^9.4.0, espree@^9.5.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.0.tgz#3646d4e3f58907464edba852fa047e6a27bdf113" + integrity sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" @@ -5335,14 +5776,7 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.2.tgz#c6d3fee05dd665808e2ad870631f221f5617b1d1" - integrity sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng== - dependencies: - estraverse "^5.1.0" - -esquery@^1.4.2: +esquery@^1.4.0, esquery@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -5384,6 +5818,11 @@ event-emitter@^0.3.5: d "1" es5-ext "~0.10.14" +eventemitter2@6.4.7: + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" @@ -5414,6 +5853,21 @@ except@^0.1.3: dependencies: indexof "0.0.1" +execa@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -5442,6 +5896,13 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +executable@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -5492,16 +5953,16 @@ expect@^28.1.0: jest-message-util "^28.1.3" jest-util "^28.1.3" -expect@^29.0.0, expect@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.4.3.tgz#5e47757316df744fe3b8926c3ae8a3ebdafff7fe" - integrity sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg== +expect@^29.0.0, expect@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" + integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== dependencies: - "@jest/expect-utils" "^29.4.3" + "@jest/expect-utils" "^29.5.0" jest-get-type "^29.4.3" - jest-matcher-utils "^29.4.3" - jest-message-util "^29.4.3" - jest-util "^29.4.3" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" express@^4.17.1: version "4.18.2" @@ -5562,7 +6023,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0: +extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -5598,6 +6059,27 @@ extract-text-webpack-plugin@^4.0.0-beta.0: schema-utils "^0.4.5" webpack-sources "^1.1.0" +extract-zip@2.0.1, extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + fake-indexeddb@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/fake-indexeddb/-/fake-indexeddb-4.0.1.tgz#09bb2468e21d0832b2177e894765fb109edac8fb" @@ -5622,7 +6104,7 @@ fast-glob@^2.0.2: merge2 "^1.2.3" micromatch "^3.1.10" -fast-glob@^3.2.12, fast-glob@^3.2.7, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.7, fast-glob@^3.2.9: version "3.2.12" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -5694,6 +6176,13 @@ fbjs@^3.0.0, fbjs@^3.0.1: setimmediate "^1.0.5" ua-parser-js "^0.7.30" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + fetch-mock-jest@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/fetch-mock-jest/-/fetch-mock-jest-1.5.1.tgz#0e13df990d286d9239e284f12b279ed509bf53cd" @@ -5727,6 +6216,13 @@ figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== +figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -5946,6 +6442,11 @@ foreachasync@^3.0.0: resolved "https://registry.yarnpkg.com/foreachasync/-/foreachasync-3.0.0.tgz#5502987dc8714be3392097f32e0071c9dee07cf6" integrity sha512-J+ler7Ta54FwwNcx6wQRDhTIbNeyDcARMkOcguEqnEdtm0jKvN3Li3PDAb2Du3ubJYEWfYL83XMROXdsXAXycw== +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -5955,11 +6456,25 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -5981,15 +6496,15 @@ from2@^2.1.0: readable-stream "^2.0.0" fs-extra@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" - integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== + version "11.1.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^9.0.0: +fs-extra@^9.0.0, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -6090,6 +6605,13 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -6108,6 +6630,20 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== + dependencies: + async "^3.2.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + gfm.css@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/gfm.css/-/gfm.css-1.1.2.tgz#94acfa600672663b9dd0fd4b6ee5d11c8dbc161e" @@ -6184,6 +6720,13 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== + dependencies: + ini "2.0.0" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -6288,9 +6831,9 @@ gopd@^1.0.1: get-intrinsic "^1.1.3" graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== grapheme-splitter@^1.0.4: version "1.0.4" @@ -6535,14 +7078,14 @@ htmlparser2@^6.1.0: entities "^2.0.0" htmlparser2@^8.0.0, htmlparser2@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" - integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== dependencies: domelementtype "^2.3.0" - domhandler "^5.0.2" + domhandler "^5.0.3" domutils "^3.0.1" - entities "^4.3.0" + entities "^4.4.0" http-deceiver@^1.2.7: version "1.2.7" @@ -6603,6 +7146,15 @@ http-proxy@^1.17.0: follow-redirects "^1.0.0" requires-port "^1.0.0" +http-signature@~1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" @@ -6616,6 +7168,11 @@ https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: agent-base "6" debug "4" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -6642,7 +7199,7 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: dependencies: postcss "^7.0.14" -ieee754@^1.1.12, ieee754@^1.1.4: +ieee754@^1.1.12, ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -6662,6 +7219,13 @@ ignore@^5.2.0, ignore@^5.2.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +image-size@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" + integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== + dependencies: + queue "6.0.2" + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -6766,6 +7330,11 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + ini@^1.3.4, ini@^1.3.5: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" @@ -6779,7 +7348,7 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -internal-slot@^1.0.3, internal-slot@^1.0.4: +internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== @@ -6845,13 +7414,13 @@ is-arguments@^1.0.4, is-arguments@^1.1.1: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" - integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.0" is-typed-array "^1.1.10" is-arrayish@^0.2.1: @@ -6912,6 +7481,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-ci@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== + dependencies: + ci-info "^3.2.0" + is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" @@ -7038,6 +7614,14 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-installed-globally@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + is-ip@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" @@ -7105,7 +7689,7 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-path-inside@^3.0.3: +is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -7207,6 +7791,16 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.0" +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-weakmap@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" @@ -7271,6 +7865,11 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" @@ -7321,82 +7920,83 @@ jest-canvas-mock@^2.3.0: cssfontparser "^1.2.1" moo-color "^1.0.2" -jest-changed-files@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.4.3.tgz#7961fe32536b9b6d5c28dfa0abcfab31abcf50a7" - integrity sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ== +jest-changed-files@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" + integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag== dependencies: execa "^5.0.0" p-limit "^3.1.0" -jest-circus@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.4.3.tgz#fff7be1cf5f06224dd36a857d52a9efeb005ba04" - integrity sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw== +jest-circus@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.5.0.tgz#b5926989449e75bff0d59944bae083c9d7fb7317" + integrity sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA== dependencies: - "@jest/environment" "^29.4.3" - "@jest/expect" "^29.4.3" - "@jest/test-result" "^29.4.3" - "@jest/types" "^29.4.3" + "@jest/environment" "^29.5.0" + "@jest/expect" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^29.4.3" - jest-matcher-utils "^29.4.3" - jest-message-util "^29.4.3" - jest-runtime "^29.4.3" - jest-snapshot "^29.4.3" - jest-util "^29.4.3" + jest-each "^29.5.0" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-runtime "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" p-limit "^3.1.0" - pretty-format "^29.4.3" + pretty-format "^29.5.0" + pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.4.3.tgz#fe31fdd0c90c765f392b8b7c97e4845071cd2163" - integrity sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg== +jest-cli@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.5.0.tgz#b34c20a6d35968f3ee47a7437ff8e53e086b4a67" + integrity sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw== dependencies: - "@jest/core" "^29.4.3" - "@jest/test-result" "^29.4.3" - "@jest/types" "^29.4.3" + "@jest/core" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.4.3" - jest-util "^29.4.3" - jest-validate "^29.4.3" + jest-config "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.4.3.tgz#fca9cdfe6298ae6d04beef1624064d455347c978" - integrity sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ== +jest-config@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.5.0.tgz#3cc972faec8c8aaea9ae158c694541b79f3748da" + integrity sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.4.3" - "@jest/types" "^29.4.3" - babel-jest "^29.4.3" + "@jest/test-sequencer" "^29.5.0" + "@jest/types" "^29.5.0" + babel-jest "^29.5.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.4.3" - jest-environment-node "^29.4.3" + jest-circus "^29.5.0" + jest-environment-node "^29.5.0" jest-get-type "^29.4.3" jest-regex-util "^29.4.3" - jest-resolve "^29.4.3" - jest-runner "^29.4.3" - jest-util "^29.4.3" - jest-validate "^29.4.3" + jest-resolve "^29.5.0" + jest-runner "^29.5.0" + jest-util "^29.5.0" + jest-validate "^29.5.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.4.3" + pretty-format "^29.5.0" slash "^3.0.0" strip-json-comments "^3.1.1" @@ -7410,15 +8010,15 @@ jest-diff@^28.1.3: jest-get-type "^28.0.2" pretty-format "^28.1.3" -jest-diff@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.4.3.tgz#42f4eb34d0bf8c0fb08b0501069b87e8e84df347" - integrity sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA== +jest-diff@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" + integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== dependencies: chalk "^4.0.0" diff-sequences "^29.4.3" jest-get-type "^29.4.3" - pretty-format "^29.4.3" + pretty-format "^29.5.0" jest-docblock@^29.4.3: version "29.4.3" @@ -7427,42 +8027,42 @@ jest-docblock@^29.4.3: dependencies: detect-newline "^3.0.0" -jest-each@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.4.3.tgz#a434c199a2f6151c5e3dc80b2d54586bdaa72819" - integrity sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q== +jest-each@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.5.0.tgz#fc6e7014f83eac68e22b7195598de8554c2e5c06" + integrity sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA== dependencies: - "@jest/types" "^29.4.3" + "@jest/types" "^29.5.0" chalk "^4.0.0" jest-get-type "^29.4.3" - jest-util "^29.4.3" - pretty-format "^29.4.3" + jest-util "^29.5.0" + pretty-format "^29.5.0" jest-environment-jsdom@^29.0.0: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.4.3.tgz#bd8ed3808e6d3f616403fbaf8354f77019613d90" - integrity sha512-rFjf8JXrw3OjUzzmSE5l0XjMj0/MSVEUMCSXBGPDkfwb1T03HZI7iJSL0cGctZApPSyJxbjyKDVxkZuyhHkuTw== + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz#cfe86ebaf1453f3297b5ff3470fbe94739c960cb" + integrity sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw== dependencies: - "@jest/environment" "^29.4.3" - "@jest/fake-timers" "^29.4.3" - "@jest/types" "^29.4.3" + "@jest/environment" "^29.5.0" + "@jest/fake-timers" "^29.5.0" + "@jest/types" "^29.5.0" "@types/jsdom" "^20.0.0" "@types/node" "*" - jest-mock "^29.4.3" - jest-util "^29.4.3" + jest-mock "^29.5.0" + jest-util "^29.5.0" jsdom "^20.0.0" -jest-environment-node@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.4.3.tgz#579c4132af478befc1889ddc43c2413a9cdbe014" - integrity sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg== +jest-environment-node@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.5.0.tgz#f17219d0f0cc0e68e0727c58b792c040e332c967" + integrity sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw== dependencies: - "@jest/environment" "^29.4.3" - "@jest/fake-timers" "^29.4.3" - "@jest/types" "^29.4.3" + "@jest/environment" "^29.5.0" + "@jest/fake-timers" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" - jest-mock "^29.4.3" - jest-util "^29.4.3" + jest-mock "^29.5.0" + jest-util "^29.5.0" jest-get-type@^28.0.2: version "28.0.2" @@ -7474,32 +8074,32 @@ jest-get-type@^29.4.3: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== -jest-haste-map@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.4.3.tgz#085a44283269e7ace0645c63a57af0d2af6942e2" - integrity sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ== +jest-haste-map@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.5.0.tgz#69bd67dc9012d6e2723f20a945099e972b2e94de" + integrity sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA== dependencies: - "@jest/types" "^29.4.3" + "@jest/types" "^29.5.0" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" jest-regex-util "^29.4.3" - jest-util "^29.4.3" - jest-worker "^29.4.3" + jest-util "^29.5.0" + jest-worker "^29.5.0" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz#2b35191d6b35aa0256e63a9b79b0f949249cf23a" - integrity sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA== +jest-leak-detector@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c" + integrity sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow== dependencies: jest-get-type "^29.4.3" - pretty-format "^29.4.3" + pretty-format "^29.5.0" jest-matcher-utils@^28.1.3: version "28.1.3" @@ -7511,15 +8111,15 @@ jest-matcher-utils@^28.1.3: jest-get-type "^28.0.2" pretty-format "^28.1.3" -jest-matcher-utils@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz#ea68ebc0568aebea4c4213b99f169ff786df96a0" - integrity sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg== +jest-matcher-utils@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" + integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== dependencies: chalk "^4.0.0" - jest-diff "^29.4.3" + jest-diff "^29.5.0" jest-get-type "^29.4.3" - pretty-format "^29.4.3" + pretty-format "^29.5.0" jest-message-util@^28.1.3: version "28.1.3" @@ -7536,29 +8136,29 @@ jest-message-util@^28.1.3: slash "^3.0.0" stack-utils "^2.0.3" -jest-message-util@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.4.3.tgz#65b5280c0fdc9419503b49d4f48d4999d481cb5b" - integrity sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw== +jest-message-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" + integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.4.3" + "@jest/types" "^29.5.0" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.4.3" + pretty-format "^29.5.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.0.0, jest-mock@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.4.3.tgz#23d84a20a74cdfff0510fdbeefb841ed57b0fe7e" - integrity sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg== +jest-mock@^29.0.0, jest-mock@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.5.0.tgz#26e2172bcc71d8b0195081ff1f146ac7e1518aed" + integrity sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw== dependencies: - "@jest/types" "^29.4.3" + "@jest/types" "^29.5.0" "@types/node" "*" - jest-util "^29.4.3" + jest-util "^29.5.0" jest-pnp-resolver@^1.2.2: version "1.2.3" @@ -7575,88 +8175,88 @@ jest-regex-util@^29.4.3: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== -jest-resolve-dependencies@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz#9ad7f23839a6d88cef91416bda9393a6e9fd1da5" - integrity sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw== +jest-resolve-dependencies@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4" + integrity sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg== dependencies: jest-regex-util "^29.4.3" - jest-snapshot "^29.4.3" + jest-snapshot "^29.5.0" -jest-resolve@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.4.3.tgz#3c5b5c984fa8a763edf9b3639700e1c7900538e2" - integrity sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw== +jest-resolve@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.5.0.tgz#b053cc95ad1d5f6327f0ac8aae9f98795475ecdc" + integrity sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.4.3" + jest-haste-map "^29.5.0" jest-pnp-resolver "^1.2.2" - jest-util "^29.4.3" - jest-validate "^29.4.3" + jest-util "^29.5.0" + jest-validate "^29.5.0" resolve "^1.20.0" resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.4.3.tgz#68dc82c68645eda12bea42b5beece6527d7c1e5e" - integrity sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA== - dependencies: - "@jest/console" "^29.4.3" - "@jest/environment" "^29.4.3" - "@jest/test-result" "^29.4.3" - "@jest/transform" "^29.4.3" - "@jest/types" "^29.4.3" +jest-runner@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.5.0.tgz#6a57c282eb0ef749778d444c1d758c6a7693b6f8" + integrity sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ== + dependencies: + "@jest/console" "^29.5.0" + "@jest/environment" "^29.5.0" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" chalk "^4.0.0" emittery "^0.13.1" graceful-fs "^4.2.9" jest-docblock "^29.4.3" - jest-environment-node "^29.4.3" - jest-haste-map "^29.4.3" - jest-leak-detector "^29.4.3" - jest-message-util "^29.4.3" - jest-resolve "^29.4.3" - jest-runtime "^29.4.3" - jest-util "^29.4.3" - jest-watcher "^29.4.3" - jest-worker "^29.4.3" + jest-environment-node "^29.5.0" + jest-haste-map "^29.5.0" + jest-leak-detector "^29.5.0" + jest-message-util "^29.5.0" + jest-resolve "^29.5.0" + jest-runtime "^29.5.0" + jest-util "^29.5.0" + jest-watcher "^29.5.0" + jest-worker "^29.5.0" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.4.3.tgz#f25db9874dcf35a3ab27fdaabca426666cc745bf" - integrity sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q== +jest-runtime@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.5.0.tgz#c83f943ee0c1da7eb91fa181b0811ebd59b03420" + integrity sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw== dependencies: - "@jest/environment" "^29.4.3" - "@jest/fake-timers" "^29.4.3" - "@jest/globals" "^29.4.3" + "@jest/environment" "^29.5.0" + "@jest/fake-timers" "^29.5.0" + "@jest/globals" "^29.5.0" "@jest/source-map" "^29.4.3" - "@jest/test-result" "^29.4.3" - "@jest/transform" "^29.4.3" - "@jest/types" "^29.4.3" + "@jest/test-result" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.4.3" - jest-message-util "^29.4.3" - jest-mock "^29.4.3" + jest-haste-map "^29.5.0" + jest-message-util "^29.5.0" + jest-mock "^29.5.0" jest-regex-util "^29.4.3" - jest-resolve "^29.4.3" - jest-snapshot "^29.4.3" - jest-util "^29.4.3" + jest-resolve "^29.5.0" + jest-snapshot "^29.5.0" + jest-util "^29.5.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.4.3.tgz#183d309371450d9c4a3de7567ed2151eb0e91145" - integrity sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw== +jest-snapshot@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.5.0.tgz#c9c1ce0331e5b63cd444e2f95a55a73b84b1e8ce" + integrity sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -7664,25 +8264,31 @@ jest-snapshot@^29.4.3: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.4.3" - "@jest/transform" "^29.4.3" - "@jest/types" "^29.4.3" + "@jest/expect-utils" "^29.5.0" + "@jest/transform" "^29.5.0" + "@jest/types" "^29.5.0" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.4.3" + expect "^29.5.0" graceful-fs "^4.2.9" - jest-diff "^29.4.3" + jest-diff "^29.5.0" jest-get-type "^29.4.3" - jest-haste-map "^29.4.3" - jest-matcher-utils "^29.4.3" - jest-message-util "^29.4.3" - jest-util "^29.4.3" + jest-matcher-utils "^29.5.0" + jest-message-util "^29.5.0" + jest-util "^29.5.0" natural-compare "^1.4.0" - pretty-format "^29.4.3" + pretty-format "^29.5.0" semver "^7.3.5" +jest-sonar-reporter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jest-sonar-reporter/-/jest-sonar-reporter-2.0.0.tgz#faa54a7d2af7198767ee246a82b78c576789cf08" + integrity sha512-ZervDCgEX5gdUbdtWsjdipLN3bKJwpxbvhkYNXTAYvAckCihobSLr9OT/IuyNIRT1EZMDDwR6DroWtrq+IL64w== + dependencies: + xml "^1.0.1" + jest-util@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" @@ -7695,42 +8301,42 @@ jest-util@^28.1.3: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-util@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.4.3.tgz#851a148e23fc2b633c55f6dad2e45d7f4579f496" - integrity sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q== +jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== dependencies: - "@jest/types" "^29.4.3" + "@jest/types" "^29.5.0" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.4.3.tgz#a13849dec4f9e95446a7080ad5758f58fa88642f" - integrity sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw== +jest-validate@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" + integrity sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ== dependencies: - "@jest/types" "^29.4.3" + "@jest/types" "^29.5.0" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^29.4.3" leven "^3.1.0" - pretty-format "^29.4.3" + pretty-format "^29.5.0" -jest-watcher@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.4.3.tgz#e503baa774f0c2f8f3c8db98a22ebf885f19c384" - integrity sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA== +jest-watcher@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.5.0.tgz#cf7f0f949828ba65ddbbb45c743a382a4d911363" + integrity sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA== dependencies: - "@jest/test-result" "^29.4.3" - "@jest/types" "^29.4.3" + "@jest/test-result" "^29.5.0" + "@jest/types" "^29.5.0" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.13.1" - jest-util "^29.4.3" + jest-util "^29.5.0" string-length "^4.0.1" jest-worker@^26.5.0: @@ -7742,30 +8348,30 @@ jest-worker@^26.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.4.3.tgz#9a4023e1ea1d306034237c7133d7da4240e8934e" - integrity sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA== +jest-worker@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" + integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== dependencies: "@types/node" "*" - jest-util "^29.4.3" + jest-util "^29.5.0" merge-stream "^2.0.0" supports-color "^8.0.0" jest@^29.0.0: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.4.3.tgz#1b8be541666c6feb99990fd98adac4737e6e6386" - integrity sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA== + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" + integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ== dependencies: - "@jest/core" "^29.4.3" - "@jest/types" "^29.4.3" + "@jest/core" "^29.5.0" + "@jest/types" "^29.5.0" import-local "^3.0.2" - jest-cli "^29.4.3" + jest-cli "^29.5.0" js-sdsl@^4.1.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" - integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" + integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -7787,6 +8393,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + jsdom@^20.0.0: version "20.0.3" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" @@ -7859,11 +8470,21 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + json5@^1.0.1, json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -7885,10 +8506,20 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + jsrsasign@^10.5.25: - version "10.6.1" - resolved "https://registry.yarnpkg.com/jsrsasign/-/jsrsasign-10.6.1.tgz#dcdfa890241f4cb72e717116f95b5ba9315bfda0" - integrity sha512-emiQ05haY9CRj1Ho/LiuCqr/+8RgJuWdiHYNglIg2Qjfz0n+pnUq9I2QHplXuOMO2EnAW1oCGC1++aU5VoWSlw== + version "10.7.0" + resolved "https://registry.yarnpkg.com/jsrsasign/-/jsrsasign-10.7.0.tgz#e8727f5cb4585d94d53cee662a1ec721eb013a4e" + integrity sha512-D5V2gGpYGtwbAtQHoglTVrpYf7QJuNoPEhaLOsTFONS2jXUl3qyR1hnYrNpASAybqQeiDYA3zGthR0ubgPRoQA== "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.3.3" @@ -7961,10 +8592,10 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -known-css-properties@^0.26.0: - version "0.26.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.26.0.tgz#008295115abddc045a9f4ed7e2a84dc8b3a77649" - integrity sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg== +known-css-properties@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.27.0.tgz#82a9358dda5fe7f7bd12b5e7142c0a205393c0c5" + integrity sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg== last-call-webpack-plugin@^3.0.0: version "3.0.0" @@ -7974,6 +8605,11 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" +lazy-ass@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -8003,9 +8639,9 @@ lie@~3.3.0: immediate "~3.0.5" lilconfig@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" - integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lines-and-columns@^1.1.6: version "1.2.4" @@ -8039,6 +8675,20 @@ linkifyjs@4.0.0-beta.4: resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.0.0-beta.4.tgz#8a03e7a999ed0b578a14d690585a32706525c45e" integrity sha512-j8IUYMqyTT0aDrrkA5kf4hn6QurSKjGiQbqjNr4qc8dwEXIniCGp0JrdXmsGcTOEyhKG03GyRnJjp3NDTBBPDQ== +listr2@^3.8.3: + version "3.14.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -8119,6 +8769,11 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -8139,6 +8794,24 @@ lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + loglevel@^1.6.8, loglevel@^1.7.1: version "1.8.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" @@ -8180,9 +8853,9 @@ lru-queue@^0.1.0: es5-ext "~0.10.2" lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" @@ -8392,9 +9065,9 @@ matrix-web-i18n@^1.3.0: walk "^2.3.15" matrix-widget-api@^1.0.0, matrix-widget-api@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.1.1.tgz#d3fec45033d0cbc14387a38ba92dac4dbb1be962" - integrity sha512-gNSgmgSwvOsOcWK9k2+tOhEMYBiIMwX95vMZu0JqY7apkM02xrOzUBuPRProzN8CnbIALH7e3GAhatF6QCNvtA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.3.1.tgz#e38f404c76bb15c113909505c1c1a5b4d781c2f5" + integrity sha512-+rN6vGvnXm+fn0uq9r2KWSL/aPtehD6ObC50jYmUcEfgo8CUpf9eUurmjbRlwZkWq3XHXFuKQBUCI9UzqWg37Q== dependencies: "@types/events" "^3.0.0" events "^3.2.0" @@ -8565,7 +9238,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.34, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -8661,9 +9334,9 @@ minipass@^3.0.0, minipass@^3.1.1: yallist "^4.0.0" minipass@^4.0.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.4.tgz#7d0d97434b6a19f59c5c3221698b48bbf3b2cd06" - integrity sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ== + version "4.2.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.5.tgz#9e0e5256f1e3513f8c34691dd68549e85b2c8ceb" + integrity sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q== minizlib@^2.1.1: version "2.1.2" @@ -8717,9 +9390,9 @@ mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@^0.5.6, mkdirp@~0.5.1: minimist "^1.2.6" mkdirp@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.3.tgz#b083ff37be046fd3d6552468c1f0ff44c1545d1f" - integrity sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw== + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== modernizr@^3.12.0: version "3.12.0" @@ -8973,7 +9646,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.1: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -9018,7 +9691,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.12.2, object-inspect@^1.7.0, object-inspect@^1.9.0: +object-inspect@^1.12.3, object-inspect@^1.7.0, object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== @@ -9137,7 +9810,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.2: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -9207,6 +9880,11 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== +ospath@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -9480,6 +10158,11 @@ path-to-regexp@^2.2.1: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.4.0.tgz#35ce7f333d5616f1c1e1bfe266c3aba2e5b2e704" integrity sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w== +path-to-regexp@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" + integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -9511,6 +10194,11 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -9531,7 +10219,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== @@ -10268,6 +10956,11 @@ posthog-js@1.50.3: fflate "^0.4.1" rrweb-snapshot "^1.1.14" +postinstall-postinstall@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + potpack@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.2.tgz#23b99e64eb74f5741ffe7656b5b5c4ddce8dfc14" @@ -10293,6 +10986,11 @@ prettier@2.8.4: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== +pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + pretty-error@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" @@ -10320,10 +11018,10 @@ pretty-format@^28.1.3: ansi-styles "^5.0.0" react-is "^18.0.0" -pretty-format@^29.0.0, pretty-format@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.3.tgz#25500ada21a53c9e8423205cf0337056b201244c" - integrity sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA== +pretty-format@^29.0.0, pretty-format@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" + integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== dependencies: "@jest/schemas" "^29.4.3" ansi-styles "^5.0.0" @@ -10386,6 +11084,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -10396,7 +11099,7 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== -psl@^1.1.33: +psl@^1.1.28, psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== @@ -10453,6 +11156,11 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pure-rand@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.1.tgz#31207dddd15d43f299fdcdb2f572df65030c19af" + integrity sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg== + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -10475,6 +11183,13 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" +qs@~6.10.3: + version "6.10.5" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4" + integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ== + dependencies: + side-channel "^1.0.4" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -10500,6 +11215,13 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +queue@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" @@ -10743,9 +11465,9 @@ read-pkg@^5.2.0: util-deprecate "~1.0.1" readable-stream@^3.0.6, readable-stream@^3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.1.tgz#f9f9b5f536920253b3d26e7660e7da4ccff9bb62" - integrity sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -10855,9 +11577,9 @@ regexpp@^3.2.0: integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== regexpu-core@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.1.tgz#66900860f88def39a5cb79ebd9490e84f17bcdfb" - integrity sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" @@ -10904,6 +11626,13 @@ repeat-string@^1.5.2, repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== +request-progress@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== + dependencies: + throttleit "^1.0.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -10979,9 +11708,9 @@ resolve-url@^0.2.1: integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve.exports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.0.tgz#c1a0028c2d166ec2fbf7d0644584927e76e7400e" - integrity sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.1.tgz#cee884cd4e3f355660e501fa3276b27d7ffe5a20" + integrity sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw== resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1: version "1.22.1" @@ -11001,6 +11730,14 @@ resolve@^2.0.0-next.4: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -11026,6 +11763,11 @@ rfc4648@^1.4.0: resolved "https://registry.yarnpkg.com/rfc4648/-/rfc4648-1.5.2.tgz#cf5dac417dd83e7f4debf52e3797a723c1373383" integrity sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -11033,7 +11775,7 @@ rimraf@^2.5.4, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -11075,7 +11817,7 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^7.0.0: +rxjs@^7.0.0, rxjs@^7.5.1: version "7.8.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== @@ -11115,7 +11857,7 @@ safe-regex@^2.1.1: dependencies: regexp-tree "~0.1.1" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -11353,6 +12095,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-escape@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/shell-escape/-/shell-escape-0.2.0.tgz#68fd025eb0490b4f567a027f0bf22480b5f84133" + integrity sha512-uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw== + shell-quote@^1.6.1, shell-quote@^1.7.3: version "1.8.0" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" @@ -11367,7 +12114,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -11399,6 +12146,15 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -11534,9 +12290,9 @@ spawn-command@^0.0.2-1: integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -11555,9 +12311,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + version "3.0.13" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== spdy-transport@^3.0.0: version "3.0.0" @@ -11599,6 +12355,21 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +sshpk@^1.14.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + ssri@^6.0.1: version "6.0.2" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" @@ -11735,7 +12506,7 @@ string.prototype.repeat@^0.2.0: resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" integrity sha512-1BH+X+1hSthZFW+X+JaUkjkkUPwIlLEMJBLANN3hOob3RhEk5snLWNECDnYbgn/m5c5JV7Ersu1Yubaf+05cIA== -string.prototype.trim@^1.2.1: +string.prototype.trim@^1.2.1, string.prototype.trim@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== @@ -11868,9 +12639,9 @@ stylelint-config-standard@^30.0.0: stylelint-config-recommended "^10.0.1" stylelint-scss@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-4.4.0.tgz#87ce9d049eff1ce67cce788780fbfda63099017e" - integrity sha512-Qy66a+/30aylFhPmUArHhVsHOun1qrO93LGT15uzLuLjWS7hKDfpFm34mYo1ndR4MCo8W4bEZM1+AlJRJORaaw== + version "4.5.0" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-4.5.0.tgz#c270fff4f0dad65a7a39178be883062c6552482a" + integrity sha512-/+rQ8FePOiwT5xblOHkujYzRYfSjmE6HYhLpqJShL+9wH6/HaAVj4mWpXlpEsM3ZgIpOblG9Y+/BycSJzWgjNw== dependencies: lodash "^4.17.21" postcss-media-query-parser "^0.2.3" @@ -11879,17 +12650,17 @@ stylelint-scss@^4.2.0: postcss-value-parser "^4.1.0" stylelint@^15.0.0: - version "15.2.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.2.0.tgz#e906eb59df83bde075d148623216f298f9ceb03a" - integrity sha512-wjg5OLn8zQwjlj5cYUgyQpMWKzct42AG5dYlqkHRJQJqsystFFn3onqEc263KH4xfEI0W3lZCnlIhFfS64uwSA== + version "15.3.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.3.0.tgz#5f0f3264abeb29c54f571ea3f3934eba2c2be96d" + integrity sha512-9UYBYk7K9rtlKcTUDZrtntE840sZM00qyYBQHHe7tjwMNUsPsGvR6Fd43IxHEAhRrDLzpy3TVaHb6CReBB3eFg== dependencies: "@csstools/css-parser-algorithms" "^2.0.1" - "@csstools/css-tokenizer" "^2.0.1" + "@csstools/css-tokenizer" "^2.1.0" "@csstools/media-query-list-parser" "^2.0.1" "@csstools/selector-specificity" "^2.1.1" balanced-match "^2.0.0" colord "^2.9.3" - cosmiconfig "^8.0.0" + cosmiconfig "^8.1.0" css-functions-list "^3.1.0" css-tree "^2.3.1" debug "^4.3.4" @@ -11904,7 +12675,7 @@ stylelint@^15.0.0: import-lazy "^4.0.0" imurmurhash "^0.1.4" is-plain-object "^5.0.0" - known-css-properties "^0.26.0" + known-css-properties "^0.27.0" mathml-tag-names "^2.1.3" meow "^9.0.0" micromatch "^4.0.5" @@ -11920,7 +12691,7 @@ stylelint@^15.0.0: string-width "^4.2.3" strip-ansi "^6.0.1" style-search "^0.1.0" - supports-hyperlinks "^2.3.0" + supports-hyperlinks "^3.0.0" svg-tags "^1.0.0" table "^6.8.1" v8-compile-cache "^2.3.0" @@ -11968,17 +12739,17 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0, supports-color@^8.1.0: +supports-color@^8.0.0, supports-color@^8.1.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== +supports-hyperlinks@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz#c711352a5c89070779b4dad54c05a2f14b15c94b" + integrity sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -12108,9 +12879,9 @@ terser@^4.1.2, terser@^4.6.3: source-map-support "~0.5.12" terser@^5.3.4: - version "5.16.5" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.5.tgz#1c285ca0655f467f92af1bbab46ab72d1cb08e5a" - integrity sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg== + version "5.16.6" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.6.tgz#f6c7a14a378ee0630fbe3ac8d1f41b4681109533" + integrity sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -12131,6 +12902,11 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +throttleit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" + integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== + through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -12139,6 +12915,11 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -12176,6 +12957,13 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -12238,6 +13026,14 @@ tough-cookie@^4.1.2: universalify "^0.2.0" url-parse "^1.5.3" +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -12338,11 +13134,23 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + tunnel@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -12439,14 +13247,14 @@ typeson@^6.0.0, typeson@^6.1.0: integrity sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA== ua-parser-js@^0.7.30: - version "0.7.33" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" - integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw== + version "0.7.34" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.34.tgz#afb439e2e3e394bdc90080acb661a39c685b67d7" + integrity sha512-cJMeh/eOILyGu0ejgTKB95yKT3zOenSe9UGE3vj6WfiOwgGYnmATUsnDixMFvdU+rNMvWih83hrUP8VwhF9yXQ== ua-parser-js@^1.0.0, ua-parser-js@^1.0.2: - version "1.0.33" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.33.tgz#f21f01233e90e7ed0f059ceab46eb190ff17f8f4" - integrity sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ== + version "1.0.34" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.34.tgz#b33f41c415325839f354005d25a2f588be296976" + integrity sha512-K9mwJm/DaB6mRLZfw6q8IMXipcrmuT6yfhYmwhAkuh+81sChuYstYA+znlgaflUPaYUa3odxKPKGw6Vw/lANew== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" @@ -12553,6 +13361,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" @@ -12713,6 +13526,15 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -13111,17 +13933,17 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" -ws@^8.11.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.1.tgz#c51e583d79140b5e42e39be48c934131942d4a8f" - integrity sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew== +ws@^8.0.0, ws@^8.11.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== -xml@1.0.1: +xml@1.0.1, xml@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== @@ -13161,7 +13983,7 @@ yaml@^1.10.0, yaml@^1.10.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.0.1: +yaml@^2.0.0, yaml@^2.0.1: version "2.2.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4" integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== @@ -13238,6 +14060,14 @@ yargs@^17.0.1, yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.1.1" +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"