diff --git a/.eslintrc.js b/.eslintrc.js index e15d9d55dc..a65da7250d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,8 +1,6 @@ module.exports = { plugins: ["matrix-org"], - extends: [ - "plugin:matrix-org/javascript", - ], + extends: ["plugin:matrix-org/javascript"], parserOptions: { ecmaVersion: 2021, }, @@ -20,19 +18,19 @@ module.exports = { "prefer-promise-reject-errors": "off", "no-async-promise-executor": "off", }, - overrides: [{ - files: ["{src,scripts,hak}/**/*.{ts,tsx}"], - extends: [ - "plugin:matrix-org/typescript", - ], - rules: { - // Things we do that break the ideal style - "prefer-promise-reject-errors": "off", - "quotes": "off", + overrides: [ + { + files: ["{src,scripts,hak}/**/*.{ts,tsx}"], + extends: ["plugin:matrix-org/typescript"], + rules: { + // Things we do that break the ideal style + "prefer-promise-reject-errors": "off", + "quotes": "off", - "@typescript-eslint/no-explicit-any": "off", - // We're okay with assertion errors when we ask for them - "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-explicit-any": "off", + // We're okay with assertion errors when we ask for them + "@typescript-eslint/no-non-null-assertion": "off", + }, }, - }], + ], }; diff --git a/.github/renovate.json b/.github/renovate.json index 91ed479976..76320426d9 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -1,6 +1,4 @@ { - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "github>matrix-org/renovate-config-element-web" - ] + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["github>matrix-org/renovate-config-element-web"] } diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index 10bda8e205..32deb2f2b5 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -1,30 +1,30 @@ name: Backport on: - pull_request_target: - types: - - closed - - labeled - branches: - - develop + pull_request_target: + types: + - closed + - labeled + branches: + - develop jobs: - backport: - name: Backport - runs-on: ubuntu-latest - # Only react to merged PRs for security reasons. - # See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target. - if: > - github.event.pull_request.merged - && ( - github.event.action == 'closed' - || ( - github.event.action == 'labeled' - && contains(github.event.label.name, 'backport') - ) - ) - steps: - - uses: tibdex/backport@v2 - with: - labels_template: "<%= JSON.stringify([...labels, 'X-Release-Blocker']) %>" - # We can't use GITHUB_TOKEN here or CI won't run on the new PR - github_token: ${{ secrets.ELEMENT_BOT_TOKEN }} + backport: + name: Backport + runs-on: ubuntu-latest + # Only react to merged PRs for security reasons. + # See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target. + if: > + github.event.pull_request.merged + && ( + github.event.action == 'closed' + || ( + github.event.action == 'labeled' + && contains(github.event.label.name, 'backport') + ) + ) + steps: + - uses: tibdex/backport@v2 + with: + labels_template: "<%= JSON.stringify([...labels, 'X-Release-Blocker']) %>" + # We can't use GITHUB_TOKEN here or CI won't run on the new PR + github_token: ${{ secrets.ELEMENT_BOT_TOKEN }} diff --git a/.github/workflows/build_linux.yaml b/.github/workflows/build_linux.yaml index 6e318b7a6f..199f71b16d 100644 --- a/.github/workflows/build_linux.yaml +++ b/.github/workflows/build_linux.yaml @@ -2,63 +2,63 @@ # Due to this extra care must be taken to only ever run all build_* scripts against the same branch to ensure # the correct cache scoping, and additional care must be taken to not run untrusted actions on the develop branch. on: - workflow_call: - inputs: - sqlcipher: - type: string - required: true - description: "How to link sqlcipher, one of 'system' | 'static'" + workflow_call: + inputs: + sqlcipher: + type: string + required: true + description: "How to link sqlcipher, one of 'system' | 'static'" jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 - - uses: actions/download-artifact@v3 - with: - name: webapp + - uses: actions/download-artifact@v3 + with: + name: webapp - - name: Cache .hak - id: cache - uses: actions/cache@v3 - with: - key: ${{ runner.os }}-${{ hashFiles('hakDependencies.json', 'electronVersion') }} - path: | - ./.hak + - name: Cache .hak + id: cache + uses: actions/cache@v3 + with: + key: ${{ runner.os }}-${{ hashFiles('hakDependencies.json', 'electronVersion') }} + path: | + ./.hak - - name: Install Rust - if: steps.cache.outputs.cache-hit != 'true' - uses: actions-rs/toolchain@v1 - with: - toolchain: stable + - name: Install Rust + if: steps.cache.outputs.cache-hit != 'true' + uses: actions-rs/toolchain@v1 + with: + toolchain: stable - - name: Install libsqlcipher-dev - if: steps.cache.outputs.cache-hit != 'true' && inputs.sqlcipher == 'system' - run: sudo apt-get install -y libsqlcipher-dev + - name: Install libsqlcipher-dev + if: steps.cache.outputs.cache-hit != 'true' && inputs.sqlcipher == 'system' + run: sudo apt-get install -y libsqlcipher-dev - - uses: actions/setup-node@v3 - with: - cache: "yarn" + - uses: actions/setup-node@v3 + with: + cache: "yarn" - # 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: Build Natives - if: steps.cache.outputs.cache-hit != 'true' - run: "yarn build:native" - env: - SQLCIPHER_STATIC: ${{ inputs.sqlcipher == 'static' && '1' || '' }} + - name: Build Natives + if: steps.cache.outputs.cache-hit != 'true' + run: "yarn build:native" + env: + SQLCIPHER_STATIC: ${{ inputs.sqlcipher == 'static' && '1' || '' }} - - name: Build App - run: "yarn build --publish never -l" + - name: Build App + run: "yarn build --publish never -l" - - name: Install .deb - run: "sudo apt install ./dist/*.deb" + - name: Install .deb + run: "sudo apt install ./dist/*.deb" - - name: Upload Artifacts - uses: actions/upload-artifact@v3 - with: - name: linux-sqlcipher-${{ inputs.sqlcipher }} - path: dist - retention-days: 1 + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: linux-sqlcipher-${{ inputs.sqlcipher }} + path: dist + retention-days: 1 diff --git a/.github/workflows/build_macos.yaml b/.github/workflows/build_macos.yaml index 1a609075fb..1a82a0777a 100644 --- a/.github/workflows/build_macos.yaml +++ b/.github/workflows/build_macos.yaml @@ -2,50 +2,50 @@ # Due to this extra care must be taken to only ever run all build_* scripts against the same branch to ensure # the correct cache scoping, and additional care must be taken to not run untrusted actions on the develop branch. on: - workflow_call: + workflow_call: jobs: - build: - runs-on: macos-latest - steps: - - uses: actions/checkout@v3 - - - uses: actions/download-artifact@v3 - with: - name: webapp - - - name: Cache .hak - id: cache - uses: actions/cache@v3 - with: - key: ${{ runner.os }}-${{ hashFiles('hakDependencies.json', 'electronVersion') }} - path: | - ./.hak - - - name: Install Rust - if: steps.cache.outputs.cache-hit != 'true' - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - target: aarch64-apple-darwin - - - uses: actions/setup-node@v3 - with: - cache: "yarn" - - # Does not need branch matching as only analyses this layer - - name: Install Deps - run: "yarn install --pure-lockfile" - - - name: Build Natives - if: steps.cache.outputs.cache-hit != 'true' - run: "yarn build:native:universal" - - - name: Build App - run: "yarn build:universal --publish never" - - - name: Upload Artifacts - uses: actions/upload-artifact@v3 - with: - name: macos - path: dist - retention-days: 1 + build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v3 + + - uses: actions/download-artifact@v3 + with: + name: webapp + + - name: Cache .hak + id: cache + uses: actions/cache@v3 + with: + key: ${{ runner.os }}-${{ hashFiles('hakDependencies.json', 'electronVersion') }} + path: | + ./.hak + + - name: Install Rust + if: steps.cache.outputs.cache-hit != 'true' + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: aarch64-apple-darwin + + - uses: actions/setup-node@v3 + with: + cache: "yarn" + + # Does not need branch matching as only analyses this layer + - name: Install Deps + run: "yarn install --pure-lockfile" + + - name: Build Natives + if: steps.cache.outputs.cache-hit != 'true' + run: "yarn build:native:universal" + + - name: Build App + run: "yarn build:universal --publish never" + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: macos + path: dist + retention-days: 1 diff --git a/.github/workflows/build_prepare.yaml b/.github/workflows/build_prepare.yaml index 2d790e8a9a..c785a2a8fc 100644 --- a/.github/workflows/build_prepare.yaml +++ b/.github/workflows/build_prepare.yaml @@ -1,43 +1,43 @@ on: - workflow_call: - inputs: - config: - type: string - required: true - description: "The config directory to use" - version: - type: string - required: false - description: "The version tag to fetch, or 'develop', will pick automatically if not passed" + workflow_call: + inputs: + config: + type: string + required: true + description: "The config directory to use" + version: + type: string + required: false + description: "The version tag to fetch, or 'develop', will pick automatically if not passed" jobs: - prepare: - name: Prepare - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 + prepare: + name: Prepare + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - cache: "yarn" + - uses: actions/setup-node@v3 + with: + cache: "yarn" - - name: Install Deps - run: "yarn install --pure-lockfile" + - name: Install Deps + run: "yarn install --pure-lockfile" - - name: Fetch Element Web - run: yarn run fetch --noverify -d ${{ inputs.config }} ${{ inputs.version }} + - name: Fetch Element Web + run: yarn run fetch --noverify -d ${{ inputs.config }} ${{ inputs.version }} - # We split this out to save the build_* scripts having to do it to make use of `hashFiles` in the cache action - - name: Generate cache hash files - run: | - yarn run --silent electron --version > electronVersion - cat package.json | jq -c .hakDependencies > hakDependencies.json + # We split this out to save the build_* scripts having to do it to make use of `hashFiles` in the cache action + - name: Generate cache hash files + run: | + yarn run --silent electron --version > electronVersion + cat package.json | jq -c .hakDependencies > hakDependencies.json - - uses: actions/upload-artifact@v3 - with: - name: webapp - retention-days: 1 - path: | - webapp.asar - package.json - electronVersion - hakDependencies.json + - uses: actions/upload-artifact@v3 + with: + name: webapp + retention-days: 1 + path: | + webapp.asar + package.json + electronVersion + hakDependencies.json diff --git a/.github/workflows/build_windows.yaml b/.github/workflows/build_windows.yaml index ff742cf5ce..cdc8bea85c 100644 --- a/.github/workflows/build_windows.yaml +++ b/.github/workflows/build_windows.yaml @@ -2,92 +2,92 @@ # Due to this extra care must be taken to only ever run all build_* scripts against the same branch to ensure # the correct cache scoping, and additional care must be taken to not run untrusted actions on the develop branch. on: - workflow_call: - inputs: - arch: - type: string - required: true - description: "The architecture to build for, one of 'x64' | 'x86'" + workflow_call: + inputs: + arch: + type: string + required: true + description: "The architecture to build for, one of 'x64' | 'x86'" jobs: - build: - runs-on: windows-latest - steps: - - uses: kanga333/variable-mapper@master - id: config - with: - key: "${{ inputs.arch }}" - export_to: output - map: | - { - "x64": { - "target": "x86_64-pc-windows-msvc" - }, - "x86": { - "target": "i686-pc-windows-msvc", - "build-args": "--ia32" - } - } + build: + runs-on: windows-latest + steps: + - uses: kanga333/variable-mapper@master + id: config + with: + key: "${{ inputs.arch }}" + export_to: output + map: | + { + "x64": { + "target": "x86_64-pc-windows-msvc" + }, + "x86": { + "target": "i686-pc-windows-msvc", + "build-args": "--ia32" + } + } - - uses: actions/checkout@v3 + - uses: actions/checkout@v3 - - uses: actions/download-artifact@v3 - with: - name: webapp + - uses: actions/download-artifact@v3 + with: + name: webapp - - name: Cache .hak - id: cache - uses: actions/cache@v3 - with: - key: ${{ runner.os }}-${{ hashFiles('hakDependencies.json', 'electronVersion') }} - path: | - ./.hak + - name: Cache .hak + id: cache + uses: actions/cache@v3 + with: + key: ${{ runner.os }}-${{ hashFiles('hakDependencies.json', 'electronVersion') }} + path: | + ./.hak - - name: Set up build tools - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: ${{ inputs.arch }} + - name: Set up build tools + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ inputs.arch }} - # ActiveTCL package on choco is from 2015, - # this one is newer but includes more than we need - - name: Choco install tclsh - shell: pwsh - run: | - choco install -y magicsplat-tcl-tk --no-progress - echo "${HOME}/AppData/Local/Apps/Tcl86/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + # ActiveTCL package on choco is from 2015, + # this one is newer but includes more than we need + - name: Choco install tclsh + shell: pwsh + run: | + choco install -y magicsplat-tcl-tk --no-progress + echo "${HOME}/AppData/Local/Apps/Tcl86/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - - name: Choco install NetWide Assembler - shell: pwsh - run: | - choco install -y nasm --no-progress - echo "C:/Program Files/NASM" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + - name: Choco install NetWide Assembler + shell: pwsh + run: | + choco install -y nasm --no-progress + echo "C:/Program Files/NASM" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - - name: Install Rust - if: steps.cache.outputs.cache-hit != 'true' - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - target: ${{ steps.config.outputs.target }} + - name: Install Rust + if: steps.cache.outputs.cache-hit != 'true' + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: ${{ steps.config.outputs.target }} - - uses: actions/setup-node@v3 - with: - cache: "yarn" + - uses: actions/setup-node@v3 + with: + cache: "yarn" - # 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: Build Natives - if: steps.cache.outputs.cache-hit != 'true' - run: | - refreshenv - yarn build:native --target ${{ steps.config.outputs.target }} + - name: Build Natives + if: steps.cache.outputs.cache-hit != 'true' + run: | + refreshenv + yarn build:native --target ${{ steps.config.outputs.target }} - - name: Build App - run: "yarn build --publish never -w ${{ steps.config.outputs.build-args }}" + - name: Build App + run: "yarn build --publish never -w ${{ steps.config.outputs.build-args }}" - - name: Upload Artifacts - uses: actions/upload-artifact@v3 - with: - name: win-${{ inputs.arch }} - path: dist - retention-days: 1 + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: win-${{ inputs.arch }} + path: dist + retention-days: 1 diff --git a/.github/workflows/packages_index.yaml b/.github/workflows/packages_index.yaml index b9a563e865..4e82a8c678 100644 --- a/.github/workflows/packages_index.yaml +++ b/.github/workflows/packages_index.yaml @@ -1,43 +1,43 @@ name: Generate packages.element.io directory indexes on: - # Trigger a rebuild of all indexes if the template gets updated - push: - branches: [ develop ] - paths: - - 'packages.element.io/**' - # Trigger a daily rebuild for nightlies - schedule: - - cron: '0 11 * * *' - # Manual trigger for rebuilding for releases - workflow_dispatch: { } + # Trigger a rebuild of all indexes if the template gets updated + push: + branches: [develop] + paths: + - "packages.element.io/**" + # Trigger a daily rebuild for nightlies + schedule: + - cron: "0 11 * * *" + # Manual trigger for rebuilding for releases + workflow_dispatch: {} jobs: - deploy: - name: "Deploy" - runs-on: ubuntu-latest - environment: develop - env: - R2_BUCKET: 'packages-element-io' - R2_URL: ${{ secrets.CF_R2_S3_API }} - steps: - - uses: actions/checkout@v3 + deploy: + name: "Deploy" + runs-on: ubuntu-latest + environment: packages.element.io + env: + R2_BUCKET: "packages-element-io" + R2_URL: ${{ secrets.CF_R2_S3_API }} + steps: + - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - cache: "yarn" + - uses: actions/setup-node@v3 + with: + cache: "yarn" - - name: Install Deps - run: "yarn install --pure-lockfile" + - name: Install Deps + run: "yarn install --pure-lockfile" - - name: Copy static files - if: github.event_name == 'push' - run: aws s3 cp --recursive packages.element.io/ s3://$R2_BUCKET/ --endpoint-url $R2_URL --region auto - env: - AWS_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_TOKEN }} + - name: Copy static files + if: github.event_name == 'push' + run: aws s3 cp --recursive packages.element.io/ s3://$R2_BUCKET/ --endpoint-url $R2_URL --region auto + env: + AWS_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_TOKEN }} - - name: Generate directory indexes - run: scripts/generate-packages-index.ts - env: - CF_R2_S3_API: ${{ secrets.CF_R2_S3_API }} - CF_R2_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }} - CF_R2_TOKEN: ${{ secrets.CF_R2_TOKEN }} + - name: Generate directory indexes + run: scripts/generate-packages-index.ts + env: + CF_R2_S3_API: ${{ secrets.CF_R2_S3_API }} + CF_R2_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }} + CF_R2_TOKEN: ${{ secrets.CF_R2_TOKEN }} diff --git a/.github/workflows/static_analysis.yaml b/.github/workflows/static_analysis.yaml index 200704f86c..25ece50747 100644 --- a/.github/workflows/static_analysis.yaml +++ b/.github/workflows/static_analysis.yaml @@ -1,43 +1,43 @@ name: Static Analysis on: - pull_request: { } - push: - branches: [ develop, master ] + pull_request: {} + push: + branches: [develop, master] jobs: - ts_lint: - name: "Typescript Syntax Check" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - cache: 'yarn' - - # Does not need branch matching as only analyses this layer - - name: Install Deps - run: "yarn install --pure-lockfile" - - - name: Typecheck - run: "yarn run lint:types" - - 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@v3 - - - uses: actions/setup-node@v3 - with: - cache: 'yarn' - - # 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" + ts_lint: + name: "Typescript Syntax Check" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - uses: actions/setup-node@v3 + with: + cache: "yarn" + + # Does not need branch matching as only analyses this layer + - name: Install Deps + run: "yarn install --pure-lockfile" + + - name: Typecheck + run: "yarn run lint:types" + + 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@v3 + + - uses: actions/setup-node@v3 + with: + cache: "yarn" + + # 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" diff --git a/.gitignore b/.gitignore index 1d92346e5f..da0f0b53ea 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ node_modules/ /test_artifacts/ /coverage/ yarn-error.log +/hak/**/*.js +/scripts/hak/**/*.js diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..96ef280720 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,19 @@ +/build/ +/dockerbuild/ +/lib/ +/node_modules/ +/packages.elememt.io/ +/webapp +/src/i18n/strings +/CHANGELOG.md +/package-lock.json +/yarn.lock + +**/.idea +.vscode +.vscode/ +.tmp +.env +/coverage +/.npmrc +/*.log diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000000..6a17910f1a --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1 @@ +module.exports = require("eslint-plugin-matrix-org/.prettierrc.js"); diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a25cc1199..0d44499c3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,61 @@ +Changes in [1.11.18](https://github.com/vector-im/element-desktop/releases/tag/v1.11.18) (2023-01-18) +===================================================================================================== + +## ✨ Features + * Switch threads on for everyone ([\#9879](https://github.com/matrix-org/matrix-react-sdk/pull/9879)). + * Make threads use new Unable to Decrypt UI ([\#9876](https://github.com/matrix-org/matrix-react-sdk/pull/9876)). Fixes vector-im/element-web#24060. + * Add edit and remove actions to link in RTE ([\#9864](https://github.com/matrix-org/matrix-react-sdk/pull/9864)). + * Remove extensible events v1 experimental rendering ([\#9881](https://github.com/matrix-org/matrix-react-sdk/pull/9881)). + * Make create poll dialog scale better (PSG-929) ([\#9873](https://github.com/matrix-org/matrix-react-sdk/pull/9873)). Fixes vector-im/element-web#21855. + * Change RTE mode icons ([\#9861](https://github.com/matrix-org/matrix-react-sdk/pull/9861)). + * Device manager - prune client information events after remote sign out ([\#9874](https://github.com/matrix-org/matrix-react-sdk/pull/9874)). + * Check connection before starting broadcast ([\#9857](https://github.com/matrix-org/matrix-react-sdk/pull/9857)). + * Enable sent receipt for poll start events (PSG-962) ([\#9870](https://github.com/matrix-org/matrix-react-sdk/pull/9870)). + * Change clear notifications to have more readable copy ([\#9867](https://github.com/matrix-org/matrix-react-sdk/pull/9867)). + * Combine search results when the query is present in multiple successive messages ([\#9855](https://github.com/matrix-org/matrix-react-sdk/pull/9855)). Fixes vector-im/element-web#3977. Contributed by @grimhilt. + * Disable bubbles for broadcasts ([\#9860](https://github.com/matrix-org/matrix-react-sdk/pull/9860)). Fixes vector-im/element-web#24140. + * Enable reactions and replies for broadcasts ([\#9856](https://github.com/matrix-org/matrix-react-sdk/pull/9856)). Fixes vector-im/element-web#24042. + * Improve switching between rich and plain editing modes ([\#9776](https://github.com/matrix-org/matrix-react-sdk/pull/9776)). + * Redesign the picture-in-picture window ([\#9800](https://github.com/matrix-org/matrix-react-sdk/pull/9800)). Fixes vector-im/element-web#23980. + * User on-boarding tasks now appear in a static order. ([\#9799](https://github.com/matrix-org/matrix-react-sdk/pull/9799)). Contributed by @GoodGuyMarco. + * Device manager - contextual menus ([\#9832](https://github.com/matrix-org/matrix-react-sdk/pull/9832)). + * If listening a non-live broadcast and changing the room, the broadcast will be paused ([\#9825](https://github.com/matrix-org/matrix-react-sdk/pull/9825)). Fixes vector-im/element-web#24078. + * Consider own broadcasts from other device as a playback ([\#9821](https://github.com/matrix-org/matrix-react-sdk/pull/9821)). Fixes vector-im/element-web#24068. + * Add link creation to rich text editor ([\#9775](https://github.com/matrix-org/matrix-react-sdk/pull/9775)). + * Add mark as read option in room setting ([\#9798](https://github.com/matrix-org/matrix-react-sdk/pull/9798)). Fixes vector-im/element-web#24053. + * Device manager - current device design and copy tweaks ([\#9801](https://github.com/matrix-org/matrix-react-sdk/pull/9801)). + * Unify notifications panel event design ([\#9754](https://github.com/matrix-org/matrix-react-sdk/pull/9754)). + * Add actions for integration manager to send and read certain events ([\#9740](https://github.com/matrix-org/matrix-react-sdk/pull/9740)). + * Device manager - design tweaks ([\#9768](https://github.com/matrix-org/matrix-react-sdk/pull/9768)). + * Change room list sorting to activity and unread first by default ([\#9773](https://github.com/matrix-org/matrix-react-sdk/pull/9773)). Fixes vector-im/element-web#24014. + * Add a config flag to enable the rust crypto-sdk ([\#9759](https://github.com/matrix-org/matrix-react-sdk/pull/9759)). + * Improve decryption error UI by consolidating error messages and providing instructions when possible ([\#9544](https://github.com/matrix-org/matrix-react-sdk/pull/9544)). Contributed by @duxovni. + * Honor font settings in Element Call ([\#9751](https://github.com/matrix-org/matrix-react-sdk/pull/9751)). Fixes vector-im/element-web#23661. + * Device manager - use deleteAccountData to prune device manager client information events ([\#9734](https://github.com/matrix-org/matrix-react-sdk/pull/9734)). + +## 🐛 Bug Fixes + * Display rooms & threads as unread (bold) if threads have unread messages. ([\#9763](https://github.com/matrix-org/matrix-react-sdk/pull/9763)). Fixes vector-im/element-web#23907. + * Don't prefer STIXGeneral over the default font ([\#9711](https://github.com/matrix-org/matrix-react-sdk/pull/9711)). Fixes vector-im/element-web#23899. + * Use the same avatar colour when creating 1:1 DM rooms ([\#9850](https://github.com/matrix-org/matrix-react-sdk/pull/9850)). Fixes vector-im/element-web#23476. + * Fix space lock icon size ([\#9854](https://github.com/matrix-org/matrix-react-sdk/pull/9854)). Fixes vector-im/element-web#24128. + * Make calls automatically disconnect if the widget disappears ([\#9862](https://github.com/matrix-org/matrix-react-sdk/pull/9862)). Fixes vector-im/element-web#23664. + * Fix emoji in RTE editing ([\#9827](https://github.com/matrix-org/matrix-react-sdk/pull/9827)). + * Fix export with attachments on formats txt and json ([\#9851](https://github.com/matrix-org/matrix-react-sdk/pull/9851)). Fixes vector-im/element-web#24130. Contributed by @grimhilt. + * Fixed empty `Content-Type` for encrypted uploads ([\#9848](https://github.com/matrix-org/matrix-react-sdk/pull/9848)). Contributed by @K3das. + * Fix sign-in instead link on password reset page ([\#9820](https://github.com/matrix-org/matrix-react-sdk/pull/9820)). Fixes vector-im/element-web#24087. + * The seekbar now initially shows the current position ([\#9796](https://github.com/matrix-org/matrix-react-sdk/pull/9796)). Fixes vector-im/element-web#24051. + * Fix: Editing a poll will silently change it to a closed poll ([\#9809](https://github.com/matrix-org/matrix-react-sdk/pull/9809)). Fixes vector-im/element-web#23176. + * Make call tiles look less broken in the right panel ([\#9808](https://github.com/matrix-org/matrix-react-sdk/pull/9808)). Fixes vector-im/element-web#23716. + * Prevent unnecessary m.direct updates ([\#9805](https://github.com/matrix-org/matrix-react-sdk/pull/9805)). Fixes vector-im/element-web#24059. + * Fix checkForPreJoinUISI for thread roots ([\#9803](https://github.com/matrix-org/matrix-react-sdk/pull/9803)). Fixes vector-im/element-web#24054. + * Snap in PiP widget when content changed ([\#9797](https://github.com/matrix-org/matrix-react-sdk/pull/9797)). Fixes vector-im/element-web#24050. + * Load RTE components only when RTE labs is enabled ([\#9804](https://github.com/matrix-org/matrix-react-sdk/pull/9804)). + * Ensure that events are correctly updated when they are edited. ([\#9789](https://github.com/matrix-org/matrix-react-sdk/pull/9789)). + * When stopping a broadcast also stop the playback ([\#9795](https://github.com/matrix-org/matrix-react-sdk/pull/9795)). Fixes vector-im/element-web#24052. + * Prevent to start two broadcasts at the same time ([\#9744](https://github.com/matrix-org/matrix-react-sdk/pull/9744)). Fixes vector-im/element-web#23973. + * Correctly handle limited sync responses by resetting the thread timeline ([\#3056](https://github.com/matrix-org/matrix-js-sdk/pull/3056)). Fixes vector-im/element-web#23952. + * Fix failure to start in firefox private browser ([\#3058](https://github.com/matrix-org/matrix-js-sdk/pull/3058)). Fixes vector-im/element-web#24216. + Changes in [1.11.17](https://github.com/vector-im/element-desktop/releases/tag/v1.11.17) (2022-12-21) ===================================================================================================== diff --git a/README.md b/README.md index f1b13cfe08..495cebfb7b 100644 --- a/README.md +++ b/README.md @@ -7,21 +7,20 @@ `-- matrix-js-sdk (Matrix client js sdk) -Element Desktop -=============== +# Element Desktop Element Desktop is a Matrix client for desktop platforms with Element Web at its core. -First Steps -=========== +# First Steps + Before you do anything else, fetch the dependencies: ``` yarn install ``` -Fetching Element -================ +# Fetching Element + Since this package is just the Electron wrapper for Element Web, it doesn't contain any of the Element Web code, so the first step is to get a working copy of Element Web. There are a few ways of doing this: @@ -33,6 +32,7 @@ yarn run fetch --noverify --cfgdir "" ``` ...or if you'd like to use GPG to verify the downloaded package: + ``` # Fetch the Element public key from the element.io web server over a secure connection and import # it into your local GPG keychain (you'll need GPG installed). You only need to to do this @@ -43,6 +43,7 @@ yarn run fetch --cfgdir "" ``` ...or either of the above, but fetching a specific version of Element: + ``` # Fetch the prebuilt release Element package from the element-web GitHub releases page. The version # fetched will be the same as the local element-desktop package. @@ -51,6 +52,7 @@ yarn run fetch --noverify --cfgdir "" v1.5.6 If you only want to run the app locally and don't need to build packages, you can provide the `webapp` directory directly: + ``` # Assuming you've checked out and built a copy of element-web in ../element-web ln -s ../element-web/webapp ./ @@ -58,29 +60,32 @@ ln -s ../element-web/webapp ./ [TODO: add support for fetching develop builds, arbitrary URLs and arbitrary paths] -Building -======== +# Building ## Native Build TODO: List native pre-requisites -Optionally, [build the native modules](https://github.com/vector-im/element-desktop/blob/develop/docs/native-node-modules.md), -which include support for searching in encrypted rooms and secure storage. Skipping this step is fine, you just won't have those features. +Optionally, [build the native modules](https://github.com/vector-im/element-desktop/blob/develop/docs/native-node-modules.md), +which include support for searching in encrypted rooms and secure storage. Skipping this step is fine, you just won't have those features. Then, run + ``` yarn run build ``` + This will do a couple of things: - * Run the `setversion` script to set the local package version to match whatever - version of Element you installed above. - * Run electron-builder to build a package. The package built will match the operating system - you're running the build process on. + +- Run the `setversion` script to set the local package version to match whatever + version of Element you installed above. +- Run electron-builder to build a package. The package built will match the operating system + you're running the build process on. ## Docker Alternatively, you can also build using docker, which will always produce the linux package: + ``` # Run this once to make the docker image yarn run docker:setup @@ -93,9 +98,10 @@ yarn run docker:build After running, the packages should be in `dist/`. -Starting -======== +# Starting + If you'd just like to run the electron app locally for development: + ``` # Install electron - we don't normally need electron itself as it's provided # by electron-builder when building packages @@ -103,21 +109,22 @@ yarn add electron yarn start ``` -Config -====== +# Config + If you'd like the packaged Element to have a configuration file, you can create a config directory and place `config.json` in there, then specify this directory with the `--cfgdir` option to `yarn run fetch`, eg: + ``` mkdir myconfig cp /path/to/my/config.json myconfig/ yarn run fetch --cfgdir myconfig ``` + The config dir for the official Element app is in `element.io`. If you use this, your app will auto-update itself using builds from element.io. -Profiles -======== +# Profiles To run multiple instances of the desktop app for different accounts, you can launch the executable with the `--profile` argument followed by a unique @@ -127,27 +134,24 @@ not interfere with the default one. Alternatively, a custom location for the profile data can be specified using the `--profile-dir` flag followed by the desired path. -User-specified config.json -========================== +# User-specified config.json -+ `%APPDATA%\$NAME\config.json` on Windows -+ `$XDG_CONFIG_HOME/$NAME/config.json` or `~/.config/$NAME/config.json` on Linux -+ `~/Library/Application Support/$NAME/config.json` on macOS +- `%APPDATA%\$NAME\config.json` on Windows +- `$XDG_CONFIG_HOME/$NAME/config.json` or `~/.config/$NAME/config.json` on Linux +- `~/Library/Application Support/$NAME/config.json` on macOS In the paths above, `$NAME` is typically `Element`, unless you use `--profile $PROFILE` in which case it becomes `Element-$PROFILE`, or it is using one of the above created by a pre-1.7 install, in which case it will be `Riot` or `Riot-$PROFILE`. -Translations -========================== +# Translations To add a new translation, head to the [translating doc](https://github.com/SchildiChat/element-web/blob/develop/docs/translating.md). For a developer guide, see the [translating dev doc](https://github.com/SchildiChat/element-web/blob/develop/docs/translating-dev.md). -Report bugs & give feedback -========================== +# Report bugs & give feedback If you run into any bugs or have feedback you'd like to share, please let us know on GitHub. diff --git a/babel.config.js b/babel.config.js index faa86ebf8f..9545b5983d 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,6 +1,3 @@ module.exports = { - presets: [ - ['@babel/preset-env', { targets: { node: 'current' } }], - '@babel/preset-typescript', - ], + presets: [["@babel/preset-env", { targets: { node: "current" } }], "@babel/preset-typescript"], }; diff --git a/docs/native-node-modules.md b/docs/native-node-modules.md index 0da6f4a8a2..a5d7f19d54 100644 --- a/docs/native-node-modules.md +++ b/docs/native-node-modules.md @@ -17,13 +17,14 @@ when releasing. Install the pre-requisites for your system: -* [Windows pre-requisites](https://github.com/vector-im/element-desktop/blob/develop/docs/windows-requirements.md) -* Linux: TODO -* OS X: TODO +- [Windows pre-requisites](https://github.com/vector-im/element-desktop/blob/develop/docs/windows-requirements.md) +- Linux: TODO +- OS X: TODO Then optionally, [add seshat and dependencies to support search in E2E rooms](#adding-seshat-for-search-in-e2e-encrypted-rooms). Then, to build for an architecture selected automatically based on your system (recommended), run: + ``` yarn run build:native ``` @@ -70,7 +71,7 @@ as usual using: On Windows & macOS we always statically link libsqlcipher for it is not generally available. On Linux by default we will use a system package, on debian & ubuntu this is `libsqlcipher0`, -but this is problematic for some other packages. +but this is problematic for some other packages. By including `SQLCIPHER_STATIC=1` in the build environment, the build scripts will statically link sqlcipher, note that this will want a `libcrypto1.1` shared library available in the system. @@ -82,15 +83,19 @@ and https://github.com/vector-im/element-web/issues/20926. ### macOS On macOS, you can build universal native modules too: + ``` yarn run build:native:universal ``` ...or you can build for a specific architecture: + ``` yarn run build:native --target x86_64-apple-darwin ``` + or + ``` yarn run build:native --target aarch64-apple-darwin ``` @@ -105,10 +110,13 @@ yarn run build:universal ### Windows If you're on Windows, you can choose to build specifically for 32 or 64 bit: + ``` yarn run build:32 ``` + or + ``` yarn run build:64 ``` @@ -144,6 +152,6 @@ The current set of native modules are stored in `.hak/hakModules`, so you can use this to check what architecture is currently in place, eg: ``` -$ lipo -info .hak/hakModules/keytar/build/Release/keytar.node -Architectures in the fat file: .hak/hakModules/keytar/build/Release/keytar.node are: x86_64 arm64 +$ lipo -info .hak/hakModules/keytar/build/Release/keytar.node +Architectures in the fat file: .hak/hakModules/keytar/build/Release/keytar.node are: x86_64 arm64 ``` diff --git a/docs/updates.md b/docs/updates.md index 2d9674fe24..8c5a35f4e5 100644 --- a/docs/updates.md +++ b/docs/updates.md @@ -13,4 +13,3 @@ and can be served by any compatible Squirrel server, such as https://github.com/ On macOS the update mechanism used is [Squirrel.Mac](https://github.com/Squirrel/Squirrel.Mac) using the newer JSON format as documented [here](https://github.com/Squirrel/Squirrel.Mac#update-file-json-format). - diff --git a/docs/windows-requirements.md b/docs/windows-requirements.md index 17e0d16b77..35fc2ecb22 100644 --- a/docs/windows-requirements.md +++ b/docs/windows-requirements.md @@ -4,23 +4,24 @@ If you want to build native modules, make sure that the following tools are installed on your system. -- [Git for Windows](https://git-scm.com/download/win) -- [Node 14](https://nodejs.org) -- [Python 3](https://www.python.org/downloads/) (if you type 'python' into command prompt it will offer to install it from the windows store) -- [Strawberry Perl](https://strawberryperl.com/) -- [Rustup](https://rustup.rs/) -- [NASM](https://www.nasm.us/) -- [Build Tools for Visual Studio 2019](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019) with the following configuration: - - On the Workloads tab: - - Desktop & Mobile -> C++ build tools - - On the Individual components tab: - - MSVC VS 2019 C++ build tools - - Windows 10 SDK (latest version available) - - C++ CMake tools for Windows +- [Git for Windows](https://git-scm.com/download/win) +- [Node 14](https://nodejs.org) +- [Python 3](https://www.python.org/downloads/) (if you type 'python' into command prompt it will offer to install it from the windows store) +- [Strawberry Perl](https://strawberryperl.com/) +- [Rustup](https://rustup.rs/) +- [NASM](https://www.nasm.us/) +- [Build Tools for Visual Studio 2019](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019) with the following configuration: + - On the Workloads tab: + - Desktop & Mobile -> C++ build tools + - On the Individual components tab: + - MSVC VS 2019 C++ build tools + - Windows 10 SDK (latest version available) + - C++ CMake tools for Windows Once installed make sure all those utilities are accessible in your `PATH`. If you want to be able to build x86 targets from an x64 host install the right toolchain: + ```cmd rustup toolchain install stable-i686-pc-windows-msvc rustup target add i686-pc-windows-msvc diff --git a/element.io/nightly/config.json b/element.io/nightly/config.json index eb2473f8a6..b117f63448 100644 --- a/element.io/nightly/config.json +++ b/element.io/nightly/config.json @@ -16,11 +16,7 @@ "uisi_autorageshake_app": "element-auto-uisi", "showLabsSettings": true, "roomDirectory": { - "servers": [ - "matrix.org", - "gitter.im", - "libera.chat" - ] + "servers": ["matrix.org", "gitter.im", "libera.chat"] }, "enable_presence_by_hs_url": { "https://matrix.org": false, diff --git a/element.io/release/config.json b/element.io/release/config.json index f79a1e48b1..7d22cd58c8 100644 --- a/element.io/release/config.json +++ b/element.io/release/config.json @@ -15,11 +15,7 @@ "bug_report_endpoint_url": "https://element.io/bugreports/submit", "uisi_autorageshake_app": "element-auto-uisi", "roomDirectory": { - "servers": [ - "matrix.org", - "gitter.im", - "libera.chat" - ] + "servers": ["matrix.org", "gitter.im", "libera.chat"] }, "showLabsSettings": false, "enable_presence_by_hs_url": { diff --git a/hak/keytar/build.ts b/hak/keytar/build.ts index 4def7b2d6e..c0433c3483 100644 --- a/hak/keytar/build.ts +++ b/hak/keytar/build.ts @@ -14,11 +14,11 @@ See the License for the specific language governing permissions and limitations under the License. */ -import path from 'path'; -import childProcess from 'child_process'; +import path from "path"; +import childProcess from "child_process"; -import HakEnv from '../../scripts/hak/hakEnv'; -import { DependencyInfo } from '../../scripts/hak/dep'; +import HakEnv from "../../scripts/hak/hakEnv"; +import { DependencyInfo } from "../../scripts/hak/dep"; export default async function buildKeytar(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { const env = hakEnv.makeGypEnv(); @@ -26,15 +26,15 @@ export default async function buildKeytar(hakEnv: HakEnv, moduleInfo: Dependency console.log("Running yarn with env", env); await new Promise((resolve, reject) => { const proc = childProcess.spawn( - path.join(moduleInfo.nodeModuleBinDir, 'node-gyp' + (hakEnv.isWin() ? '.cmd' : '')), - ['rebuild'], + path.join(moduleInfo.nodeModuleBinDir, "node-gyp" + (hakEnv.isWin() ? ".cmd" : "")), + ["rebuild"], { cwd: moduleInfo.moduleBuildDir, env, - stdio: 'inherit', + stdio: "inherit", }, ); - proc.on('exit', (code) => { + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); diff --git a/hak/keytar/check.ts b/hak/keytar/check.ts index 0f2eaf1c86..9351027e78 100644 --- a/hak/keytar/check.ts +++ b/hak/keytar/check.ts @@ -14,20 +14,20 @@ See the License for the specific language governing permissions and limitations under the License. */ -import childProcess from 'child_process'; +import childProcess from "child_process"; -import HakEnv from '../../scripts/hak/hakEnv'; -import { DependencyInfo } from '../../scripts/hak/dep'; +import HakEnv from "../../scripts/hak/hakEnv"; +import { DependencyInfo } from "../../scripts/hak/dep"; -export default async function(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { - const tools = [['python3', '--version']]; // node-gyp uses python for reasons beyond comprehension +export default async function (hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { + const tools = [["python3", "--version"]]; // node-gyp uses python for reasons beyond comprehension for (const tool of tools) { await new Promise((resolve, reject) => { const proc = childProcess.spawn(tool[0], tool.slice(1), { - stdio: ['ignore'], + stdio: ["ignore"], }); - proc.on('exit', (code) => { + proc.on("exit", (code) => { if (code !== 0) { reject("Can't find " + tool); } else { diff --git a/hak/matrix-seshat/build.ts b/hak/matrix-seshat/build.ts index 633ffc58d3..f88916424c 100644 --- a/hak/matrix-seshat/build.ts +++ b/hak/matrix-seshat/build.ts @@ -14,15 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -import path from 'path'; -import childProcess from 'child_process'; -import mkdirp from 'mkdirp'; -import fsExtra from 'fs-extra'; +import path from "path"; +import childProcess from "child_process"; +import mkdirp from "mkdirp"; +import fsExtra from "fs-extra"; -import HakEnv from '../../scripts/hak/hakEnv'; -import { DependencyInfo } from '../../scripts/hak/dep'; +import HakEnv from "../../scripts/hak/hakEnv"; +import { DependencyInfo } from "../../scripts/hak/dep"; -export default async function(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { +export default async function (hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { if (hakEnv.isWin()) { await buildOpenSslWin(hakEnv, moduleInfo); await buildSqlCipherWin(hakEnv, moduleInfo); @@ -36,99 +36,91 @@ async function buildOpenSslWin(hakEnv: HakEnv, moduleInfo: DependencyInfo): Prom const version = moduleInfo.cfg.dependencies.openssl; const openSslDir = path.join(moduleInfo.moduleTargetDotHakDir, `openssl-${version}`); - const openSslArch = hakEnv.getTargetArch() === 'x64' ? 'VC-WIN64A' : 'VC-WIN32'; + const openSslArch = hakEnv.getTargetArch() === "x64" ? "VC-WIN64A" : "VC-WIN32"; console.log("Building openssl in " + openSslDir); await new Promise((resolve, reject) => { const proc = childProcess.spawn( - 'perl', + "perl", [ - 'Configure', - '--prefix=' + moduleInfo.depPrefix, + "Configure", + "--prefix=" + moduleInfo.depPrefix, // sqlcipher only uses about a tiny part of openssl. We link statically // so will only pull in the symbols we use, but we may as well turn off // as much as possible to save on build time. - 'no-afalgeng', - 'no-capieng', - 'no-cms', - 'no-ct', - 'no-deprecated', - 'no-dgram', - 'no-dso', - 'no-ec', - 'no-ec2m', - 'no-gost', - 'no-nextprotoneg', - 'no-ocsp', - 'no-sock', - 'no-srp', - 'no-srtp', - 'no-tests', - 'no-ssl', - 'no-tls', - 'no-dtls', - 'no-shared', - 'no-aria', - 'no-camellia', - 'no-cast', - 'no-chacha', - 'no-cmac', - 'no-des', - 'no-dh', - 'no-dsa', - 'no-ecdh', - 'no-ecdsa', - 'no-idea', - 'no-md4', - 'no-mdc2', - 'no-ocb', - 'no-poly1305', - 'no-rc2', - 'no-rc4', - 'no-rmd160', - 'no-scrypt', - 'no-seed', - 'no-siphash', - 'no-sm2', - 'no-sm3', - 'no-sm4', - 'no-whirlpool', + "no-afalgeng", + "no-capieng", + "no-cms", + "no-ct", + "no-deprecated", + "no-dgram", + "no-dso", + "no-ec", + "no-ec2m", + "no-gost", + "no-nextprotoneg", + "no-ocsp", + "no-sock", + "no-srp", + "no-srtp", + "no-tests", + "no-ssl", + "no-tls", + "no-dtls", + "no-shared", + "no-aria", + "no-camellia", + "no-cast", + "no-chacha", + "no-cmac", + "no-des", + "no-dh", + "no-dsa", + "no-ecdh", + "no-ecdsa", + "no-idea", + "no-md4", + "no-mdc2", + "no-ocb", + "no-poly1305", + "no-rc2", + "no-rc4", + "no-rmd160", + "no-scrypt", + "no-seed", + "no-siphash", + "no-sm2", + "no-sm3", + "no-sm4", + "no-whirlpool", openSslArch, ], { cwd: openSslDir, - stdio: 'inherit', + stdio: "inherit", }, ); - proc.on('exit', (code) => { + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); await new Promise((resolve, reject) => { - const proc = childProcess.spawn( - 'nmake', - ['build_libs'], - { - cwd: openSslDir, - stdio: 'inherit', - }, - ); - proc.on('exit', (code) => { + const proc = childProcess.spawn("nmake", ["build_libs"], { + cwd: openSslDir, + stdio: "inherit", + }); + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); await new Promise((resolve, reject) => { - const proc = childProcess.spawn( - 'nmake', - ['install_dev'], - { - cwd: openSslDir, - stdio: 'inherit', - }, - ); - proc.on('exit', (code) => { + const proc = childProcess.spawn("nmake", ["install_dev"], { + cwd: openSslDir, + stdio: "inherit", + }); + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); @@ -137,38 +129,28 @@ async function buildOpenSslWin(hakEnv: HakEnv, moduleInfo: DependencyInfo): Prom async function buildSqlCipherWin(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { const version = moduleInfo.cfg.dependencies.sqlcipher; const sqlCipherDir = path.join(moduleInfo.moduleTargetDotHakDir, `sqlcipher-${version}`); - const buildDir = path.join(sqlCipherDir, 'bld'); + const buildDir = path.join(sqlCipherDir, "bld"); await mkdirp(buildDir); await new Promise((resolve, reject) => { - const proc = childProcess.spawn( - 'nmake', - ['/f', path.join('..', 'Makefile.msc'), 'libsqlite3.lib', 'TOP=..'], - { - cwd: buildDir, - stdio: 'inherit', - env: Object.assign({}, process.env, { - CCOPTS: "-DSQLITE_HAS_CODEC -I" + path.join(moduleInfo.depPrefix, 'include'), - LTLIBPATHS: "/LIBPATH:" + path.join(moduleInfo.depPrefix, 'lib'), - LTLIBS: "libcrypto.lib", - }), - }, - ); - proc.on('exit', (code) => { + const proc = childProcess.spawn("nmake", ["/f", path.join("..", "Makefile.msc"), "libsqlite3.lib", "TOP=.."], { + cwd: buildDir, + stdio: "inherit", + env: Object.assign({}, process.env, { + CCOPTS: "-DSQLITE_HAS_CODEC -I" + path.join(moduleInfo.depPrefix, "include"), + LTLIBPATHS: "/LIBPATH:" + path.join(moduleInfo.depPrefix, "lib"), + LTLIBS: "libcrypto.lib", + }), + }); + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); - await fsExtra.copy( - path.join(buildDir, 'libsqlite3.lib'), - path.join(moduleInfo.depPrefix, 'lib', 'sqlcipher.lib'), - ); + await fsExtra.copy(path.join(buildDir, "libsqlite3.lib"), path.join(moduleInfo.depPrefix, "lib", "sqlcipher.lib")); - await fsExtra.copy( - path.join(buildDir, 'sqlite3.h'), - path.join(moduleInfo.depPrefix, 'include', 'sqlcipher.h'), - ); + await fsExtra.copy(path.join(buildDir, "sqlite3.h"), path.join(moduleInfo.depPrefix, "include", "sqlcipher.h")); } async function buildSqlCipherUnix(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { @@ -178,21 +160,21 @@ async function buildSqlCipherUnix(hakEnv: HakEnv, moduleInfo: DependencyInfo): P const sqlCipherDir = path.join(moduleInfo.moduleTargetDotHakDir, `sqlcipher-sc`); const args = [ - '--prefix=' + moduleInfo.depPrefix + '', - '--enable-tempstore=yes', - '--enable-shared=no', - '--enable-tcl=no', + "--prefix=" + moduleInfo.depPrefix + "", + "--enable-tempstore=yes", + "--enable-shared=no", + "--enable-tcl=no", ]; if (hakEnv.isMac()) { - args.push('--with-crypto-lib=commoncrypto'); + args.push("--with-crypto-lib=commoncrypto"); } if (hakEnv.wantsStaticSqlCipherUnix()) { - args.push('--enable-tcl=no'); + args.push("--enable-tcl=no"); if (hakEnv.isLinux()) { - args.push('--with-pic=yes'); + args.push("--with-pic=yes"); } } @@ -203,9 +185,7 @@ async function buildSqlCipherUnix(hakEnv: HakEnv, moduleInfo: DependencyInfo): P args.push(`--host=${hakEnv.getTargetId()}`); } - const cflags = [ - '-DSQLITE_HAS_CODEC', - ]; + const cflags = ["-DSQLITE_HAS_CODEC"]; if (!hakEnv.isHost()) { // `clang` uses more logical option naming. @@ -213,58 +193,46 @@ async function buildSqlCipherUnix(hakEnv: HakEnv, moduleInfo: DependencyInfo): P } if (cflags.length) { - args.push(`CFLAGS=${cflags.join(' ')}`); + args.push(`CFLAGS=${cflags.join(" ")}`); } const ldflags: string[] = []; if (hakEnv.isMac()) { - ldflags.push('-framework Security'); - ldflags.push('-framework Foundation'); + ldflags.push("-framework Security"); + ldflags.push("-framework Foundation"); } if (ldflags.length) { - args.push(`LDFLAGS=${ldflags.join(' ')}`); + args.push(`LDFLAGS=${ldflags.join(" ")}`); } await new Promise((resolve, reject) => { - const proc = childProcess.spawn( - path.join(sqlCipherDir, 'configure'), - args, - { - cwd: sqlCipherDir, - stdio: 'inherit', - }, - ); - proc.on('exit', (code) => { + const proc = childProcess.spawn(path.join(sqlCipherDir, "configure"), args, { + cwd: sqlCipherDir, + stdio: "inherit", + }); + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); await new Promise((resolve, reject) => { - const proc = childProcess.spawn( - 'make', - [], - { - cwd: sqlCipherDir, - stdio: 'inherit', - }, - ); - proc.on('exit', (code) => { + const proc = childProcess.spawn("make", [], { + cwd: sqlCipherDir, + stdio: "inherit", + }); + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); await new Promise((resolve, reject) => { - const proc = childProcess.spawn( - 'make', - ['install'], - { - cwd: sqlCipherDir, - stdio: 'inherit', - }, - ); - proc.on('exit', (code) => { + const proc = childProcess.spawn("make", ["install"], { + cwd: sqlCipherDir, + stdio: "inherit", + }); + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); @@ -279,8 +247,8 @@ async function buildMatrixSeshat(hakEnv: HakEnv, moduleInfo: DependencyInfo): Pr if (!hakEnv.isLinux() || hakEnv.wantsStaticSqlCipherUnix()) { Object.assign(env, { SQLCIPHER_STATIC: 1, - SQLCIPHER_LIB_DIR: path.join(moduleInfo.depPrefix, 'lib'), - SQLCIPHER_INCLUDE_DIR: path.join(moduleInfo.depPrefix, 'include'), + SQLCIPHER_LIB_DIR: path.join(moduleInfo.depPrefix, "lib"), + SQLCIPHER_INCLUDE_DIR: path.join(moduleInfo.depPrefix, "include"), }); } @@ -300,11 +268,11 @@ async function buildMatrixSeshat(hakEnv: HakEnv, moduleInfo: DependencyInfo): Pr // --exclude-libs ALL // Prevent symbols from being exported by any archive libraries. // Reduces output filesize and prevents being dynamically linked against. - env.RUSTFLAGS = '-Clink-arg=-Wl,-Bsymbolic -Clink-arg=-Wl,--exclude-libs,ALL'; + env.RUSTFLAGS = "-Clink-arg=-Wl,-Bsymbolic -Clink-arg=-Wl,--exclude-libs,ALL"; } if (hakEnv.isWin()) { - env.RUSTFLAGS = '-Ctarget-feature=+crt-static -Clink-args=libcrypto.lib'; + env.RUSTFLAGS = "-Ctarget-feature=+crt-static -Clink-args=libcrypto.lib"; // Note that in general, you can specify targets in Rust without having to have // the matching toolchain, however for this, cargo gets confused when building // the build scripts since they run on the host, but vcvarsall.bat sets the c @@ -320,15 +288,15 @@ async function buildMatrixSeshat(hakEnv: HakEnv, moduleInfo: DependencyInfo): Pr console.log("Running neon with env", env); await new Promise((resolve, reject) => { const proc = childProcess.spawn( - path.join(moduleInfo.nodeModuleBinDir, 'neon' + (hakEnv.isWin() ? '.cmd' : '')), - ['build', '--release'], + path.join(moduleInfo.nodeModuleBinDir, "neon" + (hakEnv.isWin() ? ".cmd" : "")), + ["build", "--release"], { cwd: moduleInfo.moduleBuildDir, env, - stdio: 'inherit', + stdio: "inherit", }, ); - proc.on('exit', (code) => { + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); diff --git a/hak/matrix-seshat/check.ts b/hak/matrix-seshat/check.ts index 5691c966a6..d3ef3dbeae 100644 --- a/hak/matrix-seshat/check.ts +++ b/hak/matrix-seshat/check.ts @@ -14,20 +14,20 @@ See the License for the specific language governing permissions and limitations under the License. */ -import childProcess from 'child_process'; -import fsProm from 'fs/promises'; +import childProcess from "child_process"; +import fsProm from "fs/promises"; -import HakEnv from '../../scripts/hak/hakEnv'; -import { DependencyInfo } from '../../scripts/hak/dep'; +import HakEnv from "../../scripts/hak/hakEnv"; +import { DependencyInfo } from "../../scripts/hak/dep"; -export default async function(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { +export default async function (hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { if (hakEnv.wantsStaticSqlCipher()) { // of course tcl doesn't have a --version await new Promise((resolve, reject) => { - const proc = childProcess.spawn('tclsh', [], { - stdio: ['pipe', 'ignore', 'ignore'], + const proc = childProcess.spawn("tclsh", [], { + stdio: ["pipe", "ignore", "ignore"], }); - proc.on('exit', (code) => { + proc.on("exit", (code) => { if (code !== 0) { reject("Can't find tclsh - have you installed TCL?"); } else { @@ -39,23 +39,24 @@ export default async function(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promi } const tools = [ - ['rustc', '--version'], - ['python3', '--version'], // node-gyp uses python for reasons beyond comprehension + ["rustc", "--version"], + ["python3", "--version"], // node-gyp uses python for reasons beyond comprehension ]; if (hakEnv.isWin()) { - tools.push(['perl', '--version']); // for openssl configure - tools.push(['patch', '--version']); // to patch sqlcipher Makefile.msc - tools.push(['nmake', '/?']); + tools.push(["perl", "--version"]); // for openssl configure + tools.push(["nasm", "-v"]); // for openssl building + tools.push(["patch", "--version"]); // to patch sqlcipher Makefile.msc + tools.push(["nmake", "/?"]); } else { - tools.push(['make', '--version']); + tools.push(["make", "--version"]); } for (const tool of tools) { await new Promise((resolve, reject) => { const proc = childProcess.spawn(tool[0], tool.slice(1), { - stdio: ['ignore'], + stdio: ["ignore"], }); - proc.on('exit', (code) => { + proc.on("exit", (code) => { if (code !== 0) { reject("Can't find " + tool); } else { @@ -67,19 +68,24 @@ export default async function(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promi // Ensure Rust target exists (nb. we avoid depending on rustup) await new Promise((resolve, reject) => { - const rustc = childProcess.execFile('rustc', [ - '--target', hakEnv.getTargetId(), '-o', 'tmp', '-', - ], (err, out) => { - if (err) { - reject( - "rustc can't build for target " + hakEnv.getTargetId() + - ": ensure target is installed via `rustup target add " + hakEnv.getTargetId() + "` " + - "or your package manager if not using `rustup`", - ); - } - fsProm.unlink('tmp').then(resolve); - }); - rustc.stdin.write('fn main() {}'); - rustc.stdin.end(); + const rustc = childProcess.execFile( + "rustc", + ["--target", hakEnv.getTargetId(), "-o", "tmp", "-"], + (err, out) => { + if (err) { + reject( + "rustc can't build for target " + + hakEnv.getTargetId() + + ": ensure target is installed via `rustup target add " + + hakEnv.getTargetId() + + "` " + + "or your package manager if not using `rustup`", + ); + } + fsProm.unlink("tmp").then(resolve); + }, + ); + rustc.stdin!.write("fn main() {}"); + rustc.stdin!.end(); }); } diff --git a/hak/matrix-seshat/fetchDeps.ts b/hak/matrix-seshat/fetchDeps.ts index 586548332e..28a20d3947 100644 --- a/hak/matrix-seshat/fetchDeps.ts +++ b/hak/matrix-seshat/fetchDeps.ts @@ -14,16 +14,16 @@ See the License for the specific language governing permissions and limitations under the License. */ -import path from 'path'; -import childProcess from 'child_process'; -import fs from 'fs'; -import fsProm from 'fs/promises'; -import tar from 'tar'; -import fetch from 'node-fetch'; +import path from "path"; +import childProcess from "child_process"; +import fs from "fs"; +import fsProm from "fs/promises"; +import tar from "tar"; +import fetch from "node-fetch"; import { promises as stream } from "stream"; -import HakEnv from '../../scripts/hak/hakEnv'; -import { DependencyInfo } from '../../scripts/hak/dep'; +import HakEnv from "../../scripts/hak/hakEnv"; +import { DependencyInfo } from "../../scripts/hak/dep"; async function download(url: string, filename: string): Promise { const resp = await fetch(url); @@ -32,7 +32,7 @@ async function download(url: string, filename: string): Promise { await stream.pipeline(resp.body, fs.createWriteStream(filename)); } -export default async function(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { +export default async function (hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { if (hakEnv.wantsStaticSqlCipher()) { await getSqlCipher(hakEnv, moduleInfo); } @@ -85,15 +85,11 @@ async function getSqlCipher(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise await new Promise((resolve, reject) => { const readStream = fs.createReadStream(patchFile); - const proc = childProcess.spawn( - 'patch', - ['-p1'], - { - cwd: sqlCipherDir, - stdio: ['pipe', 'inherit', 'inherit'], - }, - ); - proc.on('exit', (code) => { + const proc = childProcess.spawn("patch", ["-p1"], { + cwd: sqlCipherDir, + stdio: ["pipe", "inherit", "inherit"], + }); + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); readStream.pipe(proc.stdin); diff --git a/hak/tsconfig.json b/hak/tsconfig.json index 46abbda88e..5cf06a3ceb 100644 --- a/hak/tsconfig.json +++ b/hak/tsconfig.json @@ -1,17 +1,14 @@ { - "compilerOptions": { - "moduleResolution": "node", - "esModuleInterop": true, - "target": "es2016", - "sourceMap": false, - "lib": [ - "es2019", - ] - }, - "include": [ - "./**/*.ts" - ], - "ts-node": { - "transpileOnly": true - } + "compilerOptions": { + "moduleResolution": "node", + "esModuleInterop": true, + "target": "es2016", + "sourceMap": false, + "strict": true, + "lib": ["es2019"] + }, + "include": ["../scripts/@types/*.d.ts", "./**/*.ts"], + "ts-node": { + "transpileOnly": true + } } diff --git a/package.json b/package.json index b3fa7621df..ba73923e02 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "element-desktop", "productName": "Element", "main": "lib/electron-main.js", - "version": "1.11.17", + "version": "1.11.18", "description": "A feature-rich client for Matrix.org", "author": "Element", "repository": { @@ -62,7 +62,7 @@ "@types/jest": "^29.0.0", "@types/minimist": "^1.2.1", "@types/mkdirp": "^1.0.2", - "@types/node": "16.18.4", + "@types/node": "16.18.8", "@types/pacote": "^11.1.1", "@types/rimraf": "^3.0.2", "@types/tar": "^6.1.3", @@ -79,8 +79,9 @@ "electron-devtools-installer": "^3.1.1", "eslint": "^8.26.0", "eslint-config-google": "^0.14.0", + "eslint-config-prettier": "^8.5.0", "eslint-plugin-import": "^2.25.4", - "eslint-plugin-matrix-org": "^0.8.0", + "eslint-plugin-matrix-org": "^0.9.0", "eslint-plugin-unicorn": "^45.0.0", "expect-playwright": "^0.8.0", "find-npm-prefix": "^1.0.2", @@ -92,18 +93,19 @@ "node-pre-gyp": "^0.17.0", "pacote": "^15.0.0", "playwright": "^1.25.0", + "prettier": "^2.8.1", "rimraf": "^3.0.2", "tar": "^6.1.2", "ts-jest": "^29.0.0", "ts-node": "^10.9.1", - "typescript": "4.9.3" + "typescript": "4.9.4" }, "hakDependencies": { "matrix-seshat": "^2.3.3", "keytar": "^7.9.0" }, "resolutions": { - "@types/node": "16.18.4" + "@types/node": "16.18.8" }, "build": { "appId": "im.riot.app", diff --git a/packages.element.io/fonts/inter.css b/packages.element.io/fonts/inter.css index 2109679dfb..39d8451b22 100644 --- a/packages.element.io/fonts/inter.css +++ b/packages.element.io/fonts/inter.css @@ -1,154 +1,139 @@ @font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 100; - font-display: swap; - src: url("Inter-Thin.woff2?v=3.19") format("woff2"), - url("Inter-Thin.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url("Inter-Thin.woff2?v=3.19") format("woff2"), url("Inter-Thin.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 100; - font-display: swap; - src: url("Inter-ThinItalic.woff2?v=3.19") format("woff2"), - url("Inter-ThinItalic.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: italic; + font-weight: 100; + font-display: swap; + src: url("Inter-ThinItalic.woff2?v=3.19") format("woff2"), url("Inter-ThinItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 200; - font-display: swap; - src: url("Inter-ExtraLight.woff2?v=3.19") format("woff2"), - url("Inter-ExtraLight.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: normal; + font-weight: 200; + font-display: swap; + src: url("Inter-ExtraLight.woff2?v=3.19") format("woff2"), url("Inter-ExtraLight.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 200; - font-display: swap; - src: url("Inter-ExtraLightItalic.woff2?v=3.19") format("woff2"), - url("Inter-ExtraLightItalic.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: italic; + font-weight: 200; + font-display: swap; + src: url("Inter-ExtraLightItalic.woff2?v=3.19") format("woff2"), + url("Inter-ExtraLightItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 300; - font-display: swap; - src: url("Inter-Light.woff2?v=3.19") format("woff2"), - url("Inter-Light.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url("Inter-Light.woff2?v=3.19") format("woff2"), url("Inter-Light.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 300; - font-display: swap; - src: url("Inter-LightItalic.woff2?v=3.19") format("woff2"), - url("Inter-LightItalic.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url("Inter-LightItalic.woff2?v=3.19") format("woff2"), url("Inter-LightItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url("Inter-Regular.woff2?v=3.19") format("woff2"), - url("Inter-Regular.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("Inter-Regular.woff2?v=3.19") format("woff2"), url("Inter-Regular.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 400; - font-display: swap; - src: url("Inter-Italic.woff2?v=3.19") format("woff2"), - url("Inter-Italic.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url("Inter-Italic.woff2?v=3.19") format("woff2"), url("Inter-Italic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url("Inter-Medium.woff2?v=3.19") format("woff2"), - url("Inter-Medium.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("Inter-Medium.woff2?v=3.19") format("woff2"), url("Inter-Medium.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 500; - font-display: swap; - src: url("Inter-MediumItalic.woff2?v=3.19") format("woff2"), - url("Inter-MediumItalic.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: italic; + font-weight: 500; + font-display: swap; + src: url("Inter-MediumItalic.woff2?v=3.19") format("woff2"), url("Inter-MediumItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 600; - font-display: swap; - src: url("Inter-SemiBold.woff2?v=3.19") format("woff2"), - url("Inter-SemiBold.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url("Inter-SemiBold.woff2?v=3.19") format("woff2"), url("Inter-SemiBold.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 600; - font-display: swap; - src: url("Inter-SemiBoldItalic.woff2?v=3.19") format("woff2"), - url("Inter-SemiBoldItalic.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: italic; + font-weight: 600; + font-display: swap; + src: url("Inter-SemiBoldItalic.woff2?v=3.19") format("woff2"), + url("Inter-SemiBoldItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url("Inter-Bold.woff2?v=3.19") format("woff2"), - url("Inter-Bold.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url("Inter-Bold.woff2?v=3.19") format("woff2"), url("Inter-Bold.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 700; - font-display: swap; - src: url("Inter-BoldItalic.woff2?v=3.19") format("woff2"), - url("Inter-BoldItalic.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: italic; + font-weight: 700; + font-display: swap; + src: url("Inter-BoldItalic.woff2?v=3.19") format("woff2"), url("Inter-BoldItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 800; - font-display: swap; - src: url("Inter-ExtraBold.woff2?v=3.19") format("woff2"), - url("Inter-ExtraBold.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url("Inter-ExtraBold.woff2?v=3.19") format("woff2"), url("Inter-ExtraBold.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 800; - font-display: swap; - src: url("Inter-ExtraBoldItalic.woff2?v=3.19") format("woff2"), - url("Inter-ExtraBoldItalic.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: italic; + font-weight: 800; + font-display: swap; + src: url("Inter-ExtraBoldItalic.woff2?v=3.19") format("woff2"), + url("Inter-ExtraBoldItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 900; - font-display: swap; - src: url("Inter-Black.woff2?v=3.19") format("woff2"), - url("Inter-Black.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url("Inter-Black.woff2?v=3.19") format("woff2"), url("Inter-Black.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 900; - font-display: swap; - src: url("Inter-BlackItalic.woff2?v=3.19") format("woff2"), - url("Inter-BlackItalic.woff?v=3.19") format("woff"); + font-family: "Inter"; + font-style: italic; + font-weight: 900; + font-display: swap; + src: url("Inter-BlackItalic.woff2?v=3.19") format("woff2"), url("Inter-BlackItalic.woff?v=3.19") format("woff"); } /* ------------------------------------------------------- @@ -161,21 +146,20 @@ Usage: } */ @font-face { - font-family: 'Inter var'; - font-weight: 100 900; - font-display: swap; - font-style: normal; - src: url("Inter-roman.var.woff2?v=3.19") format("woff2"); + font-family: "Inter var"; + font-weight: 100 900; + font-display: swap; + font-style: normal; + src: url("Inter-roman.var.woff2?v=3.19") format("woff2"); } @font-face { - font-family: 'Inter var'; - font-weight: 100 900; - font-display: swap; - font-style: italic; - src: url("Inter-italic.var.woff2?v=3.19") format("woff2"); + font-family: "Inter var"; + font-weight: 100 900; + font-display: swap; + font-style: italic; + src: url("Inter-italic.var.woff2?v=3.19") format("woff2"); } - /* -------------------------------------------------------------------------- [EXPERIMENTAL] Multi-axis, single variable font. @@ -190,9 +174,9 @@ explicitly, e.g. */ @font-face { - font-family: 'Inter var experimental'; - font-weight: 100 900; - font-display: swap; - font-style: oblique 0deg 10deg; - src: url("Inter.var.woff2?v=3.19") format("woff2"); + font-family: "Inter var experimental"; + font-weight: 100 900; + font-display: swap; + font-style: oblique 0deg 10deg; + src: url("Inter.var.woff2?v=3.19") format("woff2"); } diff --git a/packages.element.io/styles.css b/packages.element.io/styles.css index b12146d040..30508ce6c9 100644 --- a/packages.element.io/styles.css +++ b/packages.element.io/styles.css @@ -5,14 +5,17 @@ * hosted on GitHub, https://GitHub.com/Naereen/Nginx-Fancyindex-Theme */ -@import url('./fonts/inter.css'); +@import url("./fonts/inter.css"); -* { font-family: 'Inter', sans-serif; } +* { + font-family: "Inter", sans-serif; +} @supports (font-variation-settings: normal) { - * { font-family: 'Inter var', sans-serif; } + * { + font-family: "Inter var", sans-serif; + } } - * { margin: 0; padding: 0; @@ -22,14 +25,14 @@ } html { - color: #17191C; + color: #17191c; font-weight: 400; font-size: 1em; line-height: 1.6em; } body { - background-color: #F4F6FA; + background-color: #f4f6fa; margin: 0 auto; padding: 100px 20px 20px; max-width: 800px; @@ -52,9 +55,11 @@ a { text-decoration: underline; } a:hover { - color: #0DBD8B; + color: #0dbd8b; } -a.clear, a.clear:link, a.clear:visited { +a.clear, +a.clear:link, +a.clear:visited { color: #666; padding: 2px 0; font-weight: 400; @@ -74,7 +79,7 @@ a.clear, a.clear:link, a.clear:visited { input { vertical-align: middle; *overflow: visible; - font-family: 'Open Sans', sans-serif; + font-family: "Open Sans", sans-serif; font-weight: 300; display: inline-block; height: 20px; @@ -89,20 +94,20 @@ input { width: 196px; background-color: #fff; border: 1px solid #ccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075); - -webkit-transition: border linear .2s,box-shadow linear .2s; - -moz-transition: border linear .2s,box-shadow linear .2s; - -o-transition: border linear .2s,box-shadow linear .2s; - transition: border linear .2s,box-shadow linear .2s; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; } input:focus { outline: 0; - border-color: rgba(0,0,0,0.8); - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(0,0,0,0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(0,0,0,0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(0,0,0,0.6); + border-color: rgba(0, 0, 0, 0.8); + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(0, 0, 0, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(0, 0, 0, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(0, 0, 0, 0.6); } input::-moz-focus-inner { padding: 0; @@ -128,13 +133,12 @@ tr td:first-of-type { padding-right: 10px; } tr.parent a { - color: #9099A3; + color: #9099a3; } th { - text-align: left; - font-size: .75em; + font-size: 0.75em; padding-right: 20px; } th + th { @@ -157,7 +161,8 @@ td { -o-transition: background 300ms ease-in; transition: background 300ms ease-in; } -td:last-child,th:last-child { +td:last-child, +th:last-child { text-align: right; padding-right: 0; } @@ -187,11 +192,11 @@ td a { padding: 0; list-style: none; overflow: hidden; - background-color: #FFF; + background-color: #fff; } .nav li a { - color: #17191C; + color: #17191c; display: block; padding: 20px 20px; text-decoration: none; @@ -199,7 +204,7 @@ td a { .nav li a:hover, .nav .menu-btn:hover { - color: #0DBD8B; + color: #0dbd8b; } .nav .logo { @@ -216,7 +221,7 @@ td a { .nav .menu { clear: both; max-height: 0; - transition: max-height .2s ease-out; + transition: max-height 0.2s ease-out; } /* menu icon */ @@ -237,18 +242,18 @@ td a { margin-top: 6px; margin-bottom: 4px; position: relative; - transition: background .2s ease-out; + transition: background 0.2s ease-out; width: 18px; } .nav .menu-icon .navicon:before, .nav .menu-icon .navicon:after { - background: #17191C; - content: ''; + background: #17191c; + content: ""; display: block; height: 100%; position: absolute; - transition: all .2s ease-out; + transition: all 0.2s ease-out; width: 100%; } @@ -303,13 +308,13 @@ td a { margin-left: 20px; padding: 12px 20px; border-radius: 100px; - background-color: #0DBD8B; - color:#FFF; + background-color: #0dbd8b; + color: #fff; } .nav .primary:hover { background-color: #099970; - color:#FFF; + color: #fff; } .nav .menu { @@ -324,10 +329,10 @@ td a { footer { margin-top: 40px; - font-size:0.8em; - text-align:center; + font-size: 0.8em; + text-align: center; } footer a { - color:#03b381; + color: #03b381; } diff --git a/scripts/hak/find-npm-prefix.d.ts b/scripts/@types/find-npm-prefix.d.ts similarity index 100% rename from scripts/hak/find-npm-prefix.d.ts rename to scripts/@types/find-npm-prefix.d.ts diff --git a/scripts/hak/node-pre-gyp.d.ts b/scripts/@types/node-pre-gyp.d.ts similarity index 100% rename from scripts/hak/node-pre-gyp.d.ts rename to scripts/@types/node-pre-gyp.d.ts diff --git a/scripts/copy-res.ts b/scripts/copy-res.ts index 79b7ce9b28..913e9cf321 100755 --- a/scripts/copy-res.ts +++ b/scripts/copy-res.ts @@ -20,16 +20,16 @@ function errCheck(err?: Error): void { } const I18N_BASE_PATH = "src/i18n/strings/"; -const INCLUDE_LANGS = fs.readdirSync(I18N_BASE_PATH).filter(fn => fn.endsWith(".json")); +const INCLUDE_LANGS = fs.readdirSync(I18N_BASE_PATH).filter((fn) => fn.endsWith(".json")); // Ensure lib, lib/i18n and lib/i18n/strings all exist -fs.mkdirSync('lib/i18n/strings', { recursive: true }); +fs.mkdirSync("lib/i18n/strings", { recursive: true }); type Translations = Record | string>; function genLangFile(file: string, dest: string): void { const inTrs: Record = {}; - [file].forEach(function(f) { + [file].forEach(function (f) { if (fs.existsSync(f)) { try { Object.assign(inTrs, JSON.parse(fs.readFileSync(f).toString())); @@ -68,7 +68,7 @@ function weblateToCounterpart(inTrs: Record): Translations { const outTrs: Translations = {}; for (const key of Object.keys(inTrs)) { - const keyParts = key.split('|', 2); + const keyParts = key.split("|", 2); if (keyParts.length === 2) { let obj = outTrs[keyParts[0]]; if (obj === undefined) { @@ -77,7 +77,7 @@ function weblateToCounterpart(inTrs: Record): Translations { // This is a transitional edge case if a string went from singular to pluralised and both still remain // in the translation json file. Use the singular translation as `other` and merge pluralisation atop. obj = outTrs[keyParts[0]] = { - "other": inTrs[key], + other: inTrs[key], }; console.warn("Found entry in i18n file in both singular and pluralised form", keyParts[0]); } @@ -108,10 +108,7 @@ function watchLanguage(file: string, dest: string): void { }, 500); }; - chokidar.watch(file) - .on('add', makeLang) - .on('change', makeLang) - .on('error', errCheck); + chokidar.watch(file).on("add", makeLang).on("change", makeLang).on("error", errCheck); } // language resources @@ -121,5 +118,5 @@ INCLUDE_LANGS.forEach((file): void => { }, {}); if (watch) { - INCLUDE_LANGS.forEach(file => watchLanguage(I18N_BASE_PATH + file, I18N_DEST)); + INCLUDE_LANGS.forEach((file) => watchLanguage(I18N_BASE_PATH + file, I18N_DEST)); } diff --git a/scripts/electron_afterPack.js b/scripts/electron_afterPack.js index 903663833f..82a2397aa0 100644 --- a/scripts/electron_afterPack.js +++ b/scripts/electron_afterPack.js @@ -1,7 +1,7 @@ -const fsProm = require('fs').promises; -const path = require('path'); +const fsProm = require("fs").promises; +const path = require("path"); -exports.default = async function(context) { +exports.default = async function (context) { const { electronPlatformName, appOutDir } = context; // Squirrel windows will try to relaunch the app using an executable of the same name as @@ -9,7 +9,7 @@ exports.default = async function(context) { // We add a fake Riot.exe that it can run which runs the real one. // This also gets signed automatically, presumably because electron-build just looks for all // exe files and signs them all... - if (electronPlatformName === 'win32') { - await fsProm.copyFile('build/rebrand_stub/rebrand_stub.exe', path.join(appOutDir, "Riot.exe")); + if (electronPlatformName === "win32") { + await fsProm.copyFile("build/rebrand_stub/rebrand_stub.exe", path.join(appOutDir, "Riot.exe")); } }; diff --git a/scripts/electron_afterSign.js b/scripts/electron_afterSign.js index 691996fec8..aa3c1d454a 100644 --- a/scripts/electron_afterSign.js +++ b/scripts/electron_afterSign.js @@ -1,11 +1,11 @@ -const { notarize } = require('@electron/notarize'); +const { notarize } = require("@electron/notarize"); let warned = false; -exports.default = async function(context) { +exports.default = async function (context) { const { electronPlatformName, appOutDir } = context; const appId = context.packager.info.appInfo.id; - if (electronPlatformName === 'darwin') { + if (electronPlatformName === "darwin") { const appName = context.packager.appInfo.productFilename; const keychainProfile = process.env.NOTARIZE_KEYCHAIN_PROFILE; diff --git a/scripts/electron_winSign.js b/scripts/electron_winSign.js index e56843e159..abacd95be6 100644 --- a/scripts/electron_winSign.js +++ b/scripts/electron_winSign.js @@ -1,4 +1,4 @@ -const { execFile } = require('child_process'); +const { execFile } = require("child_process"); // Loosely based on computeSignToolArgs from app-builder-lib/src/codeSign/windowsCodeSign.ts function computeSignToolArgs(options, keyContainer) { @@ -8,15 +8,15 @@ function computeSignToolArgs(options, keyContainer) { const timestampingServiceUrl = options.options.timeStampServer || "http://timestamp.digicert.com"; args.push( options.isNest || options.hash === "sha256" ? "/tr" : "/t", - options.isNest || options.hash === "sha256" ? ( - options.options.rfc3161TimeStampServer || "http://timestamp.comodoca.com/rfc3161" - ) : timestampingServiceUrl, + options.isNest || options.hash === "sha256" + ? options.options.rfc3161TimeStampServer || "http://timestamp.comodoca.com/rfc3161" + : timestampingServiceUrl, ); } - args.push('/kc', keyContainer); + args.push("/kc", keyContainer); // To use the hardware token (this should probably be less hardcoded) - args.push('/csp', 'eToken Base Cryptographic Provider'); + args.push("/csp", "eToken Base Cryptographic Provider"); // The certificate file. Somehow this appears to be the only way to specify // the cert that works. If you specify the subject name or hash, it will // say it can't associate the private key to the certificate. @@ -24,7 +24,7 @@ function computeSignToolArgs(options, keyContainer) { // so we don't have to hard-code this here // fwiw https://stackoverflow.com/questions/17927895/automate-extended-validation-ev-code-signing // is about the most useful resource on automating code signing... - args.push('/f', 'element.io\\New_Vector_Ltd.pem'); + args.push("/f", "element.io\\New_Vector_Ltd.pem"); if (options.hash !== "sha1") { args.push("/fd", options.hash); @@ -35,7 +35,7 @@ function computeSignToolArgs(options, keyContainer) { // msi does not support dual-signing if (options.isNest) { - args.push("/as"); + args.push("/as"); } // https://github.com/electron-userland/electron-builder/issues/2875#issuecomment-387233610 @@ -47,15 +47,15 @@ function computeSignToolArgs(options, keyContainer) { } let warned = false; -exports.default = async function(options) { +exports.default = async function (options) { const keyContainer = process.env.SIGNING_KEY_CONTAINER; if (keyContainer === undefined) { if (!warned) { console.warn( "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" + - "! Skipping Windows signing. !\n" + - "! SIGNING_KEY_CONTAINER not defined. !\n" + - "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", + "! Skipping Windows signing. !\n" + + "! SIGNING_KEY_CONTAINER not defined. !\n" + + "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", ); warned = true; } @@ -63,9 +63,9 @@ exports.default = async function(options) { } return new Promise((resolve, reject) => { - const args = ['sign'].concat(computeSignToolArgs(options, keyContainer)); + const args = ["sign"].concat(computeSignToolArgs(options, keyContainer)); - execFile('signtool', args, {}, (error, stdout) => { + execFile("signtool", args, {}, (error, stdout) => { if (error) { console.error("signtool failed with code " + error); reject("signtool failed with code " + error); diff --git a/scripts/fetch-package.ts b/scripts/fetch-package.ts index 92fbf76f55..6cd92e4aad 100644 --- a/scripts/fetch-package.ts +++ b/scripts/fetch-package.ts @@ -14,7 +14,7 @@ import { setPackageVersion } from "./set-version"; const PUB_KEY_URL = "https://packages.riot.im/element-release-key.asc"; const PACKAGE_URL_PREFIX = "https://github.com/vector-im/element-web/releases/download/"; const DEVELOP_TGZ_URL = "https://develop.element.io/develop.tar.gz"; -const ASAR_PATH = 'webapp.asar'; +const ASAR_PATH = "webapp.asar"; async function downloadToFile(url: string, filename: string): Promise { console.log("Downloading " + url + "..."); @@ -35,7 +35,7 @@ async function downloadToFile(url: string, filename: string): Promise { async function verifyFile(filename: string): Promise { return new Promise((resolve, reject) => { - childProcess.execFile('gpg', ['--verify', filename + '.asc', filename], (error) => { + childProcess.execFile("gpg", ["--verify", filename + ".asc", filename], (error) => { if (error) { reject(error); } else { @@ -48,8 +48,8 @@ async function verifyFile(filename: string): Promise { async function main(): Promise { let verify = true; let importkey = false; - let pkgDir = 'packages'; - let deployDir = 'deploys'; + let pkgDir = "packages"; + let deployDir = "deploys"; let cfgDir: string | undefined; let targetVersion: string | undefined; let filename: string | undefined; @@ -59,22 +59,22 @@ async function main(): Promise { while (process.argv.length > 2) { switch (process.argv[2]) { - case '--noverify': + case "--noverify": verify = false; break; - case '--importkey': + case "--importkey": importkey = true; break; - case '--packages': + case "--packages": process.argv.shift(); pkgDir = process.argv[2]; break; - case '--deploys': + case "--deploys": process.argv.shift(); deployDir = process.argv[2]; break; - case '--cfgdir': - case '-d': + case "--cfgdir": + case "-d": process.argv.shift(); cfgDir = process.argv[2]; break; @@ -86,13 +86,13 @@ async function main(): Promise { if (sc) { } else if (targetVersion === undefined) { - targetVersion = 'v' + riotDesktopPackageJson.version; - } else if (targetVersion !== 'develop') { + targetVersion = "v" + riotDesktopPackageJson.version; + } else if (targetVersion !== "develop") { setVersion = true; // version was specified } - if (targetVersion === 'develop') { - filename = 'develop.tar.gz'; + if (targetVersion === "develop") { + filename = "develop.tar.gz"; url = DEVELOP_TGZ_URL; verify = false; // develop builds aren't signed } else if (targetVersion?.includes("://")) { @@ -101,11 +101,11 @@ async function main(): Promise { verify = false; // manually verified } else { filename = `element-${targetVersion}.tar.gz`; - url = PACKAGE_URL_PREFIX + targetVersion + '/' + filename; + url = PACKAGE_URL_PREFIX + targetVersion + "/" + filename; } const haveGpg = await new Promise((resolve) => { - childProcess.execFile('gpg', ['--version'], (error) => { + childProcess.execFile("gpg", ["--version"], (error) => { resolve(!error); }); }); @@ -117,7 +117,7 @@ async function main(): Promise { } await new Promise((resolve) => { - const gpgProc = childProcess.execFile('gpg', ['--import'], (error) => { + const gpgProc = childProcess.execFile("gpg", ["--import"], (error) => { if (error) { console.log("Failed to import key", error); } else { @@ -125,7 +125,7 @@ async function main(): Promise { } resolve(!error); }); - fetch(PUB_KEY_URL).then(resp => { + fetch(PUB_KEY_URL).then((resp) => { stream.pipeline(resp.body, gpgProc.stdin!); }); }); @@ -145,7 +145,7 @@ async function main(): Promise { } let haveDeploy = false; - let expectedDeployDir = sc ? "../element-web/webapp" : path.join(deployDir, path.basename(filename).replace(/\.tar\.gz/, '')); + let expectedDeployDir = sc ? "../element-web/webapp" : path.join(deployDir, path.basename(filename).replace(/\.tar\.gz/, "")); try { await fs.opendir(expectedDeployDir); console.log(expectedDeployDir + "already exists"); @@ -171,11 +171,11 @@ async function main(): Promise { if (verify) { try { - await fs.stat(outPath+'.asc'); + await fs.stat(outPath + ".asc"); console.log("Already have " + filename + ".asc: not redownloading"); } catch (e) { try { - await downloadToFile(url + '.asc', outPath + '.asc'); + await downloadToFile(url + ".asc", outPath + ".asc"); } catch (e) { console.log("Failed to download " + url, e); return 1; @@ -196,7 +196,7 @@ async function main(): Promise { await tar.x({ file: outPath, cwd: deployDir, - onentry: entry => { + onentry: (entry) => { // Find the appropriate extraction path, only needed for `develop` where the dir name is unknown if (entry.type === "Directory" && !path.join(deployDir, entry.path).startsWith(expectedDeployDir)) { expectedDeployDir = path.join(deployDir, entry.path); @@ -209,13 +209,12 @@ async function main(): Promise { await fs.stat(ASAR_PATH); console.log(ASAR_PATH + " already present: removing"); await fs.unlink(ASAR_PATH); - } catch (e) { - } + } catch (e) {} if (cfgDir.length) { - const configJsonSource = path.join(cfgDir, 'config.json'); - const configJsonDest = path.join(expectedDeployDir, 'config.json'); - console.log(configJsonSource + ' -> ' + configJsonDest); + const configJsonSource = path.join(cfgDir, "config.json"); + const configJsonDest = path.join(expectedDeployDir, "config.json"); + console.log(configJsonSource + " -> " + configJsonDest); await fs.copyFile(configJsonSource, configJsonDest); } else { console.log("Skipping config file"); @@ -233,9 +232,11 @@ async function main(): Promise { console.log("Done!"); } -main().then((ret) => { - process.exit(ret); -}).catch(e => { - console.error(e); - process.exit(1); -}); +main() + .then((ret) => { + process.exit(ret); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); diff --git a/scripts/generate-packages-index.ts b/scripts/generate-packages-index.ts index 06a1b024f4..822b749016 100755 --- a/scripts/generate-packages-index.ts +++ b/scripts/generate-packages-index.ts @@ -84,21 +84,21 @@ function humanFileSize(bytes: number, si = false, dp = 1): string { const thresh = si ? 1000 : 1024; if (Math.abs(bytes) < thresh) { - return bytes + ' B'; + return bytes + " B"; } const units = si - ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] - : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']; + ? ["kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"] + : ["KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"]; let u = -1; - const r = 10**dp; + const r = 10 ** dp; do { bytes /= thresh; ++u; } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1); - return bytes.toFixed(dp) + ' ' + units[u]; + return bytes.toFixed(dp) + " " + units[u]; } const dateTimeOptions: Intl.DateTimeFormatOptions = { @@ -122,7 +122,8 @@ function indexLayout(prefix: string, files: _Object[], dirs: string[]): string { } for (const file of files) { - if (!file.Key || + if ( + !file.Key || HIDDEN_FILES.includes(`/${file.Key}`) || HIDDEN_FILES.includes(file.Key.slice(file.Key.lastIndexOf("/") + 1)) ) { @@ -143,11 +144,15 @@ function indexLayout(prefix: string, files: _Object[], dirs: string[]): string { - ${rows.map(([link, name, size, date]) => ` + ${rows + .map( + ([link, name, size, date]) => ` ${name} ${size ? humanFileSize(size) : "-"} ${date?.toLocaleString("en-GB", dateTimeOptions) ?? "-"} - `).join("")} + `, + ) + .join("")} `); @@ -166,17 +171,20 @@ async function generateIndex(Prefix: string): Promise<{ const listResponse = await client.send(command); const files = listResponse.Contents ?? []; - const dirs = listResponse.CommonPrefixes - ?.map(p => p.Prefix?.slice(Prefix.length).split("/", 2)[0]) - .filter(Boolean) as string[] ?? []; + const dirs = + (listResponse.CommonPrefixes?.map((p) => p.Prefix?.slice(Prefix.length).split("/", 2)[0]).filter( + Boolean, + ) as string[]) ?? []; const Body = indexLayout(Prefix, files, dirs); - await client.send(new PutObjectCommand({ - Body, - Bucket, - ContentType: "text/html", - Key: Prefix + "index.html", - })); + await client.send( + new PutObjectCommand({ + Body, + Bucket, + ContentType: "text/html", + Key: Prefix + "index.html", + }), + ); return { files, dirs }; } diff --git a/scripts/hak/README.md b/scripts/hak/README.md index 325795fbfc..04f3676c5f 100644 --- a/scripts/hak/README.md +++ b/scripts/hak/README.md @@ -1,40 +1,40 @@ -hak -=== +# hak This tool builds native dependencies for element-desktop. Here follows some very minimal documentation for it. Goals: - * Must build compiled native node modules in a shippable state - (ie. only dynamically linked against libraries that will be on the - target system, all unnecessary files removed). - * Must be able to build any native module, no matter what build system - it uses (electron-rebuild is supposed to do this job but only works - for modules that use gyp). + +- Must build compiled native node modules in a shippable state + (ie. only dynamically linked against libraries that will be on the + target system, all unnecessary files removed). +- Must be able to build any native module, no matter what build system + it uses (electron-rebuild is supposed to do this job but only works + for modules that use gyp). It's also loosely designed to be a general tool and agnostic to what it's actually building. It's used here to build modules for the electron app but should work equally well for building modules for normal node. -Running -======= +# Running + Hak is invoked with a command and a dependency, eg. `yarn run hak fetch matrix-seshat`. If no dependencies are given, hak runs the command on all dependencies. -Files -===== +# Files + There are a lot of files involved: - * scripts/hak/... - The tool itself - * hak/[dependency] - Files provided by the app that tell hak how to build each of its native dependencies. - Contains a hak.json file and also some script files, each of which must be referenced in hak.json. - * .hak/ - Files generated by hak in the course of doing its job. Includes the dependency module itself and - any of the native dependency's native dependencies. - * .hak/[dependency]/build - An extracted copy of the dependency's node module used to build it. - * .hak/[dependency]/out - Another extracted copy of the dependency, this one contains only what will be shipped. +- scripts/hak/... - The tool itself +- hak/[dependency] - Files provided by the app that tell hak how to build each of its native dependencies. + Contains a hak.json file and also some script files, each of which must be referenced in hak.json. +- .hak/ - Files generated by hak in the course of doing its job. Includes the dependency module itself and + any of the native dependency's native dependencies. +- .hak/[dependency]/build - An extracted copy of the dependency's node module used to build it. +- .hak/[dependency]/out - Another extracted copy of the dependency, this one contains only what will be shipped. + +# Workings -Workings -======== Hak works around native node modules that try to fetch or build their native component in the npm 'install' phase - modules that do this will typically end up with native components targeted to the build platform and the node that npm/yarn is using, which is no good for an @@ -49,33 +49,34 @@ This also means that the dependencies cannot be listed in `dependencies` or try to fetch their native parts. Instead, they are listed in `hakDependencies` which hak reads to install them for you. -Hak will *not* install dependencies for the copy of the module it links into your +Hak will _not_ install dependencies for the copy of the module it links into your project, so if your native module has javascript dependencies that are actually needed at runtime (and not just to fetch / build the native parts), it won't work. Hak will generate a `.yarnrc` in the project directory to set the link directory to its own in the .hak directory (unless one already exists, in which case this is your problem). -Lifecycle -========= +# Lifecycle + Hak is divided into lifecycle stages, in order: - * fetch - Download and extract the source of the dependency - * link - Link the copy of the dependency into your node_modules directory - * fetchDeps - Fetch & extract any native dependencies required to build the module. - * build - The Good Stuff. Configure and build any native dependencies, then the module itself. - * copy - Copy the built artifact from the module build directory to the module output directory. - -hak.json -======== + +- fetch - Download and extract the source of the dependency +- link - Link the copy of the dependency into your node_modules directory +- fetchDeps - Fetch & extract any native dependencies required to build the module. +- build - The Good Stuff. Configure and build any native dependencies, then the module itself. +- copy - Copy the built artifact from the module build directory to the module output directory. + +# hak.json + The scripts section contains scripts used for lifecycle stages that need them (fetch, fetchDeps, build). It also contains 'prune' and 'copy' which are globs of files to delete from the output module directory and copy over from the module build directory to the output module directory, respectively. -Shortcomings -============ +# Shortcomings + Hak doesn't know about dependencies between lifecycle stages, ie. it doesn't know that you need to 'fetch' and 'fetchDeps' before you can 'build', etc. You get to run each individually, and remember the right order. -There is also a *lot* of duplication in the command execution: we should abstract away +There is also a _lot_ of duplication in the command execution: we should abstract away some of the boilerplate required to run commands & so forth. diff --git a/scripts/hak/clean.ts b/scripts/hak/clean.ts index 965ac1b124..f96411f8e3 100644 --- a/scripts/hak/clean.ts +++ b/scripts/hak/clean.ts @@ -14,11 +14,11 @@ See the License for the specific language governing permissions and limitations under the License. */ -import path from 'path'; -import rimraf from 'rimraf'; +import path from "path"; +import rimraf from "rimraf"; -import { DependencyInfo } from './dep'; -import HakEnv from './hakEnv'; +import { DependencyInfo } from "./dep"; +import HakEnv from "./hakEnv"; export default async function clean(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { await new Promise((resolve, reject) => { @@ -32,7 +32,7 @@ export default async function clean(hakEnv: HakEnv, moduleInfo: DependencyInfo): }); await new Promise((resolve, reject) => { - rimraf(path.join(hakEnv.dotHakDir, 'links', moduleInfo.name), (err?: Error | null) => { + rimraf(path.join(hakEnv.dotHakDir, "links", moduleInfo.name), (err?: Error | null) => { if (err) { reject(err); } else { @@ -42,7 +42,7 @@ export default async function clean(hakEnv: HakEnv, moduleInfo: DependencyInfo): }); await new Promise((resolve, reject) => { - rimraf(path.join(hakEnv.projectRoot, 'node_modules', moduleInfo.name), (err?: Error | null) => { + rimraf(path.join(hakEnv.projectRoot, "node_modules", moduleInfo.name), (err?: Error | null) => { if (err) { reject(err); } else { diff --git a/scripts/hak/copy.ts b/scripts/hak/copy.ts index 3494f621c8..66aaaa7d35 100644 --- a/scripts/hak/copy.ts +++ b/scripts/hak/copy.ts @@ -14,15 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -import path from 'path'; -import fsProm from 'fs/promises'; -import childProcess from 'child_process'; -import rimraf from 'rimraf'; -import glob from 'glob'; -import mkdirp from 'mkdirp'; +import path from "path"; +import fsProm from "fs/promises"; +import childProcess from "child_process"; +import rimraf from "rimraf"; +import glob from "glob"; +import mkdirp from "mkdirp"; -import HakEnv from './hakEnv'; -import { DependencyInfo } from './dep'; +import HakEnv from "./hakEnv"; +import { DependencyInfo } from "./dep"; export default async function copy(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { if (moduleInfo.cfg.prune) { @@ -34,7 +34,7 @@ export default async function copy(hakEnv: HakEnv, moduleInfo: DependencyInfo): await mkdirp(moduleInfo.moduleOutDir); process.chdir(moduleInfo.moduleOutDir); await new Promise((resolve, reject) => { - rimraf(moduleInfo.cfg.prune, {}, err => { + rimraf(moduleInfo.cfg.prune, {}, (err) => { err ? reject(err) : resolve(); }); }); @@ -48,46 +48,44 @@ export default async function copy(hakEnv: HakEnv, moduleInfo: DependencyInfo): // is the same as moduleBuildDirs[0], so we're just listing the contents // of the first one. const files = await new Promise((resolve, reject) => { - glob(moduleInfo.cfg.copy, { - nosort: true, - silent: true, - cwd: moduleInfo.moduleBuildDir, - }, (err, files) => { - err ? reject(err) : resolve(files); - }); + glob( + moduleInfo.cfg.copy, + { + nosort: true, + silent: true, + cwd: moduleInfo.moduleBuildDir, + }, + (err, files) => { + err ? reject(err) : resolve(files); + }, + ); }); if (moduleInfo.moduleBuildDirs.length > 1) { if (!hakEnv.isMac()) { console.error( - "You asked me to copy multiple targets but I've only been taught " + - "how to do that on macOS.", + "You asked me to copy multiple targets but I've only been taught " + "how to do that on macOS.", ); throw new Error("Can't copy multiple targets on this platform"); } for (const f of files) { - const components = moduleInfo.moduleBuildDirs.map(dir => path.join(dir, f)); + const components = moduleInfo.moduleBuildDirs.map((dir) => path.join(dir, f)); const dst = path.join(moduleInfo.moduleOutDir, f); await mkdirp(path.dirname(dst)); await new Promise((resolve, reject) => { - childProcess.execFile('lipo', - ['-create', '-output', dst, ...components], (err) => { - if (err) { - reject(err); - } else { - resolve(); - } - }, - ); + childProcess.execFile("lipo", ["-create", "-output", dst, ...components], (err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); }); } } else { - console.log( - "Copying files from " + - moduleInfo.moduleBuildDir + " to " + moduleInfo.moduleOutDir, - ); + console.log("Copying files from " + moduleInfo.moduleBuildDir + " to " + moduleInfo.moduleOutDir); for (const f of files) { console.log("\t" + f); const src = path.join(moduleInfo.moduleBuildDir, f); diff --git a/scripts/hak/dep.ts b/scripts/hak/dep.ts index 5c725a79ed..47f05f1feb 100644 --- a/scripts/hak/dep.ts +++ b/scripts/hak/dep.ts @@ -28,5 +28,5 @@ export interface DependencyInfo { moduleOutDir: string; nodeModuleBinDir: string; depPrefix: string; - scripts: Record Promise >; + scripts: Record Promise>; } diff --git a/scripts/hak/fetch.ts b/scripts/hak/fetch.ts index d569592052..d1bf61d9ae 100644 --- a/scripts/hak/fetch.ts +++ b/scripts/hak/fetch.ts @@ -14,12 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -import fsProm from 'fs/promises'; -import childProcess from 'child_process'; -import pacote from 'pacote'; +import fsProm from "fs/promises"; +import childProcess from "child_process"; +import pacote from "pacote"; -import HakEnv from './hakEnv'; -import { DependencyInfo } from './dep'; +import HakEnv from "./hakEnv"; +import { DependencyInfo } from "./dep"; export default async function fetch(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { let haveModuleBuildDir; @@ -41,15 +41,11 @@ export default async function fetch(hakEnv: HakEnv, moduleInfo: DependencyInfo): console.log("Running yarn install in " + moduleInfo.moduleBuildDir); await new Promise((resolve, reject) => { - const proc = childProcess.spawn( - hakEnv.isWin() ? 'yarn.cmd' : 'yarn', - ['install', '--ignore-scripts'], - { - stdio: 'inherit', - cwd: moduleInfo.moduleBuildDir, - }, - ); - proc.on('exit', code => { + const proc = childProcess.spawn(hakEnv.isWin() ? "yarn.cmd" : "yarn", ["install", "--ignore-scripts"], { + stdio: "inherit", + cwd: moduleInfo.moduleBuildDir, + }); + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); diff --git a/scripts/hak/fetchDeps.ts b/scripts/hak/fetchDeps.ts index 6f0062d607..6e13195b8c 100644 --- a/scripts/hak/fetchDeps.ts +++ b/scripts/hak/fetchDeps.ts @@ -14,10 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ -import mkdirp from 'mkdirp'; +import mkdirp from "mkdirp"; -import { DependencyInfo } from './dep'; -import HakEnv from './hakEnv'; +import { DependencyInfo } from "./dep"; +import HakEnv from "./hakEnv"; export default async function fetchDeps(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { await mkdirp(moduleInfo.moduleDotHakDir); diff --git a/scripts/hak/hakEnv.ts b/scripts/hak/hakEnv.ts index b72439aff6..c63ea37402 100644 --- a/scripts/hak/hakEnv.ts +++ b/scripts/hak/hakEnv.ts @@ -14,16 +14,16 @@ See the License for the specific language governing permissions and limitations under the License. */ -import path from 'path'; -import os from 'os'; +import path from "path"; +import os from "os"; import nodePreGypVersioning from "node-pre-gyp/lib/util/versioning"; import { getElectronVersion } from "app-builder-lib/out/electron/electronVersion"; -import { Arch, Target, TARGETS, getHost, isHostId, TargetId } from './target'; +import { Arch, Target, TARGETS, getHost, isHostId, TargetId } from "./target"; async function getRuntime(projectRoot: string): Promise { const electronVersion = await getElectronVersion(projectRoot); - return electronVersion ? 'electron' : 'node-webkit'; + return electronVersion ? "electron" : "node-webkit"; } async function getRuntimeVersion(projectRoot: string): Promise { @@ -48,7 +48,7 @@ export default class HakEnv { throw new Error(`Unknown target ${targetId}!`); } this.target = target; - this.dotHakDir = path.join(this.projectRoot, '.hak'); + this.dotHakDir = path.join(this.projectRoot, ".hak"); } public async init(): Promise { @@ -62,7 +62,7 @@ export default class HakEnv { // {node_abi}-{platform}-{arch} public getNodeTriple(): string { - return this.getRuntimeAbi() + '-' + this.target.platform + '-' + this.target.arch; + return this.getRuntimeAbi() + "-" + this.target.platform + "-" + this.target.arch; } public getTargetId(): TargetId { @@ -70,15 +70,15 @@ export default class HakEnv { } public isWin(): boolean { - return this.target.platform === 'win32'; + return this.target.platform === "win32"; } public isMac(): boolean { - return this.target.platform === 'darwin'; + return this.target.platform === "darwin"; } public isLinux(): boolean { - return this.target.platform === 'linux'; + return this.target.platform === "linux"; } public getTargetArch(): Arch { @@ -93,7 +93,7 @@ export default class HakEnv { return Object.assign({}, process.env, { npm_config_arch: this.target.arch, npm_config_target_arch: this.target.arch, - npm_config_disturl: 'https://electronjs.org/headers', + npm_config_disturl: "https://electronjs.org/headers", npm_config_runtime: this.runtime, npm_config_target: this.runtimeVersion, npm_config_build_from_source: true, @@ -102,7 +102,7 @@ export default class HakEnv { } public wantsStaticSqlCipherUnix(): boolean { - return this.isMac() || process.env.SQLCIPHER_STATIC == '1'; + return this.isMac() || process.env.SQLCIPHER_STATIC == "1"; } public wantsStaticSqlCipher(): boolean { diff --git a/scripts/hak/index.ts b/scripts/hak/index.ts index 00aec09e9e..783c683f59 100644 --- a/scripts/hak/index.ts +++ b/scripts/hak/index.ts @@ -14,42 +14,27 @@ See the License for the specific language governing permissions and limitations under the License. */ -import path from 'path'; -import findNpmPrefix from 'find-npm-prefix'; +import path from "path"; +import findNpmPrefix from "find-npm-prefix"; -import HakEnv from './hakEnv'; -import { TargetId } from './target'; -import { DependencyInfo } from './dep'; +import HakEnv from "./hakEnv"; +import { TargetId } from "./target"; +import { DependencyInfo } from "./dep"; -const GENERALCOMMANDS = [ - 'target', -]; +const GENERALCOMMANDS = ["target"]; // These can only be run on specific modules -const MODULECOMMANDS = [ - 'check', - 'fetch', - 'link', - 'fetchDeps', - 'build', - 'copy', - 'clean', -]; +const MODULECOMMANDS = ["check", "fetch", "link", "fetchDeps", "build", "copy", "clean"]; // Shortcuts for multiple commands at once (useful for building universal binaries // because you can run the fetch/fetchDeps/build for each arch and then copy/link once) const METACOMMANDS: Record = { - 'fetchandbuild': ['check', 'fetch', 'fetchDeps', 'build'], - 'copyandlink': ['copy', 'link'], + fetchandbuild: ["check", "fetch", "fetchDeps", "build"], + copyandlink: ["copy", "link"], }; // Scripts valid in a hak.json 'scripts' section -const HAKSCRIPTS = [ - 'check', - 'fetch', - 'fetchDeps', - 'build', -]; +const HAKSCRIPTS = ["check", "fetch", "fetchDeps", "build"]; async function main(): Promise { const prefix = await findNpmPrefix(process.cwd()); @@ -65,11 +50,12 @@ async function main(): Promise { // Apply `--target ` option if specified // Can be specified multiple times for the copy command to bundle // multiple archs into a single universal output module) - while (true) { // eslint-disable-line no-constant-condition - const targetIndex = process.argv.indexOf('--target'); + for (;;) { + // eslint-disable-line no-constant-condition + const targetIndex = process.argv.indexOf("--target"); if (targetIndex === -1) break; - if ((targetIndex + 1) >= process.argv.length) { + if (targetIndex + 1 >= process.argv.length) { console.error("--target option specified without a target"); process.exit(1); } @@ -77,7 +63,7 @@ async function main(): Promise { targetIds.push(process.argv.splice(targetIndex, 2)[1] as TargetId); } - const hakEnvs = targetIds.map(tid => new HakEnv(prefix, tid)); + const hakEnvs = targetIds.map((tid) => new HakEnv(prefix, tid)); if (hakEnvs.length == 0) hakEnvs.push(new HakEnv(prefix, null)); for (const h of hakEnvs) { await h.init(); @@ -89,7 +75,7 @@ async function main(): Promise { const hakDepsCfg = packageJson.hakDependencies || {}; for (const dep of Object.keys(hakDepsCfg)) { - const hakJsonPath = path.join(prefix, 'hak', dep, 'hak.json'); + const hakJsonPath = path.join(prefix, "hak", dep, "hak.json"); let hakJson: Record; try { hakJson = await require(hakJsonPath); @@ -102,20 +88,20 @@ async function main(): Promise { name: dep, version: hakDepsCfg[dep], cfg: hakJson, - moduleHakDir: path.join(prefix, 'hak', dep), + moduleHakDir: path.join(prefix, "hak", dep), moduleDotHakDir: path.join(hakEnv.dotHakDir, dep), moduleTargetDotHakDir: path.join(hakEnv.dotHakDir, dep, hakEnv.getTargetId()), - moduleBuildDir: path.join(hakEnv.dotHakDir, dep, hakEnv.getTargetId(), 'build'), - moduleBuildDirs: hakEnvs.map(h => path.join(h.dotHakDir, dep, h.getTargetId(), 'build')), - moduleOutDir: path.join(hakEnv.dotHakDir, 'hakModules', dep), - nodeModuleBinDir: path.join(hakEnv.dotHakDir, dep, hakEnv.getTargetId(), 'build', 'node_modules', '.bin'), - depPrefix: path.join(hakEnv.dotHakDir, dep, hakEnv.getTargetId(), 'opt'), + moduleBuildDir: path.join(hakEnv.dotHakDir, dep, hakEnv.getTargetId(), "build"), + moduleBuildDirs: hakEnvs.map((h) => path.join(h.dotHakDir, dep, h.getTargetId(), "build")), + moduleOutDir: path.join(hakEnv.dotHakDir, "hakModules", dep), + nodeModuleBinDir: path.join(hakEnv.dotHakDir, dep, hakEnv.getTargetId(), "build", "node_modules", ".bin"), + depPrefix: path.join(hakEnv.dotHakDir, dep, hakEnv.getTargetId(), "opt"), scripts: {}, }; for (const s of HAKSCRIPTS) { if (hakJson.scripts && hakJson.scripts[s]) { - const scriptModule = await import(path.join(prefix, 'hak', dep, hakJson.scripts[s])); + const scriptModule = await import(path.join(prefix, "hak", dep, hakJson.scripts[s])); if (scriptModule.__esModule) { deps[dep].scripts[s] = scriptModule.default; } else { @@ -127,14 +113,14 @@ async function main(): Promise { let cmds: string[]; if (process.argv.length < 3) { - cmds = ['check', 'fetch', 'fetchDeps', 'build', 'copy', 'link']; + cmds = ["check", "fetch", "fetchDeps", "build", "copy", "link"]; } else if (METACOMMANDS[process.argv[2]]) { cmds = METACOMMANDS[process.argv[2]]; } else { cmds = [process.argv[2]]; } - if (hakEnvs.length > 1 && cmds.some(c => !['copy', 'link'].includes(c))) { + if (hakEnvs.length > 1 && cmds.some((c) => !["copy", "link"].includes(c))) { // We allow link here too for convenience because it's completely arch independent console.error("Multiple targets only supported with the copy command"); return; @@ -145,7 +131,7 @@ async function main(): Promise { for (const cmd of cmds) { if (GENERALCOMMANDS.includes(cmd)) { - if (cmd === 'target') { + if (cmd === "target") { console.log(hakEnv.getNodeTriple()); } return; @@ -160,15 +146,12 @@ async function main(): Promise { process.exit(1); } - const cmdFunc = (await import('./' + cmd)).default; + const cmdFunc = (await import("./" + cmd)).default; for (const mod of modules) { const depInfo = deps[mod]; if (depInfo === undefined) { - console.log( - "Module " + mod + " not found - is it in hakDependencies " + - "in your package.json?", - ); + console.log("Module " + mod + " not found - is it in hakDependencies " + "in your package.json?"); process.exit(1); } console.log("hak " + cmd + ": " + mod); @@ -177,7 +160,7 @@ async function main(): Promise { } } -main().catch(err => { +main().catch((err) => { console.error(err); process.exit(1); }); diff --git a/scripts/hak/link.ts b/scripts/hak/link.ts index d0d7b5654b..05fd4e623e 100644 --- a/scripts/hak/link.ts +++ b/scripts/hak/link.ts @@ -14,16 +14,16 @@ See the License for the specific language governing permissions and limitations under the License. */ -import path from 'path'; -import os from 'os'; -import fsProm from 'fs/promises'; -import childProcess from 'child_process'; +import path from "path"; +import os from "os"; +import fsProm from "fs/promises"; +import childProcess from "child_process"; -import HakEnv from './hakEnv'; -import { DependencyInfo } from './dep'; +import HakEnv from "./hakEnv"; +import { DependencyInfo } from "./dep"; export default async function link(hakEnv: HakEnv, moduleInfo: DependencyInfo): Promise { - const yarnrc = path.join(hakEnv.projectRoot, '.yarnrc'); + const yarnrc = path.join(hakEnv.projectRoot, ".yarnrc"); // this is fairly terrible but it's reasonably clunky to either parse a yarnrc // properly or get yarn to do it, so this will probably suffice for now. // We just check to see if there is a local .yarnrc at all, and assume that @@ -43,28 +43,28 @@ export default async function link(hakEnv: HakEnv, moduleInfo: DependencyInfo): // (ie. Windows absolute paths) but strings in quotes get parsed as // JSON so need to be valid JSON encoded strings (ie. have the // backslashes escaped). JSON.stringify will add quotes and escape. - '--link-folder ' + JSON.stringify(path.join(hakEnv.dotHakDir, 'links')) + os.EOL, + "--link-folder " + JSON.stringify(path.join(hakEnv.dotHakDir, "links")) + os.EOL, ); } - const yarnCmd = 'yarn' + (hakEnv.isWin() ? '.cmd' : ''); + const yarnCmd = "yarn" + (hakEnv.isWin() ? ".cmd" : ""); await new Promise((resolve, reject) => { - const proc = childProcess.spawn(yarnCmd, ['link'], { + const proc = childProcess.spawn(yarnCmd, ["link"], { cwd: moduleInfo.moduleOutDir, - stdio: 'inherit', + stdio: "inherit", }); - proc.on('exit', code => { + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); await new Promise((resolve, reject) => { - const proc = childProcess.spawn(yarnCmd, ['link', moduleInfo.name], { + const proc = childProcess.spawn(yarnCmd, ["link", moduleInfo.name], { cwd: hakEnv.projectRoot, - stdio: 'inherit', + stdio: "inherit", }); - proc.on('exit', code => { + proc.on("exit", (code) => { code ? reject(code) : resolve(); }); }); diff --git a/scripts/hak/target.ts b/scripts/hak/target.ts index 84feff84d5..2d0fa71818 100644 --- a/scripts/hak/target.ts +++ b/scripts/hak/target.ts @@ -20,29 +20,29 @@ import { GLIBC, MUSL, family as processLibC } from "detect-libc"; // details in a single string. // See https://doc.rust-lang.org/rustc/platform-support.html. export type TargetId = - 'aarch64-apple-darwin' | - 'x86_64-apple-darwin' | - 'universal-apple-darwin' | - 'i686-pc-windows-msvc' | - 'x86_64-pc-windows-msvc' | - 'i686-unknown-linux-musl' | - 'i686-unknown-linux-gnu' | - 'x86_64-unknown-linux-musl' | - 'x86_64-unknown-linux-gnu' | - 'aarch64-unknown-linux-musl' | - 'aarch64-unknown-linux-gnu' | - 'powerpc64le-unknown-linux-musl' | - 'powerpc64le-unknown-linux-gnu'; + | "aarch64-apple-darwin" + | "x86_64-apple-darwin" + | "universal-apple-darwin" + | "i686-pc-windows-msvc" + | "x86_64-pc-windows-msvc" + | "i686-unknown-linux-musl" + | "i686-unknown-linux-gnu" + | "x86_64-unknown-linux-musl" + | "x86_64-unknown-linux-gnu" + | "aarch64-unknown-linux-musl" + | "aarch64-unknown-linux-gnu" + | "powerpc64le-unknown-linux-musl" + | "powerpc64le-unknown-linux-gnu"; // Values are expected to match those used in `process.platform`. -export type Platform = 'darwin' | 'linux' | 'win32'; +export type Platform = "darwin" | "linux" | "win32"; // Values are expected to match those used in `process.arch`. -export type Arch = 'arm64' | 'ia32' | 'x64' | 'ppc64' | 'universal'; +export type Arch = "arm64" | "ia32" | "x64" | "ppc64" | "universal"; // Values are expected to match those used by Visual Studio's `vcvarsall.bat`. // See https://docs.microsoft.com/cpp/build/building-on-the-command-line?view=msvc-160#vcvarsall-syntax -export type VcVarsArch = 'amd64' | 'arm64' | 'x86'; +export type VcVarsArch = "amd64" | "arm64" | "x86"; export type Target = { id: TargetId; @@ -51,140 +51,135 @@ export type Target = { }; export type WindowsTarget = Target & { - platform: 'win32'; + platform: "win32"; vcVarsArch: VcVarsArch; }; export type LinuxTarget = Target & { - platform: 'linux'; + platform: "linux"; libC: typeof processLibC; }; export type UniversalTarget = Target & { - arch: 'universal'; + arch: "universal"; subtargets: Target[]; }; const aarch64AppleDarwin: Target = { - id: 'aarch64-apple-darwin', - platform: 'darwin', - arch: 'arm64', + id: "aarch64-apple-darwin", + platform: "darwin", + arch: "arm64", }; const x8664AppleDarwin: Target = { - id: 'x86_64-apple-darwin', - platform: 'darwin', - arch: 'x64', + id: "x86_64-apple-darwin", + platform: "darwin", + arch: "x64", }; const universalAppleDarwin: UniversalTarget = { - id: 'universal-apple-darwin', - platform: 'darwin', - arch: 'universal', - subtargets: [ - aarch64AppleDarwin, - x8664AppleDarwin, - ], + id: "universal-apple-darwin", + platform: "darwin", + arch: "universal", + subtargets: [aarch64AppleDarwin, x8664AppleDarwin], }; const i686PcWindowsMsvc: WindowsTarget = { - id: 'i686-pc-windows-msvc', - platform: 'win32', - arch: 'ia32', - vcVarsArch: 'x86', + id: "i686-pc-windows-msvc", + platform: "win32", + arch: "ia32", + vcVarsArch: "x86", }; const x8664PcWindowsMsvc: WindowsTarget = { - id: 'x86_64-pc-windows-msvc', - platform: 'win32', - arch: 'x64', - vcVarsArch: 'amd64', + id: "x86_64-pc-windows-msvc", + platform: "win32", + arch: "x64", + vcVarsArch: "amd64", }; const x8664UnknownLinuxGnu: LinuxTarget = { - id: 'x86_64-unknown-linux-gnu', - platform: 'linux', - arch: 'x64', + id: "x86_64-unknown-linux-gnu", + platform: "linux", + arch: "x64", libC: GLIBC, }; const x8664UnknownLinuxMusl: LinuxTarget = { - id: 'x86_64-unknown-linux-musl', - platform: 'linux', - arch: 'x64', + id: "x86_64-unknown-linux-musl", + platform: "linux", + arch: "x64", libC: MUSL, }; const i686UnknownLinuxGnu: LinuxTarget = { - id: 'i686-unknown-linux-gnu', - platform: 'linux', - arch: 'ia32', + id: "i686-unknown-linux-gnu", + platform: "linux", + arch: "ia32", libC: GLIBC, }; const i686UnknownLinuxMusl: LinuxTarget = { - id: 'i686-unknown-linux-musl', - platform: 'linux', - arch: 'ia32', + id: "i686-unknown-linux-musl", + platform: "linux", + arch: "ia32", libC: MUSL, }; const aarch64UnknownLinuxGnu: LinuxTarget = { - id: 'aarch64-unknown-linux-gnu', - platform: 'linux', - arch: 'arm64', + id: "aarch64-unknown-linux-gnu", + platform: "linux", + arch: "arm64", libC: GLIBC, }; const aarch64UnknownLinuxMusl: LinuxTarget = { - id: 'aarch64-unknown-linux-musl', - platform: 'linux', - arch: 'arm64', + id: "aarch64-unknown-linux-musl", + platform: "linux", + arch: "arm64", libC: MUSL, }; const powerpc64leUnknownLinuxGnu: LinuxTarget = { - id: 'powerpc64le-unknown-linux-gnu', - platform: 'linux', - arch: 'ppc64', + id: "powerpc64le-unknown-linux-gnu", + platform: "linux", + arch: "ppc64", libC: GLIBC, }; const powerpc64leUnknownLinuxMusl: LinuxTarget = { - id: 'powerpc64le-unknown-linux-musl', - platform: 'linux', - arch: 'ppc64', + id: "powerpc64le-unknown-linux-musl", + platform: "linux", + arch: "ppc64", libC: MUSL, }; export const TARGETS: Record = { // macOS - 'aarch64-apple-darwin': aarch64AppleDarwin, - 'x86_64-apple-darwin': x8664AppleDarwin, - 'universal-apple-darwin': universalAppleDarwin, + "aarch64-apple-darwin": aarch64AppleDarwin, + "x86_64-apple-darwin": x8664AppleDarwin, + "universal-apple-darwin": universalAppleDarwin, // Windows - 'i686-pc-windows-msvc': i686PcWindowsMsvc, - 'x86_64-pc-windows-msvc': x8664PcWindowsMsvc, + "i686-pc-windows-msvc": i686PcWindowsMsvc, + "x86_64-pc-windows-msvc": x8664PcWindowsMsvc, // Linux - 'i686-unknown-linux-musl': i686UnknownLinuxMusl, - 'i686-unknown-linux-gnu': i686UnknownLinuxGnu, - 'x86_64-unknown-linux-musl': x8664UnknownLinuxMusl, - 'x86_64-unknown-linux-gnu': x8664UnknownLinuxGnu, - 'aarch64-unknown-linux-musl': aarch64UnknownLinuxMusl, - 'aarch64-unknown-linux-gnu': aarch64UnknownLinuxGnu, - 'powerpc64le-unknown-linux-musl': powerpc64leUnknownLinuxMusl, - 'powerpc64le-unknown-linux-gnu': powerpc64leUnknownLinuxGnu, + "i686-unknown-linux-musl": i686UnknownLinuxMusl, + "i686-unknown-linux-gnu": i686UnknownLinuxGnu, + "x86_64-unknown-linux-musl": x8664UnknownLinuxMusl, + "x86_64-unknown-linux-gnu": x8664UnknownLinuxGnu, + "aarch64-unknown-linux-musl": aarch64UnknownLinuxMusl, + "aarch64-unknown-linux-gnu": aarch64UnknownLinuxGnu, + "powerpc64le-unknown-linux-musl": powerpc64leUnknownLinuxMusl, + "powerpc64le-unknown-linux-gnu": powerpc64leUnknownLinuxGnu, }; export function getHost(): Target | undefined { - return Object.values(TARGETS).find(target => ( - target.platform === process.platform && - target.arch === process.arch && - ( - process.platform !== 'linux' || - (target as LinuxTarget).libC === processLibC - ) - )); + return Object.values(TARGETS).find( + (target) => + target.platform === process.platform && + target.arch === process.arch && + (process.platform !== "linux" || (target as LinuxTarget).libC === processLibC), + ); } export function isHostId(id: TargetId): boolean { diff --git a/scripts/set-version.ts b/scripts/set-version.ts index 4b896ab3fe..2ae6ec7d51 100755 --- a/scripts/set-version.ts +++ b/scripts/set-version.ts @@ -11,31 +11,35 @@ import * as childProcess from "child_process"; export async function versionFromAsar(): Promise { try { - await fs.stat('webapp.asar'); + await fs.stat("webapp.asar"); } catch (e) { throw new Error("No 'webapp.asar' found. Run 'yarn run fetch'"); } - return asar.extractFile('webapp.asar', 'version').toString().trim(); + return asar.extractFile("webapp.asar", "version").toString().trim(); } export async function setPackageVersion(ver: string): Promise { // set version in package.json: electron-builder will use this to populate // all the various version fields await new Promise((resolve, reject) => { - childProcess.execFile(process.platform === 'win32' ? 'yarn.cmd' : 'yarn', [ - 'version', - '-s', - '--no-git-tag-version', // This also means "don't commit to git" as it turns out - '--new-version', - ver, - ], (err) => { - if (err) { - reject(err); - } else { - resolve(); - } - }); + childProcess.execFile( + process.platform === "win32" ? "yarn.cmd" : "yarn", + [ + "version", + "-s", + "--no-git-tag-version", // This also means "don't commit to git" as it turns out + "--new-version", + ver, + ], + (err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }, + ); }); } @@ -49,10 +53,12 @@ async function main(args: string[]): Promise { } if (require.main === module) { - main(process.argv.slice(2)).then((ret) => { - process.exit(ret); - }).catch(e => { - console.error(e); - process.exit(1); - }); + main(process.argv.slice(2)) + .then((ret) => { + process.exit(ret); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); } diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json index 198ae1135a..f032c776f6 100644 --- a/scripts/tsconfig.json +++ b/scripts/tsconfig.json @@ -1,21 +1,16 @@ { - "compilerOptions": { - "resolveJsonModule": true, - "moduleResolution": "node", - "esModuleInterop": true, - "target": "es2017", - "module": "commonjs", - "sourceMap": false, - "strict": true, - "lib": [ - "es2019", - "dom" - ] - }, - "include": [ - "./**/*.ts" - ], - "ts-node": { - "transpileOnly": true - } + "compilerOptions": { + "resolveJsonModule": true, + "moduleResolution": "node", + "esModuleInterop": true, + "target": "es2017", + "module": "commonjs", + "sourceMap": false, + "strict": true, + "lib": ["es2019", "dom"] + }, + "include": ["./**/*.ts"], + "ts-node": { + "transpileOnly": true + } } diff --git a/src/@types/keytar.d.ts b/src/@types/keytar.d.ts index 62882c973d..ba396b5128 100644 --- a/src/@types/keytar.d.ts +++ b/src/@types/keytar.d.ts @@ -50,5 +50,5 @@ declare module "keytar" { * * @returns A promise for the array of found credentials. */ - export function findCredentials(service: string): Promise>; + export function findCredentials(service: string): Promise>; } diff --git a/src/electron-main.ts b/src/electron-main.ts index d91e0a152d..455f0c104e 100644 --- a/src/electron-main.ts +++ b/src/electron-main.ts @@ -19,19 +19,11 @@ limitations under the License. // Squirrel on windows starts the app with various flags as hooks to tell us when we've been installed/uninstalled etc. import "./squirrelhooks"; -import { - app, - BrowserWindow, - Menu, - autoUpdater, - protocol, - dialog, - nativeTheme, -} from "electron"; +import { app, BrowserWindow, Menu, autoUpdater, protocol, dialog, nativeTheme } from "electron"; import AutoLaunch from "auto-launch"; import path from "path"; -import windowStateKeeper from 'electron-window-state'; -import Store from 'electron-store'; +import windowStateKeeper from "electron-window-state"; +import Store from "electron-store"; import { promises as afs } from "fs"; import { URL } from "url"; import minimist from "minimist"; @@ -41,11 +33,11 @@ import "./keytar"; import "./seshat"; import "./settings"; import * as tray from "./tray"; -import { buildMenuTemplate } from './vectormenu'; -import webContentsHandler from './webcontents-handler'; -import * as updater from './updater'; -import { getProfileFromDeeplink, protocolInit } from './protocol'; -import { _t, AppLocalization } from './language-helper'; +import { buildMenuTemplate } from "./vectormenu"; +import webContentsHandler from "./webcontents-handler"; +import * as updater from "./updater"; +import { getProfileFromDeeplink, protocolInit } from "./protocol"; +import { _t, AppLocalization } from "./language-helper"; import Input = Electron.Input; const argv = minimist(process.argv, { @@ -66,8 +58,7 @@ if (argv["help"]) { console.log(" --no-update: Disable automatic updating."); console.log(" --hidden: Start the application hidden in the system tray."); console.log(" --help: Displays this help message."); - console.log("And more such as --proxy, see:" + - "https://electronjs.org/docs/api/command-line-switches"); + console.log("And more such as --proxy, see:" + "https://electronjs.org/docs/api/command-line-switches"); app.exit(); } @@ -75,7 +66,7 @@ if (argv["help"]) { // // as soon as the app path is set, so pick a random path in it that must exist if it's a // // real user data directory. // function isRealUserDataDir(d: string): boolean { -// return fs.existsSync(path.join(d, 'IndexedDB')); +// return fs.existsSync(path.join(d, "IndexedDB")); // } // check if we are passed a profile in the SSO callback url @@ -84,77 +75,76 @@ let userDataPath: string; const userDataPathInProtocol = getProfileFromDeeplink(argv["_"]); if (userDataPathInProtocol) { userDataPath = userDataPathInProtocol; -} else if (argv['profile-dir']) { - userDataPath = argv['profile-dir']; +} else if (argv["profile-dir"]) { + userDataPath = argv["profile-dir"]; } else { - let newUserDataPath = app.getPath('userData'); - if (argv['profile']) { - newUserDataPath += '-' + argv['profile']; + let newUserDataPath = app.getPath("userData"); + if (argv["profile"]) { + newUserDataPath += "-" + argv["profile"]; } // const newUserDataPathExists = isRealUserDataDir(newUserDataPath); - // let oldUserDataPath = path.join(app.getPath('appData'), app.getName().replace('Element', 'Riot')); - // if (argv['profile']) { - // oldUserDataPath += '-' + argv['profile']; + // let oldUserDataPath = path.join(app.getPath("appData"), app.getName().replace("Element", "Riot")); + // if (argv["profile"]) { + // oldUserDataPath += "-" + argv["profile"]; // } // const oldUserDataPathExists = isRealUserDataDir(oldUserDataPath); - // console.log(newUserDataPath + " exists: " + (newUserDataPathExists ? 'yes' : 'no')); - // console.log(oldUserDataPath + " exists: " + (oldUserDataPathExists ? 'yes' : 'no')); + // console.log(newUserDataPath + " exists: " + (newUserDataPathExists ? "yes" : "no")); + // console.log(oldUserDataPath + " exists: " + (oldUserDataPathExists ? "yes" : "no")); // if (!newUserDataPathExists && oldUserDataPathExists) { // console.log("Using legacy user data path: " + oldUserDataPath); // userDataPath = oldUserDataPath; // } else { - userDataPath = newUserDataPath; + userDataPath = newUserDataPath; // } } -app.setPath('userData', userDataPath); +app.setPath("userData", userDataPath); async function tryPaths(name: string, root: string, rawPaths: string[]): Promise { // Make everything relative to root - const paths = rawPaths.map(p => path.join(root, p)); + const paths = rawPaths.map((p) => path.join(root, p)); for (const p of paths) { try { await afs.stat(p); - return p + '/'; - } catch (e) { - } + return p + "/"; + } catch (e) {} } console.log(`Couldn't find ${name} files in any of: `); for (const p of paths) { - console.log("\t"+path.resolve(p)); + console.log("\t" + path.resolve(p)); } throw new Error(`Failed to find ${name} files`); } -const homeserverProps = ['default_is_url', 'default_hs_url', 'default_server_name', 'default_server_config'] as const; +const homeserverProps = ["default_is_url", "default_hs_url", "default_server_name", "default_server_config"] as const; // Find the webapp resources and set up things that require them async function setupGlobals(): Promise { // find the webapp asar. asarPath = await tryPaths("webapp", __dirname, [ // If run from the source checkout, this will be in the directory above - '../webapp.asar', + "../webapp.asar", // but if run from a packaged application, electron-main.js will be in // a different asar file so it will be two levels above - '../../webapp.asar', + "../../webapp.asar", // also try without the 'asar' suffix to allow symlinking in a directory - '../webapp', + "../webapp", // from a packaged application - '../../webapp', + "../../webapp", ]); // we assume the resources path is in the same place as the asar resPath = await tryPaths("res", path.dirname(asarPath), [ // If run from the source checkout - 'res', + "res", // if run from packaged application - '', + "", ]); try { // eslint-disable-next-line @typescript-eslint/no-var-requires - global.vectorConfig = require(asarPath + 'config.json'); + global.vectorConfig = require(asarPath + "config.json"); } catch (e) { // it would be nice to check the error code here and bail if the config // is unparsable, but we get MODULE_NOT_FOUND in the case of a missing @@ -166,15 +156,15 @@ async function setupGlobals(): Promise { try { // Load local config and use it to override values from the one baked with the build // eslint-disable-next-line @typescript-eslint/no-var-requires - const localConfig = require(path.join(app.getPath('userData'), 'config.json')); + const localConfig = require(path.join(app.getPath("userData"), "config.json")); // If the local config has a homeserver defined, don't use the homeserver from the build // config. This is to avoid a problem where Riot thinks there are multiple homeservers // defined, and panics as a result. - if (Object.keys(localConfig).find(k => homeserverProps.includes(k))) { + if (Object.keys(localConfig).find((k) => homeserverProps.includes(k))) { // Rip out all the homeserver options from the vector config global.vectorConfig = Object.keys(global.vectorConfig) - .filter(k => !homeserverProps.includes(k)) + .filter((k) => !homeserverProps.includes(k)) .reduce((obj, key) => { obj[key] = global.vectorConfig[key]; return obj; @@ -186,9 +176,10 @@ async function setupGlobals(): Promise { if (e instanceof SyntaxError) { dialog.showMessageBox({ type: "error", - title: `Your ${global.vectorConfig.brand || 'Element'} is misconfigured`, - message: `Your custom ${global.vectorConfig.brand || 'Element'} configuration contains invalid JSON. ` + - `Please correct the problem and reopen ${global.vectorConfig.brand || 'Element'}.`, + title: `Your ${global.vectorConfig.brand || "Element"} is misconfigured`, + message: + `Your custom ${global.vectorConfig.brand || "Element"} configuration contains invalid JSON. ` + + `Please correct the problem and reopen ${global.vectorConfig.brand || "Element"}.`, detail: e.message || "", }); } @@ -198,16 +189,16 @@ async function setupGlobals(): Promise { // The tray icon // It's important to call `path.join` so we don't end up with the packaged asar in the final path. - const iconFile = `element.${process.platform === 'win32' ? 'ico' : 'png'}`; + const iconFile = `element.${process.platform === "win32" ? "ico" : "png"}`; iconPath = path.join(resPath, "img", iconFile); global.trayConfig = { icon_path: iconPath, - brand: global.vectorConfig.brand || 'SchildiChat', + brand: global.vectorConfig.brand || "SchildiChat", }; // launcher global.launcher = new AutoLaunch({ - name: global.vectorConfig.brand || 'SchildiChat', + name: global.vectorConfig.brand || "SchildiChat", isHidden: true, mac: { useLaunchAgent: true, @@ -218,9 +209,9 @@ async function setupGlobals(): Promise { // async function moveAutoLauncher(): Promise { // // Look for an auto-launcher under 'Riot' and if we find one, port it's // // enabled/disabled-ness over to the new 'Element' launcher -// if (!global.vectorConfig.brand || global.vectorConfig.brand === 'Element') { +// if (!global.vectorConfig.brand || global.vectorConfig.brand === "Element") { // const oldLauncher = new AutoLaunch({ -// name: 'Riot', +// name: "Riot", // isHidden: true, // mac: { // useLaunchAgent: true, @@ -239,26 +230,30 @@ global.store = new Store({ name: "electron-config" }); global.appQuitting = false; const exitShortcuts: Array<(input: Input, platform: string) => boolean> = [ - (input, platform): boolean => platform !== 'darwin' && input.alt && input.key.toUpperCase() === 'F4', - (input, platform): boolean => platform !== 'darwin' && input.control && input.key.toUpperCase() === 'Q', - (input, platform): boolean => platform === 'darwin' && input.meta && input.key.toUpperCase() === 'Q', + (input, platform): boolean => platform !== "darwin" && input.alt && input.key.toUpperCase() === "F4", + (input, platform): boolean => platform !== "darwin" && input.control && input.key.toUpperCase() === "Q", + (input, platform): boolean => platform === "darwin" && input.meta && input.key.toUpperCase() === "Q", ]; const warnBeforeExit = (event: Event, input: Input): void => { - const shouldWarnBeforeExit = global.store.get('warnBeforeExit', true); + const shouldWarnBeforeExit = global.store.get("warnBeforeExit", true); const exitShortcutPressed = - input.type === 'keyDown' && exitShortcuts.some(shortcutFn => shortcutFn(input, process.platform)); + input.type === "keyDown" && exitShortcuts.some((shortcutFn) => shortcutFn(input, process.platform)); if (shouldWarnBeforeExit && exitShortcutPressed && global.mainWindow) { - const shouldCancelCloseRequest = dialog.showMessageBoxSync(global.mainWindow, { - type: "question", - buttons: [_t("Cancel"), _t("Close %(brand)s", { - brand: global.vectorConfig.brand || 'Element', - })], - message: _t("Are you sure you want to quit?"), - defaultId: 1, - cancelId: 0, - }) === 0; + const shouldCancelCloseRequest = + dialog.showMessageBoxSync(global.mainWindow, { + type: "question", + buttons: [ + _t("Cancel"), + _t("Close %(brand)s", { + brand: global.vectorConfig.brand || "Element", + }), + ], + message: _t("Are you sure you want to quit?"), + defaultId: 1, + cancelId: 0, + }) === 0; if (shouldCancelCloseRequest) { event.preventDefault(); @@ -272,20 +267,20 @@ const warnBeforeExit = (event: Event, input: Input): void => { // no other way to catch this error). // Assuming we generally run from the console when developing, // this is far preferable. -process.on('uncaughtException', function(error: Error): void { - console.log('Unhandled exception', error); +process.on("uncaughtException", function (error: Error): void { + console.log("Unhandled exception", error); }); -app.commandLine.appendSwitch('--enable-usermedia-screen-capturing'); -if (!app.commandLine.hasSwitch('enable-features')) { - app.commandLine.appendSwitch('enable-features', 'WebRTCPipeWireCapturer'); +app.commandLine.appendSwitch("--enable-usermedia-screen-capturing"); +if (!app.commandLine.hasSwitch("enable-features")) { + app.commandLine.appendSwitch("enable-features", "WebRTCPipeWireCapturer"); } -// electron requestSingleInstanceLock does not work on macos-mas builds, only use it on non mas builds +// SC: electron requestSingleInstanceLock does not work on macos-mas builds, only use it on non mas builds if (process.mas !== true) { const gotLock = app.requestSingleInstanceLock(); if (!gotLock) { - console.log('Other instance detected: exiting'); + console.log("Other instance detected: exiting"); app.exit(); } } @@ -298,14 +293,16 @@ protocolInit(); // work. // Also mark it as secure (ie. accessing resources from this // protocol and HTTPS won't trigger mixed content warnings). -protocol.registerSchemesAsPrivileged([{ - scheme: 'vector', - privileges: { - standard: true, - secure: true, - supportFetchAPI: true, +protocol.registerSchemesAsPrivileged([ + { + scheme: "vector", + privileges: { + standard: true, + secure: true, + supportFetchAPI: true, + }, }, -}]); +]); // Turn the sandbox on for *all* windows we might generate. Doing this means we don't // have to specify a `sandbox: true` to each BrowserWindow. @@ -319,15 +316,15 @@ protocol.registerSchemesAsPrivileged([{ app.enableSandbox(); // We disable media controls here. We do this because calls use audio and video elements and they sometimes capture the media keys. See https://github.com/vector-im/element-web/issues/15704 -app.commandLine.appendSwitch('disable-features', 'HardwareMediaKeyHandling,MediaSessionService'); +app.commandLine.appendSwitch("disable-features", "HardwareMediaKeyHandling,MediaSessionService"); // Disable hardware acceleration if the setting has been set. -if (global.store.get('disableHardwareAcceleration', false) === true) { +if (global.store.get("disableHardwareAcceleration", false) === true) { console.log("Disabling hardware acceleration."); app.disableHardwareAcceleration(); } -app.on('ready', async () => { +app.on("ready", async () => { try { await setupGlobals(); // await moveAutoLauncher(); @@ -341,16 +338,16 @@ app.on('ready', async () => { return; } - if (argv['devtools']) { + if (argv["devtools"]) { try { // eslint-disable-next-line @typescript-eslint/no-var-requires - const { default: installExt, REACT_DEVELOPER_TOOLS, REACT_PERF } = require('electron-devtools-installer'); + const { default: installExt, REACT_DEVELOPER_TOOLS, REACT_PERF } = require("electron-devtools-installer"); installExt(REACT_DEVELOPER_TOOLS) .then((name: string) => console.log(`Added Extension: ${name}`)) - .catch((err: unknown) => console.log('An error occurred: ', err)); + .catch((err: unknown) => console.log("An error occurred: ", err)); installExt(REACT_PERF) .then((name: string) => console.log(`Added Extension: ${name}`)) - .catch((err: unknown) => console.log('An error occurred: ', err)); + .catch((err: unknown) => console.log("An error occurred: ", err)); } catch (e) { console.log(e); } @@ -364,36 +361,36 @@ app.on('ready', async () => { nativeTheme.themeSource = 'system'; } - protocol.registerFileProtocol('vector', (request, callback) => { - if (request.method !== 'GET') { + protocol.registerFileProtocol("vector", (request, callback) => { + if (request.method !== "GET") { callback({ error: -322 }); // METHOD_NOT_SUPPORTED from chromium/src/net/base/net_error_list.h return null; } const parsedUrl = new URL(request.url); - if (parsedUrl.protocol !== 'vector:') { + if (parsedUrl.protocol !== "vector:") { callback({ error: -302 }); // UNKNOWN_URL_SCHEME return; } - if (parsedUrl.host !== 'vector') { + if (parsedUrl.host !== "vector") { callback({ error: -105 }); // NAME_NOT_RESOLVED return; } - const target = parsedUrl.pathname.split('/'); + const target = parsedUrl.pathname.split("/"); // path starts with a '/' - if (target[0] !== '') { + if (target[0] !== "") { callback({ error: -6 }); // FILE_NOT_FOUND return; } - if (target[target.length - 1] == '') { - target[target.length - 1] = 'index.html'; + if (target[target.length - 1] == "") { + target[target.length - 1] = "index.html"; } let baseDir: string; - if (target[1] === 'webapp') { + if (target[1] === "webapp") { baseDir = asarPath; } else { callback({ error: -6 }); // FILE_NOT_FOUND @@ -405,7 +402,7 @@ app.on('ready', async () => { baseDir = path.normalize(baseDir); const relTarget = path.normalize(path.join(...target.slice(2))); - if (relTarget.startsWith('..')) { + if (relTarget.startsWith("..")) { callback({ error: -6 }); // FILE_NOT_FOUND return; } @@ -416,13 +413,13 @@ app.on('ready', async () => { }); }); - if (argv['no-update']) { + if (argv["no-update"]) { console.log('Auto update disabled via command line flag "--no-update"'); - } else if (global.vectorConfig['update_base_url']) { - console.log(`Starting auto update with base URL: ${global.vectorConfig['update_base_url']}`); - updater.start(global.vectorConfig['update_base_url']); + } else if (global.vectorConfig["update_base_url"]) { + console.log(`Starting auto update with base URL: ${global.vectorConfig["update_base_url"]}`); + updater.start(global.vectorConfig["update_base_url"]); } else { - console.log('No update_base_url is defined: auto update is disabled'); + console.log("No update_base_url is defined: auto update is disabled"); } // Load the previous window state with fallback to defaults @@ -434,11 +431,11 @@ app.on('ready', async () => { const preloadScript = path.normalize(`${__dirname}/preload.js`); global.mainWindow = new BrowserWindow({ // https://www.electronjs.org/docs/faq#the-font-looks-blurry-what-is-this-and-what-can-i-do - backgroundColor: '#fff', + backgroundColor: "#fff", icon: iconPath, show: false, - autoHideMenuBar: global.store.get('autoHideMenuBar', true), + autoHideMenuBar: global.store.get("autoHideMenuBar", true), x: mainWindowState.x, y: mainWindowState.y, @@ -452,20 +449,20 @@ app.on('ready', async () => { webgl: true, }, }); - global.mainWindow.loadURL('vector://vector/webapp/'); + global.mainWindow.loadURL("vector://vector/webapp/"); // Handle spellchecker // For some reason spellCheckerEnabled isn't persisted, so we have to use the store here global.mainWindow.webContents.session.setSpellCheckerEnabled(global.store.get("spellCheckerEnabled", true)); // Create trayIcon icon - if (global.store.get('minimizeToTray', true)) tray.create(global.trayConfig); + if (global.store.get("minimizeToTray", true)) tray.create(global.trayConfig); - global.mainWindow.once('ready-to-show', () => { + global.mainWindow.once("ready-to-show", () => { if (!global.mainWindow) return; mainWindowState.manage(global.mainWindow); - if (!argv['hidden']) { + if (!argv["hidden"]) { global.mainWindow.show(); } else { // hide here explicitly because window manage above sometimes shows it @@ -473,21 +470,21 @@ app.on('ready', async () => { } }); - global.mainWindow.webContents.on('before-input-event', warnBeforeExit); + global.mainWindow.webContents.on("before-input-event", warnBeforeExit); - global.mainWindow.on('closed', () => { + global.mainWindow.on("closed", () => { global.mainWindow = null; }); - global.mainWindow.on('close', async (e) => { + global.mainWindow.on("close", async (e) => { // If we are not quitting and have a tray icon then minimize to tray - if (!global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) { + if (!global.appQuitting && (tray.hasTray() || process.platform === "darwin")) { // On Mac, closing the window just hides it // (this is generally how single-window Mac apps // behave, eg. Mail.app) e.preventDefault(); if (global.mainWindow?.isFullScreen()) { - global.mainWindow.once('leave-full-screen', () => global.mainWindow?.hide()); + global.mainWindow.once("leave-full-screen", () => global.mainWindow?.hide()); global.mainWindow.setFullScreen(false); } else { @@ -498,12 +495,12 @@ app.on('ready', async () => { } }); - if (process.platform === 'win32') { + if (process.platform === "win32") { // Handle forward/backward mouse buttons in Windows - global.mainWindow.on('app-command', (e, cmd) => { - if (cmd === 'browser-backward' && global.mainWindow?.webContents.canGoBack()) { + global.mainWindow.on("app-command", (e, cmd) => { + if (cmd === "browser-backward" && global.mainWindow?.webContents.canGoBack()) { global.mainWindow.webContents.goBack(); - } else if (cmd === 'browser-forward' && global.mainWindow?.webContents.canGoForward()) { + } else if (cmd === "browser-forward" && global.mainWindow?.webContents.canGoForward()) { global.mainWindow.webContents.goForward(); } }); @@ -513,30 +510,28 @@ app.on('ready', async () => { global.appLocalization = new AppLocalization({ store: global.store, - components: [ - (): void => tray.initApplicationMenu(), - (): void => Menu.setApplicationMenu(buildMenuTemplate()), - ], + components: [(): void => tray.initApplicationMenu(), (): void => Menu.setApplicationMenu(buildMenuTemplate())], }); }); -app.on('window-all-closed', () => { +app.on("window-all-closed", () => { app.quit(); }); -app.on('activate', () => { +app.on("activate", () => { global.mainWindow?.show(); }); function beforeQuit(): void { global.appQuitting = true; - global.mainWindow?.webContents.send('before-quit'); + global.mainWindow?.webContents.send("before-quit"); } -app.on('before-quit', beforeQuit); -autoUpdater.on('before-quit-for-update', beforeQuit); +app.on("before-quit", beforeQuit); +autoUpdater.on("before-quit-for-update", beforeQuit); -app.on('second-instance', (ev, commandLine, workingDirectory) => { +app.on("second-instance", (ev, commandLine, workingDirectory) => { + // SC: workaround for Linux system theme change if (commandLine.includes('--system-theme-dark-override')) { nativeTheme.themeSource = 'dark'; } else if (commandLine.includes('--system-theme-light-override')) { @@ -546,7 +541,7 @@ app.on('second-instance', (ev, commandLine, workingDirectory) => { } // If other instance launched with --hidden then skip showing window - if (commandLine.includes('--hidden')) return; + if (commandLine.includes("--hidden")) return; // Someone tried to run a second instance, we should focus our window. if (global.mainWindow) { @@ -560,4 +555,4 @@ app.on('second-instance', (ev, commandLine, workingDirectory) => { // installer uses for the shortcut icon. // This makes notifications work on windows 8.1 (and is // a noop on other platforms). -app.setAppUserModelId('com.squirrel.schildichat-desktop.SchildiChat'); +app.setAppUserModelId("com.squirrel.schildichat-desktop.SchildiChat"); diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 5ef0d0e79a..2bc0f675a5 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -17,5 +17,18 @@ "Undo": "Malfari", "Edit": "Redakti", "Show/Hide": "Montri/Kaŝi", - "Cancel": "Nuligi" + "Cancel": "Nuligi", + "Copy link address": "Kopiu ligilon de la bildo", + "Copy image address": "Kopiu adreson de la bildo", + "Copy email address": "Kopiu retadreson", + "Copy image": "Kopiu bildon", + "File": "Dosiero", + "Minimize": "Minimumigi", + "Window": "Fenestro", + "Select All": "Elekti Ĉiujn", + "Paste": "Enmeti", + "Copy": "Kopiu", + "Cut": "Tranĉi", + "Are you sure you want to quit?": "Ĉu vi certas, ke vi volas ĉesi?", + "Close %(brand)s": "Fermu %(brand)s" } diff --git a/src/i18n/strings/tl.json b/src/i18n/strings/tl.json new file mode 100644 index 0000000000..58b6ea266d --- /dev/null +++ b/src/i18n/strings/tl.json @@ -0,0 +1,16 @@ +{ + "Hide": "Itago", + "Delete": "Alisin", + "Paste and Match Style": "I-paste at Tumugma ng Style", + "Paste": "I-paste", + "Copy": "I-copy", + "Cut": "I-cut", + "Redo": "Redo", + "Undo": "Undo", + "Edit": "I-edit", + "Quit": "Magsara", + "Show/Hide": "Ipakita/itago", + "Are you sure you want to quit?": "Sigurado ka ba na gusto mong magsara?", + "Close %(brand)s": "Isara ang %(brand)s", + "Cancel": "Kanselahin" +} diff --git a/src/ipc.ts b/src/ipc.ts index 17664f9708..6eaf83dc25 100644 --- a/src/ipc.ts +++ b/src/ipc.ts @@ -22,8 +22,8 @@ import { randomArray } from "./utils"; import { Settings } from "./settings"; import { keytar } from "./keytar"; -ipcMain.on('setBadgeCount', function(_ev: IpcMainEvent, count: number): void { - if (process.platform !== 'win32') { +ipcMain.on("setBadgeCount", function (_ev: IpcMainEvent, count: number): void { + if (process.platform !== "win32") { // only set badgeCount on Mac/Linux, the docs say that only those platforms support it but turns out Electron // has some Windows support too, and in some Windows environments this leads to two badges rendering atop // each other. See https://github.com/vector-im/element-web/issues/16942 @@ -35,10 +35,10 @@ ipcMain.on('setBadgeCount', function(_ev: IpcMainEvent, count: number): void { }); let focusHandlerAttached = false; -ipcMain.on('loudNotification', function(): void { - if (process.platform === 'win32' && global.mainWindow && !global.mainWindow.isFocused() && !focusHandlerAttached) { +ipcMain.on("loudNotification", function (): void { + if (process.platform === "win32" && global.mainWindow && !global.mainWindow.isFocused() && !focusHandlerAttached) { global.mainWindow.flashFrame(true); - global.mainWindow.once('focus', () => { + global.mainWindow.once("focus", () => { global.mainWindow?.flashFrame(false); focusHandlerAttached = false; }); @@ -47,17 +47,17 @@ ipcMain.on('loudNotification', function(): void { }); let powerSaveBlockerId: number | null = null; -ipcMain.on('app_onAction', function(_ev: IpcMainEvent, payload) { +ipcMain.on("app_onAction", function (_ev: IpcMainEvent, payload) { switch (payload.action) { - case 'call_state': { + case "call_state": { if (powerSaveBlockerId !== null && powerSaveBlocker.isStarted(powerSaveBlockerId)) { - if (payload.state === 'ended') { + if (payload.state === "ended") { powerSaveBlocker.stop(powerSaveBlockerId); powerSaveBlockerId = null; } } else { - if (powerSaveBlockerId === null && payload.state === 'connected') { - powerSaveBlockerId = powerSaveBlocker.start('prevent-display-sleep'); + if (powerSaveBlockerId === null && payload.state === "connected") { + powerSaveBlockerId = powerSaveBlocker.start("prevent-display-sleep"); } } break; @@ -65,35 +65,35 @@ ipcMain.on('app_onAction', function(_ev: IpcMainEvent, payload) { } }); -ipcMain.on('ipcCall', async function(_ev: IpcMainEvent, payload) { +ipcMain.on("ipcCall", async function (_ev: IpcMainEvent, payload) { if (!global.mainWindow) return; const args = payload.args || []; let ret: any; switch (payload.name) { - case 'getUpdateFeedUrl': + case "getUpdateFeedUrl": ret = autoUpdater.getFeedURL(); break; - case 'getSettingValue': { + case "getSettingValue": { const [settingName] = args; const setting = Settings[settingName]; ret = await setting.read(); break; } - case 'setSettingValue': { + case "setSettingValue": { const [settingName, value] = args; const setting = Settings[settingName]; await setting.write(value); break; } - case 'setLanguage': + case "setLanguage": global.appLocalization.setAppLocale(args[0]); break; - case 'getAppVersion': + case "getAppVersion": ret = app.getVersion(); break; - case 'focusWindow': + case "focusWindow": if (global.mainWindow.isMinimized()) { global.mainWindow.restore(); } else if (!global.mainWindow.isVisible()) { @@ -102,31 +102,31 @@ ipcMain.on('ipcCall', async function(_ev: IpcMainEvent, payload) { global.mainWindow.focus(); } break; - case 'getConfig': + case "getConfig": ret = global.vectorConfig; break; - case 'navigateBack': + case "navigateBack": if (global.mainWindow.webContents.canGoBack()) { global.mainWindow.webContents.goBack(); } break; - case 'navigateForward': + case "navigateForward": if (global.mainWindow.webContents.canGoForward()) { global.mainWindow.webContents.goForward(); } break; - case 'setSpellCheckEnabled': - if (typeof args[0] !== 'boolean') return; + case "setSpellCheckEnabled": + if (typeof args[0] !== "boolean") return; global.mainWindow.webContents.session.setSpellCheckerEnabled(args[0]); global.store.set("spellCheckerEnabled", args[0]); break; - case 'getSpellCheckEnabled': + case "getSpellCheckEnabled": ret = global.store.get("spellCheckerEnabled", true); break; - case 'setSpellCheckLanguages': + case "setSpellCheckLanguages": try { global.mainWindow.webContents.session.setSpellCheckerLanguages(args[0]); } catch (er) { @@ -134,18 +134,18 @@ ipcMain.on('ipcCall', async function(_ev: IpcMainEvent, payload) { } break; - case 'getSpellCheckLanguages': + case "getSpellCheckLanguages": ret = global.mainWindow.webContents.session.getSpellCheckerLanguages(); break; - case 'getAvailableSpellCheckLanguages': + case "getAvailableSpellCheckLanguages": ret = global.mainWindow.webContents.session.availableSpellCheckerLanguages; break; - case 'startSSOFlow': + case "startSSOFlow": recordSSOSession(args[0]); break; - case 'getPickleKey': + case "getPickleKey": try { ret = await keytar?.getPassword("element.io", `${args[0]}|${args[1]}`); // migrate from riot.im (remove once we think there will no longer be @@ -160,7 +160,7 @@ ipcMain.on('ipcCall', async function(_ev: IpcMainEvent, payload) { } break; - case 'createPickleKey': + case "createPickleKey": try { const pickleKey = await randomArray(32); await keytar?.setPassword("element.io", `${args[0]}|${args[1]}`, pickleKey); @@ -170,7 +170,7 @@ ipcMain.on('ipcCall', async function(_ev: IpcMainEvent, payload) { } break; - case 'destroyPickleKey': + case "destroyPickleKey": try { await keytar?.deletePassword("element.io", `${args[0]}|${args[1]}`); // migrate from riot.im (remove once we think there will no longer be @@ -178,7 +178,7 @@ ipcMain.on('ipcCall', async function(_ev: IpcMainEvent, payload) { await keytar?.deletePassword("riot.im", `${args[0]}|${args[1]}`); } catch (e) {} break; - case 'getDesktopCapturerSources': + case "getDesktopCapturerSources": ret = (await desktopCapturer.getSources(args[0])).map((source) => ({ id: source.id, name: source.name, @@ -187,16 +187,15 @@ ipcMain.on('ipcCall', async function(_ev: IpcMainEvent, payload) { break; default: - global.mainWindow.webContents.send('ipcReply', { + global.mainWindow.webContents.send("ipcReply", { id: payload.id, error: "Unknown IPC Call: " + payload.name, }); return; } - global.mainWindow.webContents.send('ipcReply', { + global.mainWindow.webContents.send("ipcReply", { id: payload.id, reply: ret, }); }); - diff --git a/src/keytar.ts b/src/keytar.ts index c3357749a1..7138032231 100644 --- a/src/keytar.ts +++ b/src/keytar.ts @@ -19,7 +19,7 @@ import type * as Keytar from "keytar"; // Hak dependency type let keytar: typeof Keytar | undefined; try { // eslint-disable-next-line @typescript-eslint/no-var-requires - keytar = require('keytar'); + keytar = require("keytar"); } catch (e) { if ((e).code === "MODULE_NOT_FOUND") { console.log("Keytar isn't installed; secure key storage is disabled."); diff --git a/src/language-helper.ts b/src/language-helper.ts index 0ba074157a..8db65a980a 100644 --- a/src/language-helper.ts +++ b/src/language-helper.ts @@ -16,9 +16,9 @@ limitations under the License. import counterpart from "counterpart"; -import type Store from 'electron-store'; +import type Store from "electron-store"; -const FALLBACK_LOCALE = 'en'; +const FALLBACK_LOCALE = "en"; export function _td(text: string): string { return text; @@ -44,11 +44,11 @@ export function _t(text: string, variables: IVariables = {}): string { Object.keys(variables).forEach((key) => { if (variables[key] === undefined) { console.warn("safeCounterpartTranslate called with undefined interpolation name: " + key); - variables[key] = 'undefined'; + variables[key] = "undefined"; } if (variables[key] === null) { console.warn("safeCounterpartTranslate called with null interpolation name: " + key); - variables[key] = 'null'; + variables[key] = "null"; } }); let translated = counterpart.translate(text, variables); @@ -71,10 +71,10 @@ export class AppLocalization { private readonly store: TypedStore; private readonly localizedComponents?: Set; - public constructor({ store, components = [] }: { store: TypedStore, components: Component[] }) { + public constructor({ store, components = [] }: { store: TypedStore; components: Component[] }) { counterpart.registerTranslations(FALLBACK_LOCALE, this.fetchTranslationJson("en_EN")); counterpart.setFallbackLocale(FALLBACK_LOCALE); - counterpart.setSeparator('|'); + counterpart.setSeparator("|"); if (Array.isArray(components)) { this.localizedComponents = new Set(components); @@ -119,7 +119,7 @@ export class AppLocalization { locales = [locales]; } - const loadedLocales = locales.filter(locale => { + const loadedLocales = locales.filter((locale) => { const translations = this.fetchTranslationJson(locale); if (translations !== null) { counterpart.registerTranslations(locale, translations); @@ -135,7 +135,7 @@ export class AppLocalization { public resetLocalizedUI(): void { console.log("Resetting the UI components after locale change"); - this.localizedComponents?.forEach(componentSetup => { + this.localizedComponents?.forEach((componentSetup) => { if (typeof componentSetup === "function") { componentSetup(); } diff --git a/src/preload.ts b/src/preload.ts index a2eebb47f5..a761fba6fd 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { ipcRenderer, contextBridge, IpcRendererEvent } from 'electron'; +import { ipcRenderer, contextBridge, IpcRendererEvent } from "electron"; // Expose only expected IPC wrapper APIs to the renderer process to avoid // handing out generalised messaging access. @@ -36,22 +36,19 @@ const CHANNELS = [ "userDownloadAction", ]; -contextBridge.exposeInMainWorld( - "electron", - { - on(channel: string, listener: (event: IpcRendererEvent, ...args: any[]) => void): void { - if (!CHANNELS.includes(channel)) { - console.error(`Unknown IPC channel ${channel} ignored`); - return; - } - ipcRenderer.on(channel, listener); - }, - send(channel: string, ...args: any[]): void { - if (!CHANNELS.includes(channel)) { - console.error(`Unknown IPC channel ${channel} ignored`); - return; - } - ipcRenderer.send(channel, ...args); - }, +contextBridge.exposeInMainWorld("electron", { + on(channel: string, listener: (event: IpcRendererEvent, ...args: any[]) => void): void { + if (!CHANNELS.includes(channel)) { + console.error(`Unknown IPC channel ${channel} ignored`); + return; + } + ipcRenderer.on(channel, listener); }, -); + send(channel: string, ...args: any[]): void { + if (!CHANNELS.includes(channel)) { + console.error(`Unknown IPC channel ${channel} ignored`); + return; + } + ipcRenderer.send(channel, ...args); + }, +}); diff --git a/src/protocol.ts b/src/protocol.ts index 573964d56f..03cece00e4 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -67,7 +67,7 @@ function writeStore(data: Record): void { } export function recordSSOSession(sessionID: string): void { - const userDataPath = app.getPath('userData'); + const userDataPath = app.getPath("userData"); const store = readStore(); for (const key in store) { // ensure each instance only has one (the latest) session ID to prevent the file growing unbounded @@ -83,7 +83,7 @@ export function recordSSOSession(sessionID: string): void { export function getProfileFromDeeplink(args: string[]): string | undefined { // check if we are passed a profile in the SSO callback url const deeplinkUrl = args.find(arg => [...PROTOCOLS] - .map(protocol => protocol + '//') + .map(protocol => protocol + "//") .some(prefix => arg.startsWith(prefix))); if (deeplinkUrl?.includes(SEARCH_PARAM)) { const parsedUrl = new URL(deeplinkUrl); @@ -100,25 +100,26 @@ export function protocolInit(): void { // get all args except `hidden` as it'd mean the app would not get focused // XXX: passing args to protocol handlers only works on Windows, so unpackaged deep-linking // --profile/--profile-dir are passed via the SEARCH_PARAM var in the callback url - const args = process.argv.slice(1).filter(arg => arg !== "--hidden" && arg !== "-hidden"); + const args = process.argv.slice(1).filter((arg) => arg !== "--hidden" && arg !== "-hidden"); if (app.isPackaged) { - app.setAsDefaultProtocolClient('element', process.execPath, args); - } else if (process.platform === 'win32') { // on Mac/Linux this would just cause the electron binary to open + app.setAsDefaultProtocolClient("element", process.execPath, args); + } else if (process.platform === "win32") { + // on Mac/Linux this would just cause the electron binary to open // special handler for running without being packaged, e.g `electron .` by passing our app path to electron - app.setAsDefaultProtocolClient('element', process.execPath, [app.getAppPath(), ...args]); + app.setAsDefaultProtocolClient("element", process.execPath, [app.getAppPath(), ...args]); } - if (process.platform === 'darwin') { + if (process.platform === "darwin") { // Protocol handler for macos - app.on('open-url', function(ev, url) { + app.on("open-url", function (ev, url) { ev.preventDefault(); processUrl(url); }); } else { // Protocol handler for win32/Linux - app.on('second-instance', (ev, commandLine) => { + app.on("second-instance", (ev, commandLine) => { const url = commandLine[commandLine.length - 1]; - if (![...PROTOCOLS].map(protocol => protocol + '//').some(prefix => url.startsWith(prefix))) return; + if (![...PROTOCOLS].map(protocol => protocol + "//").some(prefix => url.startsWith(prefix))) return; processUrl(url); }); } diff --git a/src/seshat.ts b/src/seshat.ts index 3b18985679..45ec8107e5 100644 --- a/src/seshat.ts +++ b/src/seshat.ts @@ -34,7 +34,7 @@ let ReindexError: typeof ReindexErrorType; try { // eslint-disable-next-line @typescript-eslint/no-var-requires - const seshatModule = require('matrix-seshat'); + const seshatModule = require("matrix-seshat"); Seshat = seshatModule.Seshat; SeshatRecovery = seshatModule.SeshatRecovery; ReindexError = seshatModule.ReindexError; @@ -75,29 +75,29 @@ const deleteContents = async (p: string): Promise => { } }; -ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { +ipcMain.on("seshat", async function (_ev: IpcMainEvent, payload): Promise { if (!global.mainWindow) return; // We do this here to ensure we get the path after --profile has been resolved - const eventStorePath = path.join(app.getPath('userData'), 'EventStore'); + const eventStorePath = path.join(app.getPath("userData"), "EventStore"); const sendError = (id: string, e: Error): void => { const error = { message: e.message, }; - global.mainWindow?.webContents.send('seshatReply', { id, error }); + global.mainWindow?.webContents.send("seshatReply", { id, error }); }; const args = payload.args || []; let ret: any; switch (payload.name) { - case 'supportsEventIndexing': + case "supportsEventIndexing": ret = seshatSupported; break; - case 'initEventIndex': + case "initEventIndex": if (eventIndex === null) { const userId = args[0]; const deviceId = args[1]; @@ -127,8 +127,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { try { await deleteContents(eventStorePath); - } catch (e) { - } + } catch (e) {} } else { await recoveryIndex.reindex(); } @@ -142,7 +141,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'closeEventIndex': + case "closeEventIndex": if (eventIndex !== null) { const index = eventIndex; eventIndex = null; @@ -156,26 +155,24 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'deleteEventIndex': { + case "deleteEventIndex": { try { await deleteContents(eventStorePath); - } catch (e) { - - } + } catch (e) {} break; } - case 'isEventIndexEmpty': + case "isEventIndexEmpty": if (eventIndex === null) ret = true; else ret = await eventIndex.isEmpty(); break; - case 'isRoomIndexed': + case "isRoomIndexed": if (eventIndex === null) ret = false; else ret = await eventIndex.isRoomIndexed(args[0]); break; - case 'addEventToIndex': + case "addEventToIndex": try { eventIndex?.addEvent(args[0], args[1]); } catch (e) { @@ -184,7 +181,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'deleteEvent': + case "deleteEvent": try { ret = await eventIndex?.deleteEvent(args[0]); } catch (e) { @@ -193,7 +190,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'commitLiveEvents': + case "commitLiveEvents": try { ret = await eventIndex?.commit(); } catch (e) { @@ -202,7 +199,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'searchEventIndex': + case "searchEventIndex": try { ret = await eventIndex?.search(args[0]); } catch (e) { @@ -211,12 +208,11 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'addHistoricEvents': + case "addHistoricEvents": if (eventIndex === null) ret = false; else { try { - ret = await eventIndex.addHistoricEvents( - args[0], args[1], args[2]); + ret = await eventIndex.addHistoricEvents(args[0], args[1], args[2]); } catch (e) { sendError(payload.id, e); return; @@ -224,7 +220,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'getStats': + case "getStats": if (eventIndex === null) ret = 0; else { try { @@ -236,7 +232,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'removeCrawlerCheckpoint': + case "removeCrawlerCheckpoint": if (eventIndex === null) ret = false; else { try { @@ -248,7 +244,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'addCrawlerCheckpoint': + case "addCrawlerCheckpoint": if (eventIndex === null) ret = false; else { try { @@ -260,7 +256,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'loadFileEvents': + case "loadFileEvents": if (eventIndex === null) ret = []; else { try { @@ -272,7 +268,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'loadCheckpoints': + case "loadCheckpoints": if (eventIndex === null) ret = []; else { try { @@ -283,7 +279,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'setUserVersion': + case "setUserVersion": if (eventIndex === null) break; else { try { @@ -295,7 +291,7 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { } break; - case 'getUserVersion': + case "getUserVersion": if (eventIndex === null) ret = 0; else { try { @@ -308,14 +304,14 @@ ipcMain.on('seshat', async function(_ev: IpcMainEvent, payload): Promise { break; default: - global.mainWindow.webContents.send('seshatReply', { + global.mainWindow.webContents.send("seshatReply", { id: payload.id, error: "Unknown IPC Call: " + payload.name, }); return; } - global.mainWindow.webContents.send('seshatReply', { + global.mainWindow.webContents.send("seshatReply", { id: payload.id, reply: ret, }); diff --git a/src/settings.ts b/src/settings.ts index 803d92d4bf..5638cca865 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -42,17 +42,19 @@ export const Settings: Record = { global.store.set("warnBeforeExit", value); }, }, - "Electron.alwaysShowMenuBar": { // not supported on macOS + "Electron.alwaysShowMenuBar": { + // not supported on macOS async read(): Promise { return !global.mainWindow!.autoHideMenuBar; }, async write(value: any): Promise { - global.store.set('autoHideMenuBar', !value); + global.store.set("autoHideMenuBar", !value); global.mainWindow!.autoHideMenuBar = !value; global.mainWindow!.setMenuBarVisibility(value); }, }, - "Electron.showTrayIcon": { // not supported on macOS + "Electron.showTrayIcon": { + // not supported on macOS async read(): Promise { return tray.hasTray(); }, @@ -63,15 +65,15 @@ export const Settings: Record = { } else { tray.destroy(); } - global.store.set('minimizeToTray', value); + global.store.set("minimizeToTray", value); }, }, "Electron.enableHardwareAcceleration": { async read(): Promise { - return !global.store.get('disableHardwareAcceleration', false); + return !global.store.get("disableHardwareAcceleration", false); }, async write(value: any): Promise { - global.store.set('disableHardwareAcceleration', !value); + global.store.set("disableHardwareAcceleration", !value); }, }, }; diff --git a/src/squirrelhooks.ts b/src/squirrelhooks.ts index 5e759d91d5..5e06d45915 100644 --- a/src/squirrelhooks.ts +++ b/src/squirrelhooks.ts @@ -23,29 +23,29 @@ function runUpdateExe(args: string[]): Promise { // Note that there's an Update.exe in the app-x.x.x directory and one in the parent // directory: we need to run the one in the parent directory, because it discovers // information about the app by inspecting the directory it's run from. - const updateExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe'); + const updateExe = path.resolve(path.dirname(process.execPath), "..", "Update.exe"); console.log(`Spawning '${updateExe}' with args '${args}'`); - return new Promise(resolve => { + return new Promise((resolve) => { spawn(updateExe, args, { detached: true, - }).on('close', resolve); + }).on("close", resolve); }); } function checkSquirrelHooks(): boolean { - if (process.platform !== 'win32') return false; + if (process.platform !== "win32") return false; const cmd = process.argv[1]; const target = path.basename(process.execPath); - if (cmd === '--squirrel-install') { - runUpdateExe(['--createShortcut=' + target]).then(() => app.quit()); + if (cmd === "--squirrel-install") { + runUpdateExe(["--createShortcut=" + target]).then(() => app.quit()); return true; - } else if (cmd === '--squirrel-updated') { + } else if (cmd === "--squirrel-updated") { app.quit(); return true; - } else if (cmd === '--squirrel-uninstall') { - runUpdateExe(['--removeShortcut=' + target]).then(() => app.quit()); + } else if (cmd === "--squirrel-uninstall") { + runUpdateExe(["--removeShortcut=" + target]).then(() => app.quit()); return true; - } else if (cmd === '--squirrel-obsolete') { + } else if (cmd === "--squirrel-obsolete") { app.quit(); return true; } diff --git a/src/tray.ts b/src/tray.ts index f644ab30e6..6c197a9a3f 100644 --- a/src/tray.ts +++ b/src/tray.ts @@ -25,7 +25,7 @@ import { _t } from "./language-helper"; let trayIcon: Tray | null = null; export function hasTray(): boolean { - return (trayIcon !== null); + return trayIcon !== null; } export function destroy(): void { @@ -45,13 +45,13 @@ function toggleWin(): void { } } -const showWin = function() { +const showWin = function(): void { if (global.mainWindow?.isMinimized()) global.mainWindow.restore(); if (!global.mainWindow?.isVisible()) global.mainWindow?.show(); global.mainWindow?.focus(); }; -const hideWin = function() { +const hideWin = function(): void { global.mainWindow?.hide(); }; @@ -62,17 +62,17 @@ interface IConfig { export function create(config: IConfig): void { // no trays on darwin - if (process.platform === 'darwin' || trayIcon) return; + if (process.platform === "darwin" || trayIcon) return; const defaultIcon = nativeImage.createFromPath(config.icon_path); trayIcon = new Tray(defaultIcon); trayIcon.setToolTip(config.brand); initApplicationMenu(); - trayIcon.on('click', toggleWin); + trayIcon.on("click", toggleWin); let lastFavicon: string | null = null; - global.mainWindow?.webContents.on('page-favicon-updated', async function(ev, favicons) { - if (!favicons || favicons.length <= 0 || !favicons[0].startsWith('data:')) { + global.mainWindow?.webContents.on("page-favicon-updated", async function (ev, favicons) { + if (!favicons || favicons.length <= 0 || !favicons[0].startsWith("data:")) { if (lastFavicon !== null) { global.mainWindow?.setIcon(defaultIcon); trayIcon?.setImage(defaultIcon); @@ -88,9 +88,9 @@ export function create(config: IConfig): void { let newFavicon = nativeImage.createFromDataURL(favicons[0]); // Windows likes ico's too much. - if (process.platform === 'win32') { + if (process.platform === "win32") { try { - const icoPath = path.join(app.getPath('temp'), 'win32_element_icon.ico'); + const icoPath = path.join(app.getPath("temp"), "win32_element_icon.ico"); fs.writeFileSync(icoPath, await pngToIco(newFavicon.toPNG())); newFavicon = nativeImage.createFromPath(icoPath); } catch (e) { @@ -102,7 +102,7 @@ export function create(config: IConfig): void { global.mainWindow?.setIcon(newFavicon); }); - global.mainWindow?.webContents.on('page-title-updated', function(ev, title) { + global.mainWindow?.webContents.on("page-title-updated", function (ev, title) { trayIcon?.setToolTip(title); }); } @@ -114,21 +114,21 @@ export function initApplicationMenu(): void { const contextMenu = Menu.buildFromTemplate([ // { - // label: _t('Show/Hide'), + // label: _t("Show/Hide"), // click: toggleWin, // }, { - label: _t('Show'), + label: _t("Show"), click: showWin, }, { - label: _t('Hide'), + label: _t("Hide"), click: hideWin, }, - { type: 'separator' }, + { type: "separator" }, { - label: _t('Quit'), - click: function(): void { + label: _t("Quit"), + click: function (): void { app.quit(); }, }, diff --git a/src/updater.ts b/src/updater.ts index ef1b13b774..acd89bec67 100644 --- a/src/updater.ts +++ b/src/updater.ts @@ -37,22 +37,22 @@ function pollForUpdates(): void { autoUpdater.checkForUpdates(); } else { console.log("Skipping update check as download already present"); - global.mainWindow?.webContents.send('update-downloaded', latestUpdateDownloaded); + global.mainWindow?.webContents.send("update-downloaded", latestUpdateDownloaded); } } catch (e) { - console.log('Couldn\'t check for update', e); + console.log("Couldn't check for update", e); } } export function start(updateBaseUrl: string): void { - if (updateBaseUrl.slice(-1) !== '/') { - updateBaseUrl = updateBaseUrl + '/'; + if (updateBaseUrl.slice(-1) !== "/") { + updateBaseUrl = updateBaseUrl + "/"; } try { let url: string; let serverType: "json" | undefined; - if (process.platform === 'darwin') { + if (process.platform === "darwin") { // include the current version in the URL we hit. Electron doesn't add // it anywhere (apart from the User-Agent) so it's up to us. We could // (and previously did) just use the User-Agent, but this doesn't @@ -60,14 +60,14 @@ export function start(updateBaseUrl: string): void { // and also acts as a convenient cache-buster to ensure that when the // app updates it always gets a fresh value to avoid update-looping. url = `${updateBaseUrl}macos.json`; - } else if (process.platform === 'win32') { + } else if (process.platform === "win32") { // On windows it takes a base path and looks for files under that path. url = `${updateBaseUrl}win32/${process.arch}/`; } else { // Squirrel / electron only supports auto-update on these two platforms. // I'm not even going to try to guess which feed style they'd use if they // implemented it on Linux, or if it would be different again. - console.log('Auto update not supported on this platform'); + console.log("Auto update not supported on this platform"); return; } @@ -86,15 +86,15 @@ export function start(updateBaseUrl: string): void { } } catch (err) { // will fail if running in debug mode - console.log('Couldn\'t enable update checking', err); + console.log("Couldn't enable update checking", err); } } -ipcMain.on('install_update', installUpdate); -ipcMain.on('check_updates', pollForUpdates); +ipcMain.on("install_update", installUpdate); +ipcMain.on("check_updates", pollForUpdates); function ipcChannelSendUpdateStatus(status: boolean | string): void { - global.mainWindow?.webContents.send('check_updates', status); + global.mainWindow?.webContents.send("check_updates", status); } interface ICachedUpdate { @@ -106,23 +106,26 @@ interface ICachedUpdate { // cache the latest update which has been downloaded as electron offers no api to read it let latestUpdateDownloaded: ICachedUpdate; -autoUpdater.on('update-available', function() { - ipcChannelSendUpdateStatus(true); -}).on('update-not-available', function() { - if (latestUpdateDownloaded) { - // the only time we will get `update-not-available` if `latestUpdateDownloaded` is already set - // is if the user used the Manual Update check and there is no update newer than the one we - // have downloaded, so show it to them as the latest again. - global.mainWindow?.webContents.send('update-downloaded', latestUpdateDownloaded); - } else { - ipcChannelSendUpdateStatus(false); - } -}).on('error', function(error) { - ipcChannelSendUpdateStatus(error.message); -}); +autoUpdater + .on("update-available", function () { + ipcChannelSendUpdateStatus(true); + }) + .on("update-not-available", function () { + if (latestUpdateDownloaded) { + // the only time we will get `update-not-available` if `latestUpdateDownloaded` is already set + // is if the user used the Manual Update check and there is no update newer than the one we + // have downloaded, so show it to them as the latest again. + global.mainWindow?.webContents.send("update-downloaded", latestUpdateDownloaded); + } else { + ipcChannelSendUpdateStatus(false); + } + }) + .on("error", function (error) { + ipcChannelSendUpdateStatus(error.message); + }); -autoUpdater.on('update-downloaded', (ev, releaseNotes, releaseName, releaseDate, updateURL) => { +autoUpdater.on("update-downloaded", (ev, releaseNotes, releaseName, releaseDate, updateURL) => { // forward to renderer latestUpdateDownloaded = { releaseNotes, releaseName, releaseDate, updateURL }; - global.mainWindow?.webContents.send('update-downloaded', latestUpdateDownloaded); + global.mainWindow?.webContents.send("update-downloaded", latestUpdateDownloaded); }); diff --git a/src/utils.ts b/src/utils.ts index 07b8e81f34..334721e86f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -22,7 +22,7 @@ export async function randomArray(size: number): Promise { if (err) { reject(err); } else { - resolve(buf.toString("base64").replace(/=+$/g, '')); + resolve(buf.toString("base64").replace(/=+$/g, "")); } }); }); diff --git a/src/vectormenu.ts b/src/vectormenu.ts index 9cef9a3faa..d16bfe80ea 100644 --- a/src/vectormenu.ts +++ b/src/vectormenu.ts @@ -14,125 +14,133 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { app, shell, Menu, MenuItem, MenuItemConstructorOptions } from 'electron'; +import { app, shell, Menu, MenuItem, MenuItemConstructorOptions } from "electron"; -import { _t } from './language-helper'; +import { _t } from "./language-helper"; -const isMac = process.platform === 'darwin'; +const isMac = process.platform === "darwin"; export function buildMenuTemplate(): Menu { // Menu template from http://electron.atom.io/docs/api/menu/, edited - const template: Array<(MenuItemConstructorOptions) | (MenuItem)> = [ + const template: Array = [ { - label: _t('Edit'), - accelerator: 'e', + label: _t("Edit"), + accelerator: "e", submenu: [ { - role: 'undo', - label: _t('Undo'), + role: "undo", + label: _t("Undo"), }, { - role: 'redo', - label: _t('Redo'), + role: "redo", + label: _t("Redo"), }, - { type: 'separator' }, + { type: "separator" }, { - role: 'cut', - label: _t('Cut'), + role: "cut", + label: _t("Cut"), }, { - role: 'copy', - label: _t('Copy'), + role: "copy", + label: _t("Copy"), }, { - role: 'paste', - label: _t('Paste'), + role: "paste", + label: _t("Paste"), }, { - role: 'pasteAndMatchStyle', - label: _t('Paste and Match Style'), + role: "pasteAndMatchStyle", + label: _t("Paste and Match Style"), }, { - role: 'delete', - label: _t('Delete'), + role: "delete", + label: _t("Delete"), }, { - role: 'selectAll', - label: _t('Select All'), + role: "selectAll", + label: _t("Select All"), }, ], }, { - label: _t('View'), - accelerator: 'V', + label: _t("View"), + accelerator: "V", submenu: [ - { type: 'separator' }, + { type: "separator" }, { - role: 'resetZoom', - accelerator: 'CmdOrCtrl+Num0', + role: "resetZoom", + accelerator: "CmdOrCtrl+Num0", visible: false, }, { - role: 'zoomIn', - accelerator: 'CmdOrCtrl+NumAdd', + role: "zoomIn", + accelerator: "CmdOrCtrl+NumAdd", visible: false, }, { - role: 'zoomOut', - accelerator: 'CmdOrCtrl+NumSub', + role: "zoomOut", + accelerator: "CmdOrCtrl+NumSub", visible: false, }, { - role: 'resetZoom', - label: _t('Actual Size'), + role: "resetZoom", + label: _t("Actual Size"), }, { - role: 'zoomIn', - label: _t('Zoom In'), + role: "zoomIn", + label: _t("Zoom In"), }, { - role: 'zoomOut', - label: _t('Zoom Out'), + role: "zoomOut", + label: _t("Zoom Out"), }, - { type: 'separator' }, + { type: "separator" }, // in macOS the Preferences menu item goes in the first menu - ...(!isMac ? [{ - label: _t('Preferences'), - click(): void { global.mainWindow?.webContents.send('preferences'); }, - }] : []), + ...(!isMac + ? [ + { + label: _t("Preferences"), + click(): void { + global.mainWindow?.webContents.send("preferences"); + }, + }, + ] + : []), { - role: 'togglefullscreen', - label: _t('Toggle Full Screen'), + role: "togglefullscreen", + label: _t("Toggle Full Screen"), }, { - role: 'toggleDevTools', - label: _t('Toggle Developer Tools'), + role: "toggleDevTools", + label: _t("Toggle Developer Tools"), }, ], }, { - label: _t('Window'), - accelerator: 'w', - role: 'window', + label: _t("Window"), + accelerator: "w", + role: "window", submenu: [ { - role: 'minimize', - label: _t('Minimize'), + role: "minimize", + label: _t("Minimize"), }, { - role: 'close', - label: _t('Close'), + role: "close", + label: _t("Close"), }, ], }, { - label: _t('Help'), - accelerator: 'h', - role: 'help', + label: _t("Help"), + accelerator: "h", + role: "help", submenu: [ { - label: _t('Element Help'), - click(): void { shell.openExternal('https://element.io/help'); }, + label: _t("Element Help"), + click(): void { + shell.openExternal("https://element.io/help"); + }, }, ], }, @@ -142,92 +150,95 @@ export function buildMenuTemplate(): Menu { if (isMac) { template.unshift({ // first macOS menu is the name of the app - role: 'appMenu', + role: "appMenu", label: app.name, submenu: [ { - role: 'about', - label: _t('About') + ' ' + app.name, + role: "about", + label: _t("About") + " " + app.name, }, - { type: 'separator' }, + { type: "separator" }, { - label: _t('Preferences') + '…', - accelerator: 'Command+,', // Mac-only accelerator - click(): void { global.mainWindow?.webContents.send('preferences'); }, + label: _t("Preferences") + "…", + accelerator: "Command+,", // Mac-only accelerator + click(): void { + global.mainWindow?.webContents.send("preferences"); + }, }, - { type: 'separator' }, + { type: "separator" }, { - role: 'services', - label: _t('Services'), + role: "services", + label: _t("Services"), submenu: [], }, - { type: 'separator' }, + { type: "separator" }, { - role: 'hide', - label: _t('Hide'), + role: "hide", + label: _t("Hide"), }, { - role: 'hideOthers', - label: _t('Hide Others'), + role: "hideOthers", + label: _t("Hide Others"), }, { - role: 'unhide', - label: _t('Unhide'), + role: "unhide", + label: _t("Unhide"), }, - { type: 'separator' }, + { type: "separator" }, { - role: 'quit', - label: _t('Quit'), + role: "quit", + label: _t("Quit"), }, ], }); // Edit menu. // This has a 'speech' section on macOS (template[1].submenu as MenuItemConstructorOptions[]).push( - { type: 'separator' }, + { type: "separator" }, { - label: _t('Speech'), + label: _t("Speech"), submenu: [ { - role: 'startSpeaking', - label: _t('Start Speaking'), + role: "startSpeaking", + label: _t("Start Speaking"), }, { - role: 'stopSpeaking', - label: _t('Stop Speaking'), + role: "stopSpeaking", + label: _t("Stop Speaking"), }, ], - }); + }, + ); // Window menu. // This also has specific functionality on macOS template[3].submenu = [ { - label: _t('Close'), - accelerator: 'CmdOrCtrl+W', - role: 'close', + label: _t("Close"), + accelerator: "CmdOrCtrl+W", + role: "close", }, { - label: _t('Minimize'), - accelerator: 'CmdOrCtrl+M', - role: 'minimize', + label: _t("Minimize"), + accelerator: "CmdOrCtrl+M", + role: "minimize", }, { - label: _t('Zoom'), - role: 'zoom', + label: _t("Zoom"), + role: "zoom", }, { - type: 'separator', + type: "separator", }, { - label: _t('Bring All to Front'), - role: 'front', + label: _t("Bring All to Front"), + role: "front", }, ]; } else { template.unshift({ - label: _t('File'), - accelerator: 'f', + label: _t("File"), + accelerator: "f", submenu: [ // For some reason, 'about' does not seem to work on windows. /*{ @@ -235,8 +246,8 @@ export function buildMenuTemplate(): Menu { label: _t('About'), },*/ { - role: 'quit', - label: _t('Quit'), + role: "quit", + label: _t("Quit"), }, ], }); diff --git a/src/webcontents-handler.ts b/src/webcontents-handler.ts index 5a399f389f..cd68124d22 100644 --- a/src/webcontents-handler.ts +++ b/src/webcontents-handler.ts @@ -28,22 +28,18 @@ import { DownloadItem, MenuItemConstructorOptions, IpcMainEvent, -} from 'electron'; -import url from 'url'; -import fs from 'fs'; -import fetch from 'node-fetch'; -import { pipeline } from 'stream'; -import path from 'path'; +} from "electron"; +import url from "url"; +import fs from "fs"; +import fetch from "node-fetch"; +import { pipeline } from "stream"; +import path from "path"; -import { _t } from './language-helper'; +import { _t } from "./language-helper"; const MAILTO_PREFIX = "mailto:"; -const PERMITTED_URL_SCHEMES: string[] = [ - 'http:', - 'https:', - MAILTO_PREFIX, -]; +const PERMITTED_URL_SCHEMES: string[] = ["http:", "https:", MAILTO_PREFIX]; function safeOpenURL(target: string): void { // openExternal passes the target to open/start/xdg-open, @@ -70,7 +66,7 @@ function onWindowOrNavigate(ev: Event, target: string): void { } function writeNativeImage(filePath: string, img: NativeImage): Promise { - switch (filePath.split('.').pop()?.toLowerCase()) { + switch (filePath.split(".").pop()?.toLowerCase()) { case "jpg": case "jpeg": return fs.promises.writeFile(filePath, img.toJPEG(100)); @@ -85,7 +81,7 @@ function writeNativeImage(filePath: string, img: NativeImage): Promise { function onLinkContextMenu(ev: Event, params: ContextMenuParams, webContents: WebContents): void { let url = params.linkURL || params.srcURL; - if (url.startsWith('vector://vector/webapp')) { + if (url.startsWith("vector://vector/webapp")) { // Avoid showing a context menu for app icons if (params.hasImageContents) return; // Rewrite URL so that it can be used outside of the app @@ -94,82 +90,90 @@ function onLinkContextMenu(ev: Event, params: ContextMenuParams, webContents: We const popupMenu = new Menu(); // No point trying to open blob: URLs in an external browser: it ain't gonna work. - if (!url.startsWith('blob:')) { - popupMenu.append(new MenuItem({ - label: url, - click(): void { - safeOpenURL(url); - }, - })); + if (!url.startsWith("blob:")) { + popupMenu.append( + new MenuItem({ + label: url, + click(): void { + safeOpenURL(url); + }, + }), + ); } if (params.hasImageContents) { - popupMenu.append(new MenuItem({ - label: _t('Copy image'), - accelerator: 'c', - click(): void { - webContents.copyImageAt(params.x, params.y); - }, - })); + popupMenu.append( + new MenuItem({ + label: _t("Copy image"), + accelerator: "c", + click(): void { + webContents.copyImageAt(params.x, params.y); + }, + }), + ); } // No point offering to copy a blob: URL either - if (!url.startsWith('blob:')) { + if (!url.startsWith("blob:")) { // Special-case e-mail URLs to strip the `mailto:` like modern browsers do if (url.startsWith(MAILTO_PREFIX)) { - popupMenu.append(new MenuItem({ - label: _t('Copy email address'), - accelerator: 'a', - click(): void { - clipboard.writeText(url.substr(MAILTO_PREFIX.length)); - }, - })); + popupMenu.append( + new MenuItem({ + label: _t("Copy email address"), + accelerator: "a", + click(): void { + clipboard.writeText(url.substr(MAILTO_PREFIX.length)); + }, + }), + ); } else { - popupMenu.append(new MenuItem({ - label: params.hasImageContents - ? _t('Copy image address') - : _t('Copy link address'), - accelerator: 'a', - click(): void { - clipboard.writeText(url); - }, - })); + popupMenu.append( + new MenuItem({ + label: params.hasImageContents ? _t("Copy image address") : _t("Copy link address"), + accelerator: "a", + click(): void { + clipboard.writeText(url); + }, + }), + ); } } // XXX: We cannot easily save a blob from the main process as // only the renderer can resolve them so don't give the user an option to. - if (params.hasImageContents && !url.startsWith('blob:')) { - popupMenu.append(new MenuItem({ - label: _t('Save image as...'), - accelerator: 's', - async click(): Promise { - const targetFileName = params.suggestedFilename || params.altText || "image.png"; - const { filePath } = await dialog.showSaveDialog({ - defaultPath: targetFileName, - }); - - if (!filePath) return; // user cancelled dialog + if (params.hasImageContents && !url.startsWith("blob:")) { + popupMenu.append( + new MenuItem({ + label: _t("Save image as..."), + accelerator: "s", + async click(): Promise { + const targetFileName = params.suggestedFilename || params.altText || "image.png"; + const { filePath } = await dialog.showSaveDialog({ + defaultPath: targetFileName, + }); - try { - if (url.startsWith("data:")) { - await writeNativeImage(filePath, nativeImage.createFromDataURL(url)); - } else { - const resp = await fetch(url); - if (!resp.ok) throw new Error(`unexpected response ${resp.statusText}`); - if (!resp.body) throw new Error(`unexpected response has no body ${resp.statusText}`); - pipeline(resp.body, fs.createWriteStream(filePath)); + if (!filePath) return; // user cancelled dialog + + try { + if (url.startsWith("data:")) { + await writeNativeImage(filePath, nativeImage.createFromDataURL(url)); + } else { + const resp = await fetch(url); + if (!resp.ok) throw new Error(`unexpected response ${resp.statusText}`); + if (!resp.body) throw new Error(`unexpected response has no body ${resp.statusText}`); + pipeline(resp.body, fs.createWriteStream(filePath)); + } + } catch (err) { + console.error(err); + dialog.showMessageBox({ + type: "error", + title: _t("Failed to save image"), + message: _t("The image failed to save"), + }); } - } catch (err) { - console.error(err); - dialog.showMessageBox({ - type: "error", - title: _t("Failed to save image"), - message: _t("The image failed to save"), - }); - } - }, - })); + }, + }), + ); } // popup() requires an options object even for no options @@ -181,7 +185,7 @@ function cutCopyPasteSelectContextMenus(params: ContextMenuParams): MenuItemCons const options: MenuItemConstructorOptions[] = []; if (params.misspelledWord) { - params.dictionarySuggestions.forEach(word => { + params.dictionarySuggestions.forEach((word) => { options.push({ label: word, click: (menuItem, browserWindow) => { @@ -189,42 +193,52 @@ function cutCopyPasteSelectContextMenus(params: ContextMenuParams): MenuItemCons }, }); }); - options.push({ - type: 'separator', - }, { - label: _t('Add to dictionary'), - click: (menuItem, browserWindow) => { - browserWindow?.webContents.session.addWordToSpellCheckerDictionary(params.misspelledWord); + options.push( + { + type: "separator", }, - }, { - type: 'separator', - }); + { + label: _t("Add to dictionary"), + click: (menuItem, browserWindow) => { + browserWindow?.webContents.session.addWordToSpellCheckerDictionary(params.misspelledWord); + }, + }, + { + type: "separator", + }, + ); } - options.push({ - role: 'cut', - label: _t('Cut'), - accelerator: 't', - enabled: params.editFlags.canCut, - }, { - role: 'copy', - label: _t('Copy'), - accelerator: 'c', - enabled: params.editFlags.canCopy, - }, { - role: 'paste', - label: _t('Paste'), - accelerator: 'p', - enabled: params.editFlags.canPaste, - }, { - role: 'pasteAndMatchStyle', - enabled: params.editFlags.canPaste, - }, { - role: 'selectAll', - label: _t("Select All"), - accelerator: 'a', - enabled: params.editFlags.canSelectAll, - }); + options.push( + { + role: "cut", + label: _t("Cut"), + accelerator: "t", + enabled: params.editFlags.canCut, + }, + { + role: "copy", + label: _t("Copy"), + accelerator: "c", + enabled: params.editFlags.canCopy, + }, + { + role: "paste", + label: _t("Paste"), + accelerator: "p", + enabled: params.editFlags.canPaste, + }, + { + role: "pasteAndMatchStyle", + enabled: params.editFlags.canPaste, + }, + { + role: "selectAll", + label: _t("Select All"), + accelerator: "a", + enabled: params.editFlags.canSelectAll, + }, + ); return options; } @@ -239,9 +253,9 @@ function onSelectedContextMenu(ev: Event, params: ContextMenuParams): void { function onEditableContextMenu(ev: Event, params: ContextMenuParams): void { const items: MenuItemConstructorOptions[] = [ - { role: 'undo' }, - { role: 'redo', enabled: params.editFlags.canRedo }, - { type: 'separator' }, + { role: "undo" }, + { role: "redo", enabled: params.editFlags.canRedo }, + { type: "separator" }, ...cutCopyPasteSelectContextMenus(params), ]; @@ -254,7 +268,7 @@ function onEditableContextMenu(ev: Event, params: ContextMenuParams): void { let userDownloadIndex = 0; const userDownloadMap = new Map(); // Map from id to path -ipcMain.on('userDownloadAction', function(ev: IpcMainEvent, { id, open = false }) { +ipcMain.on("userDownloadAction", function (ev: IpcMainEvent, { id, open = false }) { const path = userDownloadMap.get(id); if (open && path) { shell.openPath(path); @@ -268,12 +282,12 @@ export default (webContents: WebContents): void => { return { action: "deny" }; }); - webContents.on('will-navigate', (ev: Event, target: string): void => { + webContents.on("will-navigate", (ev: Event, target: string): void => { if (target.startsWith("vector://")) return; return onWindowOrNavigate(ev, target); }); - webContents.on('context-menu', function(ev: Event, params: ContextMenuParams): void { + webContents.on("context-menu", function (ev: Event, params: ContextMenuParams): void { if (params.linkURL || params.srcURL) { onLinkContextMenu(ev, params, webContents); } else if (params.selectionText) { @@ -283,13 +297,13 @@ export default (webContents: WebContents): void => { } }); - webContents.session.on('will-download', (event: Event, item: DownloadItem): void => { - item.once('done', (event, state) => { - if (state === 'completed') { + webContents.session.on("will-download", (event: Event, item: DownloadItem): void => { + item.once("done", (event, state) => { + if (state === "completed") { const savePath = item.getSavePath(); const id = userDownloadIndex++; userDownloadMap.set(id, savePath); - webContents.send('userDownloadCompleted', { + webContents.send("userDownloadCompleted", { id, name: path.basename(savePath), }); diff --git a/test/launch-test.ts b/test/launch-test.ts index 2949ee12a1..dcaf2e454a 100644 --- a/test/launch-test.ts +++ b/test/launch-test.ts @@ -45,13 +45,13 @@ describe("App launch", () => { args, recordVideo: { dir: artifactsPath, - } + }, }); window = await app.firstWindow(); }, 30000); afterAll(async () => { - await app?.close().catch(e => { + await app?.close().catch((e) => { console.error(e); }); fs.rmSync(tmpDir, { recursive: true }); diff --git a/tsconfig.json b/tsconfig.json index 578c0317c4..964552dd88 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,24 +1,18 @@ { - "compilerOptions": { - "resolveJsonModule": true, - "esModuleInterop": true, - "module": "commonjs", - "moduleResolution": "node", - "target": "es2016", - "sourceMap": false, - "outDir": "./lib", - "rootDir": "./src", - "declaration": true, - "typeRoots": ["src/@types"], - "lib": [ - "es2019", - "dom" - ], - "types": ["jest", "node"], - "strict": true - }, - "include": [ - "./src/**/*.ts", - "./tests/**/*.ts" - ] + "compilerOptions": { + "resolveJsonModule": true, + "esModuleInterop": true, + "module": "commonjs", + "moduleResolution": "node", + "target": "es2016", + "sourceMap": false, + "outDir": "./lib", + "rootDir": "./src", + "declaration": true, + "typeRoots": ["src/@types"], + "lib": ["es2019", "dom"], + "types": ["jest", "node"], + "strict": true + }, + "include": ["./src/**/*.ts", "./tests/**/*.ts"] } diff --git a/yarn.lock b/yarn.lock index 9f9896ab46..66cccc5d83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -125,12 +125,12 @@ "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" -"@aws-sdk/abort-controller@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.215.0.tgz#f40d994a07d20f10f8065d6b46e751a5f261867c" - integrity sha512-HTvL542nawhVqe0oC1AJchdcomEOmPivJEzYUT1LqiG3e8ikxMNa2KWSqqLPeKi2t0A/cfQy7wDUyg9+BZhDSQ== +"@aws-sdk/abort-controller@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.226.0.tgz#3adffb8ee5af57ddb154e8544a8eeec76ad32271" + integrity sha512-cJVzr1xxPBd08voknXvR0RLgtZKGKt6WyDpH/BaPCu3rfSqWCDZKzwqe940eqosjmKrxC6pUZNKASIqHOQ8xxQ== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" "@aws-sdk/chunked-blob-reader-native@3.208.0": @@ -149,364 +149,369 @@ tslib "^2.3.1" "@aws-sdk/client-s3@^3.213.0": - version "3.218.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.218.0.tgz#b3dc1ea63ebc08c94cc8e2e3cf867e7dd294af46" - integrity sha512-SvDQzjsW+MvmYb59y0xHRWTDRmHxBjXFqYrJ5DCXwL1LvTpqhN6bYReW8KAesMBkxf4t2H33o0hjYmD4giTqzg== + version "3.238.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.238.0.tgz#42c899111a4eec7fc897b53835121238c3136570" + integrity sha512-gK8JzwsprnwNjKBUc5/K2dVWQQNK6Dxyhh1IIsJbzj6uurW2K61/mkNNV1h33SAKTubsJYPkq6VwcTrBKtpabg== dependencies: "@aws-crypto/sha1-browser" "2.0.0" "@aws-crypto/sha256-browser" "2.0.0" "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/client-sts" "3.218.0" - "@aws-sdk/config-resolver" "3.215.0" - "@aws-sdk/credential-provider-node" "3.218.0" - "@aws-sdk/eventstream-serde-browser" "3.215.0" - "@aws-sdk/eventstream-serde-config-resolver" "3.215.0" - "@aws-sdk/eventstream-serde-node" "3.215.0" - "@aws-sdk/fetch-http-handler" "3.215.0" - "@aws-sdk/hash-blob-browser" "3.215.0" - "@aws-sdk/hash-node" "3.215.0" - "@aws-sdk/hash-stream-node" "3.215.0" - "@aws-sdk/invalid-dependency" "3.215.0" - "@aws-sdk/md5-js" "3.215.0" - "@aws-sdk/middleware-bucket-endpoint" "3.215.0" - "@aws-sdk/middleware-content-length" "3.215.0" - "@aws-sdk/middleware-endpoint" "3.215.0" - "@aws-sdk/middleware-expect-continue" "3.215.0" - "@aws-sdk/middleware-flexible-checksums" "3.215.0" - "@aws-sdk/middleware-host-header" "3.215.0" - "@aws-sdk/middleware-location-constraint" "3.215.0" - "@aws-sdk/middleware-logger" "3.215.0" - "@aws-sdk/middleware-recursion-detection" "3.215.0" - "@aws-sdk/middleware-retry" "3.215.0" - "@aws-sdk/middleware-sdk-s3" "3.215.0" - "@aws-sdk/middleware-serde" "3.215.0" - "@aws-sdk/middleware-signing" "3.215.0" - "@aws-sdk/middleware-ssec" "3.215.0" - "@aws-sdk/middleware-stack" "3.215.0" - "@aws-sdk/middleware-user-agent" "3.215.0" - "@aws-sdk/node-config-provider" "3.215.0" - "@aws-sdk/node-http-handler" "3.215.0" - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/signature-v4-multi-region" "3.215.0" - "@aws-sdk/smithy-client" "3.215.0" - "@aws-sdk/types" "3.215.0" - "@aws-sdk/url-parser" "3.215.0" + "@aws-sdk/client-sts" "3.238.0" + "@aws-sdk/config-resolver" "3.234.0" + "@aws-sdk/credential-provider-node" "3.238.0" + "@aws-sdk/eventstream-serde-browser" "3.226.0" + "@aws-sdk/eventstream-serde-config-resolver" "3.226.0" + "@aws-sdk/eventstream-serde-node" "3.226.0" + "@aws-sdk/fetch-http-handler" "3.226.0" + "@aws-sdk/hash-blob-browser" "3.226.0" + "@aws-sdk/hash-node" "3.226.0" + "@aws-sdk/hash-stream-node" "3.226.0" + "@aws-sdk/invalid-dependency" "3.226.0" + "@aws-sdk/md5-js" "3.226.0" + "@aws-sdk/middleware-bucket-endpoint" "3.226.0" + "@aws-sdk/middleware-content-length" "3.226.0" + "@aws-sdk/middleware-endpoint" "3.226.0" + "@aws-sdk/middleware-expect-continue" "3.226.0" + "@aws-sdk/middleware-flexible-checksums" "3.226.0" + "@aws-sdk/middleware-host-header" "3.226.0" + "@aws-sdk/middleware-location-constraint" "3.226.0" + "@aws-sdk/middleware-logger" "3.226.0" + "@aws-sdk/middleware-recursion-detection" "3.226.0" + "@aws-sdk/middleware-retry" "3.235.0" + "@aws-sdk/middleware-sdk-s3" "3.231.0" + "@aws-sdk/middleware-serde" "3.226.0" + "@aws-sdk/middleware-signing" "3.226.0" + "@aws-sdk/middleware-ssec" "3.226.0" + "@aws-sdk/middleware-stack" "3.226.0" + "@aws-sdk/middleware-user-agent" "3.226.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/node-http-handler" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/signature-v4-multi-region" "3.226.0" + "@aws-sdk/smithy-client" "3.234.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/url-parser" "3.226.0" "@aws-sdk/util-base64" "3.208.0" "@aws-sdk/util-body-length-browser" "3.188.0" "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.215.0" - "@aws-sdk/util-defaults-mode-node" "3.215.0" - "@aws-sdk/util-endpoints" "3.216.0" - "@aws-sdk/util-stream-browser" "3.215.0" - "@aws-sdk/util-stream-node" "3.215.0" - "@aws-sdk/util-user-agent-browser" "3.215.0" - "@aws-sdk/util-user-agent-node" "3.215.0" + "@aws-sdk/util-defaults-mode-browser" "3.234.0" + "@aws-sdk/util-defaults-mode-node" "3.234.0" + "@aws-sdk/util-endpoints" "3.226.0" + "@aws-sdk/util-retry" "3.229.0" + "@aws-sdk/util-stream-browser" "3.226.0" + "@aws-sdk/util-stream-node" "3.226.0" + "@aws-sdk/util-user-agent-browser" "3.226.0" + "@aws-sdk/util-user-agent-node" "3.226.0" "@aws-sdk/util-utf8-browser" "3.188.0" "@aws-sdk/util-utf8-node" "3.208.0" - "@aws-sdk/util-waiter" "3.215.0" + "@aws-sdk/util-waiter" "3.226.0" "@aws-sdk/xml-builder" "3.201.0" fast-xml-parser "4.0.11" tslib "^2.3.1" -"@aws-sdk/client-sso-oidc@3.216.0": - version "3.216.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.216.0.tgz#ffd350bd4dd3e83a7fc620fd46464f97c455eb75" - integrity sha512-O8kmM86BHwiSwyNoIe+iHXuSpUE9PBWl3re8u+/igt/w5W5VmMVz+zQr7gRUDQ1FDgLWNEdAJa0r+JFx3pZdzA== +"@aws-sdk/client-sso-oidc@3.238.0": + version "3.238.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.238.0.tgz#95aa2e993b6bff2adc74d1821241f80f9ea5b283" + integrity sha512-kazcA2Kp+cXQRtaZi5/T5YFfU9J3nzu1tXJsh0xAm+J3S9LS1ertY1bSX6KBed2xuxx2mfum8JRqli0TJad/pA== dependencies: "@aws-crypto/sha256-browser" "2.0.0" "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/config-resolver" "3.215.0" - "@aws-sdk/fetch-http-handler" "3.215.0" - "@aws-sdk/hash-node" "3.215.0" - "@aws-sdk/invalid-dependency" "3.215.0" - "@aws-sdk/middleware-content-length" "3.215.0" - "@aws-sdk/middleware-endpoint" "3.215.0" - "@aws-sdk/middleware-host-header" "3.215.0" - "@aws-sdk/middleware-logger" "3.215.0" - "@aws-sdk/middleware-recursion-detection" "3.215.0" - "@aws-sdk/middleware-retry" "3.215.0" - "@aws-sdk/middleware-serde" "3.215.0" - "@aws-sdk/middleware-stack" "3.215.0" - "@aws-sdk/middleware-user-agent" "3.215.0" - "@aws-sdk/node-config-provider" "3.215.0" - "@aws-sdk/node-http-handler" "3.215.0" - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/smithy-client" "3.215.0" - "@aws-sdk/types" "3.215.0" - "@aws-sdk/url-parser" "3.215.0" + "@aws-sdk/config-resolver" "3.234.0" + "@aws-sdk/fetch-http-handler" "3.226.0" + "@aws-sdk/hash-node" "3.226.0" + "@aws-sdk/invalid-dependency" "3.226.0" + "@aws-sdk/middleware-content-length" "3.226.0" + "@aws-sdk/middleware-endpoint" "3.226.0" + "@aws-sdk/middleware-host-header" "3.226.0" + "@aws-sdk/middleware-logger" "3.226.0" + "@aws-sdk/middleware-recursion-detection" "3.226.0" + "@aws-sdk/middleware-retry" "3.235.0" + "@aws-sdk/middleware-serde" "3.226.0" + "@aws-sdk/middleware-stack" "3.226.0" + "@aws-sdk/middleware-user-agent" "3.226.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/node-http-handler" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/smithy-client" "3.234.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/url-parser" "3.226.0" "@aws-sdk/util-base64" "3.208.0" "@aws-sdk/util-body-length-browser" "3.188.0" "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.215.0" - "@aws-sdk/util-defaults-mode-node" "3.215.0" - "@aws-sdk/util-endpoints" "3.216.0" - "@aws-sdk/util-user-agent-browser" "3.215.0" - "@aws-sdk/util-user-agent-node" "3.215.0" + "@aws-sdk/util-defaults-mode-browser" "3.234.0" + "@aws-sdk/util-defaults-mode-node" "3.234.0" + "@aws-sdk/util-endpoints" "3.226.0" + "@aws-sdk/util-retry" "3.229.0" + "@aws-sdk/util-user-agent-browser" "3.226.0" + "@aws-sdk/util-user-agent-node" "3.226.0" "@aws-sdk/util-utf8-browser" "3.188.0" "@aws-sdk/util-utf8-node" "3.208.0" tslib "^2.3.1" -"@aws-sdk/client-sso@3.218.0": - version "3.218.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.218.0.tgz#dc44d98220b57a19bbf1cdb5ee41518d5ccd04fd" - integrity sha512-kVMlpjaVblxgb1G8q3wD65mKxO3RzKwnjUjIBmOHpmseXzlSkAdAvYcikaDoJP+CRmys4uXk5DN8c7ZdL0OmgA== +"@aws-sdk/client-sso@3.238.0": + version "3.238.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.238.0.tgz#dcb4df1e97e6e8821f473e70eee81a8d4424664f" + integrity sha512-KHJJWP7hBDa9KLYiU5+hOb+3AAba93PhWebXkpKyQ/Bs+e7ECCreyLCwuME6uWTV01NDuFDpwZ6zUMpyNIcP6Q== dependencies: "@aws-crypto/sha256-browser" "2.0.0" "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/config-resolver" "3.215.0" - "@aws-sdk/fetch-http-handler" "3.215.0" - "@aws-sdk/hash-node" "3.215.0" - "@aws-sdk/invalid-dependency" "3.215.0" - "@aws-sdk/middleware-content-length" "3.215.0" - "@aws-sdk/middleware-endpoint" "3.215.0" - "@aws-sdk/middleware-host-header" "3.215.0" - "@aws-sdk/middleware-logger" "3.215.0" - "@aws-sdk/middleware-recursion-detection" "3.215.0" - "@aws-sdk/middleware-retry" "3.215.0" - "@aws-sdk/middleware-serde" "3.215.0" - "@aws-sdk/middleware-stack" "3.215.0" - "@aws-sdk/middleware-user-agent" "3.215.0" - "@aws-sdk/node-config-provider" "3.215.0" - "@aws-sdk/node-http-handler" "3.215.0" - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/smithy-client" "3.215.0" - "@aws-sdk/types" "3.215.0" - "@aws-sdk/url-parser" "3.215.0" + "@aws-sdk/config-resolver" "3.234.0" + "@aws-sdk/fetch-http-handler" "3.226.0" + "@aws-sdk/hash-node" "3.226.0" + "@aws-sdk/invalid-dependency" "3.226.0" + "@aws-sdk/middleware-content-length" "3.226.0" + "@aws-sdk/middleware-endpoint" "3.226.0" + "@aws-sdk/middleware-host-header" "3.226.0" + "@aws-sdk/middleware-logger" "3.226.0" + "@aws-sdk/middleware-recursion-detection" "3.226.0" + "@aws-sdk/middleware-retry" "3.235.0" + "@aws-sdk/middleware-serde" "3.226.0" + "@aws-sdk/middleware-stack" "3.226.0" + "@aws-sdk/middleware-user-agent" "3.226.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/node-http-handler" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/smithy-client" "3.234.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/url-parser" "3.226.0" "@aws-sdk/util-base64" "3.208.0" "@aws-sdk/util-body-length-browser" "3.188.0" "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.215.0" - "@aws-sdk/util-defaults-mode-node" "3.215.0" - "@aws-sdk/util-endpoints" "3.216.0" - "@aws-sdk/util-user-agent-browser" "3.215.0" - "@aws-sdk/util-user-agent-node" "3.215.0" + "@aws-sdk/util-defaults-mode-browser" "3.234.0" + "@aws-sdk/util-defaults-mode-node" "3.234.0" + "@aws-sdk/util-endpoints" "3.226.0" + "@aws-sdk/util-retry" "3.229.0" + "@aws-sdk/util-user-agent-browser" "3.226.0" + "@aws-sdk/util-user-agent-node" "3.226.0" "@aws-sdk/util-utf8-browser" "3.188.0" "@aws-sdk/util-utf8-node" "3.208.0" tslib "^2.3.1" -"@aws-sdk/client-sts@3.218.0": - version "3.218.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.218.0.tgz#7034e21a786e62150c27385f8b9b0239ce9e538b" - integrity sha512-0A81eHvryKFEPq7IeY34Opzh5b9bVhhLlf2fDy5VuZjCFf4R9vD2ceOANvFSJeMsmdlqVDq8U1mHYl0E6FRUug== +"@aws-sdk/client-sts@3.238.0": + version "3.238.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.238.0.tgz#b814c2cf888cf99be199c25ede851dfcc8ae5ec6" + integrity sha512-jQNwHqxWUGvWCN4o8KUFYQES8r41Oobu7x1KZOMrPhPxy27FUcDjBq/h85VoD2/AZlETSCZLiCnKV3KBh5pT5w== dependencies: "@aws-crypto/sha256-browser" "2.0.0" "@aws-crypto/sha256-js" "2.0.0" - "@aws-sdk/config-resolver" "3.215.0" - "@aws-sdk/credential-provider-node" "3.218.0" - "@aws-sdk/fetch-http-handler" "3.215.0" - "@aws-sdk/hash-node" "3.215.0" - "@aws-sdk/invalid-dependency" "3.215.0" - "@aws-sdk/middleware-content-length" "3.215.0" - "@aws-sdk/middleware-endpoint" "3.215.0" - "@aws-sdk/middleware-host-header" "3.215.0" - "@aws-sdk/middleware-logger" "3.215.0" - "@aws-sdk/middleware-recursion-detection" "3.215.0" - "@aws-sdk/middleware-retry" "3.215.0" - "@aws-sdk/middleware-sdk-sts" "3.215.0" - "@aws-sdk/middleware-serde" "3.215.0" - "@aws-sdk/middleware-signing" "3.215.0" - "@aws-sdk/middleware-stack" "3.215.0" - "@aws-sdk/middleware-user-agent" "3.215.0" - "@aws-sdk/node-config-provider" "3.215.0" - "@aws-sdk/node-http-handler" "3.215.0" - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/smithy-client" "3.215.0" - "@aws-sdk/types" "3.215.0" - "@aws-sdk/url-parser" "3.215.0" + "@aws-sdk/config-resolver" "3.234.0" + "@aws-sdk/credential-provider-node" "3.238.0" + "@aws-sdk/fetch-http-handler" "3.226.0" + "@aws-sdk/hash-node" "3.226.0" + "@aws-sdk/invalid-dependency" "3.226.0" + "@aws-sdk/middleware-content-length" "3.226.0" + "@aws-sdk/middleware-endpoint" "3.226.0" + "@aws-sdk/middleware-host-header" "3.226.0" + "@aws-sdk/middleware-logger" "3.226.0" + "@aws-sdk/middleware-recursion-detection" "3.226.0" + "@aws-sdk/middleware-retry" "3.235.0" + "@aws-sdk/middleware-sdk-sts" "3.226.0" + "@aws-sdk/middleware-serde" "3.226.0" + "@aws-sdk/middleware-signing" "3.226.0" + "@aws-sdk/middleware-stack" "3.226.0" + "@aws-sdk/middleware-user-agent" "3.226.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/node-http-handler" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/smithy-client" "3.234.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/url-parser" "3.226.0" "@aws-sdk/util-base64" "3.208.0" "@aws-sdk/util-body-length-browser" "3.188.0" "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.215.0" - "@aws-sdk/util-defaults-mode-node" "3.215.0" - "@aws-sdk/util-endpoints" "3.216.0" - "@aws-sdk/util-user-agent-browser" "3.215.0" - "@aws-sdk/util-user-agent-node" "3.215.0" + "@aws-sdk/util-defaults-mode-browser" "3.234.0" + "@aws-sdk/util-defaults-mode-node" "3.234.0" + "@aws-sdk/util-endpoints" "3.226.0" + "@aws-sdk/util-retry" "3.229.0" + "@aws-sdk/util-user-agent-browser" "3.226.0" + "@aws-sdk/util-user-agent-node" "3.226.0" "@aws-sdk/util-utf8-browser" "3.188.0" "@aws-sdk/util-utf8-node" "3.208.0" fast-xml-parser "4.0.11" tslib "^2.3.1" -"@aws-sdk/config-resolver@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.215.0.tgz#88f4979a32931b08527046be67924464a34ca8d8" - integrity sha512-DxX4R+YYLQOtg0qfceKBrjVD4t1mQBG1eb7IVr2QSlckFCX8ztUNymFMuaSEo3938Jyy/NpgfUDpFqPDaSKnng== +"@aws-sdk/config-resolver@3.234.0": + version "3.234.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.234.0.tgz#29d8936b713b7ee59b26b335d4f6715d644fc089" + integrity sha512-uZxy4wzllfvgCQxVc+Iqhde0NGAnfmV2hWR6ejadJaAFTuYNvQiRg9IqJy3pkyDPqXySiJ8Bom5PoJfgn55J/A== dependencies: - "@aws-sdk/signature-v4" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/signature-v4" "3.226.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-config-provider" "3.208.0" - "@aws-sdk/util-middleware" "3.215.0" + "@aws-sdk/util-middleware" "3.226.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-env@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.215.0.tgz#e0db666bac6ae13022dc26226a7a54ee0b20b782" - integrity sha512-n5G7I7Pxfsn81+tNsSOzspKp9SYai78oRfImsfFY4JLTcWutv7szMgFUbtEzBfUUINHpOxLiO2Lk5yu5K1C7IQ== +"@aws-sdk/credential-provider-env@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.226.0.tgz#0bcb89a9abc166b3a48f5c255b9fcabc4cb80daf" + integrity sha512-sd8uK1ojbXxaZXlthzw/VXZwCPUtU3PjObOfr3Evj7MPIM2IH8h29foOlggx939MdLQGboJf9gKvLlvKDWtJRA== dependencies: - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-imds@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.215.0.tgz#f73b0ff1b71dd5a1d433070cc10129a3fd8a917c" - integrity sha512-/4FUUR6u9gkNfxB6mEwBr0kk0myIkrDcXbAocWN3fPd/t7otzxpx/JqPZXgM6kcVP7M4T/QT75l1E1RRHLWCCQ== +"@aws-sdk/credential-provider-imds@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.226.0.tgz#0a4558449eb261412b0490ea1c3242eb91659759" + integrity sha512-//z/COQm2AjYFI1Lb0wKHTQSrvLFTyuKLFQGPJsKS7DPoxGOCKB7hmYerlbl01IDoCxTdyL//TyyPxbZEOQD5Q== dependencies: - "@aws-sdk/node-config-provider" "3.215.0" - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/types" "3.215.0" - "@aws-sdk/url-parser" "3.215.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/url-parser" "3.226.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-ini@3.218.0": - version "3.218.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.218.0.tgz#da7e0f3c86d5d651dee23ba78d41c25a8a421611" - integrity sha512-tDDrGW+4A+PQThVJ+l9ee03CsDoD0XLpOB5dcf+dr/dCHjcQ7x/CeVFZ8eM+XUtGQnZVvuzXZGwzS8bUWEdJIg== - dependencies: - "@aws-sdk/credential-provider-env" "3.215.0" - "@aws-sdk/credential-provider-imds" "3.215.0" - "@aws-sdk/credential-provider-sso" "3.218.0" - "@aws-sdk/credential-provider-web-identity" "3.215.0" - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/shared-ini-file-loader" "3.215.0" - "@aws-sdk/types" "3.215.0" +"@aws-sdk/credential-provider-ini@3.238.0": + version "3.238.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.238.0.tgz#ff21f2a52c9867c34814c1548e8d2bd5f5dfb15a" + integrity sha512-WmPNtIYyUasjV7VQxvPNq7ihmx0vFsiKAtjNjjakdrt5TPoma4nUYb9tIG9SuG+kcp4DJIgRLJAgZtXbCcVimg== + dependencies: + "@aws-sdk/credential-provider-env" "3.226.0" + "@aws-sdk/credential-provider-imds" "3.226.0" + "@aws-sdk/credential-provider-process" "3.226.0" + "@aws-sdk/credential-provider-sso" "3.238.0" + "@aws-sdk/credential-provider-web-identity" "3.226.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/shared-ini-file-loader" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-node@3.218.0": - version "3.218.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.218.0.tgz#7a18b7bdcb20b76ea9bdbcb3dcad676e2784df84" - integrity sha512-J9PB6XFA+V0mgxleuY5W6Jjh5WejV8HjMViTJQpp2JN+NWZP3bGvquUSQHRqWGRGg2fSJy6Z/J4zQ8fpPbGsdQ== - dependencies: - "@aws-sdk/credential-provider-env" "3.215.0" - "@aws-sdk/credential-provider-imds" "3.215.0" - "@aws-sdk/credential-provider-ini" "3.218.0" - "@aws-sdk/credential-provider-process" "3.215.0" - "@aws-sdk/credential-provider-sso" "3.218.0" - "@aws-sdk/credential-provider-web-identity" "3.215.0" - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/shared-ini-file-loader" "3.215.0" - "@aws-sdk/types" "3.215.0" +"@aws-sdk/credential-provider-node@3.238.0": + version "3.238.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.238.0.tgz#cccd15fc5f8babb843fab7ec3b09b36d40a02c61" + integrity sha512-/RN5EyGfgdIIJdFzv+O0nSaHX1/F3anQjTIBeVg8GJ+82m+bDxMdALsG+NzkYnLilN9Uhc1lSNjLBCoPa5DSEg== + dependencies: + "@aws-sdk/credential-provider-env" "3.226.0" + "@aws-sdk/credential-provider-imds" "3.226.0" + "@aws-sdk/credential-provider-ini" "3.238.0" + "@aws-sdk/credential-provider-process" "3.226.0" + "@aws-sdk/credential-provider-sso" "3.238.0" + "@aws-sdk/credential-provider-web-identity" "3.226.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/shared-ini-file-loader" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-process@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.215.0.tgz#9906bdfde39f8f60e248567c11e93337b159eb5e" - integrity sha512-JNvj4L5B7W8byoFdfn/8Y4scoPiwCi+Ha/fRsFCrdSC7C+snDuxM/oQj33HI8DpKY1cjuigzEnpnxiNWaA09EA== +"@aws-sdk/credential-provider-process@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.226.0.tgz#bcd73a6d31d1b3181917d56e54aacbee242b077f" + integrity sha512-iUDMdnrTvbvaCFhWwqyXrhvQ9+ojPqPqXhwZtY1X/Qaz+73S9gXBPJHZaZb2Ke0yKE1Ql3bJbKvmmxC/qLQMng== dependencies: - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/shared-ini-file-loader" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/shared-ini-file-loader" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-sso@3.218.0": - version "3.218.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.218.0.tgz#4c1dcfc53b7f566f7a3197bfd99943cf378d63e4" - integrity sha512-HecWvmxD+xffmY8G4SfLRfCOgSoLFki45wOOU8ESgRM9fQp2+3CfRSyiThKZI5PTmE+xhPTRvmR61HUmQjEv8w== +"@aws-sdk/credential-provider-sso@3.238.0": + version "3.238.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.238.0.tgz#3e99252faa3e8e8d86e2f0dc8e29813d96f570c2" + integrity sha512-i70V4bFlCVYey3QARJ6XxKEg/4YuoFRnePV2oK37UHOGpEn49uXKwVZqLjzJgFHln7BPlC06cWDqrHUQIMvYrQ== dependencies: - "@aws-sdk/client-sso" "3.218.0" - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/shared-ini-file-loader" "3.215.0" - "@aws-sdk/token-providers" "3.216.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/client-sso" "3.238.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/shared-ini-file-loader" "3.226.0" + "@aws-sdk/token-providers" "3.238.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/credential-provider-web-identity@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.215.0.tgz#4ba859c40eaaaab111e4047323cbec29db88d714" - integrity sha512-AWaDDEE3VU1HeLrXvyUrkQ6Wb3PQij5bvvrMil9L0da3b1yrcpoDanQQy7wBFBXcZIVmcmSFe5MMA/nyh2Le4g== +"@aws-sdk/credential-provider-web-identity@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.226.0.tgz#2b7d20f93a40e2243c7e3857f54b103d19a946fb" + integrity sha512-CCpv847rLB0SFOHz2igvUMFAzeT2fD3YnY4C8jltuJoEkn0ITn1Hlgt13nTJ5BUuvyti2mvyXZHmNzhMIMrIlw== dependencies: - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/eventstream-codec@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-codec/-/eventstream-codec-3.215.0.tgz#5c635852926f5dc4f4ada2faf20bd3ce2db7e2cf" - integrity sha512-Uwgkq6ViQnfd1l+qhWPGdzxh+YhD1N6RYL0kEcp1ovsR+rC/0qUsM9VZrSckZn4jB+0ATqIoOXtcUYP4+xrNmg== +"@aws-sdk/eventstream-codec@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-codec/-/eventstream-codec-3.226.0.tgz#1f54fb2c0bb321d2636d068ee1e969a8c07586ab" + integrity sha512-6uPtR8vSwz3fqoZk9hrb6qBYdp3PJ22+JxV5Wimdesvow4kJXSgDQXIxEkxbv6SxB9tNRB4uJHD84RetHEi15Q== dependencies: "@aws-crypto/crc32" "2.0.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-hex-encoding" "3.201.0" tslib "^2.3.1" -"@aws-sdk/eventstream-serde-browser@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.215.0.tgz#dfdcb780dfc5f351a5eac68fd3203359549870b2" - integrity sha512-VfTl69/C/cOjm47blgvdBz2pw8//6qkLPvQetfDOgf40JvsjBp9afUDNiKV08ulzoUeVZBosgHs09oZ2VDj09Q== +"@aws-sdk/eventstream-serde-browser@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.226.0.tgz#a1b880952b5d5b367fcff57be7c00682d01cef00" + integrity sha512-otYC5aZE9eJUqAlKpy8w0rPDQ1eKGvZPtgxWXmFYSO2lDVGfI1nBBNmdZ4MdHqNuQ7ucsKMQYF8BFJ65K2tYPA== dependencies: - "@aws-sdk/eventstream-serde-universal" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/eventstream-serde-universal" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/eventstream-serde-config-resolver@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.215.0.tgz#1423d023bc99b5c601508a8555274c649ad8554b" - integrity sha512-NrVb8HA0tUsruAj8yVWTaRIfcAB9lsajzksCqS7W917x/esoIRwoeF2zua63Ivro7hLeCjzS2Mws5IhvSl+/tQ== +"@aws-sdk/eventstream-serde-config-resolver@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.226.0.tgz#07aa985fd8c7d417442bb48786a63bad63bb1a5a" + integrity sha512-A56Gypg+lyEfA5cna+EUH9XTrj0SvRG1gwNW7lrUzviN36SeA/LFTUIOEjxVML3Lowy+EPAcrSZ67h6aepoAig== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/eventstream-serde-node@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.215.0.tgz#92778bc1ed4c0c21c5f934c9f3bc9e2633f3ab0a" - integrity sha512-DxABFUIpmFV1NOfwF8FtX+l7kzmMTTJf2BfXvGoYemmBtv9Cc31Qg83ouD8xuNSx9qlbFOgpWaNpzEZ400porA== +"@aws-sdk/eventstream-serde-node@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.226.0.tgz#2f95e686ea51e452c1a3af4fa48242573e5ea3ad" + integrity sha512-KWLnKkKDzI9RNkiK6OiSYpG/XjZfue6Bsp/vRG+H5z3fbXdHv4X2+iW+Efu2Kvn7jsUyUv82TCl57DyJ/HKYhQ== dependencies: - "@aws-sdk/eventstream-serde-universal" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/eventstream-serde-universal" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/eventstream-serde-universal@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.215.0.tgz#e0cfee0dccd88ebe882a93453940f88c5492ab05" - integrity sha512-8DmY3vVZtXAKzW0wOSC0bN+WF8qNZKaCqe5JCM3WwS1Wu6F6qI7b064VSe5b3d9BbJzeMccOcJeCg3ZU/3nYUQ== +"@aws-sdk/eventstream-serde-universal@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.226.0.tgz#f071c41b9706f129efad42c083a9ab5e2f2fc583" + integrity sha512-Q8viYM1Sv90/yIUqyWNeG1GEvyVlAI3GIrInQcCMC+xT59jS+IKGy2y7ojCvSWXnhf5/HMXKcmG092QsqeKy0Q== dependencies: - "@aws-sdk/eventstream-codec" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/eventstream-codec" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/fetch-http-handler@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.215.0.tgz#193a8dad5ce1fe1ef4d4a5bb0e06a263f4038fbb" - integrity sha512-JfZyrJOE+0ik1PumsIUZd0NfgEx4sZ43VSdPCD9GRhssRWudNsSF1B5fz3xA5v+1y5oQPjXZyaWCzKtnYruiWw== +"@aws-sdk/fetch-http-handler@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.226.0.tgz#350f78fc18fe9cb0a889ef4870838a8fcfa8855c" + integrity sha512-JewZPMNEBXfi1xVnRa7pVtK/zgZD8/lQ/YnD8pq79WuMa2cwyhDtr8oqCoqsPW+WJT5ScXoMtuHxN78l8eKWgg== dependencies: - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/querystring-builder" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/querystring-builder" "3.226.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-base64" "3.208.0" tslib "^2.3.1" -"@aws-sdk/hash-blob-browser@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.215.0.tgz#e67db32f12980f4e7251bf31965e806a0284571c" - integrity sha512-plHPFOSEHig0g/ou1H4QW31AyPGzwR0qgUKIEUFf3lWIfBI3BnvA4t24cJ87I204oqENj/+ZSNAj5qeAZfMFXw== +"@aws-sdk/hash-blob-browser@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.226.0.tgz#00143ed30f9bd8b671327a94609db2403036654d" + integrity sha512-5DCvWE6L4xGoViEHyjcPFuUe1G2EtNx8TqswWaoaKgyasP/yuRm4H99Ra7rqIrjCcSTAGD9NVsUQvVVw1bGt9w== dependencies: "@aws-sdk/chunked-blob-reader" "3.188.0" "@aws-sdk/chunked-blob-reader-native" "3.208.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/hash-node@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.215.0.tgz#be8127948b26aba2f0e213a64baad9ce3051ca21" - integrity sha512-MkSRuZvo1RCRmI0VNEmRYCGGD/DkMd9lqnLtOyglMPnSX1mhyD4/DyXmcc3rYa7PsjDRAfykGWJRiMqpoMLjiQ== +"@aws-sdk/hash-node@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.226.0.tgz#252d98bcbb1e13c8f26d9d416db03cf8cceac185" + integrity sha512-MdlJhJ9/Espwd0+gUXdZRsHuostB2WxEVAszWxobP0FTT9PnicqnfK7ExmW+DUAc0ywxtEbR3e0UND65rlSTVw== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-buffer-from" "3.208.0" tslib "^2.3.1" -"@aws-sdk/hash-stream-node@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-stream-node/-/hash-stream-node-3.215.0.tgz#bf4b7ae2c965327a427c61bc164a87a88c0c3d8e" - integrity sha512-1VEpiXu0jH7bSRYfEeSrznYq41zpUV4TtStoBXdcEVaOqT4LNQ5k1g1602544UWKUJ7D+E9NCNXpjM6TSMmG4A== +"@aws-sdk/hash-stream-node@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-stream-node/-/hash-stream-node-3.226.0.tgz#cdf4c231fa1dd6006532afc370626702c80e4c91" + integrity sha512-cgNTGlF8SdHaQXtjEmuLXz2U8SLM2JDKtIVPku/lHTMsUsEn+fuv2C+h1f/hvd4aNw5t1zggym7sO1/h/rv56Q== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/invalid-dependency@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.215.0.tgz#e87b1927262c8f9c1c80f382a56621286db08103" - integrity sha512-++bK4BUQe8/CL/YcLZcQB8qPOhiXxhbuhYzfFS7PNVvW1QOLqKRZL/lKs24gzjcOmw7IhAbCybDZwvu2TM4DAg== +"@aws-sdk/invalid-dependency@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.226.0.tgz#74586f60859ed1813985e3d642066cc46d2e9d40" + integrity sha512-QXOYFmap8g9QzRjumcRCIo2GEZkdCwd7ePQW0OABWPhKHzlJ74vvBxywjU3s39EEBEluWXtZ7Iufg6GxZM4ifw== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" "@aws-sdk/is-array-buffer@3.201.0": @@ -516,306 +521,308 @@ dependencies: tslib "^2.3.1" -"@aws-sdk/md5-js@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/md5-js/-/md5-js-3.215.0.tgz#54c3874c61066a90706c523a056418c4ca68340a" - integrity sha512-2f5r2raNDG9USKHKRgAW2r1MzCrkemLASlDXASgAuAD3gYGURVi4ZDhI3I1GECY5dPEgGC+3B2rkEb9MfQAaEg== +"@aws-sdk/md5-js@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/md5-js/-/md5-js-3.226.0.tgz#1400f9af49233e2cae7f90c3c93013b4ce3e39f6" + integrity sha512-ENigJRNudqyh6xsch166SZ4gggHd3XzZJ8gkCU4CWPne04HcR3BkWSO774IuWooCHt8zkaEHKecPurRz6qR+Vw== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-utf8-browser" "3.188.0" "@aws-sdk/util-utf8-node" "3.208.0" tslib "^2.3.1" -"@aws-sdk/middleware-bucket-endpoint@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.215.0.tgz#b7d035e319629b3bb50a5962740d22fe61a694d1" - integrity sha512-zMeYrnHX8S9VFDPH3fryXdPXW1DWeX9URKAkU1oxZLGpBX91CsWzUDjaMhbkDgvwO2oeKgjnZ2vCwcNNKP266w== +"@aws-sdk/middleware-bucket-endpoint@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.226.0.tgz#830ec9fa591667b9e848b69504f79f86717e97e7" + integrity sha512-A1Vq5W2X7jgTfjqcKPmjoHohF0poP+9fxwL97fQMvzcwmjhtoCV3bLEpo6CGYx0pKPiSlRJXZkRwRPj2hDHDmA== dependencies: - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-arn-parser" "3.208.0" "@aws-sdk/util-config-provider" "3.208.0" tslib "^2.3.1" -"@aws-sdk/middleware-content-length@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.215.0.tgz#06d7692eb58dec4f07a235d51cc4be430c142067" - integrity sha512-zKJRb6jDLFl9nl/muSFbiQHA4uK3skinuDRcyLbpMvvzhuK/PVodv9QI1+wIUsFdXkaSxAlva1oG4bL8ZFi+sQ== +"@aws-sdk/middleware-content-length@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.226.0.tgz#6cc952049f6e3cdc3a3778c9dce9f2aee942b5fe" + integrity sha512-ksUzlHJN2JMuyavjA46a4sctvnrnITqt2tbGGWWrAuXY1mel2j+VbgnmJUiwHKUO6bTFBBeft5Vd1TSOb4JmiA== dependencies: - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-endpoint@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.215.0.tgz#ea408341e2c7996f3b66aa2b550c529d92ec29e1" - integrity sha512-W0QXL5emcN9IXtMbnWT/abLxBFH2tGIfnre2jPNmZ9M7uVFxUwwv5OTUXxNLGNehJHKhiJPwhfQvMy20IDzVcw== +"@aws-sdk/middleware-endpoint@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.226.0.tgz#d776480be4b5a9534c2805b7425be05497f840b7" + integrity sha512-EvLFafjtUxTT0AC9p3aBQu1/fjhWdIeK58jIXaNFONfZ3F8QbEYUPuF/SqZvJM6cWfOO9qwYKkRDbCSTYhprIg== dependencies: - "@aws-sdk/middleware-serde" "3.215.0" - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/signature-v4" "3.215.0" - "@aws-sdk/types" "3.215.0" - "@aws-sdk/url-parser" "3.215.0" + "@aws-sdk/middleware-serde" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/signature-v4" "3.226.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/url-parser" "3.226.0" "@aws-sdk/util-config-provider" "3.208.0" - "@aws-sdk/util-middleware" "3.215.0" + "@aws-sdk/util-middleware" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-expect-continue@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.215.0.tgz#189af8a5eb9c80f5d1a1014f4e6f8c1503b1cdbe" - integrity sha512-X2G7MnBSYPPmLqqd9xDGl2ik9dUsGYcYzulf2Z1HVEGJO6btZJtPfC+IIwuJjsiCWCgbypM1X/oOSxdrmRkUNQ== +"@aws-sdk/middleware-expect-continue@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.226.0.tgz#46a5b720ff896ce706ee4c01b0edcdb37bd8eaf4" + integrity sha512-YxvQKTV/eA9P8AgW0hXOgj5Qa+TSnNFfyOkfeP089aP3f6p92b1cESf33TEOKsddive2mHT5LRCN6MuPcgWWrA== dependencies: - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-flexible-checksums@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.215.0.tgz#79c7e3fd31635571aae29d64507778b0b377f7d7" - integrity sha512-fAFcR+QsrGPCgYssdTYmayoCXDKYzlv0a14jaJtZsacXQNGefXly9D856lri+yG2jxqQ6Sa0FzU4Pm7s3j4mvg== +"@aws-sdk/middleware-flexible-checksums@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.226.0.tgz#01e2d983ffe855fb8c2b78d43cf81de26db32996" + integrity sha512-8A9Ot9A7794UP5tMGl2MnfTW/UM/jYy1wRWF9YkR/hPIcPb7OmE0hmlwIQGzb/7grxpYw66ETKf0WeH/41YfeQ== dependencies: "@aws-crypto/crc32" "2.0.0" "@aws-crypto/crc32c" "2.0.0" "@aws-sdk/is-array-buffer" "3.201.0" - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-host-header@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.215.0.tgz#cebb1f95429a7c4ae16dfcc4ff64f07ca16a6a2b" - integrity sha512-GOqI7VwoENZwn+6tIMrrJ4SipIqL2JCh+BNvORVcy7CQxn1ViKkna7iaCx+QMjpg/kn9cR6kfY0n1FmgZR1w9A== +"@aws-sdk/middleware-host-header@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.226.0.tgz#1e1ecb034929e0dbc532ae501fd93781438f9a24" + integrity sha512-haVkWVh6BUPwKgWwkL6sDvTkcZWvJjv8AgC8jiQuSl8GLZdzHTB8Qhi3IsfFta9HAuoLjxheWBE5Z/L0UrfhLA== dependencies: - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-location-constraint@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.215.0.tgz#e9c500b006c1fd707677c4afbf0c1a8f5d463dfc" - integrity sha512-taDOIGv2rsAyDEJxSm/nhKS4nsBPUKKCvIpK26E7uGshQZFLtTLTJMp8zGb1IBfUSxRngdWljRmOS5AJUexNbQ== +"@aws-sdk/middleware-location-constraint@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.226.0.tgz#c6c24047953294015342d704d787be8e05df49d3" + integrity sha512-qHiYaBYPc2R37KxG2uqsUUwh4usrQMHfGkrpTUnx5d4rGzM3mC+muPsTpSHnAL63K2/yJOHQJFjss3GGwV4SSA== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-logger@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.215.0.tgz#462283672aa7da1014b91827b17474a6b6f1b6a0" - integrity sha512-0h4GGF0rV3jnY3jxmcAWsOdqHCYf25s0biSjmgTei+l/5S+geOGrovRPCNep0LLg0i9D8bkZsXISojilETbf+g== +"@aws-sdk/middleware-logger@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.226.0.tgz#37fd0e62f555befd526b03748c3aab60dcefecf3" + integrity sha512-m9gtLrrYnpN6yckcQ09rV7ExWOLMuq8mMPF/K3DbL/YL0TuILu9i2T1W+JuxSX+K9FMG2HrLAKivE/kMLr55xA== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-recursion-detection@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.215.0.tgz#3d5a6d55148b1ddccc238d11e67a5cf6cdbf4a12" - integrity sha512-KQ+kiEsaluM4i6opjusUukxY78+UhfR7vzXHDkzZK/GplQ1hY0B+rwVO1eaULmlnmf3FK+Wd6lwrPV7xS2W+EA== +"@aws-sdk/middleware-recursion-detection@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.226.0.tgz#e149b9138e94d2fa70e7752ba6b1ccb537009706" + integrity sha512-mwRbdKEUeuNH5TEkyZ5FWxp6bL2UC1WbY+LDv6YjHxmSMKpAoOueEdtU34PqDOLrpXXxIGHDFmjeGeMfktyEcA== dependencies: - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-retry@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.215.0.tgz#867cb8a65491c550dc750917042444668085720b" - integrity sha512-I/dnUPVg2Kp3lW+MywBoPp06EOng8IfuaS9ph4bcJpQKrhNU5ekRgCHH2C4k1A6GcP8uyHxQ5TVV6j+l0QPIsA== +"@aws-sdk/middleware-retry@3.235.0": + version "3.235.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.235.0.tgz#c0d938db85a771812204ed5e981eaf5eef6b580b" + integrity sha512-50WHbJGpD3SNp9763MAlHqIhXil++JdQbKejNpHg7HsJne/ao3ub+fDOfx//mMBjpzBV25BGd5UlfL6blrClSg== dependencies: - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/service-error-classification" "3.215.0" - "@aws-sdk/types" "3.215.0" - "@aws-sdk/util-middleware" "3.215.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/service-error-classification" "3.229.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/util-middleware" "3.226.0" + "@aws-sdk/util-retry" "3.229.0" tslib "^2.3.1" uuid "^8.3.2" -"@aws-sdk/middleware-sdk-s3@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.215.0.tgz#d2325c17cd0bd267b2c1c114c2f3fa4cce067af2" - integrity sha512-+SM+xCIFNSFIKM9KyvgIu4Ah5Z/SbHS8mDkinHkY8X/iUryrsKKBs7xnpMAaJCTFkK/8gO6Lhdda1nbvGozhdA== +"@aws-sdk/middleware-sdk-s3@3.231.0": + version "3.231.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.231.0.tgz#98a6f0ce1611b0dbdc96e6aaaa8979fa5d9b0644" + integrity sha512-UGaSvevd2TanfKgStF46dDSHkh4bxOr1gdUkyHm9i+1pF5lx4KdbnBZv/5SKnn7XifhHRXrs1M3lTzemXREhTA== dependencies: - "@aws-sdk/middleware-bucket-endpoint" "3.215.0" - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-arn-parser" "3.208.0" tslib "^2.3.1" -"@aws-sdk/middleware-sdk-sts@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.215.0.tgz#33a385161d63fa7e1aa5219f8d2b223bd28fa96d" - integrity sha512-wJRxoDf+2egbRgochaQL8+zzADx8FM/2W0spKNj8x+t/3iqw70QwxCfuEKW/uFQ3ph6eaIrv7gYc8RRjwhD8rg== +"@aws-sdk/middleware-sdk-sts@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.226.0.tgz#e8a8cf42bba8963259546120cde1e408628863f9" + integrity sha512-NN9T/qoSD1kZvAT+VLny3NnlqgylYQcsgV3rvi/8lYzw/G/2s8VS6sm/VTWGGZhx08wZRv20MWzYu3bftcyqUg== dependencies: - "@aws-sdk/middleware-signing" "3.215.0" - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/signature-v4" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/middleware-signing" "3.226.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/signature-v4" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-serde@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.215.0.tgz#2891c568e3cbfb2e3117c356e99efc695a7b63b9" - integrity sha512-+uhLXdKvvQZcRRFc3UmemSr/YUHA4Jc+1YMjHxc3v8vvfztFJBb0wgBx999myOi8PmkYThlRBQDzXy9UCIhIJw== +"@aws-sdk/middleware-serde@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.226.0.tgz#c837ef33b34bec2af19a1c177a0c02a1ae20da5e" + integrity sha512-nPuOOAkSfx9TxzdKFx0X2bDlinOxGrqD7iof926K/AEflxGD1DBdcaDdjlYlPDW2CVE8LV/rAgbYuLxh/E/1VA== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-signing@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.215.0.tgz#f86febdae93066749f0715997121135eea2f6867" - integrity sha512-3BqzYqkmdPeOxjI8DVQE7Bm7J5QIvDy30abglXqrDg6npw6KonKI2Q3FIPFf+oLpZTMStwkoQOnwXHTPrSZ6Tg== +"@aws-sdk/middleware-signing@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.226.0.tgz#ebb1d142ac2767466f2e464bb7dba9837143b4d1" + integrity sha512-E6HmtPcl+IjYDDzi1xI2HpCbBq2avNWcjvCriMZWuTAtRVpnA6XDDGW5GY85IfS3A8G8vuWqEVPr8JcYUcjfew== dependencies: - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/signature-v4" "3.215.0" - "@aws-sdk/types" "3.215.0" - "@aws-sdk/util-middleware" "3.215.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/signature-v4" "3.226.0" + "@aws-sdk/types" "3.226.0" + "@aws-sdk/util-middleware" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-ssec@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.215.0.tgz#887b53727f6c1f2c61b2a4a3e781e173e7c424c1" - integrity sha512-iIiB2fGneR8iZN2tgQoACq1jQlG50zU49cus/jAAKjy6B7QeKXy5Ld8/+eNnzcjLuBzzeLtER2YWwFLWqUOZpw== +"@aws-sdk/middleware-ssec@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.226.0.tgz#4f160aa6822e2af1b1b8a755ff0710aefb66abfb" + integrity sha512-DR97oWoLHiMdaUP/wu99HtzG7/ijvCrjZGDH37WBO1rxFtEti6L7T09wgHzwxMN8gtL8FJA7dU8IrffGSC9VmA== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/middleware-stack@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.215.0.tgz#8fe53fcdb92590ae871a914d5efc4ec1f00e05b9" - integrity sha512-rdSVL7LxRgjlvoluqwODD4ypBy2k/YVl6FrDplyCMSi8m2WHZG99FzdmR9bpnWK+0DGzYZSMRYx6ynJ9N9PsSw== +"@aws-sdk/middleware-stack@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.226.0.tgz#b0408370270188103987c457c758f9cf7651754f" + integrity sha512-85wF29LvPvpoed60fZGDYLwv1Zpd/cM0C22WSSFPw1SSJeqO4gtFYyCg2squfT3KI6kF43IIkOCJ+L7GtryPug== dependencies: tslib "^2.3.1" -"@aws-sdk/middleware-user-agent@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.215.0.tgz#24c87d5e8e4c31a5a274403d503e72cb99ac85ed" - integrity sha512-X6GfoMNoEITTw7rGL/gWs8UZ0cmmmezvKcl+KtHsA642R05OR4mY5G7LdbWAw0bcrwKsuKOGmwUrC9lzGqbWUw== +"@aws-sdk/middleware-user-agent@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.226.0.tgz#26653189f3e8da86514f77688a80d0ad445c0799" + integrity sha512-N1WnfzCW1Y5yWhVAphf8OPGTe8Df3vmV7/LdsoQfmpkCZgLZeK2o0xITkUQhRj1mbw7yp8tVFLFV3R2lMurdAQ== dependencies: - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/node-config-provider@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.215.0.tgz#f7b6a72dddd49e59e70955a866ca40f40154d063" - integrity sha512-notckD94QwwxC0GsfpTxB7VH8SREIIlMsUSddqGtpModa0cq/wRb9rqnydZSoznbYpK1ND6h0C9hr/2PNz89zw== +"@aws-sdk/node-config-provider@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.226.0.tgz#a9e21512ef824142bb928a0b2f85b39a75b8964d" + integrity sha512-B8lQDqiRk7X5izFEUMXmi8CZLOKCTWQJU9HQf3ako+sF0gexo4nHN3jhoRWyLtcgC5S3on/2jxpAcqtm7kuY3w== dependencies: - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/shared-ini-file-loader" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/shared-ini-file-loader" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/node-http-handler@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.215.0.tgz#ba016b94691c825e4220dcf0588fe904df1f319c" - integrity sha512-btKWSR7m0UuWIN3p5MfSIvhqeYik7xri7U6nWuVI5GVzIYjzxEZOMvPAinDLDxL5wipodi0ZvTUNdDJdm7BcGQ== +"@aws-sdk/node-http-handler@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.226.0.tgz#373886e949d214a99a3521bd6c141fa17b0e89fe" + integrity sha512-xQCddnZNMiPmjr3W7HYM+f5ir4VfxgJh37eqZwX6EZmyItFpNNeVzKUgA920ka1VPz/ZUYB+2OFGiX3LCLkkaA== dependencies: - "@aws-sdk/abort-controller" "3.215.0" - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/querystring-builder" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/abort-controller" "3.226.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/querystring-builder" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/property-provider@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.215.0.tgz#387d96e0389b947c807f20a1a6845cd01912000f" - integrity sha512-dDPjMCCopkRURAmOJCMSlpIQ5BGWCpYj0+FIfZ5qWQs24fn1PAkQHecOiBhJO0ZSVuQy3xcIyWsAp1NE5e+7ug== +"@aws-sdk/property-provider@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.226.0.tgz#ef0ff37c319dc37a52f08fa7544f861308a3bbd8" + integrity sha512-TsljjG+Sg0LmdgfiAlWohluWKnxB/k8xenjeozZfzOr5bHmNHtdbWv6BtNvD/R83hw7SFXxbJHlD5H4u9p2NFg== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/protocol-http@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.215.0.tgz#e7cd73b811ced799acb8bf7dfcd8b49bb52e1d6a" - integrity sha512-qp6Y6v4S534LAjadiVl9p7ErK7ImphOKq6yhFyQwxko6iITLcz8ib3yU27fs4QJcnNj5ZooqW/YlL/0EikDxCQ== +"@aws-sdk/protocol-http@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.226.0.tgz#0af7bdc331508e556b722aad0cb78eefa93466e3" + integrity sha512-zWkVqiTA9RXL6y0hhfZc9bcU4DX2NI6Hw9IhQmSPeM59mdbPjJlY4bLlMr5YxywqO3yQ/ylNoAfrEzrDjlOSRg== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/querystring-builder@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.215.0.tgz#2a8b21560bdf24e6b24ef31c4287da4e0c459ed4" - integrity sha512-eilk8CqG37BVhQklLif00K2dOJgDzacUi8h3KVQ72ry1V3h345i4HsmaFIxvnz8XtNyDvV8qFAzeYg9n2P9RQA== +"@aws-sdk/querystring-builder@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.226.0.tgz#11cd751abeac66f1f9349225454bac3e39808926" + integrity sha512-LVurypuNeotO4lmirKXRC4NYrZRAyMJXuwO0f2a5ZAUJCjauwYrifKue6yCfU7bls7gut7nfcR6B99WBYpHs3g== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-uri-escape" "3.201.0" tslib "^2.3.1" -"@aws-sdk/querystring-parser@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.215.0.tgz#fea024bfe572863d6b89d209f1a523243ba1a624" - integrity sha512-8h/9H8dWM4fZO27UGzo8W5JXln4yJMugPyUl4qFA437gzPgNFN95+oLJWXtHMlfCHC5T/PDKetY9TarMDgBD0Q== +"@aws-sdk/querystring-parser@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.226.0.tgz#ba6a26727c98d46c95180e6cdc463039c5e4740d" + integrity sha512-FzB+VrQ47KAFxiPt2YXrKZ8AOLZQqGTLCKHzx4bjxGmwgsjV8yIbtJiJhZLMcUQV4LtGeIY9ixIqQhGvnZHE4A== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/service-error-classification@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.215.0.tgz#f60f10c2843df38922f401e30368d507a33e191d" - integrity sha512-SKBvClGFGzMPsjBBKjneaUazLCNr6bSxe9eFvOr3gCwuwE2jPQwW3VE1mb62howuvm6cLthEDwLQp/FsT1gMsw== +"@aws-sdk/service-error-classification@3.229.0": + version "3.229.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.229.0.tgz#768f1eb92775ca2cc99c6451a2303a0008a28fc1" + integrity sha512-dnzWWQ0/NoWMUZ5C0DW3dPm0wC1O76Y/SpKbuJzWPkx1EYy6r8p32Ly4D9vUzrKDbRGf48YHIF2kOkBmu21CLg== -"@aws-sdk/shared-ini-file-loader@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.215.0.tgz#0a454ce25288f548dd9800297a5061c3121a203e" - integrity sha512-unzQeLOyUiYHr8WxxandHo0OaCj31gx0wpt8dn2cZcHm/MdCqHcHcsQqOVnQsWQrrxY/XZ27cPyMVQeicNKYwQ== +"@aws-sdk/shared-ini-file-loader@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.226.0.tgz#d0ade86834b1803ce4b9dcab459e57e0376fd6cf" + integrity sha512-661VQefsARxVyyV2FX9V61V+nNgImk7aN2hYlFKla6BCwZfMng+dEtD0xVGyg1PfRw0qvEv5LQyxMVgHcUSevA== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/signature-v4-multi-region@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.215.0.tgz#20349ce6f1fe3a8f4597db230c76afe82ab079b2" - integrity sha512-XOUUNWs6I4vAa+Byj6qL/+DCWA5CjcRyA9sitYy8sNqhLcet8WoYf7vJL2LW1nvdzRb/pGBNWLiQOZ+9sadYeg== +"@aws-sdk/signature-v4-multi-region@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.226.0.tgz#7f97056e66dde3ca07c72176994c12daaa517f94" + integrity sha512-QHxNuf9ynK208v7Y3imdsa3Cz8ynYV7ZOf3sBJdItuEtHN6uy/KxaOrtvpF8I5Hyn48Hc8z5miTSMujFKT7GEw== dependencies: - "@aws-sdk/protocol-http" "3.215.0" - "@aws-sdk/signature-v4" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/protocol-http" "3.226.0" + "@aws-sdk/signature-v4" "3.226.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-arn-parser" "3.208.0" tslib "^2.3.1" -"@aws-sdk/signature-v4@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.215.0.tgz#37bdb85324042fc3fb06399d89c2730d94efb26d" - integrity sha512-Rc73uUCi3eJneO25DydLTfJYamXeuKS9YIhNMTKlpvcN1UQAmAnUbAmCuEmqvkYOiGD1i4/kd8kBga708iIikQ== +"@aws-sdk/signature-v4@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.226.0.tgz#100390b5c5b55a9b0abd05b06fceb36cfa0ecf98" + integrity sha512-/R5q5agdPd7HJB68XMzpxrNPk158EHUvkFkuRu5Qf3kkkHebEzWEBlWoVpUe6ss4rP9Tqcue6xPuaftEmhjpYw== dependencies: "@aws-sdk/is-array-buffer" "3.201.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-hex-encoding" "3.201.0" - "@aws-sdk/util-middleware" "3.215.0" + "@aws-sdk/util-middleware" "3.226.0" "@aws-sdk/util-uri-escape" "3.201.0" tslib "^2.3.1" -"@aws-sdk/smithy-client@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.215.0.tgz#cda96b076f7df19157340623872a8914f2a3bb8c" - integrity sha512-PiZfCdZkPohzMPrRmJ46TPOf2Tr/dhKYdwQArRnOOIsJABUGXjlzCUE8vysDN35XZYRx5f9hd+/U7kayhniq2w== +"@aws-sdk/smithy-client@3.234.0": + version "3.234.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.234.0.tgz#8f0021e021f0e52730ed0a8f271f839eb63bc374" + integrity sha512-8AtR/k4vsFvjXeQbIzq/Wy7Nbk48Ou0wUEeVYPHWHPSU8QamFWORkOwmKtKMfHAyZvmqiAPeQqHFkq+UJhWyyQ== dependencies: - "@aws-sdk/middleware-stack" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/middleware-stack" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/token-providers@3.216.0": - version "3.216.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.216.0.tgz#b158ef490ed002d5956d8d855627297a551963d6" - integrity sha512-cEmOfG7njWl0OA5lR65Sp2SW1i8ZLjf7C95TZ1e6t2Oo5aUFeN3aKBxMOV//1yc+BNzcFBnoHP/f29GhWxUOxA== +"@aws-sdk/token-providers@3.238.0": + version "3.238.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.238.0.tgz#825306e82f24276e6aaa4850f36bba87418ba485" + integrity sha512-vYUwmy0kTzA99mJCVvad+/5RDlWve/xxnppT8DJK3JIdAgskp+rULY+joVnq2NSl489UAioUnFGs57vUxi8Pog== dependencies: - "@aws-sdk/client-sso-oidc" "3.216.0" - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/shared-ini-file-loader" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/client-sso-oidc" "3.238.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/shared-ini-file-loader" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/types@3.215.0", "@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.110.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.215.0.tgz#72a595e2c1a5c8c3f0291bccf71d481412b1843b" - integrity sha512-eRbCVjwzTYd9C5e2mceScJ6D2kYDDEC3PLkYfJa+1wH9iiF2JlbiYozAokyeYBHQ+AjmD93MK58RBoM8iZfH0Q== +"@aws-sdk/types@3.226.0", "@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.110.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.226.0.tgz#3dba2ba223fbb8ac1ebc84de0e036ce69a81d469" + integrity sha512-MmmNHrWeO4man7wpOwrAhXlevqtOV9ZLcH4RhnG5LmRce0RFOApx24HoKENfFCcOyCm5LQBlsXCqi0dZWDWU0A== + dependencies: + tslib "^2.3.1" -"@aws-sdk/url-parser@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.215.0.tgz#4accbedd5fb81dc2f18e28f0f50dbd781b0b63a1" - integrity sha512-r/qIk3TUlV36JvoRjTErFm0LzzgNKLB1YUG8zVZCGAc2TEATi8OVEmsZvi+KfTmsbszulITJVcjZKbHLbGoUzg== +"@aws-sdk/url-parser@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.226.0.tgz#f53d1f868b27fe74aca091a799f2af56237b15a2" + integrity sha512-p5RLE0QWyP0OcTOLmFcLdVgUcUEzmEfmdrnOxyNzomcYb0p3vUagA5zfa1HVK2azsQJFBv28GfvMnba9bGhObg== dependencies: - "@aws-sdk/querystring-parser" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/querystring-parser" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" "@aws-sdk/util-arn-parser@3.208.0": @@ -862,34 +869,34 @@ dependencies: tslib "^2.3.1" -"@aws-sdk/util-defaults-mode-browser@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.215.0.tgz#2929ba9e5b891c9fe3f5b05453b7f44a6c6c25ee" - integrity sha512-MiNfZgB0I4dR8CBxH163W7c9KvE38sgCHNPWopMqSX5ezz7cuCPohCU0XsWd4I7K31PvzuqmKgOiKBAZraQJMA== +"@aws-sdk/util-defaults-mode-browser@3.234.0": + version "3.234.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.234.0.tgz#1151f0beabdb46c1aaca42a1ad0714b8e686acaa" + integrity sha512-IHMKXjTbOD8XMz5+2oCOsVP94BYb9YyjXdns0aAXr2NAo7k2+RCzXQ2DebJXppGda1F6opFutoKwyVSN0cmbMw== dependencies: - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/types" "3.226.0" bowser "^2.11.0" tslib "^2.3.1" -"@aws-sdk/util-defaults-mode-node@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.215.0.tgz#125fc56f311ffbc70b2852796b8a2f5b602b6a99" - integrity sha512-mSp3R8GljQ+4UT3QMOksQk9L0cWbFLvR7bBmAlt4+GobgTjpRfzFjBP3uwrCqFa3BKDUR3FeJq3qwo+xeY1Krg== +"@aws-sdk/util-defaults-mode-node@3.234.0": + version "3.234.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.234.0.tgz#0607f1dc7a4dc896dfcaf377522535ca9ffba7a9" + integrity sha512-UGjQ+OjBYYhxFVtUY+jtr0ZZgzZh6OHtYwRhFt8IHewJXFCfZTyfsbX20szBj5y1S4HRIUJ7cwBLIytTqMbI5w== dependencies: - "@aws-sdk/config-resolver" "3.215.0" - "@aws-sdk/credential-provider-imds" "3.215.0" - "@aws-sdk/node-config-provider" "3.215.0" - "@aws-sdk/property-provider" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/config-resolver" "3.234.0" + "@aws-sdk/credential-provider-imds" "3.226.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/property-provider" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" -"@aws-sdk/util-endpoints@3.216.0": - version "3.216.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.216.0.tgz#d960523cd12d1a2422624592a2516abdd92897cc" - integrity sha512-uHje4H6Qj/z/op8UZoSuvGpEZhz/r+AGY0rCihFo7XjhT4RYVxb2Eb9uHRK/IAeHU4kjHAdpQiWGMSmnT/UacA== +"@aws-sdk/util-endpoints@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.226.0.tgz#3728b2e30f6f757ae862a0b7cf3991e75f252c3f" + integrity sha512-iqOkac/zLmyPBUJd7SLN0PeZMkOmlGgD5PHmmekTClOkce2eUjK9SNX1PzL73aXPoPTyhg9QGLH8uEZEQ8YUzg== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" "@aws-sdk/util-hex-encoding@3.201.0": @@ -906,32 +913,40 @@ dependencies: tslib "^2.3.1" -"@aws-sdk/util-middleware@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.215.0.tgz#83f8956991392250df32f6e1d93a4247e9ed5fce" - integrity sha512-DfHGlFlQCr+T/xhjS36HH8JEThDVB5lg5NZ6x4Cibhyeps9YX/4ovLAIx3B19H34sdWhZi7q6LfslCHLRu2+7Q== +"@aws-sdk/util-middleware@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.226.0.tgz#7069ae96e2e00f6bb82c722e073922fb2b051ca2" + integrity sha512-B96CQnwX4gRvQdaQkdUtqvDPkrptV5+va6FVeJOocU/DbSYMAScLxtR3peMS8cnlOT6nL1Eoa42OI9AfZz1VwQ== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-retry@3.229.0": + version "3.229.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-retry/-/util-retry-3.229.0.tgz#17aad47b067e81acf644d5c2c0f2325f2d8faf4f" + integrity sha512-0zKTqi0P1inD0LzIMuXRIYYQ/8c1lWMg/cfiqUcIAF1TpatlpZuN7umU0ierpBFud7S+zDgg0oemh+Nj8xliJw== dependencies: + "@aws-sdk/service-error-classification" "3.229.0" tslib "^2.3.1" -"@aws-sdk/util-stream-browser@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-stream-browser/-/util-stream-browser-3.215.0.tgz#6439e76dcc90cb535ab5fb882c6d669aa74f7c79" - integrity sha512-UVyCJJ5sCYLVHCW4Lpm8+ae+ISHPHZ/OqAoLbUpehk2RLGP6QhpQOrpJADLXPuB8YuWFMkoLLIVL8VE7mmTPWA== +"@aws-sdk/util-stream-browser@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-stream-browser/-/util-stream-browser-3.226.0.tgz#a14ea5c118d448f01ed6103203404f466960e5fe" + integrity sha512-ZvjlA1ySaLd0DqUWTKmL7LsxfPhroAONpzsinaHmw9aZVL40s2cADU9eWgBdHTuAOeFklL7NP0cc6UiTFHKe8g== dependencies: - "@aws-sdk/fetch-http-handler" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/fetch-http-handler" "3.226.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-base64" "3.208.0" "@aws-sdk/util-hex-encoding" "3.201.0" "@aws-sdk/util-utf8-browser" "3.188.0" tslib "^2.3.1" -"@aws-sdk/util-stream-node@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-stream-node/-/util-stream-node-3.215.0.tgz#a50a261c2ac9cdb58bb9417d7900d28e1a59fc1d" - integrity sha512-7Vyp61P/2dGA9Fzn6uN/KdRd+Z7n8gCGmXBd/dQSrHx3UFIm1TuEmMwROzbWWxPOS6qDWY/dwQgMZH/tq78Llg== +"@aws-sdk/util-stream-node@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-stream-node/-/util-stream-node-3.226.0.tgz#7c568a947f47fea1f3b268b895b6e73235e29703" + integrity sha512-HADXiIgDGoXcCLSKuPnjCLENf0iC0lzqqnymZu9H2FoACZhJB7DvJ9LnP51Pvw9lfCu+yvLzbMqSPdbXtMbRWg== dependencies: - "@aws-sdk/node-http-handler" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/node-http-handler" "3.226.0" + "@aws-sdk/types" "3.226.0" "@aws-sdk/util-buffer-from" "3.208.0" tslib "^2.3.1" @@ -942,22 +957,22 @@ dependencies: tslib "^2.3.1" -"@aws-sdk/util-user-agent-browser@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.215.0.tgz#4b44b9929629b3024d14a46edd1bf57efe8d60f6" - integrity sha512-uZz6BJWr8sJcA+onveS1lFqnbIXBHwvkyHLgCuuGhAxd5yY6YNLhpJBnhy9Fb8/aSbk6yao3qxlokqw9gthmAw== +"@aws-sdk/util-user-agent-browser@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.226.0.tgz#164bb2da8d6353133784e47f0a0ae463bc9ebb73" + integrity sha512-PhBIu2h6sPJPcv2I7ELfFizdl5pNiL4LfxrasMCYXQkJvVnoXztHA1x+CQbXIdtZOIlpjC+6BjDcE0uhnpvfcA== dependencies: - "@aws-sdk/types" "3.215.0" + "@aws-sdk/types" "3.226.0" bowser "^2.11.0" tslib "^2.3.1" -"@aws-sdk/util-user-agent-node@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.215.0.tgz#620beb9ba2b2775cdf51e39789ea919b10b4d903" - integrity sha512-4lrdd1oGRwJEwfvgvg1jcJ2O0bwElsvtiqZfTRHN6MNTFUqsKl0xHlgFChQsz3Hfrc1niWtZCmbqQKGdO5ARpw== +"@aws-sdk/util-user-agent-node@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.226.0.tgz#7569460b9efc6bbd5295275c51357e480ff469c2" + integrity sha512-othPc5Dz/pkYkxH+nZPhc1Al0HndQT8zHD4e9h+EZ+8lkd8n+IsnLfTS/mSJWrfiC6UlNRVw55cItstmJyMe/A== dependencies: - "@aws-sdk/node-config-provider" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/node-config-provider" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" "@aws-sdk/util-utf8-browser@3.188.0", "@aws-sdk/util-utf8-browser@^3.0.0": @@ -975,13 +990,13 @@ "@aws-sdk/util-buffer-from" "3.208.0" tslib "^2.3.1" -"@aws-sdk/util-waiter@3.215.0": - version "3.215.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.215.0.tgz#299f816d173d8c990834e9d39538c10502584a3d" - integrity sha512-RX/EkRcuDjWKP/5K6XOnbq5cPaO9KSJ5Etotn+z5sPGUJ0xmGWEyFyfXKSL51az32tHcNoGAqboBTFDISB0LyA== +"@aws-sdk/util-waiter@3.226.0": + version "3.226.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.226.0.tgz#6715afd59748cbc610ddfbc5e21124b20a7e85ac" + integrity sha512-qYQMRxnu5k8qQihJXoIWMkBOj0+XkHHj/drLdbRnwL6ni6NcG8++cs9M3DSjIcxmxgF/7SLpDjn1H3sC7cYo4g== dependencies: - "@aws-sdk/abort-controller" "3.215.0" - "@aws-sdk/types" "3.215.0" + "@aws-sdk/abort-controller" "3.226.0" + "@aws-sdk/types" "3.226.0" tslib "^2.3.1" "@aws-sdk/xml-builder@3.201.0": @@ -998,38 +1013,38 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.0", "@babel/compat-data@^7.20.1": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733" - integrity sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5": + version "7.20.10" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" + integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.10": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.5.tgz#45e2114dc6cd4ab167f81daf7820e8fa1250d113" - integrity sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.7.tgz#37072f951bd4d28315445f66e0ec9f6ae0c8c35f" + integrity sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.0" - "@babel/helper-module-transforms" "^7.20.2" - "@babel/helpers" "^7.20.5" - "@babel/parser" "^7.20.5" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.5" - "@babel/types" "^7.20.5" + "@babel/generator" "^7.20.7" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-module-transforms" "^7.20.7" + "@babel/helpers" "^7.20.7" + "@babel/parser" "^7.20.7" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.20.5", "@babel/generator@^7.7.2": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.5.tgz#cb25abee3178adf58d6814b68517c62bdbfdda95" - integrity sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA== +"@babel/generator@^7.20.7", "@babel/generator@^7.7.2": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" + integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== dependencies: - "@babel/types" "^7.20.5" + "@babel/types" "^7.20.7" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -1048,27 +1063,28 @@ "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.9" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a" - integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" + integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== dependencies: - "@babel/compat-data" "^7.20.0" + "@babel/compat-data" "^7.20.5" "@babel/helper-validator-option" "^7.18.6" browserslist "^4.21.3" + lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.2", "@babel/helper-create-class-features-plugin@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz#327154eedfb12e977baa4ecc72e5806720a85a06" - integrity sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.7.tgz#d0e1f8d7e4ed5dac0389364d9c0c191d948ade6f" + integrity sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.20.7" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-replace-supers" "^7.20.7" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": @@ -1118,12 +1134,12 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" - integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== +"@babel/helper-member-expression-to-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05" + integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw== dependencies: - "@babel/types" "^7.18.9" + "@babel/types" "^7.20.7" "@babel/helper-module-imports@^7.18.6": version "7.18.6" @@ -1132,19 +1148,19 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.6", "@babel/helper-module-transforms@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz#ac53da669501edd37e658602a21ba14c08748712" - integrity sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA== +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.20.7": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" + integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" "@babel/helper-simple-access" "^7.20.2" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.2" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.10" + "@babel/types" "^7.20.7" "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" @@ -1158,7 +1174,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== -"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": +"@babel/helper-remap-async-to-generator@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== @@ -1168,25 +1184,26 @@ "@babel/helper-wrap-function" "^7.18.9" "@babel/types" "^7.18.9" -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" - integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" + integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== dependencies: "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.20.7" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/traverse" "^7.19.1" - "@babel/types" "^7.19.0" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" -"@babel/helper-simple-access@^7.19.4", "@babel/helper-simple-access@^7.20.2": +"@babel/helper-simple-access@^7.20.2": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== dependencies: "@babel/types" "^7.20.2" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": version "7.20.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== @@ -1225,14 +1242,14 @@ "@babel/traverse" "^7.20.5" "@babel/types" "^7.20.5" -"@babel/helpers@^7.20.5": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.6.tgz#e64778046b70e04779dfbdf924e7ebb45992c763" - integrity sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w== +"@babel/helpers@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" + integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== dependencies: - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.5" - "@babel/types" "^7.20.5" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" "@babel/highlight@^7.18.6": version "7.18.6" @@ -1243,10 +1260,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.5", "@babel/parser@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8" - integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.5", "@babel/parser@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" + integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -1256,21 +1273,21 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" - integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" + integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" "@babel/plugin-proposal-async-generator-functions@^7.20.1": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz#352f02baa5d69f4e7529bdac39aaa02d41146af9" - integrity sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== dependencies: "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" @@ -1283,12 +1300,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-class-static-block@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" - integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz#92592e9029b13b15be0f7ce6a7aedc2879ca45a7" + integrity sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-dynamic-import@^7.18.6": @@ -1316,11 +1333,11 @@ "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-proposal-logical-assignment-operators@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" - integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": @@ -1340,15 +1357,15 @@ "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-proposal-object-rest-spread@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz#a556f59d555f06961df1e572bb5eca864c84022d" - integrity sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== dependencies: - "@babel/compat-data" "^7.20.1" - "@babel/helper-compilation-targets" "^7.20.0" + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.1" + "@babel/plugin-transform-parameters" "^7.20.7" "@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" @@ -1358,13 +1375,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" - integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== +"@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz#49f2b372519ab31728cc14115bb0998b15bfda55" + integrity sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-private-methods@^7.18.6": @@ -1527,20 +1544,20 @@ "@babel/helper-plugin-utils" "^7.19.0" "@babel/plugin-transform-arrow-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" - integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" + integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-async-to-generator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" - integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== dependencies: "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-transform-block-scoped-functions@^7.18.6": version "7.18.6" @@ -1550,38 +1567,39 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-block-scoping@^7.20.2": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz#401215f9dc13dc5262940e2e527c9536b3d7f237" - integrity sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA== + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz#9f5a3424bd112a3f32fe0cf9364fbb155cff262a" + integrity sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-classes@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz#c0033cf1916ccf78202d04be4281d161f6709bb2" - integrity sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz#f438216f094f6bb31dc266ebfab8ff05aecad073" + integrity sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-compilation-targets" "^7.20.7" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.19.0" "@babel/helper-optimise-call-expression" "^7.18.6" "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-replace-supers" "^7.20.7" "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" - integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" + integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/template" "^7.20.7" "@babel/plugin-transform-destructuring@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz#c23741cfa44ddd35f5e53896e88c75331b8b2792" - integrity sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw== + 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== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -1639,30 +1657,30 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-modules-amd@^7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz#aca391801ae55d19c4d8d2ebfeaa33df5f2a2cbd" - integrity sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg== + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== dependencies: - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-modules-commonjs@^7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz#25b32feef24df8038fc1ec56038917eacb0b730c" - integrity sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ== + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz#8cb23010869bf7669fd4b3098598b6b2be6dc607" + integrity sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw== dependencies: - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-simple-access" "^7.19.4" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-simple-access" "^7.20.2" "@babel/plugin-transform-modules-systemjs@^7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz#59e2a84064b5736a4471b1aa7b13d4431d327e0d" - integrity sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ== + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" + integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== dependencies: "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-validator-identifier" "^7.19.1" "@babel/plugin-transform-modules-umd@^7.18.6": @@ -1696,10 +1714,10 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.20.1": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz#f8f9186c681d10c3de7620c916156d893c8a019e" - integrity sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ== +"@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== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -1733,12 +1751,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-spread@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6" - integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-transform-sticky-regex@^7.18.6": version "7.18.6" @@ -1762,11 +1780,11 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typescript@^7.18.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz#91515527b376fc122ba83b13d70b01af8fe98f3f" - integrity sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz#673f49499cd810ae32a1ea5f3f8fab370987e055" + integrity sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.20.2" + "@babel/helper-create-class-features-plugin" "^7.20.7" "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-typescript" "^7.20.0" @@ -1887,41 +1905,41 @@ "@babel/plugin-transform-typescript" "^7.18.6" "@babel/runtime@^7.8.4": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" - integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" + integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== dependencies: regenerator-runtime "^0.13.11" -"@babel/template@^7.18.10", "@babel/template@^7.3.3": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== +"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" -"@babel/traverse@^7.18.5", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.1", "@babel/traverse@^7.20.5", "@babel/traverse@^7.7.2": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.5.tgz#78eb244bea8270fdda1ef9af22a5d5e5b7e57133" - integrity sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ== +"@babel/traverse@^7.18.5", "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.7.2": + version "7.20.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.10.tgz#2bf98239597fcec12f842756f186a9dde6d09230" + integrity sha512-oSf1juCgymrSez8NI4A2sr4+uB/mFd9MXplYGPEBnfAuWmmyeVcHa6xLPiaRBcXkcb/28bgxmQLTVwFKE1yfsg== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.5" + "@babel/generator" "^7.20.7" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.19.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.5" - "@babel/types" "^7.20.5" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84" - integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg== +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" + integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== dependencies: "@babel/helper-string-parser" "^7.19.4" "@babel/helper-validator-identifier" "^7.19.1" @@ -2006,22 +2024,22 @@ minimatch "^3.0.4" plist "^3.0.4" -"@eslint-community/eslint-utils@^4.1.0": +"@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== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint/eslintrc@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" - integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== +"@eslint/eslintrc@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.0.tgz#8ec64e0df3e7a1971ee1ff5158da87389f167a63" + integrity sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A== dependencies: ajv "^6.12.4" debug "^4.3.2" espree "^9.4.0" - globals "^13.15.0" + globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" @@ -2033,10 +2051,10 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.11.6": - version "0.11.7" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" - integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -2398,9 +2416,9 @@ integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== "@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.1.tgz#2bf718579ad0ca2c5bd364c6a9de3e2fa6be2b00" - integrity sha512-+hcUpxgx0vEpDJI9Cn+lkTdKLoqKBXFCVps5H7FujEU2vLOp6KwqjLlxbnz8Wzgm8oEqW/u5FeNAXSFjLdCD0A== + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" + integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== dependencies: which "^3.0.0" @@ -2692,9 +2710,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.0.0": - version "29.2.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.3.tgz#f5fd88e43e5a9e4221ca361e23790d48fcf0a211" - integrity sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w== + version "29.2.4" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.4.tgz#9c155c4b81c9570dbd183eb8604aa0ae80ba5a5b" + integrity sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -2746,10 +2764,10 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@16.18.4", "@types/node@^16.11.26", "@types/node@^17.0.36": - version "16.18.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.4.tgz#712ba61b4caf091fc6490301b1888356638c17bd" - integrity sha512-9qGjJ5GyShZjUfx2ArBIGM+xExdfLvvaCyQR0t6yRXKPcWCVYF/WemtX/uIU3r7FYECXRXkIiw2Vnhn6y8d+pw== +"@types/node@*", "@types/node@16.18.8", "@types/node@^16.11.26", "@types/node@^17.0.36": + version "16.18.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.8.tgz#ffb2a4efa4eb4384811081776c52b054481cca54" + integrity sha512-TrpoNiaPvBH5h8rQQenMtVsJXtGsVBRJrcp2Ik6oEt99jHfGvDLh20VTTq3ixTbjYujukYz1IlY4N8a8yfY0jA== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -2796,9 +2814,9 @@ xmlbuilder ">=11.0.1" "@types/prettier@^2.1.5": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e" - integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== + version "2.7.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" + integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== "@types/responselike@^1.0.0": version "1.0.0" @@ -2851,9 +2869,9 @@ integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.1", "@types/yargs@^17.0.8": - version "17.0.15" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.15.tgz#5b62c89fb049e2fc8378394a2861a593055f0866" - integrity sha512-ZHc4W2dnEQPfhn06TBEdWaiUHEZAocYaiVMfwOipY5jcJt/251wVrKCBWBetGZWO5CF8tdb7L3DmdxVlZ2BOIg== + version "17.0.17" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.17.tgz#5672e5621f8e0fca13f433a8017aae4b7a2a03e7" + integrity sha512-72bWxFKTK6uwWJAVT+3rF6Jo6RTojiJ27FQo8Rf60AL+VZbzoVPnMFhKsUnbjR8A3BTCYQ7Mv3hnl8T0A+CX9g== dependencies: "@types/yargs-parser" "*" @@ -2865,13 +2883,13 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^5.42.0": - version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.0.tgz#ffa505cf961d4844d38cfa19dcec4973a6039e41" - integrity sha512-CXXHNlf0oL+Yg021cxgOdMHNTXD17rHkq7iW6RFHoybdFgQBjU3yIXhhcPpGwr1CjZlo6ET8C6tzX5juQoXeGA== + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.47.0.tgz#dadb79df3b0499699b155839fd6792f16897d910" + integrity sha512-AHZtlXAMGkDmyLuLZsRpH3p4G/1iARIwc/T0vIem2YB+xW6pZaXYXzCBnZSF/5fdM97R9QqZWZ+h3iW10XgevQ== dependencies: - "@typescript-eslint/scope-manager" "5.45.0" - "@typescript-eslint/type-utils" "5.45.0" - "@typescript-eslint/utils" "5.45.0" + "@typescript-eslint/scope-manager" "5.47.0" + "@typescript-eslint/type-utils" "5.47.0" + "@typescript-eslint/utils" "5.47.0" debug "^4.3.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" @@ -2880,71 +2898,71 @@ tsutils "^3.21.0" "@typescript-eslint/parser@^5.42.0": - version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.45.0.tgz#b18a5f6b3cf1c2b3e399e9d2df4be40d6b0ddd0e" - integrity sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ== + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.47.0.tgz#62e83de93499bf4b500528f74bf2e0554e3a6c8d" + integrity sha512-udPU4ckK+R1JWCGdQC4Qa27NtBg7w020ffHqGyAK8pAgOVuNw7YaKXGChk+udh+iiGIJf6/E/0xhVXyPAbsczw== dependencies: - "@typescript-eslint/scope-manager" "5.45.0" - "@typescript-eslint/types" "5.45.0" - "@typescript-eslint/typescript-estree" "5.45.0" + "@typescript-eslint/scope-manager" "5.47.0" + "@typescript-eslint/types" "5.47.0" + "@typescript-eslint/typescript-estree" "5.47.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.45.0": - version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.45.0.tgz#7a4ac1bfa9544bff3f620ab85947945938319a96" - integrity sha512-noDMjr87Arp/PuVrtvN3dXiJstQR1+XlQ4R1EvzG+NMgXi8CuMCXpb8JqNtFHKceVSQ985BZhfRdowJzbv4yKw== +"@typescript-eslint/scope-manager@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.47.0.tgz#f58144a6b0ff58b996f92172c488813aee9b09df" + integrity sha512-dvJab4bFf7JVvjPuh3sfBUWsiD73aiftKBpWSfi3sUkysDQ4W8x+ZcFpNp7Kgv0weldhpmMOZBjx1wKN8uWvAw== dependencies: - "@typescript-eslint/types" "5.45.0" - "@typescript-eslint/visitor-keys" "5.45.0" + "@typescript-eslint/types" "5.47.0" + "@typescript-eslint/visitor-keys" "5.47.0" -"@typescript-eslint/type-utils@5.45.0": - version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.45.0.tgz#aefbc954c40878fcebeabfb77d20d84a3da3a8b2" - integrity sha512-DY7BXVFSIGRGFZ574hTEyLPRiQIvI/9oGcN8t1A7f6zIs6ftbrU0nhyV26ZW//6f85avkwrLag424n+fkuoJ1Q== +"@typescript-eslint/type-utils@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.47.0.tgz#2b440979c574e317d3473225ae781f292c99e55d" + integrity sha512-1J+DFFrYoDUXQE1b7QjrNGARZE6uVhBqIvdaXTe5IN+NmEyD68qXR1qX1g2u4voA+nCaelQyG8w30SAOihhEYg== dependencies: - "@typescript-eslint/typescript-estree" "5.45.0" - "@typescript-eslint/utils" "5.45.0" + "@typescript-eslint/typescript-estree" "5.47.0" + "@typescript-eslint/utils" "5.47.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.45.0": - version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.0.tgz#794760b9037ee4154c09549ef5a96599621109c5" - integrity sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA== +"@typescript-eslint/types@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.47.0.tgz#67490def406eaa023dbbd8da42ee0d0c9b5229d3" + integrity sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg== -"@typescript-eslint/typescript-estree@5.45.0": - version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz#f70a0d646d7f38c0dfd6936a5e171a77f1e5291d" - integrity sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ== +"@typescript-eslint/typescript-estree@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.0.tgz#ed971a11c5c928646d6ba7fc9dfdd6e997649aca" + integrity sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q== dependencies: - "@typescript-eslint/types" "5.45.0" - "@typescript-eslint/visitor-keys" "5.45.0" + "@typescript-eslint/types" "5.47.0" + "@typescript-eslint/visitor-keys" "5.47.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.45.0": - version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.45.0.tgz#9cca2996eee1b8615485a6918a5c763629c7acf5" - integrity sha512-OUg2JvsVI1oIee/SwiejTot2OxwU8a7UfTFMOdlhD2y+Hl6memUSL4s98bpUTo8EpVEr0lmwlU7JSu/p2QpSvA== +"@typescript-eslint/utils@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.47.0.tgz#b5005f7d2696769a1fdc1e00897005a25b3a0ec7" + integrity sha512-U9xcc0N7xINrCdGVPwABjbAKqx4GK67xuMV87toI+HUqgXj26m6RBp9UshEXcTrgCkdGYFzgKLt8kxu49RilDw== dependencies: "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.45.0" - "@typescript-eslint/types" "5.45.0" - "@typescript-eslint/typescript-estree" "5.45.0" + "@typescript-eslint/scope-manager" "5.47.0" + "@typescript-eslint/types" "5.47.0" + "@typescript-eslint/typescript-estree" "5.47.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.45.0": - version "5.45.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz#e0d160e9e7fdb7f8da697a5b78e7a14a22a70528" - integrity sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg== +"@typescript-eslint/visitor-keys@5.47.0": + version "5.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz#4aca4efbdf6209c154df1f7599852d571b80bb45" + integrity sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg== dependencies: - "@typescript-eslint/types" "5.45.0" + "@typescript-eslint/types" "5.47.0" eslint-visitor-keys "^3.3.0" abbrev@1, abbrev@^1.0.0: @@ -3636,15 +3654,15 @@ cacache@^16.1.0: unique-filename "^2.0.0" cacache@^17.0.0: - version "17.0.2" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.0.2.tgz#ff2bd029bf45099b3fe711f56fbf138b846c8d6d" - integrity sha512-rYUs2x4OjSgCQND7nTrh21AHIBFgd7s/ctAYvU3a8u+nK+R5YaX/SFPDYz4Azz7SGL6+6L9ZZWI4Kawpb7grzQ== + version "17.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.0.4.tgz#5023ed892ba8843e3b7361c26d0ada37e146290c" + integrity sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA== dependencies: "@npmcli/fs" "^3.1.0" - fs-minipass "^2.1.0" + fs-minipass "^3.0.0" glob "^8.0.1" lru-cache "^7.7.1" - minipass "^3.1.6" + minipass "^4.0.0" minipass-collect "^1.0.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" @@ -3696,9 +3714,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001400: - version "1.0.30001434" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz#ec1ec1cfb0a93a34a0600d37903853030520a4e5" - integrity sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA== + version "1.0.30001441" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz#987437b266260b640a23cd18fbddb509d7f69f3e" + integrity sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg== chalk@^2.0.0: version "2.4.2" @@ -3929,9 +3947,9 @@ convert-source-map@^2.0.0: integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== core-js-compat@^3.25.1: - version "3.26.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.26.1.tgz#0e710b09ebf689d719545ac36e49041850f943df" - integrity sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A== + version "3.27.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.27.0.tgz#e2c58a89df6432a5f36f3fa34097e9e83e709fb6" + integrity sha512-spN2H4E/wocMML7XtbKuqttHHM+zbF3bAdl9mT4/iyFaF33bowQGjxiWNWyvUJGH9F+hTgnhWziiLtwu3oC/Qg== dependencies: browserslist "^4.21.4" @@ -4361,9 +4379,9 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.20.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" - integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + version "1.20.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2" + integrity sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -4371,6 +4389,7 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: function.prototype.name "^1.1.5" get-intrinsic "^1.1.3" get-symbol-description "^1.0.0" + gopd "^1.0.1" has "^1.0.3" has-property-descriptors "^1.0.0" has-symbols "^1.0.3" @@ -4386,8 +4405,8 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" unbox-primitive "^1.0.2" es-shim-unscopables@^1.0.0: @@ -4472,6 +4491,11 @@ eslint-config-google@^0.14.0: resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + eslint-import-resolver-node@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" @@ -4506,18 +4530,18 @@ eslint-plugin-import@^2.25.4: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-plugin-matrix-org@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-matrix-org/-/eslint-plugin-matrix-org-0.8.0.tgz#daa1396900a8cb1c1d88f1a370e45fc32482cd9e" - integrity sha512-/Poz/F8lXYDsmQa29iPSt+kO+Jn7ArvRdq10g0CCk8wbRS0sb2zb6fvd9xL1BgR5UDQL771V0l8X32etvY5yKA== +eslint-plugin-matrix-org@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-matrix-org/-/eslint-plugin-matrix-org-0.9.0.tgz#b2a5186052ddbfa7dc9878779bafa5d68681c7b4" + integrity sha512-+j6JuMnFH421Z2vOxc+0YMt5Su5vD76RSatviy3zHBaZpgd+sOeAWoCLBHD5E7mMz5oKae3Y3wewCt9LRzq2Nw== eslint-plugin-unicorn@^45.0.0: - version "45.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.1.tgz#2307f4620502fd955c819733ce1276bed705b736" - integrity sha512-tLnIw5oDJJc3ILYtlKtqOxPP64FZLTkZkgeuoN6e7x6zw+rhBjOxyvq2c7577LGxXuIhBYrwisZuKNqOOHp3BA== + version "45.0.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.2.tgz#d6ba704793a6909fe5dfe013900d2b05b715284c" + integrity sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw== dependencies: "@babel/helper-validator-identifier" "^7.19.1" - "@eslint-community/eslint-utils" "^4.1.0" + "@eslint-community/eslint-utils" "^4.1.2" ci-info "^3.6.1" clean-regexp "^1.0.0" esquery "^1.4.0" @@ -4567,12 +4591,12 @@ eslint-visitor-keys@^3.3.0: integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.26.0: - version "8.28.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e" - integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ== + version "8.30.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.30.0.tgz#83a506125d089eef7c5b5910eeea824273a33f50" + integrity sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ== dependencies: - "@eslint/eslintrc" "^1.3.3" - "@humanwhocodes/config-array" "^0.11.6" + "@eslint/eslintrc" "^1.4.0" + "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" @@ -4591,7 +4615,7 @@ eslint@^8.26.0: file-entry-cache "^6.0.1" find-up "^5.0.0" glob-parent "^6.0.2" - globals "^13.15.0" + globals "^13.19.0" grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" @@ -4767,9 +4791,9 @@ fast-xml-parser@4.0.11: strnum "^1.0.5" fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.14.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" + integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== dependencies: reusify "^1.0.4" @@ -4928,6 +4952,13 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0: dependencies: minipass "^3.0.0" +fs-minipass@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.0.tgz#8e6ed2b4e1ba44077cae69971393068a1bbeeed6" + integrity sha512-EUojgQaSPy6sxcqcZgQv6TVF6jiKvurji3AxhAivs/Ep4O1UpS8TusaxpybfFHZ2skRhLqzk6WR8nqNYIMMDeA== + dependencies: + minipass "^4.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -4996,7 +5027,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== @@ -5084,10 +5115,10 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.15.0: - version "13.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" - integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== +globals@^13.19.0: + version "13.19.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" + integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== dependencies: type-fest "^0.20.2" @@ -5110,10 +5141,17 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + got@^11.8.5: - version "11.8.5" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" - integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== dependencies: "@sindresorhus/is" "^4.0.0" "@szmarczak/http-timer" "^4.0.5" @@ -5296,9 +5334,9 @@ ignore-walk@^6.0.0: minimatch "^5.0.1" ignore@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" - integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== immediate@~3.0.5: version "3.0.6" @@ -5360,11 +5398,11 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" + integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== dependencies: - get-intrinsic "^1.1.0" + get-intrinsic "^1.1.3" has "^1.0.3" side-channel "^1.0.4" @@ -6061,16 +6099,16 @@ json-stringify-safe@^5.0.1: integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.2.0, json5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + version "2.2.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.2.tgz#64471c5bdcc564c18f7c1d4df2e2297f2457c5ab" + integrity sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ== jsonfile@^4.0.0: version "4.0.0" @@ -6229,6 +6267,13 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -6283,9 +6328,9 @@ make-fetch-happen@^10.0.3: ssri "^9.0.0" make-fetch-happen@^11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.0.1.tgz#b3c51663d018d9e11d57fdd4393a4c5a1a7d56eb" - integrity sha512-clv3IblugXn2CDUmqFhNzii3rjKa46u5wNeivc+QlLXkGI5FjLX3rGboo+y2kwf1pd8W0iDiC384cemeDtw9kw== + version "11.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.0.2.tgz#a880370fb2452d528a5ca40b2d6308999773ab17" + integrity sha512-5n/Pq41w/uZghpdlXAY5kIM85RgJThtTH/NYBRAZ9VUOBWV90USaQjwGrw76fZP3Lj5hl/VZjpVvOaRBMoL/2w== dependencies: agentkeepalive "^4.2.1" cacache "^17.0.0" @@ -6294,7 +6339,7 @@ make-fetch-happen@^11.0.0: https-proxy-agent "^5.0.0" is-lambda "^1.0.1" lru-cache "^7.7.1" - minipass "^3.1.6" + minipass "^4.0.0" minipass-collect "^1.0.2" minipass-fetch "^3.0.0" minipass-flush "^1.0.5" @@ -6416,9 +6461,9 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: brace-expansion "^1.1.7" minimatch@^5.0.1, minimatch@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + version "5.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.2.tgz#0939d7d6f0898acbd1508abe534d1929368a8fff" + integrity sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg== dependencies: brace-expansion "^2.0.1" @@ -6446,11 +6491,11 @@ minipass-fetch@^2.0.3: encoding "^0.1.13" minipass-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.0.tgz#02481219ddbd3d30eb0e354016f680b10c6f2bcb" - integrity sha512-NSx3k5gR4Q5Ts2poCM/19d45VwhVLBtJZ6ypYcthj2BwmDx/e7lW8Aadnyt3edd2W0ecb+b0o7FYLRYE2AGcQg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.1.tgz#bae3789f668d82ffae3ea47edc6b78b8283b3656" + integrity sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw== dependencies: - minipass "^3.1.6" + minipass "^4.0.0" minipass-sized "^1.0.3" minizlib "^2.1.2" optionalDependencies: @@ -6500,6 +6545,13 @@ minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6, minipass@^3.3.5: dependencies: yallist "^4.0.0" +minipass@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.0.tgz#7cebb0f9fa7d56f0c5b17853cbe28838a8dbbd3b" + integrity sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw== + dependencies: + yallist "^4.0.0" + minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -6584,9 +6636,9 @@ node-fetch@^2, node-fetch@^2.6.7: whatwg-url "^5.0.0" node-gyp@^9.0.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.0.tgz#f8eefe77f0ad8edb3b3b898409b53e697642b319" - integrity sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q== + version "9.3.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" + integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== dependencies: env-paths "^2.2.0" glob "^7.1.4" @@ -6621,9 +6673,9 @@ node-pre-gyp@^0.17.0: tar "^4.4.13" node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + version "2.0.8" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" + integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== nopt@^4.0.3: version "4.0.3" @@ -6702,9 +6754,9 @@ npm-normalize-package-bin@^3.0.0: integrity sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q== npm-package-arg@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.0.0.tgz#a34f4a4208a937074b1fff0943a684fbacc83977" - integrity sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q== + version "10.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== dependencies: hosted-git-info "^6.0.0" proc-log "^3.0.0" @@ -6721,9 +6773,9 @@ npm-packlist@^1.4.8: npm-normalize-package-bin "^1.0.1" npm-packlist@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.2.tgz#f24177ce5b3593223348157bcc3eff1db8fae7d6" - integrity sha512-d2+7RMySjVXssww23rV5NuIq1NzGvM04OlI5kwnvtYKfFTAPVs6Zxmxns2HRtJEA1oNj7D/BbFXeVAOLmW3N3Q== + version "7.0.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== dependencies: ignore-walk "^6.0.0" @@ -6738,12 +6790,12 @@ npm-pick-manifest@^8.0.0: semver "^7.3.5" npm-registry-fetch@^14.0.0: - version "14.0.2" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.2.tgz#f637630d9005aeebe4d7411226fb11fa1628c5e8" - integrity sha512-TMenrMagFA9KF81E2bkS5XRyzERK4KXu70vgXt5+i8FcrFeLNgNsc6e5hekTqjDwPDkL3HGn/holWcXDMfnFgw== + version "14.0.3" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz#8545e321c2b36d2c6fe6e009e77e9f0e527f547b" + integrity sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA== dependencies: make-fetch-happen "^11.0.0" - minipass "^3.1.6" + minipass "^4.0.0" minipass-fetch "^3.0.0" minipass-json-stream "^1.0.1" minizlib "^2.1.2" @@ -6913,17 +6965,17 @@ p-try@^2.0.0: integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pacote@^15.0.0: - version "15.0.6" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.0.6.tgz#8c498b5c23270da4f4c87f7eeba0248a3ae61342" - integrity sha512-dQwcz/sME7QIL+cdrw/jftQfMMXxSo17i2kJ/gnhBhUvvBAsxoBu1lw9B5IzCH/Ce8CvEkG/QYZ6txzKfn0bTw== + version "15.0.8" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.0.8.tgz#8a1cb1e0207f9f3c74894feaa716aaa9e35f890e" + integrity sha512-UlcumB/XS6xyyIMwg/WwMAyUmga+RivB5KgkRwA1hZNtrx+0Bt41KxHCvg1kr0pZ/ZeD8qjhW4fph6VaYRCbLw== dependencies: "@npmcli/git" "^4.0.0" "@npmcli/installed-package-contents" "^2.0.1" "@npmcli/promise-spawn" "^6.0.1" "@npmcli/run-script" "^6.0.0" cacache "^17.0.0" - fs-minipass "^2.1.0" - minipass "^3.1.6" + fs-minipass "^3.0.0" + minipass "^4.0.0" npm-package-arg "^10.0.0" npm-packlist "^7.0.0" npm-pick-manifest "^8.0.0" @@ -7021,17 +7073,17 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -playwright-core@1.28.1: - version "1.28.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.28.1.tgz#8400be9f4a8d1c0489abdb9e75a4cc0ffc3c00cb" - integrity sha512-3PixLnGPno0E8rSBJjtwqTwJe3Yw72QwBBBxNoukIj3lEeBNXwbNiKrNuB1oyQgTBw5QHUhNO3SteEtHaMK6ag== +playwright-core@1.29.1: + version "1.29.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.29.1.tgz#9ec15d61c4bd2f386ddf6ce010db53a030345a47" + integrity sha512-20Ai3d+lMkWpI9YZYlxk8gxatfgax5STW8GaMozAHwigLiyiKQrdkt7gaoT9UQR8FIVDg6qVXs9IoZUQrDjIIg== playwright@^1.25.0: - version "1.28.1" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.28.1.tgz#f23247f1de466ff73d7230d94df96271e5da6583" - integrity sha512-92Sz6XBlfHlb9tK5UCDzIFAuIkHHpemA9zwUaqvo+w7sFMSmVMGmvKcbptof/eJObq63PGnMhM75x7qxhTR78Q== + version "1.29.1" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.29.1.tgz#fc04b34f42e3bfc0edadb1c45ef9bffd53c21f70" + integrity sha512-lasC+pMqsQ2uWhNurt3YK3xo0gWlMjslYUylKbHcqF/NTjwp9KStRGO7S6wwz2f52GcSnop8XUK/GymJjdzrxw== dependencies: - playwright-core "1.28.1" + playwright-core "1.29.1" plist@^3.0.1, plist@^3.0.4: version "3.0.6" @@ -7070,6 +7122,11 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prettier@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== + pretty-format@^29.0.0, pretty-format@^29.3.1: version "29.3.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.3.1.tgz#1841cac822b02b4da8971dacb03e8a871b4722da" @@ -7165,9 +7222,9 @@ read-config-file@6.2.0: lazy-val "^1.0.4" read-package-json-fast@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.1.tgz#de13ae1c591850534daf77e083e851f94af67733" - integrity sha512-8+HW7Yo+cjfF+md8DqsZHgats2mxf7gGYow/+2JjxrftoHFZz9v4dzd0EubzYbkNaLxrTVcnllHwklXN2+7aTQ== + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== dependencies: json-parse-even-better-errors "^3.0.0" npm-normalize-package-bin "^3.0.0" @@ -7619,11 +7676,11 @@ sprintf-js@~1.0.2: integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== ssri@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.0.tgz#1e34554cbbc4728f5290674264e21b64aaf27ca7" - integrity sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw== + version "10.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.1.tgz#c61f85894bbc6929fc3746f05e31cf5b44c030d5" + integrity sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw== dependencies: - minipass "^3.1.1" + minipass "^4.0.0" ssri@^9.0.0: version "9.0.1" @@ -7670,7 +7727,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trimend@^1.0.5: +string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== @@ -7679,7 +7736,7 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: +string.prototype.trimstart@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== @@ -7811,13 +7868,13 @@ tar@^4.4.13: yallist "^3.1.1" tar@^6.1.11, tar@^6.1.2: - version "6.1.12" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.12.tgz#3b742fb05669b55671fb769ab67a7791ea1a62e6" - integrity sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw== + version "6.1.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" + integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^3.0.0" + minipass "^4.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" @@ -8012,10 +8069,10 @@ type@^2.7.2: resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== -typescript@4.9.3: - version "4.9.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" - integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== +typescript@4.9.4: + version "4.9.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== unbox-primitive@^1.0.2: version "1.0.2" @@ -8281,7 +8338,7 @@ yaku@^0.16.6: resolved "https://registry.yarnpkg.com/yaku/-/yaku-0.16.7.tgz#1d195c78aa9b5bf8479c895b9504fd4f0847984e" integrity sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw== -yallist@^3.0.0, yallist@^3.1.1: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==