diff --git a/.eslintignore b/.eslintignore index ef65f761..6cad02c6 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,7 +5,6 @@ src/lib/big.js/ src/lib/rlottie/rlottie-wasm.js src/lib/aes-js/index.js src/lib/noble-ed25519/index.js -src/lib/webextension-polyfill/browser.js jest.config.js playwright.config.ts postcss.config.js diff --git a/.github/workflows/electron-release.yml b/.github/workflows/package-and-publish.yml similarity index 59% rename from .github/workflows/electron-release.yml rename to .github/workflows/package-and-publish.yml index aef4121b..9d23df02 100644 --- a/.github/workflows/electron-release.yml +++ b/.github/workflows/package-and-publish.yml @@ -1,16 +1,26 @@ -name: Electron release +# Terms: +# "build" - Compile web project using webpack. +# "package" - Produce a distributive package for a specific platform as a workflow artifact. +# "publish" - Send a package to corresponding store and GitHub release page. +# "release" - build + package + publish +# +# Jobs in this workflow will skip the "publish" step when `PUBLISH_REPO` is not set. + +name: Package and publish on: workflow_dispatch: push: - branches: master + branches: + - master env: APP_NAME: MyTonWallet jobs: - release: - runs-on: macOS-latest + electron-release: + name: Build, package and publish Electron + runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v3 @@ -48,7 +58,7 @@ jobs: security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k actions $KEY_CHAIN security find-identity -v -p codesigning $KEY_CHAIN - - name: Build and release + - name: Build, package and publish env: TONHTTPAPI_MAINNET_URL: ${{ vars.TONHTTPAPI_MAINNET_URL }} TONAPIIO_MAINNET_URL: ${{ vars.TONAPIIO_MAINNET_URL }} @@ -70,28 +80,33 @@ jobs: npm run deploy:electron fi - - uses: actions/upload-artifact@v3 + - name: Upload macOS x64 artifact + uses: actions/upload-artifact@v3 with: name: ${{ env.APP_NAME }}-x64.dmg path: dist-electron/${{ env.APP_NAME }}-x64.dmg - - uses: actions/upload-artifact@v3 + - name: Upload macOS arm64 artifact + uses: actions/upload-artifact@v3 with: name: ${{ env.APP_NAME }}-arm64.dmg path: dist-electron/${{ env.APP_NAME }}-arm64.dmg - - uses: actions/upload-artifact@v3 + - name: Upload Linux artifact + uses: actions/upload-artifact@v3 with: name: ${{ env.APP_NAME }}-x86_64.AppImage path: dist-electron/${{ env.APP_NAME }}-x86_64.AppImage - - uses: actions/upload-artifact@v3 + - name: Upload Windows artifact + uses: actions/upload-artifact@v3 with: name: ${{ env.APP_NAME }}-x64.exe path: dist-electron/${{ env.APP_NAME }}-x64.exe - windowsSigning: - needs: release + electron-sign-for-windows: + name: Sign and re-publish Windows package + needs: electron-release runs-on: windows-latest if: vars.PUBLISH_REPO != '' env: @@ -137,7 +152,7 @@ jobs: with: name: ${{ env.FILE_NAME }} - - name: Signing package + - name: Sign package env: KEYPAIR_ALIAS: ${{ secrets.KEYPAIR_ALIAS }} FILE_PATH: ${{ steps.download-artifact.outputs.download-path }} @@ -183,3 +198,119 @@ jobs: shell: bash run: | curl -X PATCH -H "Authorization: Bearer $GH_TOKEN" "https://api.github.com/repos/$PUBLISH_REPO/releases/$RELEASE_ID" -d '{"draft": false}' + + extensions-package: + name: Package extensions + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: 18.x + + - name: Cache node modules + id: npm-cache + uses: actions/cache@v3 + with: + path: node_modules + key: ${{ runner.os }}-build-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build- + + - name: Install dependencies + if: steps.npm-cache.outputs.cache-hit != 'true' + run: npm ci + + - name: Build and package + env: + TONHTTPAPI_MAINNET_URL: ${{ vars.TONHTTPAPI_MAINNET_URL }} + TONAPIIO_MAINNET_URL: ${{ vars.TONAPIIO_MAINNET_URL }} + TONHTTPAPI_TESTNET_URL: ${{ vars.TONHTTPAPI_TESTNET_URL }} + TONAPIIO_TESTNET_URL: ${{ vars.TONAPIIO_TESTNET_URL }} + PROXY_HOSTS: ${{ vars.PROXY_HOSTS }} + STAKING_POOLS: ${{ vars.STAKING_POOLS }} + + PUBLISH_REPO: ${{ vars.PUBLISH_REPO }} + run: | + if [ -z "$PUBLISH_REPO" ]; then + npm run build:extension:staging + npm run build:extension:staging:firefox + else + npm run build:extension:production + npm run build:extension:production:firefox + fi + + - name: Upload Chrome extension artifact + uses: actions/upload-artifact@v3 + with: + name: ${{ env.APP_NAME }}-chrome.zip + path: ${{ env.APP_NAME }}.zip + + - name: Upload Firefox extension artifact + uses: actions/upload-artifact@v3 + with: + name: ${{ env.APP_NAME }}-firefox.zip + path: ${{ env.APP_NAME }}-firefox.zip + + extensions-publish: + name: Publish extensions + needs: extensions-build + runs-on: ubuntu-latest + if: vars.PUBLISH_REPO != '' + steps: + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: 18.x + + - name: Cache node modules + id: npm-cache + uses: actions/cache@v3 + with: + path: node_modules + key: ${{ runner.os }}-build-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build- + + - name: Install dependencies + if: steps.npm-cache.outputs.cache-hit != 'true' + run: npm ci + + - name: Set environment variables + id: variables + shell: bash + run: | + echo "CHROME_FILE_NAME=${{ env.APP_NAME }}-chrome.zip" >> "$GITHUB_ENV" + echo "FIREFOX_FILE_NAME=${{ env.APP_NAME }}-firefox.zip" >> "$GITHUB_ENV" + + - name: Download Chrome extension artifact + uses: actions/download-artifact@v3 + with: + name: ${{ env.CHROME_FILE_NAME }} + + - name: Publish to Chrome store + env: + EXTENSION_ID: ${{ vars.CHROME_EXTENSION_ID }} + CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }} + REFRESH_TOKEN: ${{ secrets.GOOGLE_REFRESH_TOKEN }} + if: ${{ vars.CLIENT_ID != '' }} + run: chrome-webstore-upload upload --auto-publish --source ${{ env.CHROME_FILE_NAME }} + + - name: Download Firefox extension artifact + uses: actions/download-artifact@v3 + with: + name: ${{ env.FIREFOX_FILE_NAME }} + + - name: Publish to Firefox addons + env: + WEB_EXT_API_KEY: ${{ secrets.FIREFOX_API_KEY }} + WEB_EXT_API_SECRET: ${{ secrets.FIREFOX_API_SECRET }} + if: ${{ env.WEB_EXT_API_KEY != '' }} + run: | + mkdir /tmp/dist + unzip ${{ env.FIREFOX_FILE_NAME }} -d /tmp/dist + web-ext-submit --source-dir=/tmp/dist diff --git a/.github/workflows/statoscope-comment.jora b/.github/workflows/statoscope-comment.jora new file mode 100644 index 00000000..1a8a0cad --- /dev/null +++ b/.github/workflows/statoscope-comment.jora @@ -0,0 +1,43 @@ +// Original: https://github.com/statoscope/statoscope.tech/blob/main/.github/workflows/statoscope-comment.jora + +// variables +$after: resolveInputFile(); +$inputCompilation: $after.compilations.pick(); +$inputInitialCompilation: $after.compilations.chunks.filter(); +$before: resolveReferenceFile(); +$referenceCompilation: $before.compilations.pick(); +$referenceInitialCompilation: $before.compilations.chunks.filter(); + +// helpers +$getSizeByChunks: => files.(getAssetSize($$, true)).reduce(=> size + $$, 0); + +// output +{ + initialSize: { + $after: $inputInitialCompilation.$getSizeByChunks($inputCompilation.hash); + $before: $referenceInitialCompilation.$getSizeByChunks($referenceCompilation.hash); + $after, + $before, + diff: { + value: $after - $before, + percent: $after.percentFrom($before, 2), + formatted: { type: 'size', a: $before, b: $after } | formatDiff() + ` (${b.percentFrom(a, 2)}%)`, + } + }, + bundleSize: { + $after: $inputCompilation.chunks.$getSizeByChunks($inputCompilation.hash); + $before: $referenceCompilation.chunks.$getSizeByChunks($referenceCompilation.hash); + $after, + $before, + diff: { + value: $after - $before, + percent: $after.percentFrom($before, 2), + formatted: { type: 'size', a: $before, b: $after } | formatDiff() + ` (${b.percentFrom(a, 2)}%)`, + } + }, + validation: { + $messages: resolveInputFile().compilations.[hash].(hash.validation_getItems()); + $messages, + total: $messages.size() + } +} diff --git a/.github/workflows/statoscope-comment.js b/.github/workflows/statoscope-comment.js new file mode 100644 index 00000000..4965c849 --- /dev/null +++ b/.github/workflows/statoscope-comment.js @@ -0,0 +1,10 @@ +module.exports = ({ initialSize, bundleSize, validation, prNumber}) => `**📦 Statoscope quick diff with master branch:** + +**⚖️ Initial size:** ${initialSize.diff.percent > 1.5 ? '🔴' : (initialSize.diff.percent < 0 ? '🟢' : '⚪️')} ${initialSize.diff.percent > 0 ? '+' : ''}${initialSize.diff.formatted} + +**⚖️ Total bundle size:** ${bundleSize.diff.percent > 1.5 ? '🔴' : (bundleSize.diff.percent < 0 ? '🟢' : '⚪️')} ${bundleSize.diff.percent > 0 ? '+' : ''}${bundleSize.diff.formatted} + +**🕵️ Validation errors:** ${validation.total > 0 ? validation.total : '✅'} + +Full Statoscope report could be found [here️](https://deploy-preview-${prNumber}--mytonwallet-e5kxpi8iga.netlify.app/report.html) +`; diff --git a/.github/workflows/statoscope.yml b/.github/workflows/statoscope.yml new file mode 100644 index 00000000..b90d16e6 --- /dev/null +++ b/.github/workflows/statoscope.yml @@ -0,0 +1,82 @@ +name: Statoscope Bundle Analytics + +on: + pull_request: + branches: + - '*' + +jobs: + install: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18.x] + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + - name: Reconfigure git to use HTTPS authentication + uses: GuillaumeFalourd/SSH-to-HTTPS@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - name: Install + run: npm ci + - name: Cache results + uses: actions/cache@v3 + id: cache-results + with: + path: | + node_modules + key: ${{ github.sha }} + statoscope: + needs: + - install + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18.x] + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + - name: Reconfigure git to use HTTPS authentication + uses: GuillaumeFalourd/SSH-to-HTTPS@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: Restore cache + uses: actions/cache@v3 + id: restore-cache + with: + path: | + node_modules + key: ${{ github.sha }} + - name: Build + run: npm run build:production; cp public/build-stats.json input.json + - name: Download reference stats + uses: dawidd6/action-download-artifact@v2 + with: + workflow: upload-main-stats.yml + workflow_conclusion: success + name: main-stats + path: ./ + continue-on-error: true + - name: Validate + run: npm run statoscope:validate-diff + - name: Query stats + if: "github.event_name == 'pull_request'" + run: cat .github/workflows/statoscope-comment.jora | npx --no-install @statoscope/cli query --input input.json --input reference.json > result.json + - name: Hide bot comments + uses: int128/hide-comment-action@v1 + - name: Comment PR + if: "github.event_name == 'pull_request'" + uses: actions/github-script@v6.0.0 + with: + script: | + const createStatoscopeComment = require('./dev/createStatoscopeComment'); + await createStatoscopeComment({ github, context, core }) diff --git a/.github/workflows/upload-main-stats.yml b/.github/workflows/upload-main-stats.yml new file mode 100644 index 00000000..967b3f66 --- /dev/null +++ b/.github/workflows/upload-main-stats.yml @@ -0,0 +1,31 @@ +name: Upload main stats + +on: + push: + branches: [ master ] + +jobs: + build_and_upload: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [18.x] + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + persist-credentials: false + - name: Reconfigure git to use HTTPS authentication + uses: GuillaumeFalourd/SSH-to-HTTPS@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + - name: Install + run: npm ci + - name: Build + run: npm run build:production; cp ./public/build-stats.json ./reference.json + - uses: actions/upload-artifact@v2 + with: + name: main-stats + path: ./reference.json diff --git a/.gitignore b/.gitignore index abb30d47..0982c478 100644 --- a/.gitignore +++ b/.gitignore @@ -20,5 +20,3 @@ trash/ coverage/ src/i18n/en.json notarization-error.log -.github/workflows/* -!.github/workflows/electron-release.yml diff --git a/package-lock.json b/package-lock.json index 3229696f..517b20d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mytonwallet", - "version": "1.15.1", + "version": "1.15.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mytonwallet", - "version": "1.15.1", + "version": "1.15.2", "license": "GPL-3.0-or-later", "dependencies": { "@ledgerhq/hw-transport-webhid": "^6.27.12", @@ -14,6 +14,7 @@ "buffer": "^6.0.3", "idb-keyval": "^6.2.0", "pako": "^2.1.0", + "qr-code-styling": "github:troman29/qr-code-styling#c00d0", "qrcode-generator": "^1.4.4", "ton": "^13.4.1", "ton-core": "^0.49.0", @@ -21,7 +22,8 @@ "tonweb": "github:troman29/tonweb#3d5e2f3", "tonweb-mnemonic": "^1.0.1", "tweetnacl": "^1.0.3", - "v8-compile-cache": "^2.3.0" + "v8-compile-cache": "^2.3.0", + "webextension-polyfill": "^0.10.0" }, "devDependencies": { "@babel/core": "^7.21.3", @@ -60,6 +62,7 @@ "babel-loader": "^9.1.2", "before-build-webpack": "^0.2.13", "browserlist": "^1.0.1", + "chrome-webstore-upload-cli": "^2.2.2", "concurrently": "^7.6.0", "copy-webpack-plugin": "^11.0.0", "cross-env": "^7.0.3", @@ -115,6 +118,7 @@ "stylelint-high-performance-animation": "^1.8.0", "stylelint-order": "^5.0.0", "typescript": "^5.0.2", + "web-ext-submit": "^7.6.2", "webpack": "^5.76.2", "webpack-bundle-analyzer": "^4.8.0", "webpack-dev-server": "^4.13.1" @@ -2320,6 +2324,54 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/@devicefarmer/adbkit": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-3.2.3.tgz", + "integrity": "sha512-wK9rVrabs4QU0oK8Jnwi+HRBEm+s1x/o63kgthUe0y7K1bfcYmgLuQf41/adsj/5enddlSxzkJavl2EwOu+r1g==", + "dev": true, + "dependencies": { + "@devicefarmer/adbkit-logcat": "^2.1.2", + "@devicefarmer/adbkit-monkey": "~1.2.0", + "bluebird": "~3.7", + "commander": "^9.1.0", + "debug": "~4.3.1", + "node-forge": "^1.3.1", + "split": "~1.0.1" + }, + "bin": { + "adbkit": "bin/adbkit" + }, + "engines": { + "node": ">= 0.10.4" + } + }, + "node_modules/@devicefarmer/adbkit-logcat": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-2.1.3.tgz", + "integrity": "sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@devicefarmer/adbkit-monkey": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-monkey/-/adbkit-monkey-1.2.1.tgz", + "integrity": "sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==", + "dev": true, + "engines": { + "node": ">= 0.10.4" + } + }, + "node_modules/@devicefarmer/adbkit/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "dev": true, @@ -2859,6 +2911,16 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fluent/syntax": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@fluent/syntax/-/syntax-0.19.0.tgz", + "integrity": "sha512-5D2qVpZrgpjtqU4eNOcWGp1gnUCgjfM+vKGE2y03kKN6z5EBhtx0qdRFbg8QuNNj8wXNoX93KJoYb+NqoxswmQ==", + "dev": true, + "engines": { + "node": ">=14.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "dev": true, @@ -3876,6 +3938,12 @@ "node": ">= 10.0.0" } }, + "node_modules/@mdn/browser-compat-data": { + "version": "5.2.42", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.2.42.tgz", + "integrity": "sha512-CD/2ai1W45cDN/zN2AcYduDavU+nq9aStyQizi4MHxnwkRvS/H24WIjgc1qD8CISoqXa8AAIe+A+zpWxwV7a2Q==", + "dev": true + }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "dev": true, @@ -3979,6 +4047,47 @@ "fsevents": "2.3.2" } }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "dev": true, + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.21", "dev": true, @@ -4448,6 +4557,18 @@ "@statoscope/types": "5.22.0" } }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, "node_modules/@testing-library/jest-dom": { "version": "5.16.5", "dev": true, @@ -4847,6 +4968,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "node_modules/@types/minimist": { "version": "1.2.2", "dev": true, @@ -5094,7 +5221,6 @@ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "dev": true, - "optional": true, "dependencies": { "@types/node": "*" } @@ -5610,6 +5736,18 @@ "dev": true, "license": "ISC" }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.8", "dev": true, @@ -5657,50 +5795,70 @@ "node": ">=0.4.0" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" + "node_modules/addons-linter": { + "version": "5.32.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-5.32.0.tgz", + "integrity": "sha512-Lf6oOyw8X9z5BMd9xhQwSbPlN2PUlzDLnYLAVT5lkrgXEx0fO9hRk4JRxWZ8+rFGz+mCIA2TTClZF2f+MKgJQA==", + "dev": true, + "dependencies": { + "@fluent/syntax": "0.19.0", + "@mdn/browser-compat-data": "5.2.42", + "addons-moz-compare": "1.3.0", + "addons-scanner-utils": "8.5.0", + "ajv": "8.12.0", + "chalk": "4.1.2", + "cheerio": "1.0.0-rc.12", + "columnify": "1.6.0", + "common-tags": "1.8.2", + "deepmerge": "4.3.1", + "eslint": "8.36.0", + "eslint-plugin-no-unsanitized": "4.0.2", + "eslint-visitor-keys": "3.3.0", + "espree": "9.5.0", + "esprima": "4.0.1", + "fast-json-patch": "3.1.1", + "glob": "9.3.0", + "image-size": "1.0.2", + "is-mergeable-object": "1.1.1", + "jed": "1.1.1", + "json-merge-patch": "1.0.2", + "os-locale": "5.0.0", + "pino": "8.11.0", + "postcss": "8.4.21", + "relaxed-json": "1.0.3", + "semver": "7.3.8", + "sha.js": "2.4.11", + "source-map-support": "0.5.21", + "tosource": "1.0.0", + "upath": "2.0.1", + "yargs": "17.7.1", + "yauzl": "2.10.0" }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" + "bin": { + "addons-linter": "bin/addons-linter" }, "engines": { - "node": ">= 8.0.0" + "node": ">=12.21.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", + "node_modules/addons-linter/node_modules/@eslint/js": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", + "integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/ajv": { - "version": "6.12.6", + "node_modules/addons-linter/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { @@ -5708,235 +5866,276 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", + "node_modules/addons-linter/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { - "ajv": "^8.0.0" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "ajv": "^8.0.0" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", + "node_modules/addons-linter/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "balanced-match": "^1.0.0" } }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", + "node_modules/addons-linter/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ansi-align": { - "version": "3.0.1", + "node_modules/addons-linter/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "ISC", "dependencies": { - "string-width": "^4.1.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/ansi-align/node_modules/emoji-regex": { + "node_modules/addons-linter/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/addons-linter/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/addons-linter/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", + "node_modules/addons-linter/node_modules/eslint": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", + "integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", "dev": true, - "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.1", + "@eslint/js": "8.36.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.5.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", + "node_modules/addons-linter/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" + "url": "https://opencollective.com/eslint" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/addons-linter/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/addons-linter/node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/anymatch": { - "version": "3.1.3", + "node_modules/addons-linter/node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/addons-linter/node_modules/espree": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", + "integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "dev": true, - "license": "ISC", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">= 8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/app-builder-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", - "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", - "dev": true - }, - "node_modules/app-builder-lib": { - "version": "24.5.2", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.5.2.tgz", - "integrity": "sha512-fZbUrFl3FW7yw92KiDpXV3Nd84EW+D7/WU7MEjX2eHDWM45Qx4hYOZpL9PaT9ZzZbaNfNLmt2EOnoqHQXHLdKw==", + "node_modules/addons-linter/node_modules/glob": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.0.tgz", + "integrity": "sha512-EAZejC7JvnQINayvB/7BJbpZpNOJ8Lrw2OZNEvQxe0vaLn1SuwMcfV7/MNaX8L/T0wmptBFI4YMtDvSBxYDc7w==", "dev": true, "dependencies": { - "@develar/schema-utils": "~2.6.5", - "@electron/notarize": "^1.2.3", - "@electron/osx-sign": "^1.0.4", - "@electron/rebuild": "3.2.13", - "@electron/universal": "1.3.4", - "@malept/flatpak-bundler": "^0.4.0", - "@types/fs-extra": "9.0.13", - "7zip-bin": "~5.1.1", - "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.9", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", - "chromium-pickle-js": "^0.2.0", - "debug": "^4.3.4", - "ejs": "^3.1.8", - "electron-publish": "24.5.0", - "form-data": "^4.0.0", - "fs-extra": "^10.1.0", - "hosted-git-info": "^4.1.0", - "is-ci": "^3.0.0", - "isbinaryfile": "^5.0.0", - "js-yaml": "^4.1.0", - "lazy-val": "^1.0.5", - "minimatch": "^5.1.1", - "read-config-file": "6.3.2", - "sanitize-filename": "^1.6.3", - "semver": "^7.3.8", - "tar": "^6.1.12", - "temp-file": "^3.4.0" + "fs.realpath": "^1.0.0", + "minimatch": "^7.4.1", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/app-builder-lib/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/addons-linter/node_modules/glob/node_modules/minimatch": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/app-builder-lib/node_modules/builder-util-runtime": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", - "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", + "node_modules/addons-linter/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=12.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/app-builder-lib/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/addons-linter/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/app-builder-lib/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/addons-linter/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=8" } }, - "node_modules/app-builder-lib/node_modules/lru-cache": { + "node_modules/addons-linter/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/addons-linter/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", @@ -5948,22 +6147,43 @@ "node": ">=10" } }, - "node_modules/app-builder-lib/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/addons-linter/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/addons-linter/node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], "dependencies": { - "brace-expansion": "^2.0.1" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14" } }, - "node_modules/app-builder-lib/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/addons-linter/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -5975,863 +6195,3378 @@ "node": ">=10" } }, - "node_modules/app-builder-lib/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/addons-linter/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/app-builder-lib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/aproba": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/arch": { - "version": "2.2.0", + "node_modules/addons-linter/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", + "node_modules/addons-linter/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "ISC", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/arg": { - "version": "5.0.2", + "node_modules/addons-linter/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "node_modules/addons-linter/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/aria-query": { - "version": "5.1.3", + "node_modules/addons-linter/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "deep-equal": "^2.0.5" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", + "node_modules/addons-linter/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/addons-moz-compare": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/addons-moz-compare/-/addons-moz-compare-1.3.0.tgz", + "integrity": "sha512-/rXpQeaY0nOKhNx00pmZXdk5Mu+KhVlL3/pSBuAYwrxRrNiTvI/9xfQI8Lmm7DMMl+PDhtfAHY/0ibTpdeoQQQ==", + "dev": true + }, + "node_modules/addons-scanner-utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-8.5.0.tgz", + "integrity": "sha512-X35SYZRdSnxx7UZuAk+DizKihQp2Ze2c5GV+5nnRr/FFyx/fOgE3Zo8jdhzSne57PENE9w1ZVocBLJTN6UDB3g==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "@types/yauzl": "2.10.0", + "common-tags": "1.8.2", + "first-chunk-stream": "3.0.0", + "strip-bom-stream": "4.0.0", + "upath": "2.0.1", + "yauzl": "2.10.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "body-parser": "1.20.2", + "express": "4.18.2", + "node-fetch": "2.6.7", + "safe-compare": "1.1.4" + }, + "peerDependenciesMeta": { + "body-parser": { + "optional": true + }, + "express": { + "optional": true + }, + "node-fetch": { + "optional": true + }, + "safe-compare": { + "optional": true + } } }, - "node_modules/array-find": { - "version": "1.0.0", + "node_modules/adm-zip": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", + "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=6.0" + } }, - "node_modules/array-flatten": { - "version": "2.1.2", + "node_modules/agent-base": { + "version": "6.0.2", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } }, - "node_modules/array-includes": { - "version": "3.1.6", + "node_modules/agentkeepalive": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8.0.0" } }, - "node_modules/array-union": { - "version": "2.1.0", + "node_modules/aggregate-error": { + "version": "3.1.0", "dev": true, "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", + "node_modules/ajv": { + "version": "6.12.6", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", + "node_modules/ajv-formats": { + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "ajv": "^8.0.0" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", "dev": true, "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "dev": true, + "license": "ISC", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "string-width": "^4.1.0" } }, - "node_modules/arrify": { - "version": "1.0.1", + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/asn1js": { - "version": "3.0.5", + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "pvtsutils": "^1.3.2", - "pvutils": "^1.1.3", - "tslib": "^2.4.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=8" } }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "node_modules/ansi-escapes": { + "version": "4.3.2", "dev": true, - "optional": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { - "node": ">=0.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ast-types-flow": { - "version": "0.0.7", + "node_modules/ansi-html-community": { + "version": "0.0.8", "dev": true, - "license": "ISC" + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">=4" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/anymatch": { + "version": "3.1.3", "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "license": "MIT", + "license": "ISC", "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">= 8" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true }, - "node_modules/axe-core": { - "version": "4.7.2", + "node_modules/app-builder-lib": { + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.5.2.tgz", + "integrity": "sha512-fZbUrFl3FW7yw92KiDpXV3Nd84EW+D7/WU7MEjX2eHDWM45Qx4hYOZpL9PaT9ZzZbaNfNLmt2EOnoqHQXHLdKw==", "dev": true, - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/axios": { - "version": "0.25.0", - "license": "MIT", "dependencies": { - "follow-redirects": "^1.14.7" + "@develar/schema-utils": "~2.6.5", + "@electron/notarize": "^1.2.3", + "@electron/osx-sign": "^1.0.4", + "@electron/rebuild": "3.2.13", + "@electron/universal": "1.3.4", + "@malept/flatpak-bundler": "^0.4.0", + "@types/fs-extra": "9.0.13", + "7zip-bin": "~5.1.1", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "24.5.0", + "builder-util-runtime": "9.2.1", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.4", + "ejs": "^3.1.8", + "electron-publish": "24.5.0", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^5.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^5.1.1", + "read-config-file": "6.3.2", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.8", + "tar": "^6.1.12", + "temp-file": "^3.4.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/axobject-query": { - "version": "3.1.1", + "node_modules/app-builder-lib/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "deep-equal": "^2.0.5" + "balanced-match": "^1.0.0" } }, - "node_modules/babel-jest": { - "version": "29.5.0", + "node_modules/app-builder-lib/node_modules/builder-util-runtime": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", + "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "debug": "^4.3.4", + "sax": "^1.2.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "node": ">=12.0.0" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=12" } }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/app-builder-lib/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "yallist": "^4.0.0" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/app-builder-lib/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/babel-loader": { - "version": "9.1.2", + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, - "license": "MIT", "dependencies": { - "find-cache-dir": "^3.3.2", - "schema-utils": "^4.0.0" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">= 14.15.0" + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" + "engines": { + "node": ">=10" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 10.0.0" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", + "node_modules/app-builder-lib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/aproba": { + "version": "2.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "ISC" }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", + "node_modules/arch": { + "version": "2.2.0", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.1", + "node_modules/are-we-there-yet": { + "version": "3.0.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.0", + "node_modules/arg": { + "version": "5.0.2", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } + "license": "MIT" }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", + "node_modules/argparse": { + "version": "2.0.1", "dev": true, - "license": "MIT" + "license": "Python-2.0" }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", + "node_modules/aria-query": { + "version": "5.1.3", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "deep-equal": "^2.0.5" } }, - "node_modules/babel-preset-jest": { - "version": "29.5.0", + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-preset-react-app": { - "version": "10.0.1", + "node_modules/array-differ": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz", + "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/balanced-match": { - "version": "1.0.2", + "node_modules/array-find": { + "version": "1.0.0", "dev": true, "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/batch": { - "version": "0.6.1", + "node_modules/array-flatten": { + "version": "2.1.2", "dev": true, "license": "MIT" }, - "node_modules/before-build-webpack": { - "version": "0.2.13", + "node_modules/array-includes": { + "version": "3.1.6", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/binary-extensions": { - "version": "2.2.0", + "node_modules/array-union": { + "version": "2.1.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/bindings": { - "version": "1.5.0", + "node_modules/array.prototype.flat": { + "version": "1.3.1", "dev": true, "license": "MIT", "dependencies": { - "file-uri-to-path": "1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bl": { - "version": "4.1.0", + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", "dev": true, "license": "MIT", "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "node_modules/arrify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/bluebird-lst": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", - "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "dependencies": { - "bluebird": "^3.5.5" + "safer-buffer": "~2.1.0" } }, - "node_modules/bn.js": { - "version": "5.1.1", - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", + "node_modules/asn1js": { + "version": "3.0.5", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/boolbase": { + "node_modules/assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", "dev": true, "license": "ISC" }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "optional": true + "engines": { + "node": ">=8" + } }, - "node_modules/boxen": { - "version": "7.0.0", + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.14", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], "license": "MIT", "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.0", - "chalk": "^5.0.1", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": ">=14.16" + "node": "^10 || ^12 || >=14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.0.1", + "node_modules/available-typed-arrays": { + "version": "1.0.5", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "6.2.1", + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "*" } }, - "node_modules/boxen/node_modules/camelcase": { - "version": "7.0.1", + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/axe-core": { + "version": "4.7.2", "dev": true, - "license": "MIT", + "license": "MPL-2.0", "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/boxen/node_modules/chalk": { - "version": "5.2.0", + "node_modules/axios": { + "version": "0.25.0", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.7" + } + }, + "node_modules/axobject-query": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/babel-jest": { + "version": "29.5.0", "dev": true, "license": "MIT", + "dependencies": { + "@jest/transform": "^29.5.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/boxen/node_modules/type-fest": { - "version": "2.19.0", + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=12.20" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=7.0.0" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/braces": { - "version": "3.0.2", + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/browserlist": { - "version": "1.0.1", + "node_modules/babel-loader": { + "version": "9.1.2", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^2.4.1" + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" }, - "bin": { - "browserlist": "cli.js" + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" } }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "dev": true, + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/before-build-webpack": { + "version": "0.2.13", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/bn.js": { + "version": "5.1.1", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true, + "optional": true + }, + "node_modules/boxen": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.0", + "chalk": "^5.0.1", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "2.19.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserlist": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1" + }, + "bin": { + "browserlist": "cli.js" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/bufferstreams": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/builder-util": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.5.0.tgz", + "integrity": "sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ==", + "dev": true, + "dependencies": { + "@types/debug": "^4.1.6", + "7zip-bin": "~5.1.1", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.2.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/builder-util/node_modules/builder-util-runtime": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", + "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/builder-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/builder-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builder-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/builder-util/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/builder-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/builder-util/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bunyan": { + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", + "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", + "dev": true, + "engines": [ + "node >=0.10.0" + ], + "bin": { + "bunyan": "bin/bunyan" + }, + "optionalDependencies": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001512", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", + "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/capital-case": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk-template": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk-template/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk-template/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/chalk-template/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk-template/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/change-case": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio-select/node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio-select/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-launcher": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.1.tgz", + "integrity": "sha512-UugC8u59/w2AyX5sHLZUHoxBAiSiunUhZa3zZwMH6zPVis0C3dDKiRWyUGIo14tTbZHGVviWxv3PQWZ7taZ4fg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chrome-webstore-upload": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-webstore-upload/-/chrome-webstore-upload-1.0.0.tgz", + "integrity": "sha512-8+MKhuLzVWNekBnej8w4M80O8Yfp91hBQimqEZx1nKEn7nNQwBa/CjjQSuK2c3vz9DukV5WRZcQz+zzLdrEC1Q==", + "dev": true, + "dependencies": { + "got": "^11.8.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fregante" + } + }, + "node_modules/chrome-webstore-upload-cli": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/chrome-webstore-upload-cli/-/chrome-webstore-upload-cli-2.2.2.tgz", + "integrity": "sha512-Y6q5gZ3xp+b9rPgw0SNmW7tOgx0qhHpz2NloaoDe8/f45GiqZiH3gAhyYeekY75RcwG3LT1wNmbjMdSKf7n8fg==", + "dev": true, + "dependencies": { + "chrome-webstore-upload": "^1.0.0", + "junk": "^4.0.0", + "meow": "^11.0.0", + "ora": "^6.1.2", + "recursive-readdir": "^2.2.3", + "yazl": "^2.5.1" + }, + "bin": { + "chrome-webstore-upload": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fregante" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/camelcase-keys": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-8.0.2.tgz", + "integrity": "sha512-qMKdlOfsjlezMqxkUGGMaWWs17i2HoL15tM+wtx8ld4nLrUwU58TFdvyGOz/piNP842KeO8yXvggVQSdQ828NA==", + "dev": true, + "dependencies": { + "camelcase": "^7.0.0", + "map-obj": "^4.3.0", + "quick-lru": "^6.1.1", + "type-fest": "^2.13.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/camelcase-keys/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/decamelize": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", + "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/meow": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-11.0.0.tgz", + "integrity": "sha512-Cl0yeeIrko6d94KpUo1M+0X1sB14ikoaqlIGuTH1fW4I+E3+YljL54/hb/BWmVfrV9tTV9zU04+xjw08Fh2WkA==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^8.0.2", + "decamelize": "^6.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^4.0.1", + "read-pkg-up": "^9.1.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^3.1.0", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/normalize-package-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/quick-lru": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.1.tgz", + "integrity": "sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/read-pkg-up": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", + "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0", + "read-pkg": "^7.1.0", + "type-fest": "^2.5.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/read-pkg/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/read-pkg/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "dev": true, + "dependencies": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/chrome-webstore-upload-cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/chrome-webstore-upload-cli/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true + }, + "node_modules/ci-info": { + "version": "3.8.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-color": { + "version": "2.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "arch": "^2.2.0", + "execa": "^5.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/co": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colord": { + "version": "2.9.3", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "dev": true, + "license": "MIT" + }, + "node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/concurrently": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", + "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.29.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/config-file-ts": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.4.tgz", + "integrity": "sha512-cKSW0BfrSaAUnxpgvpXPLaaW/umg4bqg4k3GO1JqlRfpx+d5W0GDXznCMkWotJQek5Mmz1MJVChQnz3IVaeMZQ==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "typescript": "^4.0.2" + } + }, + "node_modules/config-file-ts/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/configstore": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", + "dev": true, + "dependencies": { + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" + } + }, + "node_modules/configstore/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "ISC" + }, + "node_modules/constant-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, - "bin": { - "browserslist": "cli.js" + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bser": { - "version": "2.1.1", + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.0.tgz", + "integrity": "sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "node-int64": "^0.4.0" + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/buffer": { - "version": "6.0.3", + "node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/crc/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -6846,893 +9581,1017 @@ "url": "https://feross.org/support" } ], - "license": "MIT", + "optional": true, "dependencies": { "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" + "ieee754": "^1.1.13" } }, - "node_modules/buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "node_modules/cross-env": { + "version": "7.0.3", "dev": true, - "engines": { - "node": ">=0.4" + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/bufferstreams": { - "version": "3.0.0", + "node_modules/cross-spawn": { + "version": "7.0.3", "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "^3.4.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=8.12.0" + "node": ">= 8" } }, - "node_modules/builder-util": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.5.0.tgz", - "integrity": "sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ==", + "node_modules/crypt": { + "version": "0.0.2", "dev": true, - "dependencies": { - "@types/debug": "^4.1.6", - "7zip-bin": "~5.1.1", - "app-builder-bin": "4.0.0", - "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.2.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "debug": "^4.3.4", - "fs-extra": "^10.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-ci": "^3.0.0", - "js-yaml": "^4.1.0", - "source-map-support": "^0.5.19", - "stat-mode": "^1.0.0", - "temp-file": "^3.4.0" + "license": "BSD-3-Clause", + "engines": { + "node": "*" } }, - "node_modules/builder-util-runtime": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", - "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" + "type-fest": "^1.0.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/builder-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/builder-util/node_modules/builder-util-runtime": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", - "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", + "node_modules/css-declaration-sorter": { + "version": "6.4.0", "dev": true, - "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-functions-list": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=12.22" } }, - "node_modules/builder-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/css-loader": { + "version": "6.8.1", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" }, "engines": { - "node": ">=10" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/builder-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "yallist": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=10" } }, - "node_modules/builder-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/builder-util/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/css-loader/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/builder-util/node_modules/has-flag": { + "node_modules/css-loader/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/builder-util/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", "dev": true, + "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } } }, - "node_modules/builder-util/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/css-select": { + "version": "4.3.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/builder-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/css-tree": { + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/builder-util/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/css-what": { + "version": "6.1.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">= 10.0.0" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/bytes": { + "node_modules/css.escape": { + "version": "1.5.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cssesc": { "version": "3.0.0", "dev": true, "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "node_modules/cssnano": { + "version": "5.1.15", "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, "engines": { - "node": ">=10.6.0" + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "node_modules/cssnano-preset-default": { + "version": "5.2.14", "dev": true, + "license": "MIT", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/cssnano-utils": { + "version": "3.1.0", "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/call-bind": { - "version": "1.0.2", + "node_modules/csso": { + "version": "4.2.0", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "css-tree": "^1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/callsites": { - "version": "3.1.0", + "node_modules/csstype": { + "version": "3.1.2", + "devOptional": true, + "license": "MIT" + }, + "node_modules/cubic2quad": { + "version": "1.2.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "license": "MIT" + }, + "node_modules/d": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "node_modules/camel-case": { - "version": "4.1.2", + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, - "license": "MIT", "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/camelcase": { - "version": "5.3.1", + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 12" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", + "node_modules/dataloader": { + "version": "2.2.2", + "license": "MIT" + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "dev": true, - "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "@babel/runtime": "^7.21.0" }, "engines": { - "node": ">=8" + "node": ">=0.11" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "type": "opencollective", + "url": "https://opencollective.com/date-fns" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001512", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", - "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true }, - "node_modules/capital-case": { - "version": "1.0.4", + "node_modules/debug": { + "version": "4.3.4", "dev": true, "license": "MIT", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/chalk": { - "version": "2.4.2", + "node_modules/decamelize": { + "version": "1.2.0", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/chalk-template": { - "version": "0.4.0", + "node_modules/decamelize-keys": { + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.2" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">=0.10.0" }, "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chalk-template/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", "dev": true, "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chalk-template/node_modules/chalk": { - "version": "4.1.2", + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chalk-template/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-equal": { + "version": "2.2.1", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=7.0.0" + "node": ">=4.0.0" } }, - "node_modules/chalk-template/node_modules/color-name": { - "version": "1.1.4", + "node_modules/deep-is": { + "version": "0.1.4", "dev": true, "license": "MIT" }, - "node_modules/chalk-template/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/deepcopy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz", + "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.8" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/chalk-template/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/defaults": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "clone": "^1.0.2" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/change-case": { - "version": "4.1.2", + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", "dev": true, "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" + "engines": { + "node": ">=0.8" } }, - "node_modules/char-regex": { - "version": "1.0.2", + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, - "node_modules/charenc": { - "version": "0.0.2", + "node_modules/define-lazy-prop": { + "version": "2.0.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/chokidar": { - "version": "3.5.3", + "node_modules/define-properties": { + "version": "1.2.0", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 0.4" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=0.4.0" } }, - "node_modules/chownr": { + "node_modules/delegates": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/depd": { "version": "2.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", + "node_modules/destroy": { + "version": "1.2.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/chromium-pickle-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", - "dev": true + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/ci-info": { - "version": "3.8.0", + "node_modules/detect-newline": { + "version": "3.1.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", + "node_modules/detect-node": { + "version": "2.1.0", "dev": true, "license": "MIT" }, - "node_modules/clean-css": { - "version": "5.3.2", + "node_modules/diff-sequences": { + "version": "29.4.3", "dev": true, "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, "engines": { - "node": ">= 10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/clean-stack": { - "version": "2.2.0", + "node_modules/dir-compare": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", + "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "buffer-equal": "^1.0.0", + "minimatch": "^3.0.4" } }, - "node_modules/cli-boxes": { - "version": "3.0.0", + "node_modules/dir-glob": { + "version": "3.0.1", "dev": true, "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/dmg-builder": { + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.5.2.tgz", + "integrity": "sha512-4qWGO3OM+1ipqvrKvskZRLDEvAPZdZwil6e40Tb8dKogpEhabrzcjpwoRycBy8FAx8R2EBQaFCtIp5rBO/DM8A==", + "dev": true, + "dependencies": { + "app-builder-lib": "24.5.2", + "builder-util": "24.5.0", + "builder-util-runtime": "9.2.1", + "fs-extra": "^10.1.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "dmg-license": "^1.0.11" } }, - "node_modules/cli-color": { - "version": "2.0.3", + "node_modules/dmg-builder/node_modules/builder-util-runtime": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", + "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", "dev": true, - "license": "ISC", "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" + "debug": "^4.3.4", + "sax": "^1.2.4" }, "engines": { - "node": ">=0.10" + "node": ">=12.0.0" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/cli-spinners": { - "version": "2.9.0", + "node_modules/dmg-builder/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" + } + }, + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/dmg-builder/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "dev": true, + "node_modules/dnd-core": { + "version": "14.0.1", "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@react-dnd/asap": "^4.0.0", + "@react-dnd/invariant": "^2.0.0", + "redux": "^4.1.1" } }, - "node_modules/clipboardy": { - "version": "3.0.0", + "node_modules/dns-equal": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.0", "dev": true, "license": "MIT", "dependencies": { - "arch": "^2.2.0", - "execa": "^5.1.1", - "is-wsl": "^2.2.0" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/cliui": { - "version": "8.0.1", + "node_modules/doctrine": { + "version": "3.0.0", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=12" + "node": ">=6.0.0" } }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", + "node_modules/dom-accessibility-api": { + "version": "0.5.16", "dev": true, "license": "MIT" }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/dom-converter": { + "version": "0.2.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "utila": "~0.4" } }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", + "node_modules/dom-serializer": { + "version": "1.4.1", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/clone-deep": { - "version": "4.0.1", + "node_modules/domelementtype": { + "version": "2.3.0", "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", + "node_modules/domhandler": { + "version": "4.3.1", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "isobject": "^3.0.1" + "domelementtype": "^2.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "node_modules/domutils": { + "version": "2.8.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "mimic-response": "^1.0.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/co": { - "version": "4.6.0", + "node_modules/dot-case": { + "version": "3.0.4", "dev": true, "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "1.9.3", + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", + "node_modules/dotenv": { + "version": "16.0.3", "dev": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" } }, - "node_modules/colord": { - "version": "2.9.3", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "dev": true, - "license": "MIT" + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", "dev": true, + "hasInstallScript": true, + "optional": true, "dependencies": { - "delayed-stream": "~1.0.0" + "nan": "^2.14.0" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10" } }, - "node_modules/commander": { - "version": "7.2.0", + "node_modules/duplexer": { + "version": "0.1.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } + "license": "MIT" }, - "node_modules/commondir": { - "version": "1.0.1", + "node_modules/eastasianwidth": { + "version": "0.2.0", "dev": true, "license": "MIT" }, - "node_modules/compare-version": { + "node_modules/ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, - "license": "MIT", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.0.0" + "safe-buffer": "^5.0.1" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", + "node_modules/ee-first": { + "version": "1.1.1", "dev": true, "license": "MIT" }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dev": true, - "license": "MIT" + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/concat-map": { - "version": "0.0.1", + "node_modules/electron": { + "version": "22.3.15", + "resolved": "https://registry.npmjs.org/electron/-/electron-22.3.15.tgz", + "integrity": "sha512-KhxJkx2tfB8Q1moUI3sI/x48lehTk3wUEwwaKKkfzSKT3m7nK/g1YSYiYe4c8WuqODAcJKhB1MOvRv3WmhBYBw==", "dev": true, - "license": "MIT" + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^16.11.26", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } }, - "node_modules/concurrently": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", - "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", + "node_modules/electron-builder": { + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.5.2.tgz", + "integrity": "sha512-rxlUSSqziRMdTSSzti7It4R7wmuttouMhgTiF0HmoTXvaBKlmHPgkQjaI8ZFIZ0Rg+2TFPlPdMu2BwX3+6HJCg==", "dev": true, "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.29.1", - "lodash": "^4.17.21", - "rxjs": "^7.0.0", - "shell-quote": "^1.7.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^17.3.1" + "app-builder-lib": "24.5.2", + "builder-util": "24.5.0", + "builder-util-runtime": "9.2.1", + "chalk": "^4.1.2", + "dmg-builder": "24.5.2", + "fs-extra": "^10.1.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.3.2", + "simple-update-notifier": "^1.1.0", + "yargs": "^17.6.2" }, "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" }, "engines": { - "node": "^12.20.0 || ^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + "node": ">=14.0.0" } }, - "node_modules/concurrently/node_modules/ansi-styles": { + "node_modules/electron-builder/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -7747,7 +10606,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/concurrently/node_modules/chalk": { + "node_modules/electron-builder/node_modules/builder-util-runtime": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", + "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/electron-builder/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -7763,19 +10635,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/concurrently/node_modules/color-convert": { + "node_modules/electron-builder/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -7787,13 +10647,27 @@ "node": ">=7.0.0" } }, - "node_modules/concurrently/node_modules/color-name": { + "node_modules/electron-builder/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/concurrently/node_modules/has-flag": { + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -7802,738 +10676,639 @@ "node": ">=8" } }, - "node_modules/concurrently/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/electron-builder/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/config-file-ts": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.4.tgz", - "integrity": "sha512-cKSW0BfrSaAUnxpgvpXPLaaW/umg4bqg4k3GO1JqlRfpx+d5W0GDXznCMkWotJQek5Mmz1MJVChQnz3IVaeMZQ==", + "node_modules/electron-builder/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "glob": "^7.1.6", - "typescript": "^4.0.2" - } - }, - "node_modules/config-file-ts/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4.2.0" + "node": ">=8" } }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/connect-history-api-fallback": { + "node_modules/electron-builder/node_modules/universalify": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/constant-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" + "node": ">= 10.0.0" } }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.4", + "node_modules/electron-context-menu": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-3.6.1.tgz", + "integrity": "sha512-lcpO6tzzKUROeirhzBjdBWNqayEThmdW+2I2s6H6QMrwqTVyT3EK47jW3Nxm60KTxl5/bWfEoIruoUNn57/QkQ==", "dev": true, - "license": "MIT", "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "cli-truncate": "^2.1.0", + "electron-dl": "^3.2.1", + "electron-is-dev": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", + "node_modules/electron-context-menu/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "node_modules/electron-context-menu/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "dependencies": { - "browserslist": "^4.21.5" + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", + "node_modules/electron-context-menu/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "node_modules/electron-context-menu/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/electron-context-menu/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/electron-context-menu/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "optional": true, - "dependencies": { - "buffer": "^5.1.0" + "engines": { + "node": ">=8" } }, - "node_modules/crc/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/electron-context-menu/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/cross-env": { - "version": "7.0.3", + "node_modules/electron-context-menu/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" + "node": ">=8" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/electron-dl": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-3.5.0.tgz", + "integrity": "sha512-Oj+VSuScVx8hEKM2HEvTQswTX6G3MLh7UoAz/oZuvKyNDfudNi1zY6PK/UnFoK1nCl9DF6k+3PFwElKbtZlDig==", "dev": true, - "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "ext-name": "^5.0.0", + "pupa": "^2.0.1", + "unused-filename": "^2.1.0" }, - "engines": { - "node": ">= 8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/crypt": { - "version": "0.0.2", + "node_modules/electron-is-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-2.0.0.tgz", + "integrity": "sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": "*" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/css-declaration-sorter": { - "version": "6.4.0", + "node_modules/electron-publish": { + "version": "24.5.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.5.0.tgz", + "integrity": "sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA==", "dev": true, - "license": "ISC", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "24.5.0", + "builder-util-runtime": "9.2.1", + "chalk": "^4.1.2", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=8" }, - "peerDependencies": { - "postcss": "^8.0.9" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/css-functions-list": { - "version": "3.1.0", + "node_modules/electron-publish/node_modules/builder-util-runtime": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", + "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", "dev": true, - "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, "engines": { - "node": ">=12.22" + "node": ">=12.0.0" } }, - "node_modules/css-loader": { - "version": "6.8.1", + "node_modules/electron-publish/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/css-loader/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/electron-publish/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/electron-publish/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/css-loader/node_modules/yallist": { + "node_modules/electron-publish/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "ISC" - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } + "node": ">=8" } }, - "node_modules/css-select": { - "version": "4.3.0", + "node_modules/electron-publish/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/css-tree": { - "version": "1.1.3", + "node_modules/electron-publish/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/css-what": { - "version": "6.1.0", + "node_modules/electron-publish/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "license": "BSD-2-Clause", "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node": ">= 10.0.0" } }, - "node_modules/css.escape": { - "version": "1.5.1", - "dev": true, - "license": "MIT" + "node_modules/electron-to-chromium": { + "version": "1.4.449", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz", + "integrity": "sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==", + "dev": true }, - "node_modules/cssesc": { - "version": "3.0.0", + "node_modules/electron-updater": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-5.3.0.tgz", + "integrity": "sha512-iKEr7yQBcvnQUPnSDYGSWC9t0eF2YbZWeYYYZzYxdl+HiRejXFENjYMnYjoOm2zxyD6Cr2JTHZhp9pqxiXuCOw==", "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" + "dependencies": { + "@types/semver": "^7.3.6", + "builder-util-runtime": "9.1.1", + "fs-extra": "^10.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "lodash.escaperegexp": "^4.1.2", + "lodash.isequal": "^4.5.0", + "semver": "^7.3.5", + "typed-emitter": "^2.1.0" } }, - "node_modules/cssnano": { - "version": "5.1.15", + "node_modules/electron-updater/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "MIT", "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=12" } }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", + "node_modules/electron-updater/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "MIT", "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "universalify": "^2.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/cssnano-utils": { - "version": "3.1.0", + "node_modules/electron-updater/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" + "dependencies": { + "yallist": "^4.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "engines": { + "node": ">=10" } }, - "node_modules/csso": { - "version": "4.2.0", + "node_modules/electron-updater/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, - "license": "MIT", "dependencies": { - "css-tree": "^1.1.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "node_modules/csstype": { - "version": "3.1.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/cubic2quad": { - "version": "1.2.1", + "node_modules/electron-updater/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">= 10.0.0" + } }, - "node_modules/d": { - "version": "1.0.1", + "node_modules/electron-updater/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/electron-window-state": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/electron-window-state/-/electron-window-state-5.0.3.tgz", + "integrity": "sha512-1mNTwCfkolXl3kMf50yW3vE2lZj0y92P/HYWFBrb+v2S/pCka5mdwN3cagKm458A7NjndSwijynXgcLWRodsVg==", "dev": true, - "license": "ISC", "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "jsonfile": "^4.0.0", + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/dataloader": { - "version": "2.2.2", - "license": "MIT" + "node_modules/electron/node_modules/@types/node": { + "version": "16.18.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.34.tgz", + "integrity": "sha512-VmVm7gXwhkUimRfBwVI1CHhwp86jDWR04B5FGebMMyxV90SlCmFujwUHrxTD4oO+SOYU86SoxvhgeRQJY7iXFg==", + "dev": true }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "node_modules/electronmon": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/electronmon/-/electronmon-2.0.2.tgz", + "integrity": "sha512-Yw1CXEp5HJT9P6Sns3UP3Krwm5eb2JKqTRAVczKdsUa+U/dMTgONwKIHkPbKSSmtyTV+5JwobxkhFPiRgegObA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.21.0" + "chalk": "^3.0.0", + "import-from": "^3.0.0", + "runtime-required": "^1.1.0", + "watchboy": "^0.4.3" }, - "engines": { - "node": ">=0.11" + "bin": { + "electronmon": "bin/cli.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/debug": { - "version": "4.3.4", + "node_modules/electronmon/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.1.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/decamelize": { - "version": "1.2.0", + "node_modules/electronmon/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", + "node_modules/electronmon/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=7.0.0" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", + "node_modules/electronmon/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/electronmon/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/electronmon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "mimic-response": "^3.1.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/emittery": { + "version": "0.13.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/dedent": { - "version": "0.7.0", + "node_modules/emoji-regex": { + "version": "9.2.2", "dev": true, "license": "MIT" }, - "node_modules/deep-equal": { - "version": "2.2.1", + "node_modules/encodeurl": { + "version": "1.0.2", "dev": true, "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.0", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "dev": true, + "node_modules/encoding": { + "version": "0.1.13", "license": "MIT", - "engines": { - "node": ">=4.0.0" + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "dev": true, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/defaults": { - "version": "1.0.4", + "node_modules/end-of-stream": { + "version": "1.4.4", "dev": true, "license": "MIT", "dependencies": { - "clone": "^1.0.2" + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "0.9.1", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.2.0", + "tapable": "^0.1.8" }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", + "node_modules/env-paths": { + "version": "2.2.1", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">=6" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "node_modules/envinfo": { + "version": "7.8.1", "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "envinfo": "dist/cli.js" + }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", + "node_modules/err-code": { + "version": "2.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/define-properties": { - "version": "1.2.0", + "node_modules/es-abstract": { + "version": "1.21.2", "dev": true, "license": "MIT", "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" @@ -8542,525 +11317,689 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/es-get-iterator": { + "version": "1.1.3", "dev": true, - "engines": { - "node": ">=0.4.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/delegates": { - "version": "1.0.0", + "node_modules/es-module-lexer": { + "version": "1.2.1", "dev": true, "license": "MIT" }, - "node_modules/depd": { - "version": "2.0.0", + "node_modules/es-set-tostringtag": { + "version": "2.0.1", "dev": true, "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" } }, - "node_modules/destroy": { - "version": "1.2.0", + "node_modules/es-shim-unscopables": { + "version": "1.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "dependencies": { + "has": "^1.0.3" } }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "node_modules/es-to-primitive": { + "version": "1.2.1", "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/detect-newline": { - "version": "3.1.0", + "node_modules/es5-ext": { + "version": "0.10.62", "dev": true, - "license": "MIT", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "dev": true, - "license": "MIT" + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true }, - "node_modules/diff-sequences": { - "version": "29.4.3", + "node_modules/es6-iterator": { + "version": "2.0.3", "dev": true, "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-compare": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", - "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", - "dev": true, "dependencies": { - "buffer-equal": "^1.0.0", - "minimatch": "^3.0.4" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", + "node_modules/es6-promisify": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-7.0.0.tgz", + "integrity": "sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==", "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/dmg-builder": { - "version": "24.5.2", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.5.2.tgz", - "integrity": "sha512-4qWGO3OM+1ipqvrKvskZRLDEvAPZdZwil6e40Tb8dKogpEhabrzcjpwoRycBy8FAx8R2EBQaFCtIp5rBO/DM8A==", + "node_modules/es6-symbol": { + "version": "3.1.3", "dev": true, + "license": "ISC", "dependencies": { - "app-builder-lib": "24.5.2", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", - "fs-extra": "^10.1.0", - "iconv-lite": "^0.6.2", - "js-yaml": "^4.1.0" - }, - "optionalDependencies": { - "dmg-license": "^1.0.11" + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/dmg-builder/node_modules/builder-util-runtime": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", - "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", + "node_modules/es6-weak-map": { + "version": "2.0.3", "dev": true, + "license": "ISC", "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" - }, - "engines": { - "node": ">=12.0.0" + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" } }, - "node_modules/dmg-builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/escalade": { + "version": "3.1.1", "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/dmg-builder/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/dmg-builder/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/escape-html": { + "version": "1.0.3", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "license": "MIT" }, - "node_modules/dmg-builder/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, + "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=0.8.0" } }, - "node_modules/dmg-license": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", - "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "node_modules/eslint": { + "version": "8.41.0", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", "dependencies": { - "@types/plist": "^3.0.1", - "@types/verror": "^1.10.3", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.41.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", - "crc": "^3.8.0", - "iconv-corefoundation": "^1.1.7", - "plist": "^3.0.4", - "smart-buffer": "^4.0.2", - "verror": "^1.10.0" + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" }, "bin": { - "dmg-license": "bin/dmg-license.js" + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/dnd-core": { - "version": "14.0.1", + "node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "dev": true, "license": "MIT", "dependencies": { - "@react-dnd/asap": "^4.0.0", - "@react-dnd/invariant": "^2.0.0", - "redux": "^4.1.1" + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + }, + "engines": { + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" } }, - "node_modules/dns-equal": { - "version": "1.0.0", + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } }, - "node_modules/dns-packet": { - "version": "5.6.0", + "node_modules/eslint-config-airbnb-typescript": { + "version": "17.0.0", "dev": true, "license": "MIT", "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" + "eslint-config-airbnb-base": "^15.0.0" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.13.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3" } }, - "node_modules/doctrine": { - "version": "3.0.0", + "node_modules/eslint-config-react-app": { + "version": "7.0.1", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" } }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } }, - "node_modules/dom-converter": { - "version": "0.2.0", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", "dev": true, "license": "MIT", "dependencies": { - "utila": "~0.4" + "ms": "^2.1.1" } }, - "node_modules/dom-serializer": { - "version": "1.4.1", + "node_modules/eslint-import-resolver-webpack": { + "version": "0.13.2", "dev": true, "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "array-find": "^1.0.0", + "debug": "^3.2.7", + "enhanced-resolve": "^0.9.1", + "find-root": "^1.1.0", + "has": "^1.0.3", + "interpret": "^1.4.0", + "is-core-module": "^2.7.0", + "is-regex": "^1.1.4", + "lodash": "^4.17.21", + "resolve": "^1.20.0", + "semver": "^5.7.1" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "eslint-plugin-import": ">=1.4.0", + "webpack": ">=1.11.0" } }, - "node_modules/domelementtype": { - "version": "2.3.0", + "node_modules/eslint-import-resolver-webpack/node_modules/debug": { + "version": "3.2.7", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } }, - "node_modules/domhandler": { - "version": "4.3.1", + "node_modules/eslint-import-resolver-webpack/node_modules/semver": { + "version": "5.7.1", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/domutils": { + "node_modules/eslint-module-utils": { "version": "2.8.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "debug": "^3.2.7" }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/dot-case": { - "version": "3.0.4", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", "dev": true, "license": "MIT", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "ms": "^2.1.1" } }, - "node_modules/dotenv": { - "version": "16.0.3", + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", "dev": true, - "license": "BSD-2-Clause", + "license": "BSD-3-Clause", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, "engines": { - "node": ">=12" + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" } }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "node_modules/duplexer": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", + "node_modules/eslint-plugin-import": { + "version": "2.27.5", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } }, - "node_modules/ee-first": { - "version": "1.1.1", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } }, - "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", "dev": true, + "license": "Apache-2.0", "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" + "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/electron": { - "version": "22.3.15", - "resolved": "https://registry.npmjs.org/electron/-/electron-22.3.15.tgz", - "integrity": "sha512-KhxJkx2tfB8Q1moUI3sI/x48lehTk3wUEwwaKKkfzSKT3m7nK/g1YSYiYe4c8WuqODAcJKhB1MOvRv3WmhBYBw==", + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^16.11.26", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" + "@typescript-eslint/experimental-utils": "^5.0.0" }, "engines": { - "node": ">= 12.20.55" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } } }, - "node_modules/electron-builder": { - "version": "24.5.2", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.5.2.tgz", - "integrity": "sha512-rxlUSSqziRMdTSSzti7It4R7wmuttouMhgTiF0HmoTXvaBKlmHPgkQjaI8ZFIZ0Rg+2TFPlPdMu2BwX3+6HJCg==", + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", "dev": true, + "license": "MIT", "dependencies": { - "app-builder-lib": "24.5.2", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", - "chalk": "^4.1.2", - "dmg-builder": "24.5.2", - "fs-extra": "^10.1.0", - "is-ci": "^3.0.0", - "lazy-val": "^1.0.5", - "read-config-file": "6.3.2", - "simple-update-notifier": "^1.1.0", - "yargs": "^17.6.2" - }, - "bin": { - "electron-builder": "cli.js", - "install-app-deps": "install-app-deps.js" + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/electron-builder/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint-plugin-jsx-expressions": { + "version": "1.3.1", "dev": true, + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "@typescript-eslint/experimental-utils": "^5.5.0", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=8" + "node": "12.x || 14.x || >= 16" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0 || ^5.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/electron-builder/node_modules/builder-util-runtime": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", - "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", + "node_modules/eslint-plugin-no-async-without-await": { + "version": "1.2.0", "dev": true, - "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" - }, + "license": "MIT" + }, + "node_modules/eslint-plugin-no-null": { + "version": "1.0.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=5.0.0" + }, + "peerDependencies": { + "eslint": ">=3.0.0" } }, - "node_modules/electron-builder/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint-plugin-no-unsanitized": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.2.tgz", + "integrity": "sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==", "dev": true, + "peerDependencies": { + "eslint": "^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.32.2", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/electron-builder/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint-plugin-react-hooks-static-deps": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", "dev": true, + "license": "Apache-2.0", "dependencies": { - "color-name": "~1.1.4" + "esutils": "^2.0.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/electron-builder/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/electron-builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=12" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-builder/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint-plugin-simple-import-sort": { + "version": "10.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-teactn": { + "version": "0.1.0-development", + "resolved": "git+ssh://git@github.com/korenskoy/eslint-plugin-teactn.git#c2c39dd005d58c07c24c4361de804dce1c6261b5", + "integrity": "sha512-8Xedzwbkp50WfJUMhstW5ZOc7KKmWbzEyZMPIqTlF2kHnMrMuic6yZ9Q06hM2/AVtGIw48XK2NOXZIM7qMXHIA==", "dev": true, + "license": "ISC", + "dependencies": { + "eslint-plugin-react": "^7.16.0", + "eslint-rule-composer": "^0.3.0" + }, "engines": { - "node": ">=8" + "node": ">=8.0.0" + }, + "peerDependencies": { + "eslint-plugin-react": "^7.16.0" } }, - "node_modules/electron-builder/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.0", "dev": true, + "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "@typescript-eslint/utils": "^5.58.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" } }, - "node_modules/electron-builder/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/eslint-scope": { + "version": "5.1.1", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "has-flag": "^4.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/electron-builder/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">= 10.0.0" + "node": ">=4.0" } }, - "node_modules/electron-context-menu": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-3.6.1.tgz", - "integrity": "sha512-lcpO6tzzKUROeirhzBjdBWNqayEThmdW+2I2s6H6QMrwqTVyT3EK47jW3Nxm60KTxl5/bWfEoIruoUNn57/QkQ==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "electron-dl": "^3.2.1", - "electron-is-dev": "^2.0.0" + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/electron-context-menu/node_modules/ansi-styles": { + "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9071,27 +12010,25 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/electron-context-menu/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/electron-context-menu/node_modules/color-convert": { + "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9099,1266 +12036,1143 @@ "node": ">=7.0.0" } }, - "node_modules/electron-context-menu/node_modules/color-name": { + "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/electron-context-menu/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/electron-context-menu/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-context-menu/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/electron-context-menu/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", "dev": true, + "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" - } - }, - "node_modules/electron-dl": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-3.5.0.tgz", - "integrity": "sha512-Oj+VSuScVx8hEKM2HEvTQswTX6G3MLh7UoAz/oZuvKyNDfudNi1zY6PK/UnFoK1nCl9DF6k+3PFwElKbtZlDig==", - "dev": true, - "dependencies": { - "ext-name": "^5.0.0", - "pupa": "^2.0.1", - "unused-filename": "^2.1.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-is-dev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-2.0.0.tgz", - "integrity": "sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron-publish": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.5.0.tgz", - "integrity": "sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA==", - "dev": true, - "dependencies": { - "@types/fs-extra": "^9.0.11", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", - "chalk": "^4.1.2", - "fs-extra": "^10.1.0", - "lazy-val": "^1.0.5", - "mime": "^2.5.2" - } - }, - "node_modules/electron-publish/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/electron-publish/node_modules/builder-util-runtime": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", - "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=8" } }, - "node_modules/electron-publish/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-publish/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/espree": { + "version": "9.5.2", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "color-name": "~1.1.4" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/electron-publish/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/electron-publish/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/electron-publish/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/esprima": { + "version": "4.0.1", "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/electron-publish/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/esquery": { + "version": "1.5.0", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "universalify": "^2.0.0" + "estraverse": "^5.1.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=0.10" } }, - "node_modules/electron-publish/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/esrecurse": { + "version": "4.3.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "has-flag": "^4.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/electron-publish/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/estraverse": { + "version": "5.3.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">= 10.0.0" + "node": ">=4.0" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.449", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz", - "integrity": "sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==", - "dev": true - }, - "node_modules/electron-updater": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-5.3.0.tgz", - "integrity": "sha512-iKEr7yQBcvnQUPnSDYGSWC9t0eF2YbZWeYYYZzYxdl+HiRejXFENjYMnYjoOm2zxyD6Cr2JTHZhp9pqxiXuCOw==", + "node_modules/esutils": { + "version": "2.0.3", "dev": true, - "dependencies": { - "@types/semver": "^7.3.6", - "builder-util-runtime": "9.1.1", - "fs-extra": "^10.0.0", - "js-yaml": "^4.1.0", - "lazy-val": "^1.0.5", - "lodash.escaperegexp": "^4.1.2", - "lodash.isequal": "^4.5.0", - "semver": "^7.3.5", - "typed-emitter": "^2.1.0" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/electron-updater/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/etag": { + "version": "1.8.1", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" }, "engines": { - "node": ">=12" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/electron-updater/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT" + }, + "node_modules/event-emitter": { + "version": "0.3.5", "dev": true, + "license": "MIT", "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "d": "1", + "es5-ext": "~0.10.14" } }, - "node_modules/electron-updater/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/electron-updater/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/electron-updater/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/exit": { + "version": "0.1.2", "dev": true, "engines": { - "node": ">= 10.0.0" + "node": ">= 0.8.0" } }, - "node_modules/electron-updater/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/electron-window-state": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/electron-window-state/-/electron-window-state-5.0.3.tgz", - "integrity": "sha512-1mNTwCfkolXl3kMf50yW3vE2lZj0y92P/HYWFBrb+v2S/pCka5mdwN3cagKm458A7NjndSwijynXgcLWRodsVg==", + "node_modules/expect": { + "version": "29.5.0", "dev": true, + "license": "MIT", "dependencies": { - "jsonfile": "^4.0.0", - "mkdirp": "^0.5.1" + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { - "node": ">=8.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/electron/node_modules/@types/node": { - "version": "16.18.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.34.tgz", - "integrity": "sha512-VmVm7gXwhkUimRfBwVI1CHhwp86jDWR04B5FGebMMyxV90SlCmFujwUHrxTD4oO+SOYU86SoxvhgeRQJY7iXFg==", - "dev": true - }, - "node_modules/electronmon": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/electronmon/-/electronmon-2.0.2.tgz", - "integrity": "sha512-Yw1CXEp5HJT9P6Sns3UP3Krwm5eb2JKqTRAVczKdsUa+U/dMTgONwKIHkPbKSSmtyTV+5JwobxkhFPiRgegObA==", + "node_modules/express": { + "version": "4.18.2", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^3.0.0", - "import-from": "^3.0.0", - "runtime-required": "^1.1.0", - "watchboy": "^0.4.3" - }, - "bin": { - "electronmon": "bin/cli.js" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.10.0" } }, - "node_modules/electronmon/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/electronmon/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/express/node_modules/bytes": { + "version": "3.1.2", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/electronmon/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.6" } }, - "node_modules/electronmon/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/electronmon/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/electronmon/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/emittery": { - "version": "0.13.1", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } + "license": "MIT" }, - "node_modules/emoji-regex": { - "version": "9.2.2", + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", "dev": true, "license": "MIT" }, - "node_modules/encodeurl": { - "version": "1.0.2", + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" + "node": ">= 0.6" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", "dev": true, "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "0.9.1", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.2.0", - "tapable": "^0.1.8" - }, "engines": { - "node": ">=0.6" + "node": ">= 0.8" } }, - "node_modules/entities": { - "version": "2.2.0", + "node_modules/ext": { + "version": "1.7.0", "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "license": "ISC", + "dependencies": { + "type": "^2.7.2" } }, - "node_modules/env-paths": { - "version": "2.2.1", + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", "dev": true, - "license": "MIT", + "dependencies": { + "mime-db": "^1.28.0" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/envinfo": { - "version": "7.8.1", + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "envinfo": "dist/cli.js" + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/err-code": { - "version": "2.0.3", + "node_modules/ext/node_modules/type": { + "version": "2.7.2", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/error-ex": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, - "node_modules/es-abstract": { - "version": "1.21.2", + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, - "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" }, "engines": { - "node": ">= 0.4" + "node": ">= 10.17.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-module-lexer": { - "version": "1.2.1", + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", "dev": true, - "license": "MIT" + "engines": [ + "node >=0.6.0" + ], + "optional": true }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", + "node_modules/fantasticon": { + "version": "1.2.3", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "change-case": "^4.1.2", + "cli-color": "^2.0.0", + "commander": "^7.2.0", + "glob": "^7.2.0", + "handlebars": "^4.7.7", + "slugify": "^1.6.0", + "svg2ttf": "^6.0.3", + "svgicons2svgfont": "^10.0.3", + "ttf2eot": "^2.0.0", + "ttf2woff": "^3.0.0", + "ttf2woff2": "^4.0.4" + }, + "bin": { + "fantasticon": "bin/fantasticon" }, "engines": { - "node": ">= 0.4" + "node": ">= 10.0.0" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - } + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" }, - "node_modules/es-to-primitive": { - "version": "1.2.1", + "node_modules/fast-glob": { + "version": "3.2.12", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.6.0" } }, - "node_modules/es5-ext": { - "version": "0.10.62", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", "dev": true, - "hasInstallScript": true, "license": "ISC", "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=0.10" + "node": ">= 6" } }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "node_modules/fast-json-patch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", "dev": true, - "optional": true + "license": "MIT" }, - "node_modules/es6-iterator": { - "version": "2.0.3", + "node_modules/fast-levenshtein": { + "version": "2.0.6", "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } + "license": "MIT" }, - "node_modules/es6-symbol": { - "version": "3.1.3", + "node_modules/fast-redact": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz", + "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==", "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "engines": { + "node": ">=6" } }, - "node_modules/es6-weak-map": { - "version": "2.0.3", + "node_modules/fast-url-parser": { + "version": "1.1.3", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "punycode": "^1.3.2" } }, - "node_modules/escalade": { - "version": "3.1.1", + "node_modules/fastest-levenshtein": { + "version": "1.0.16", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 4.9.1" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "node_modules/fastq": { + "version": "1.15.0", "dev": true, - "engines": { - "node": ">=8" + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/faye-websocket": { + "version": "0.11.4", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, "engines": { "node": ">=0.8.0" } }, - "node_modules/eslint": { - "version": "8.41.0", + "node_modules/fb-watchman": { + "version": "2.0.2", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.41.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "bser": "2.1.1" } }, - "node_modules/eslint-config-airbnb": { - "version": "19.0.4", + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, - "license": "MIT", "dependencies": { - "eslint-config-airbnb-base": "^15.0.0", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5" - }, - "engines": { - "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0" + "pend": "~1.2.0" } }, - "node_modules/eslint-config-airbnb-base": { - "version": "15.0.0", + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" + "node": "^12.20 || >= 14.13" } }, - "node_modules/eslint-config-airbnb-typescript": { - "version": "17.0.0", + "node_modules/file-entry-cache": { + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "eslint-config-airbnb-base": "^15.0.0" + "flat-cache": "^3.0.4" }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.13.0", - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3" + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-config-react-app": { - "version": "7.0.1", + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.0" + "minimatch": "^5.0.1" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "balanced-match": "^1.0.0" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/eslint-import-resolver-webpack": { - "version": "0.13.2", + "node_modules/fill-range": { + "version": "7.0.1", "dev": true, "license": "MIT", "dependencies": { - "array-find": "^1.0.0", - "debug": "^3.2.7", - "enhanced-resolve": "^0.9.1", - "find-root": "^1.1.0", - "has": "^1.0.3", - "interpret": "^1.4.0", - "is-core-module": "^2.7.0", - "is-regex": "^1.1.4", - "lodash": "^4.17.21", - "resolve": "^1.20.0", - "semver": "^5.7.1" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "eslint-plugin-import": ">=1.4.0", - "webpack": ">=1.11.0" + "node": ">=8" } }, - "node_modules/eslint-import-resolver-webpack/node_modules/debug": { - "version": "3.2.7", + "node_modules/find-cache-dir": { + "version": "3.3.2", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/eslint-import-resolver-webpack/node_modules/semver": { - "version": "5.7.1", + "node_modules/find-root": { + "version": "1.1.0", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } + "license": "MIT" }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", + "node_modules/find-up": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "debug": "^3.2.7" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", + "node_modules/firefox-profile": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.3.2.tgz", + "integrity": "sha512-/C+Eqa0YgIsQT2p66p7Ygzqe7NlE/GNTbhw2SBCm5V3OsWDPITNdTPEcH2Q2fe7eMpYYNPKdUcuVioZBZiR6kA==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "adm-zip": "~0.5.x", + "fs-extra": "~9.0.1", + "ini": "~2.0.0", + "minimist": "^1.2.5", + "xml2js": "^0.5.0" + }, + "bin": { + "firefox-profile": "lib/cli.js" } }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", + "node_modules/firefox-profile/node_modules/fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" + "node": ">=10" } }, - "node_modules/eslint-plugin-import": { - "version": "2.27.5", + "node_modules/firefox-profile/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/firefox-profile/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/firefox-profile/node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "node": ">= 10.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", + "node_modules/firefox-profile/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", + "node_modules/first-chunk-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz", + "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", + "node_modules/flat-cache": { + "version": "3.0.4", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" }, "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { + "debug": { "optional": true } } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", + "node_modules/for-each": { + "version": "0.3.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "node": "*" } }, - "node_modules/eslint-plugin-jsx-expressions": { - "version": "1.3.1", + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, - "license": "ISC", "dependencies": { - "@typescript-eslint/experimental-utils": "^5.5.0", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "12.x || 14.x || >= 16" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0 || ^5.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/eslint-plugin-no-async-without-await": { - "version": "1.2.0", + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">= 14.17" + } }, - "node_modules/eslint-plugin-no-null": { - "version": "1.0.2", + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", "dev": true, "license": "MIT", "engines": { - "node": ">=5.0.0" - }, - "peerDependencies": { - "eslint": ">=3.0.0" + "node": ">= 0.6" } }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", + "node_modules/fraction.js": { + "version": "4.2.0", "dev": true, "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, "engines": { - "node": ">=4" + "node": "*" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", + "node_modules/fresh": { + "version": "0.5.2", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "node": ">= 0.6" } }, - "node_modules/eslint-plugin-react-hooks-static-deps": { - "version": "1.0.7", + "node_modules/fs-extra": { + "version": "8.1.0", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { + "node_modules/fs-minipass": { "version": "2.1.0", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "esutils": "^2.0.2" + "minipass": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", + "node_modules/fs-monkey": { + "version": "1.0.3", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-simple-import-sort": { - "version": "10.0.0", + "node_modules/functions-have-names": { + "version": "1.2.3", "dev": true, "license": "MIT", - "peerDependencies": { - "eslint": ">=5.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-teactn": { - "version": "0.1.0-development", - "resolved": "git+ssh://git@github.com/korenskoy/eslint-plugin-teactn.git#c2c39dd005d58c07c24c4361de804dce1c6261b5", - "integrity": "sha512-8Xedzwbkp50WfJUMhstW5ZOc7KKmWbzEyZMPIqTlF2kHnMrMuic6yZ9Q06hM2/AVtGIw48XK2NOXZIM7qMXHIA==", + "node_modules/fx-runner": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.3.0.tgz", + "integrity": "sha512-5b37H4GCyhF+Nf8xk9mylXoDq4wb7pbGAXxlCXp/631UTeeZomWSYcEGXumY4wk8g2QAqjPMGdWW+RbNt8PUcA==", "dev": true, - "license": "ISC", "dependencies": { - "eslint-plugin-react": "^7.16.0", - "eslint-rule-composer": "^0.3.0" - }, - "engines": { - "node": ">=8.0.0" + "commander": "2.9.0", + "shell-quote": "1.7.3", + "spawn-sync": "1.0.15", + "when": "3.7.7", + "which": "1.2.4", + "winreg": "0.0.12" }, - "peerDependencies": { - "eslint-plugin-react": "^7.16.0" + "bin": { + "fx-runner": "bin/fx-runner" } }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.11.0", + "node_modules/fx-runner/node_modules/commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^5.58.0" + "graceful-readlink": ">= 1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" + "node": ">= 0.6.x" } }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", + "node_modules/fx-runner/node_modules/isexe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "integrity": "sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==", + "dev": true + }, + "node_modules/fx-runner/node_modules/shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true + }, + "node_modules/fx-runner/node_modules/which": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz", + "integrity": "sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" + "dependencies": { + "is-absolute": "^0.1.7", + "isexe": "^1.1.1" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", + "node_modules/gauge": { + "version": "4.0.4", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "engines": { - "node": ">=8.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", + "node_modules/gauge/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } + "license": "MIT" }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/gauge/node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", + "node_modules/generic-names": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "loader-utils": "^3.2.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6.9.0" + } + }, + "node_modules/geometry-interfaces": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/get-package-type": { + "version": "0.1.0", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=8.0.0" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/get-stream": { + "version": "6.0.1", "dev": true, "license": "MIT", "engines": { @@ -10368,1320 +13182,1327 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", + "node_modules/get-symbol-description": { + "version": "1.0.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, - "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "assert-plus": "^1.0.0" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/git-revision-webpack-plugin": { + "version": "5.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/glob": { + "version": "7.2.3", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/espree": { - "version": "9.5.2", + "node_modules/glob-parent": { + "version": "6.0.2", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "is-glob": "^4.0.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=10.13.0" } }, - "node_modules/esprima": { - "version": "4.0.1", + "node_modules/glob-to-regexp": { + "version": "0.4.1", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } + "license": "BSD-2-Clause" }, - "node_modules/esquery": { - "version": "1.5.0", + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "dev": true, - "license": "BSD-3-Clause", + "optional": true, "dependencies": { - "estraverse": "^5.1.0" + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" }, "engines": { - "node": ">=0.10" + "node": ">=10.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/global-agent/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "BSD-2-Clause", + "optional": true, "dependencies": { - "estraverse": "^5.2.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=4.0" + "node": ">=10" } }, - "node_modules/estraverse": { - "version": "5.3.0", + "node_modules/global-agent/node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "dev": true, - "license": "BSD-2-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, "engines": { - "node": ">=4.0" + "node": ">=8.0" } }, - "node_modules/esutils": { - "version": "2.0.3", + "node_modules/global-agent/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, - "license": "BSD-2-Clause", + "optional": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/etag": { - "version": "1.8.1", + "node_modules/global-agent/node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "license": "MIT", + "optional": true, "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" + "type-fest": "^0.13.1" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "license": "MIT" - }, - "node_modules/event-emitter": { - "version": "0.3.5", + "node_modules/global-agent/node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } + "optional": true }, - "node_modules/eventemitter3": { - "version": "4.0.7", + "node_modules/global-agent/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "license": "MIT", + "optional": true, "engines": { - "node": ">=0.8.x" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa": { - "version": "5.1.1", + "node_modules/global-agent/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "optional": true + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, - "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "ini": "2.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/exit": { - "version": "0.1.2", + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=6" } }, - "node_modules/expect": { - "version": "29.5.0", + "node_modules/global-prefix": { + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/express": { - "version": "4.18.2", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "isexe": "^2.0.0" }, - "engines": { - "node": ">= 0.10.0" + "bin": { + "which": "bin/which" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", + "node_modules/globals": { + "version": "11.12.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", + "node_modules/globalthis": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "define-properties": "^1.1.3" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/bytes": { - "version": "3.1.2", + "node_modules/globby": { + "version": "11.1.0", "dev": true, "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", + "node_modules/globjoin": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">= 0.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.0.0" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", + "node_modules/got/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, - "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "defer-to-connect": "^2.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", "dev": true, "license": "MIT" }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", + "node_modules/graphemer": { + "version": "1.4.0", "dev": true, "license": "MIT" }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", + "dev": true + }, + "node_modules/gzip-size": { + "version": "6.0.0", "dev": true, "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", + "node_modules/handle-thing": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.7", "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">= 0.8" + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/ext": { - "version": "1.7.0", + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dev": true, - "license": "ISC", "dependencies": { - "type": "^2.7.2" + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "node_modules/hard-rejection": { + "version": "2.1.0", "dev": true, - "dependencies": { - "mime-db": "^1.28.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "node_modules/has": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" + "function-bind": "^1.1.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4.0" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", + "node_modules/has-bigints": { + "version": "1.0.2", "dev": true, - "license": "ISC" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "node_modules/has-flag": { + "version": "3.0.0", "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, + "license": "MIT", "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "node": ">=4" } }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/has-property-descriptors": { + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" + "get-intrinsic": "^1.1.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "optional": true - }, - "node_modules/fantasticon": { - "version": "1.2.3", + "node_modules/has-proto": { + "version": "1.0.1", "dev": true, "license": "MIT", - "dependencies": { - "change-case": "^4.1.2", - "cli-color": "^2.0.0", - "commander": "^7.2.0", - "glob": "^7.2.0", - "handlebars": "^4.7.7", - "slugify": "^1.6.0", - "svg2ttf": "^6.0.3", - "svgicons2svgfont": "^10.0.3", - "ttf2eot": "^2.0.0", - "ttf2woff": "^3.0.0", - "ttf2woff2": "^4.0.4" - }, - "bin": { - "fantasticon": "bin/fantasticon" - }, "engines": { - "node": ">= 10.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.12", + "node_modules/has-symbols": { + "version": "1.0.3", "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, "engines": { - "node": ">=8.6.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/has-tostringtag": { + "version": "1.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", + "node_modules/has-unicode": { + "version": "2.0.1", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", + "node_modules/has-yarn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", "dev": true, - "license": "MIT" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/fast-url-parser": { - "version": "1.1.3", + "node_modules/he": { + "version": "1.2.0", "dev": true, "license": "MIT", - "dependencies": { - "punycode": "^1.3.2" + "bin": { + "he": "bin/he" } }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", + "node_modules/header-case": { + "version": "2.0.4", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4.9.1" + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" } }, - "node_modules/fastq": { - "version": "1.15.0", - "dev": true, - "license": "ISC", + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "license": "BSD-3-Clause", "dependencies": { - "reusify": "^1.0.4" + "react-is": "^16.7.0" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "websocket-driver": ">=0.5.1" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=10" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "bser": "2.1.1" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "dependencies": { - "pend": "~1.2.0" - } + "license": "ISC" }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "node_modules/hpack.js": { + "version": "2.1.6", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/file-uri-to-path": { + "node_modules/hpack.js/node_modules/isarray": { "version": "1.0.0", "dev": true, "license": "MIT" }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", "dev": true, + "license": "MIT", "dependencies": { - "minimatch": "^5.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "safe-buffer": "~5.1.0" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/html-entities": { + "version": "2.3.3", "dev": true, + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/fill-range": { - "version": "7.0.1", + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", "dev": true, "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 12" } }, - "node_modules/find-cache-dir": { - "version": "3.3.2", + "node_modules/html-tags": { + "version": "3.3.1", "dev": true, "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-root": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/find-up": { - "version": "5.0.0", + "node_modules/html-webpack-plugin": { + "version": "5.5.1", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" } }, - "node_modules/flat-cache": { - "version": "3.0.4", + "node_modules/html-webpack-plugin/node_modules/tapable": { + "version": "2.2.1", "dev": true, "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=6" } }, - "node_modules/flatted": { - "version": "3.2.7", + "node_modules/htmlparser2": { + "version": "6.1.0", "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.2", "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "type": "github", + "url": "https://github.com/sponsors/fb55" } ], "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "node_modules/for-each": { - "version": "0.3.3", + "node_modules/http-cache-semantics": { + "version": "4.1.1", "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } + "license": "BSD-2-Clause" }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/http-deceiver": { + "version": "1.2.7", "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } + "license": "MIT" }, - "node_modules/forwarded": { - "version": "0.2.0", + "node_modules/http-errors": { + "version": "2.0.0", "dev": true, "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/fraction.js": { - "version": "4.2.0", + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", "dev": true, "license": "MIT", "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" + "node": ">= 0.8" } }, - "node_modules/fresh": { - "version": "0.5.2", + "node_modules/http-parser-js": { + "version": "0.5.8", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "license": "MIT" }, - "node_modules/fs-extra": { - "version": "8.1.0", + "node_modules/http-proxy": { + "version": "1.18.1", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=8.0.0" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", + "node_modules/http-proxy-agent": { + "version": "5.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">= 8" + "node": ">= 6" } }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "dev": true, - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", + "node_modules/http-proxy-middleware": { + "version": "2.0.6", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, - "node_modules/functions-have-names": { - "version": "1.2.3", + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", "dev": true, "license": "MIT", + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gauge": { - "version": "4.0.4", + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, - "license": "ISC", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gauge/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "node_modules/gauge/node_modules/string-width": { - "version": "4.2.3", + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, - "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=10.19.0" } }, - "node_modules/generic-names": { - "version": "4.0.0", + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^3.2.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", + "node_modules/https-proxy-agent": { + "version": "5.0.1", "dev": true, "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">=6.9.0" + "node": ">= 6" } }, - "node_modules/geometry-interfaces": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", + "node_modules/human-signals": { + "version": "2.1.0", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10.17.0" } }, - "node_modules/get-intrinsic": { + "node_modules/humanize-ms": { "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" + "ms": "^2.0.0" } }, - "node_modules/get-stream": { - "version": "6.0.1", + "node_modules/husky": { + "version": "8.0.3", "dev": true, "license": "MIT", + "bin": { + "husky": "lib/bin.js" + }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^8.11.2 || >=10" } }, - "node_modules/git-revision-webpack-plugin": { - "version": "5.0.0", + "node_modules/iconv-corefoundation/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">=8" }, - "peerDependencies": { - "webpack": "^5.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/glob": { - "version": "7.2.3", + "node_modules/iconv-corefoundation/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, - "license": "ISC", + "optional": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" }, "engines": { - "node": "*" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "6.0.2", + "node_modules/iconv-corefoundation/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "ISC", + "optional": true, "dependencies": { - "is-glob": "^4.0.3" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10.13.0" + "node": ">=7.0.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", + "node_modules/iconv-corefoundation/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "BSD-2-Clause" + "optional": true }, - "node_modules/global-agent": { + "node_modules/iconv-corefoundation/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "optional": true + }, + "node_modules/iconv-corefoundation/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, "engines": { - "node": ">=10.0" + "node": ">=8" } }, - "node_modules/global-agent/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/iconv-corefoundation/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "optional": true, "dependencies": { - "yallist": "^4.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/global-agent/node_modules/roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "node_modules/iconv-corefoundation/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "optional": true, "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=8.0" + "node": ">=8" } }, - "node_modules/global-agent/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/iconv-lite": { + "version": "0.4.24", "dev": true, - "optional": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/global-agent/node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "node_modules/icss-utils": { + "version": "5.1.0", "dev": true, - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, + "license": "ISC", "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/global-agent/node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, - "optional": true + "node_modules/idb-keyval": { + "version": "6.2.1", + "license": "Apache-2.0" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/global-agent/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "node_modules/ignore": { + "version": "5.2.4", "dev": true, - "optional": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4" } }, - "node_modules/global-agent/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true - }, - "node_modules/global-modules": { - "version": "2.0.0", + "node_modules/image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", "dev": true, - "license": "MIT", "dependencies": { - "global-prefix": "^3.0.0" + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" }, "engines": { - "node": ">=6" + "node": ">=14.0.0" } }, - "node_modules/global-prefix": { - "version": "3.0.0", + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/immutable": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", "dev": true, "license": "MIT", "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", + "node_modules/import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", "dev": true, - "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "resolve-from": "^5.0.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=8" } }, - "node_modules/globals": { - "version": "11.12.0", + "node_modules/import-from/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/globalthis": { - "version": "1.0.3", + "node_modules/import-lazy": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/globby": { - "version": "11.1.0", + "node_modules/import-local": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globjoin": { + "node_modules/imurmurhash": { "version": "0.1.4", "dev": true, - "license": "MIT" - }, - "node_modules/gopd": { - "version": "1.0.1", - "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.8.19" } }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "node_modules/indent-string": { + "version": "4.0.0", "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": ">=8" } }, - "node_modules/got/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", "dev": true, + "license": "ISC", "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", + "node_modules/inherits": { + "version": "2.0.4", "dev": true, "license": "ISC" }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/graphemer": { - "version": "1.4.0", + "node_modules/ini": { + "version": "1.3.8", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/gzip-size": { - "version": "6.0.0", + "node_modules/internal-slot": { + "version": "1.0.5", "dev": true, "license": "MIT", "dependencies": { - "duplexer": "^0.1.2" + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "dev": true, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" } }, - "node_modules/handle-thing": { - "version": "2.0.1", + "node_modules/ipaddr.js": { + "version": "1.9.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.10" + } }, - "node_modules/handlebars": { - "version": "4.7.7", + "node_modules/is-absolute": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "integrity": "sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==", "dev": true, - "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "is-relative": "^0.1.0" }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": ">=0.10.0" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", + "node_modules/is-arguments": { + "version": "1.1.1", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has": { - "version": "1.0.3", + "node_modules/is-array-buffer": { + "version": "3.0.2", "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, - "engines": { - "node": ">= 0.4.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-bigints": { - "version": "1.0.2", + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", "dev": true, "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "3.0.0", + "node_modules/is-binary-path": { + "version": "2.1.0", "dev": true, "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", + "node_modules/is-boolean-object": { + "version": "1.1.2", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.1", + "node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.7", "dev": true, "license": "MIT", "engines": { @@ -11691,23 +14512,35 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", + "node_modules/is-date-object": { + "version": "1.0.5", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11716,295 +14549,311 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/he": { - "version": "1.2.0", + "node_modules/is-docker": { + "version": "2.2.1", "dev": true, "license": "MIT", "bin": { - "he": "bin/he" + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/header-case": { - "version": "2.0.4", + "node_modules/is-extglob": { + "version": "2.1.1", "dev": true, "license": "MIT", - "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" + "node_modules/is-generator-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", + "node_modules/is-glob": { + "version": "4.0.3", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/hpack.js": { - "version": "2.1.6", + "node_modules/is-interactive": { + "version": "1.0.0", "dev": true, "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "engines": { + "node": ">=8" } }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", + "node_modules/is-lambda": { + "version": "1.0.1", "dev": true, "license": "MIT" }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", + "node_modules/is-map": { + "version": "2.0.2", "dev": true, "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { + "node_modules/is-mergeable-object": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz", + "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-entities": { - "version": "2.3.3", + "node_modules/is-npm": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", + "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", "dev": true, - "license": "MIT" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/html-escaper": { - "version": "2.0.2", + "node_modules/is-number": { + "version": "7.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", + "node_modules/is-number-object": { + "version": "1.0.7", "dev": true, "license": "MIT", "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" + "has-tostringtag": "^1.0.0" }, - "bin": { - "html-minifier-terser": "cli.js" + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", + "node_modules/is-path-inside": { + "version": "3.0.3", "dev": true, "license": "MIT", "engines": { - "node": ">= 12" + "node": ">=8" } }, - "node_modules/html-tags": { - "version": "3.3.1", + "node_modules/is-plain-obj": { + "version": "1.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-port-reachable": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/html-webpack-plugin": { - "version": "5.5.1", + "node_modules/is-promise": { + "version": "2.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.1.4", "dev": true, "license": "MIT", "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/html-webpack-plugin/node_modules/tapable": { - "version": "2.2.1", + "node_modules/is-relative": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", + "integrity": "sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/htmlparser2": { - "version": "6.1.0", + "node_modules/is-set": { + "version": "2.0.2", "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">= 0.8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-errors/node_modules/statuses": { + "node_modules/is-stream": { "version": "2.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "dev": true, - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", + "node_modules/is-string": { + "version": "1.0.7", "dev": true, "license": "MIT", "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", + "node_modules/is-symbol": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", + "node_modules/is-typed-array": { + "version": "1.1.10", "dev": true, "license": "MIT", "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", "dev": true, "license": "MIT", "engines": { @@ -12014,866 +14863,933 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=10.19.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http2-wrapper/node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "node_modules/is-weakset": { + "version": "2.0.2", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", + "node_modules/is-wsl": { + "version": "2.2.0", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "is-docker": "^2.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/human-signals": { - "version": "2.1.0", + "node_modules/is-yarn-global": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", + "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=10.17.0" + "node": ">=12" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", + "node_modules/isarray": { + "version": "2.0.5", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } + "license": "MIT" }, - "node_modules/husky": { - "version": "8.0.3", + "node_modules/isbinaryfile": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz", + "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==", "dev": true, - "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, "engines": { - "node": ">=14" + "node": ">= 14.0.0" }, "funding": { - "url": "https://github.com/sponsors/typicode" + "url": "https://github.com/sponsors/gjtorikian/" } }, - "node_modules/iconv-corefoundation": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", - "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "node_modules/isexe": { + "version": "2.0.0", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "cli-truncate": "^2.1.0", - "node-addon-api": "^1.6.3" - }, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", "engines": { - "node": "^8.11.2 || >=10" + "node": ">=0.10.0" } }, - "node_modules/iconv-corefoundation/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "optional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/iconv-corefoundation/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", "dev": true, - "optional": true, + "license": "BSD-3-Clause", "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/iconv-corefoundation/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/istanbul-lib-report": { + "version": "3.0.0", "dev": true, - "optional": true, + "license": "BSD-3-Clause", "dependencies": { - "color-name": "~1.1.4" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/iconv-corefoundation/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "optional": true - }, - "node_modules/iconv-corefoundation/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "optional": true - }, - "node_modules/iconv-corefoundation/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "optional": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/iconv-corefoundation/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", "dev": true, - "optional": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/iconv-corefoundation/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", "dev": true, - "optional": true, + "license": "BSD-3-Clause", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", + "node_modules/istanbul-reports": { + "version": "3.1.5", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/icss-utils": { - "version": "5.1.0", + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/idb-keyval": { - "version": "6.2.1", - "license": "Apache-2.0" - }, - "node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", - "dev": true, - "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=10" } }, - "node_modules/immutable": { + "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "resolve-from": "^5.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/import-from/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/import-lazy": { + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jake/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/import-local": { - "version": "3.1.0", + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } + "node_modules/jed": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", + "integrity": "sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==", + "dev": true }, - "node_modules/indent-string": { - "version": "4.0.0", + "node_modules/jest": { + "version": "29.5.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@jest/core": "^29.5.0", + "@jest/types": "^29.5.0", + "import-local": "^3.0.2", + "jest-cli": "^29.5.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "dev": true, - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.0.5", + "node_modules/jest-changed-files": { + "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "execa": "^5.0.0", + "p-limit": "^3.1.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/interpret": { - "version": "1.4.0", + "node_modules/jest-circus": { + "version": "29.5.0", "dev": true, "license": "MIT", + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.5.0", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.5.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, "engines": { - "node": ">= 0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 0.10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-arguments": { - "version": "1.1.1", + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/is-bigint": { - "version": "1.0.4", + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", + "node_modules/jest-cli": { + "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@jest/core": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT" - }, - "node_modules/is-callable": { - "version": "1.2.7", + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "ci-info": "^3.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-core-module": { - "version": "2.12.1", + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "has": "^1.0.3" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-docker": { - "version": "2.2.1", + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", + "node_modules/jest-config": { + "version": "29.5.0", "dev": true, "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.0" } }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=8" } }, - "node_modules/is-interactive": { - "version": "1.0.0", + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-map": { - "version": "2.0.2", + "node_modules/jest-diff": { + "version": "29.5.0", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-number": { - "version": "7.0.0", + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-number-object": { - "version": "1.0.7", + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", + "node_modules/jest-docblock": { + "version": "29.4.3", "dev": true, "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-port-reachable": { - "version": "4.0.0", + "node_modules/jest-each": { + "version": "29.5.0", "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "@jest/types": "^29.5.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.5.0", + "pretty-format": "^29.5.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-promise": { - "version": "2.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.1.4", + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-set": { - "version": "2.0.2", + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/is-stream": { - "version": "2.0.1", + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.0.7", + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-symbol": { - "version": "1.0.4", + "node_modules/jest-environment-node": { + "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.10", + "node_modules/jest-get-type": { + "version": "29.4.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "@jest/types": "^29.5.0", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", + "node_modules/jest-haste-map/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/is-weakmap": { - "version": "2.0.1", + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "29.5.0", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@types/node": "*", + "jest-util": "^29.5.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-weakref": { - "version": "1.0.2", + "node_modules/jest-haste-map/node_modules/supports-color": { + "version": "8.1.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/is-weakset": { - "version": "2.0.2", + "node_modules/jest-leak-detector": { + "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", + "node_modules/jest-matcher-utils": { + "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/isbinaryfile": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz", - "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==", + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 14.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/gjtorikian/" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { "version": "4.0.0", "dev": true, "license": "MIT", @@ -12881,7 +15797,7 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { + "node_modules/jest-matcher-utils/node_modules/supports-color": { "version": "7.2.0", "dev": true, "license": "MIT", @@ -12892,54 +15808,29 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "node_modules/jest-message-util": { + "version": "29.5.0", "dev": true, + "license": "MIT", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jake/node_modules/ansi-styles": { + "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12950,11 +15841,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jake/node_modules/chalk": { + "node_modules/jest-message-util/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12966,11 +15856,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jake/node_modules/color-convert": { + "node_modules/jest-message-util/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12978,26 +15867,23 @@ "node": ">=7.0.0" } }, - "node_modules/jake/node_modules/color-name": { + "node_modules/jest-message-util/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jake/node_modules/has-flag": { + "node_modules/jest-message-util/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jake/node_modules/supports-color": { + "node_modules/jest-message-util/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13005,74 +15891,80 @@ "node": ">=8" } }, - "node_modules/jest": { + "node_modules/jest-mock": { "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "^29.5.0", "@jest/types": "^29.5.0", - "import-local": "^3.0.2", - "jest-cli": "^29.5.0" - }, - "bin": { - "jest": "bin/jest.js" + "@types/node": "*", + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "jest-resolve": "*" }, "peerDependenciesMeta": { - "node-notifier": { + "jest-resolve": { "optional": true } } }, - "node_modules/jest-changed-files": { + "node_modules/jest-raw-loader": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-regex-util": { + "version": "29.4.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus": { + "node_modules/jest-resolve-dependencies": { "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { + "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, "license": "MIT", @@ -13086,7 +15978,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-circus/node_modules/chalk": { + "node_modules/jest-resolve/node_modules/chalk": { "version": "4.1.2", "dev": true, "license": "MIT", @@ -13101,7 +15993,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-circus/node_modules/color-convert": { + "node_modules/jest-resolve/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -13112,12 +16004,12 @@ "node": ">=7.0.0" } }, - "node_modules/jest-circus/node_modules/color-name": { + "node_modules/jest-resolve/node_modules/color-name": { "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/jest-circus/node_modules/has-flag": { + "node_modules/jest-resolve/node_modules/has-flag": { "version": "4.0.0", "dev": true, "license": "MIT", @@ -13125,7 +16017,7 @@ "node": ">=8" } }, - "node_modules/jest-circus/node_modules/supports-color": { + "node_modules/jest-resolve/node_modules/supports-color": { "version": "7.2.0", "dev": true, "license": "MIT", @@ -13136,40 +16028,38 @@ "node": ">=8" } }, - "node_modules/jest-cli": { + "node_modules/jest-runner": { "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "^29.5.0", + "@jest/console": "^29.5.0", + "@jest/environment": "^29.5.0", "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", "@jest/types": "^29.5.0", + "@types/node": "*", "chalk": "^4.0.0", - "exit": "^0.1.2", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-leak-detector": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-resolve": "^29.5.0", + "jest-runtime": "^29.5.0", "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" + "jest-watcher": "^29.5.0", + "jest-worker": "^29.5.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } } }, - "node_modules/jest-cli/node_modules/ansi-styles": { + "node_modules/jest-runner/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, "license": "MIT", @@ -13183,7 +16073,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-cli/node_modules/chalk": { + "node_modules/jest-runner/node_modules/chalk": { "version": "4.1.2", "dev": true, "license": "MIT", @@ -13198,7 +16088,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-cli/node_modules/color-convert": { + "node_modules/jest-runner/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -13209,12 +16099,12 @@ "node": ">=7.0.0" } }, - "node_modules/jest-cli/node_modules/color-name": { + "node_modules/jest-runner/node_modules/color-name": { "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/jest-cli/node_modules/has-flag": { + "node_modules/jest-runner/node_modules/has-flag": { "version": "4.0.0", "dev": true, "license": "MIT", @@ -13222,7 +16112,35 @@ "node": ">=8" } }, - "node_modules/jest-cli/node_modules/supports-color": { + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "29.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.5.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { "version": "7.2.0", "dev": true, "license": "MIT", @@ -13233,51 +16151,39 @@ "node": ">=8" } }, - "node_modules/jest-config": { + "node_modules/jest-runtime": { "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/globals": "^29.5.0", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", "@jest/types": "^29.5.0", - "babel-jest": "^29.5.0", + "@types/node": "*", "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", "jest-regex-util": "^29.4.3", "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", + "jest-snapshot": "^29.5.0", "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "strip-bom": "^4.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } } }, - "node_modules/jest-config/node_modules/ansi-styles": { + "node_modules/jest-runtime/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, "license": "MIT", @@ -13291,7 +16197,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-config/node_modules/chalk": { + "node_modules/jest-runtime/node_modules/chalk": { "version": "4.1.2", "dev": true, "license": "MIT", @@ -13306,7 +16212,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-config/node_modules/color-convert": { + "node_modules/jest-runtime/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -13317,12 +16223,12 @@ "node": ">=7.0.0" } }, - "node_modules/jest-config/node_modules/color-name": { + "node_modules/jest-runtime/node_modules/color-name": { "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/jest-config/node_modules/has-flag": { + "node_modules/jest-runtime/node_modules/has-flag": { "version": "4.0.0", "dev": true, "license": "MIT", @@ -13330,7 +16236,7 @@ "node": ">=8" } }, - "node_modules/jest-config/node_modules/supports-color": { + "node_modules/jest-runtime/node_modules/supports-color": { "version": "7.2.0", "dev": true, "license": "MIT", @@ -13341,21 +16247,40 @@ "node": ">=8" } }, - "node_modules/jest-diff": { + "node_modules/jest-snapshot": { "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", + "expect": "^29.5.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.5.0", + "semver": "^7.3.5" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { + "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, "license": "MIT", @@ -13369,7 +16294,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-diff/node_modules/chalk": { + "node_modules/jest-snapshot/node_modules/chalk": { "version": "4.1.2", "dev": true, "license": "MIT", @@ -13384,7 +16309,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-diff/node_modules/color-convert": { + "node_modules/jest-snapshot/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -13395,12 +16320,12 @@ "node": ">=7.0.0" } }, - "node_modules/jest-diff/node_modules/color-name": { + "node_modules/jest-snapshot/node_modules/color-name": { "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/jest-diff/node_modules/has-flag": { + "node_modules/jest-snapshot/node_modules/has-flag": { "version": "4.0.0", "dev": true, "license": "MIT", @@ -13408,44 +16333,65 @@ "node": ">=8" } }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/jest-docblock": { - "version": "29.4.3", + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "detect-newline": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-each": { + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/jest-util": { "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.5.0", + "@types/node": "*", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/node_modules/ansi-styles": { + "node_modules/jest-util/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, "license": "MIT", @@ -13459,7 +16405,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/chalk": { + "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", "dev": true, "license": "MIT", @@ -13474,7 +16420,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-each/node_modules/color-convert": { + "node_modules/jest-util/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -13485,12 +16431,12 @@ "node": ">=7.0.0" } }, - "node_modules/jest-each/node_modules/color-name": { + "node_modules/jest-util/node_modules/color-name": { "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/jest-each/node_modules/has-flag": { + "node_modules/jest-util/node_modules/has-flag": { "version": "4.0.0", "dev": true, "license": "MIT", @@ -13498,7 +16444,7 @@ "node": ">=8" } }, - "node_modules/jest-each/node_modules/supports-color": { + "node_modules/jest-util/node_modules/supports-color": { "version": "7.2.0", "dev": true, "license": "MIT", @@ -13509,131 +16455,48 @@ "node": ">=8" } }, - "node_modules/jest-environment-node": { + "node_modules/jest-validate": { "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.5.0", + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.5.0", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "color-convert": "^2.0.1" }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-haste-map/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", "engines": { "node": ">=8" - } - }, - "node_modules/jest-haste-map/node_modules/jest-worker": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.5.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { + "node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", "dev": true, "license": "MIT", @@ -13648,7 +16511,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { + "node_modules/jest-validate/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -13659,12 +16522,12 @@ "node": ">=7.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/color-name": { + "node_modules/jest-validate/node_modules/color-name": { "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { + "node_modules/jest-validate/node_modules/has-flag": { "version": "4.0.0", "dev": true, "license": "MIT", @@ -13672,7 +16535,7 @@ "node": ">=8" } }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { + "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", "dev": true, "license": "MIT", @@ -13683,26 +16546,25 @@ "node": ">=8" } }, - "node_modules/jest-message-util": { + "node_modules/jest-watcher": { "version": "29.5.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", + "@jest/test-result": "^29.5.0", "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "emittery": "^0.13.1", + "jest-util": "^29.5.0", + "string-length": "^4.0.1" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { + "node_modules/jest-watcher/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, "license": "MIT", @@ -13716,7 +16578,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-message-util/node_modules/chalk": { + "node_modules/jest-watcher/node_modules/chalk": { "version": "4.1.2", "dev": true, "license": "MIT", @@ -13731,7 +16593,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-message-util/node_modules/color-convert": { + "node_modules/jest-watcher/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -13742,12 +16604,12 @@ "node": ">=7.0.0" } }, - "node_modules/jest-message-util/node_modules/color-name": { + "node_modules/jest-watcher/node_modules/color-name": { "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/jest-message-util/node_modules/has-flag": { + "node_modules/jest-watcher/node_modules/has-flag": { "version": "4.0.0", "dev": true, "license": "MIT", @@ -13755,7 +16617,7 @@ "node": ">=8" } }, - "node_modules/jest-message-util/node_modules/supports-color": { + "node_modules/jest-watcher/node_modules/supports-color": { "version": "7.2.0", "dev": true, "license": "MIT", @@ -13766,680 +16628,717 @@ "node": ">=8" } }, - "node_modules/jest-mock": { - "version": "29.5.0", + "node_modules/jest-worker": { + "version": "27.5.1", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.5.0", "@types/node": "*", - "jest-util": "^29.5.0" + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10.13.0" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "node": ">=8" } }, - "node_modules/jest-raw-loader": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-resolve": { - "version": "29.5.0", + "node_modules/jiti": { + "version": "1.18.2", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "jiti": "bin/jiti.js" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.5.0", + "node_modules/jora": { + "version": "1.0.0-beta.7", + "resolved": "https://registry.npmjs.org/jora/-/jora-1.0.0-beta.7.tgz", + "integrity": "sha512-7Mq37XUPQM/fEetH8Z4iHTABWgoq64UL9mIRfssX1b0Ogns3TqbOS0UIV7gwQ3D0RshfLJzGgbbW17UyFjxSLQ==", "dev": true, - "license": "MIT", "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" + "@discoveryjs/natural-compare": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^10.12.0 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/jose": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.13.1.tgz", + "integrity": "sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-sdsl": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz", + "integrity": "sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-merge-patch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-1.0.2.tgz", + "integrity": "sha512-M6Vp2GN9L7cfuMXiWOmHj9bEFbeC250iVtcKQbqVgEsDVYnIsrNsbU+h/Y/PkbBQCtEa4Bez+Ebv0zfbC8ObLg==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "fast-deep-equal": "^3.1.3" } }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", "dev": true, "license": "MIT" }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/jest-runner": { - "version": "29.5.0", + "node_modules/jsonfile": { + "version": "4.0.0", "dev": true, "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "dev": true, "dependencies": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12", + "npm": ">=6" } }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/jsonwebtoken/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10" } }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/jsonwebtoken/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.6.0" } }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "node_modules/jsprim/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/jsprim/node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "engines": [ + "node >=0.6.0" + ] }, - "node_modules/jest-runner/node_modules/jest-worker": { - "version": "29.5.0", + "node_modules/jsprim/node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, - "license": "MIT", + "engines": [ + "node >=0.6.0" + ], "dependencies": { - "@types/node": "*", - "jest-util": "^29.5.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/jssha": { + "version": "3.2.0", + "license": "BSD-3-Clause", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/jest-runner/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", + "node_modules/jsx-ast-utils": { + "version": "3.3.3", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=4.0" } }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" } }, - "node_modules/jest-runtime": { - "version": "29.5.0", + "node_modules/jszip/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/jszip/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, + "safe-buffer": "~5.1.0" + } + }, + "node_modules/junk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", + "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=12.20" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" } }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", "dev": true, - "license": "MIT" + "dependencies": { + "json-buffer": "3.0.1" + } }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/kind-of": { + "version": "6.0.3", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/kleur": { + "version": "3.0.3", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/jest-snapshot": { - "version": "29.5.0", + "node_modules/klona": { + "version": "2.0.6", "dev": true, "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/known-css-properties": { + "version": "0.26.0", + "dev": true, + "license": "MIT" + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.5", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "language-subtag-registry": "~0.3.2" } }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "package-json": "^8.1.0" }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/launch-editor": { + "version": "2.6.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" } }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "invert-kv": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/leven": { + "version": "3.1.0", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/levn": { + "version": "0.4.1", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, - "license": "ISC" + "dependencies": { + "immediate": "~3.0.5" + } }, - "node_modules/jest-util": { - "version": "29.5.0", + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "debug": "^2.6.9", + "marky": "^1.2.2" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "ms": "2.0.0" } }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/lilconfig": { + "version": "2.1.0", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "13.2.2", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "chalk": "5.2.0", + "cli-truncate": "^3.1.0", + "commander": "^10.0.0", + "debug": "^4.3.4", + "execa": "^7.0.0", + "lilconfig": "2.1.0", + "listr2": "^5.0.7", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.3", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.2.2" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": ">=7.0.0" + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" } }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.2.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/lint-staged/node_modules/commander": { + "version": "10.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/lint-staged/node_modules/execa": { + "version": "7.1.1", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=8" + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/jest-validate": { - "version": "29.5.0", + "node_modules/lint-staged/node_modules/human-signals": { + "version": "4.3.1", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.5.0" - }, + "license": "Apache-2.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14.18.0" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-validate/node_modules/has-flag": { + "node_modules/lint-staged/node_modules/path-key": { "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.3.1", + "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/jest-watcher": { - "version": "29.5.0", + "node_modules/listr2": { + "version": "5.0.8", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" + "cli-truncate": "^2.1.0", + "colorette": "^2.0.19", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.8.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { + "node_modules/listr2/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, "license": "MIT", @@ -14453,22 +17352,22 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-watcher/node_modules/color-convert": { + "node_modules/listr2/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -14479,575 +17378,600 @@ "node": ">=7.0.0" } }, - "node_modules/jest-watcher/node_modules/color-name": { + "node_modules/listr2/node_modules/color-name": { "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/listr2/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/listr2/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/jest-worker": { - "version": "27.5.1", + "node_modules/listr2/node_modules/rxjs": { + "version": "7.8.1", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" + "tslib": "^2.1.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", + "node_modules/listr2/node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=8" } }, - "node_modules/jiti": { - "version": "1.18.2", + "node_modules/loader-runner": { + "version": "4.3.0", "dev": true, "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/jora": { - "version": "1.0.0-beta.7", - "resolved": "https://registry.npmjs.org/jora/-/jora-1.0.0-beta.7.tgz", - "integrity": "sha512-7Mq37XUPQM/fEetH8Z4iHTABWgoq64UL9mIRfssX1b0Ogns3TqbOS0UIV7gwQ3D0RshfLJzGgbbW17UyFjxSLQ==", - "dev": true, - "dependencies": { - "@discoveryjs/natural-compare": "^1.0.0" - }, "engines": { - "node": "^10.12.0 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">=6.11.5" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/loader-utils": { + "version": "3.2.1", "dev": true, "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 12.13.0" } }, - "node_modules/jsesc": { - "version": "2.5.2", + "node_modules/locate-path": { + "version": "6.0.0", "dev": true, "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "p-locate": "^5.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", + "node_modules/lodash.camelcase": { + "version": "4.3.0", "dev": true, "license": "MIT" }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", + "node_modules/lodash.debounce": { + "version": "4.0.8", "dev": true, "license": "MIT" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "dev": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", "dev": true, "license": "MIT" }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "node_modules/lodash.merge": { + "version": "4.6.2", "dev": true, - "optional": true + "license": "MIT" }, - "node_modules/json5": { - "version": "2.2.3", + "node_modules/lodash.truncate": { + "version": "4.4.2", "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/jsonfile": { - "version": "4.0.0", + "node_modules/lodash.uniq": { + "version": "4.5.0", "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "license": "MIT" }, - "node_modules/jssha": { - "version": "3.2.0", - "license": "BSD-3-Clause", + "node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, "engines": { - "node": ">=4.0" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, - "dependencies": { - "json-buffer": "3.0.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/kind-of": { - "version": "6.0.3", + "node_modules/log-update": { + "version": "4.0.0", "dev": true, "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/kleur": { - "version": "3.0.3", + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/klona": { - "version": "2.0.6", + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">= 8" + "node": ">=7.0.0" } }, - "node_modules/known-css-properties": { - "version": "0.26.0", + "node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", + "node_modules/log-update/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "license": "CC0-1.0" + "license": "MIT" }, - "node_modules/language-tags": { - "version": "1.0.5", + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "language-subtag-registry": "~0.3.2" + "engines": { + "node": ">=8" } }, - "node_modules/launch-editor": { - "version": "2.6.0", + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/lazy-val": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", - "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", - "dev": true - }, - "node_modules/leven": { - "version": "3.1.0", + "node_modules/log-update/node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/levn": { - "version": "0.4.1", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "dev": true, + "node_modules/loose-envify": { + "version": "1.4.0", "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged": { - "version": "13.2.2", + "node_modules/lower-case": { + "version": "2.0.2", "dev": true, "license": "MIT", "dependencies": { - "chalk": "5.2.0", - "cli-truncate": "^3.1.0", - "commander": "^10.0.0", - "debug": "^4.3.4", - "execa": "^7.0.0", - "lilconfig": "2.1.0", - "listr2": "^5.0.7", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.3", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.2.2" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.2.0", + "node_modules/lru-cache": { + "version": "5.1.1", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" } }, - "node_modules/lint-staged/node_modules/commander": { - "version": "10.0.1", + "node_modules/lru-queue": { + "version": "0.1.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=14" + "dependencies": { + "es5-ext": "~0.10.2" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "7.1.1", + "node_modules/make-dir": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "semver": "^6.0.0" }, "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "4.3.1", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", "dev": true, - "license": "Apache-2.0", + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, "engines": { - "node": ">=14.18.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", + "node_modules/make-fetch-happen/node_modules/@npmcli/move-file": { + "version": "2.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", + "node_modules/make-fetch-happen/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "balanced-match": "^1.0.0" } }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "mimic-fn": "^4.0.0" + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/yaml": { - "version": "2.3.1", + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", "dev": true, "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">= 14" + "node": ">=10" } }, - "node_modules/listr2": { - "version": "5.0.8", + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", "dev": true, "license": "MIT", - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.19", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.8.0", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/make-fetch-happen/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10" } }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "minipass": "^3.1.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/listr2/node_modules/color-convert": { + "node_modules/make-fetch-happen/node_modules/unique-filename": { "version": "2.0.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "unique-slug": "^3.0.0" }, "engines": { - "node": ">=7.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/listr2/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/is-fullwidth-code-point": { + "node_modules/make-fetch-happen/node_modules/unique-slug": { "version": "3.0.0", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/listr2/node_modules/rxjs": { - "version": "7.8.1", + "node_modules/make-fetch-happen/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } + "license": "ISC" }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", + "node_modules/makeerror": { + "version": "1.0.12", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" + "tmpl": "1.0.5" } }, - "node_modules/listr2/node_modules/string-width": { - "version": "4.2.3", + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, - "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "p-defer": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/loader-runner": { + "node_modules/map-obj": { "version": "4.3.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6.11.5" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/loader-utils": { - "version": "3.2.1", + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "dev": true + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, - "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, "engines": { - "node": ">= 12.13.0" + "node": ">=10" } }, - "node_modules/locate-path": { - "version": "6.0.0", + "node_modules/matcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, + "optional": true, "engines": { "node": ">=10" }, @@ -15055,68 +17979,104 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.21", + "node_modules/mathml-tag-names": { + "version": "2.1.3", "dev": true, - "license": "MIT" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", + "node_modules/md5": { + "version": "2.3.0", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } }, - "node_modules/lodash.debounce": { - "version": "4.0.8", + "node_modules/mdn-data": { + "version": "2.0.14", "dev": true, - "license": "MIT" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "dev": true + "license": "CC0-1.0" }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/lodash.memoize": { - "version": "4.1.2", + "node_modules/mem": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", + "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", "dev": true, - "license": "MIT" + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^2.1.0", + "p-is-promise": "^2.1.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/lodash.merge": { - "version": "4.6.2", + "node_modules/memfs": { + "version": "3.5.1", "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", "license": "MIT" }, - "node_modules/lodash.truncate": { - "version": "4.4.2", + "node_modules/memoizee": { + "version": "0.4.15", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } }, - "node_modules/lodash.uniq": { - "version": "4.5.0", + "node_modules/memory-fs": { + "version": "0.2.0", "dev": true, "license": "MIT" }, - "node_modules/log-update": { - "version": "4.0.0", + "node_modules/meow": { + "version": "9.0.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { "node": ">=10" @@ -15125,1392 +18085,1530 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/merge-descriptors": { + "version": "1.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } + "license": "MIT" }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", + "node_modules/merge-stream": { + "version": "2.0.0", "dev": true, "license": "MIT" }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "8.0.0", + "node_modules/merge2": { + "version": "1.4.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 8" + } }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/methods": { + "version": "1.1.2", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", + "node_modules/microbuffer": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.5", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=8.6" } }, - "node_modules/log-update/node_modules/string-width": { - "version": "4.2.3", + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", + "node_modules/mime-db": { + "version": "1.52.0", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/loose-envify": { - "version": "1.4.0", + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "mime-db": "1.52.0" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">= 0.6" } }, - "node_modules/lower-case": { - "version": "2.0.2", + "node_modules/mimic-fn": { + "version": "2.1.0", "dev": true, "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/lru-cache": { - "version": "5.1.1", + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" + "engines": { + "node": ">=4" } }, - "node_modules/lru-queue": { - "version": "0.1.0", + "node_modules/min-indent": { + "version": "1.0.1", "dev": true, "license": "MIT", - "dependencies": { - "es5-ext": "~0.10.2" + "engines": { + "node": ">=4" } }, - "node_modules/make-dir": { - "version": "3.1.0", + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", "dev": true, "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "schema-utils": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", "dev": true, "license": "ISC", "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "*" } }, - "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { - "version": "2.1.2", + "node_modules/minimist": { + "version": "1.2.8", "dev": true, - "license": "ISC", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 6" } }, - "node_modules/make-fetch-happen/node_modules/@npmcli/move-file": { - "version": "2.0.1", + "node_modules/minipass": { + "version": "3.1.6", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "yallist": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/make-fetch-happen/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/minipass-collect": { + "version": "1.0.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "balanced-match": "^1.0.0" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "16.1.3", + "node_modules/minipass-fetch": { + "version": "2.1.2", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/make-fetch-happen/node_modules/glob": { - "version": "8.1.0", + "node_modules/minipass-flush": { + "version": "1.0.5", "dev": true, "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 8" } }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", + "node_modules/minipass-pipeline": { + "version": "1.2.4", "dev": true, "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/make-fetch-happen/node_modules/minimatch": { - "version": "5.1.6", + "node_modules/minipass-sized": { + "version": "1.0.3", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "minipass": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/make-fetch-happen/node_modules/mkdirp": { - "version": "1.0.4", + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">= 8" } }, - "node_modules/make-fetch-happen/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "minimist": "^1.2.6" }, "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "mkdirp": "bin/cmd.js" } }, - "node_modules/make-fetch-happen/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/modify-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", + "integrity": "sha512-EickqnKq3kVVaZisYuCxhtKbZjInCuwgwZWyAmRIp1NTMhri7r3380/uqwrUHfaDiPzLVTuoNy4whX66bxPVog==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "9.0.1", + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, + "optional": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "*" } }, - "node_modules/make-fetch-happen/node_modules/unique-filename": { - "version": "2.0.1", + "node_modules/mrmime": { + "version": "1.0.1", "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" } }, - "node_modules/make-fetch-happen/node_modules/unique-slug": { - "version": "3.0.0", + "node_modules/ms": { + "version": "2.1.2", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "dev": true, + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "bin": { + "multicast-dns": "cli.js" } }, - "node_modules/make-fetch-happen/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", + "node_modules/multimatch": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-6.0.0.tgz", + "integrity": "sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "tmpl": "1.0.5" + "@types/minimatch": "^3.0.5", + "array-differ": "^4.0.0", + "array-union": "^3.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/map-obj": { - "version": "4.3.0", + "node_modules/multimatch/node_modules/array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", "dev": true, "optional": true, "dependencies": { - "escape-string-regexp": "^4.0.0" + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" }, "engines": { - "node": ">=10" + "node": ">=0.8.0" } }, - "node_modules/matcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", "dev": true, "optional": true, - "engines": { - "node": ">=10" + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "*" } }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "optional": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" } }, - "node_modules/md5": { - "version": "2.3.0", + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, - "node_modules/mdn-data": { - "version": "2.0.14", + "node_modules/nan": { + "version": "2.17.0", "dev": true, - "license": "CC0-1.0" + "license": "MIT" }, - "node_modules/media-typer": { - "version": "0.3.0", + "node_modules/nanoid": { + "version": "3.3.6", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/memfs": { - "version": "3.5.1", + "node_modules/natural-compare": { + "version": "1.4.0", "dev": true, - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } + "license": "MIT" }, - "node_modules/memoize-one": { - "version": "6.0.0", + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "dev": true, "license": "MIT" }, - "node_modules/memoizee": { - "version": "0.4.15", + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", "dev": true, - "license": "ISC", + "optional": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/neatequal": { + "version": "1.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" + "varstream": "^0.3.2" } }, - "node_modules/memory-fs": { - "version": "0.2.0", + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", "dev": true, "license": "MIT" }, - "node_modules/meow": { - "version": "9.0.0", + "node_modules/next-tick": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/no-case": { + "version": "3.0.4", "dev": true, "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-abi": { + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.43.0.tgz", + "integrity": "sha512-QB0MMv+tn9Ur2DtJrc8y09n0n6sw88CyDniWSX2cHW10goQXYPK9ZpFJOktDS4ron501edPX6h9i7Pg+RnH5nQ==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", + "node_modules/node-abi/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", + "node_modules/node-abi/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, - "license": "MIT", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/methods": { - "version": "1.1.2", + "node_modules/node-abi/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "optional": true }, - "node_modules/microbuffer": { - "version": "1.0.0", + "node_modules/node-api-version": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz", + "integrity": "sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==", "dev": true, - "license": "MIT" + "dependencies": { + "semver": "^7.3.5" + } }, - "node_modules/micromatch": { - "version": "4.0.5", + "node_modules/node-api-version/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=10" } }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "node_modules/node-api-version/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { - "mime": "cli.js" + "semver": "bin/semver.js" }, "engines": { - "node": ">=4.0.0" + "node": ">=10" } }, - "node_modules/mime-db": { - "version": "1.52.0", + "node_modules/node-api-version/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], "engines": { - "node": ">= 0.6" + "node": ">=10.5.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { - "mime-db": "1.52.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "node_modules/node-forge": { + "version": "1.3.1", "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { - "node": ">=4" + "node": ">= 6.13.0" } }, - "node_modules/min-indent": { - "version": "1.0.1", + "node_modules/node-gyp": { + "version": "9.3.1", "dev": true, "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, "engines": { - "node": ">=4" + "node": "^12.13 || ^14.13 || >=16" } }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", + "node_modules/node-gyp/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "schema-utils": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "node": ">=10" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", + "node_modules/node-gyp/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/minimist": { - "version": "1.2.8", + "node_modules/node-gyp/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "ISC" }, - "node_modules/minimist-options": { - "version": "4.1.0", + "node_modules/node-int64": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/node-notifier": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", + "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", "dev": true, - "license": "MIT", "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.5", + "shellwords": "^0.1.1", + "uuid": "^8.3.2", + "which": "^2.0.2" } }, - "node_modules/minipass": { - "version": "3.1.6", + "node_modules/node-notifier/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/minipass-collect": { - "version": "1.0.2", + "node_modules/node-notifier/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/minipass-fetch": { - "version": "2.1.2", + "node_modules/node-notifier/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.12", "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } + "license": "MIT" }, - "node_modules/minipass-flush": { - "version": "1.0.5", + "node_modules/nopt": { + "version": "6.0.0", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">= 8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", + "node_modules/normalize-package-data": { + "version": "3.0.3", "dev": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "minipass": "^3.0.0" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/minipass-sized": { - "version": "1.0.3", + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "2.1.2", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, - "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/minizlib/node_modules/yallist": { + "node_modules/normalize-package-data/node_modules/yallist": { "version": "4.0.0", "dev": true, "license": "ISC" }, - "node_modules/mkdirp": { - "version": "0.5.6", + "node_modules/normalize-path": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/modify-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", - "integrity": "sha512-EickqnKq3kVVaZisYuCxhtKbZjInCuwgwZWyAmRIp1NTMhri7r3380/uqwrUHfaDiPzLVTuoNy4whX66bxPVog==", + "node_modules/normalize-range": { + "version": "0.1.2", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/mrmime": { - "version": "1.0.1", + "node_modules/normalize-url": { + "version": "6.1.0", "dev": true, "license": "MIT", "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", + "node_modules/npm-run-path": { + "version": "4.0.1", "dev": true, "license": "MIT", "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" + "path-key": "^3.0.0" }, - "bin": { - "multicast-dns": "cli.js" + "engines": { + "node": ">=8" } }, - "node_modules/nan": { - "version": "2.17.0", + "node_modules/npmlog": { + "version": "6.0.2", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "node_modules/nanoid": { - "version": "3.3.6", + "node_modules/nth-check": { + "version": "2.1.1", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", "license": "MIT" }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, - "license": "MIT" + "engines": { + "node": "*" + } }, - "node_modules/neatequal": { - "version": "1.0.0", + "node_modules/object-assign": { + "version": "4.1.1", "dev": true, "license": "MIT", - "dependencies": { - "varstream": "^0.3.2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/negotiator": { - "version": "0.6.3", + "node_modules/object-inspect": { + "version": "1.12.3", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/neo-async": { - "version": "2.6.2", + "node_modules/object-is": { + "version": "1.1.5", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/next-tick": { - "version": "1.1.0", + "node_modules/object-keys": { + "version": "1.1.1", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/no-case": { - "version": "3.0.4", + "node_modules/object.assign": { + "version": "4.1.4", "dev": true, "license": "MIT", "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-abi": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.43.0.tgz", - "integrity": "sha512-QB0MMv+tn9Ur2DtJrc8y09n0n6sw88CyDniWSX2cHW10goQXYPK9ZpFJOktDS4ron501edPX6h9i7Pg+RnH5nQ==", + "node_modules/object.entries": { + "version": "1.1.6", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^7.3.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/node-abi/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/object.fromentries": { + "version": "2.0.6", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/object.hasown": { + "version": "1.1.2", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, - "bin": { - "semver": "bin/semver.js" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-abi/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/obuf": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", + "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==", "dev": true }, - "node_modules/node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "node_modules/on-finished": { + "version": "2.4.1", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } }, - "node_modules/node-api-version": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz", - "integrity": "sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==", + "node_modules/on-headers": { + "version": "1.0.2", "dev": true, - "dependencies": { - "semver": "^7.3.5" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "node_modules/node-api-version/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/once": { + "version": "1.4.0", "dev": true, + "license": "ISC", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "wrappy": "1" } }, - "node_modules/node-api-version/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/onetime": { + "version": "5.1.2", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=10" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-api-version/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/open": { + "version": "8.4.2", + "dev": true, + "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-forge": { - "version": "1.3.1", + "node_modules/opener": { + "version": "1.5.2", "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" } }, - "node_modules/node-gyp": { - "version": "9.3.1", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "license": "MIT", "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { - "node": "^12.13 || ^14.13 || >=16" + "node": ">= 0.8.0" } }, - "node_modules/node-gyp/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/ora": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", + "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/node-gyp/node_modules/yallist": { + "node_modules/ora/node_modules/cli-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, - "license": "ISC" + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/node-int64": { - "version": "0.4.0", + "node_modules/ora/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/node-releases": { - "version": "2.0.12", + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/nopt": { - "version": "6.0.0", + "node_modules/ora/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, - "license": "ISC", "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/normalize-package-data": { - "version": "3.0.3", + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/os-locale": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", + "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "execa": "^4.0.0", + "lcid": "^3.0.0", + "mem": "^5.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "node_modules/os-locale/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", + "node_modules/os-locale/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", + "node_modules/os-locale/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=8.12.0" } }, - "node_modules/npmlog": { - "version": "6.0.2", + "node_modules/os-shim": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", + "integrity": "sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==", "dev": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.4.0" } }, - "node_modules/nth-check": { + "node_modules/p-cancelable": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "license": "MIT", - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=8" } }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "license": "MIT" - }, - "node_modules/object-assign": { - "version": "4.1.1", + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/object-inspect": { - "version": "1.12.3", + "node_modules/p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6" } }, - "node_modules/object-is": { - "version": "1.1.5", + "node_modules/p-limit": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-keys": { - "version": "1.1.1", + "node_modules/p-locate": { + "version": "5.0.0", "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.assign": { - "version": "4.1.4", + "node_modules/p-map": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.entries": { - "version": "1.1.6", + "node_modules/p-retry": { + "version": "4.6.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@types/retry": "0.12.0", + "retry": "^0.13.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/object.fromentries": { - "version": "2.0.6", + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 4" } }, - "node_modules/object.hasown": { - "version": "1.1.2", + "node_modules/p-try": { + "version": "2.2.0", "dev": true, "license": "MIT", - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6" } }, - "node_modules/object.values": { - "version": "1.1.6", + "node_modules/package-json": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" }, "engines": { - "node": ">= 0.4" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/obuf": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", + "node_modules/package-json/node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/on-headers": { - "version": "1.0.2", + "node_modules/package-json/node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=14.16" } }, - "node_modules/once": { - "version": "1.4.0", + "node_modules/package-json/node_modules/cacheable-request": { + "version": "10.2.13", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.13.tgz", + "integrity": "sha512-3SD4rrMu1msNGEtNSt8Od6enwdo//U9s4ykmXfA2TD58kcLkCobtCDiby7kNyj7a/Q7lz/mAesAFI54rTdnvBA==", "dev": true, - "license": "ISC", "dependencies": { - "wrappy": "1" + "@types/http-cache-semantics": "^4.0.1", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" } }, - "node_modules/onetime": { - "version": "5.1.2", + "node_modules/package-json/node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dev": true, - "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/open": { - "version": "8.4.2", + "node_modules/package-json/node_modules/http2-wrapper": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", + "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", "dev": true, - "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.19.0" } }, - "node_modules/opener": { - "version": "1.5.2", + "node_modules/package-json/node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "node_modules/package-json/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" } }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "node_modules/package-json/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-limit": { - "version": "3.1.0", + "node_modules/package-json/node_modules/normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" + "engines": { + "node": ">=14.16" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/package-json/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, "engines": { "node": ">=10" }, @@ -16518,61 +19616,68 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "5.0.0", + "node_modules/package-json/node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", "dev": true, - "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "@pnpm/npm-conf": "^2.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "node_modules/p-map": { - "version": "4.0.0", + "node_modules/package-json/node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "dev": true, - "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "rc": "1.2.8" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-retry": { - "version": "4.6.2", + "node_modules/package-json/node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, - "license": "MIT", "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" + "lowercase-keys": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", + "node_modules/package-json/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "license": "MIT", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 4" + "node": ">=10" } }, - "node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "node_modules/package-json/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/pako": { "version": "2.1.0", @@ -16615,6 +19720,58 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "dev": true, @@ -16675,6 +19832,40 @@ "dev": true, "license": "MIT" }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/path-to-regexp": { "version": "2.2.1", "dev": true, @@ -16694,6 +19885,12 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, "node_modules/picocolors": { "version": "1.0.0", "dev": true, @@ -16729,6 +19926,60 @@ "node": ">=6" } }, + "node_modules/pino": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.11.0.tgz", + "integrity": "sha512-Z2eKSvlrl2rH8p5eveNUnTdd4AjJk8tAsLkHYZQKGHP4WTh2Gi1cOSOs3eWPqaj+niS3gj4UkoreoaWgF3ZWYg==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "v1.0.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^2.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.1.0", + "thread-stream": "^2.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", + "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", + "dev": true, + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-abstract-transport/node_modules/readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dev": true, + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", + "dev": true + }, "node_modules/pirates": { "version": "4.0.5", "dev": true, @@ -17480,11 +20731,26 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "dev": true, "license": "MIT" }, + "node_modules/process-warning": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz", + "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==", + "dev": true + }, "node_modules/progress": { "version": "2.0.3", "dev": true, @@ -17510,6 +20776,18 @@ "node": ">=10" } }, + "node_modules/promise-toolbox": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/promise-toolbox/-/promise-toolbox-0.21.0.tgz", + "integrity": "sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==", + "dev": true, + "dependencies": { + "make-error": "^1.3.2" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/prompts": { "version": "2.4.2", "dev": true, @@ -17537,6 +20815,12 @@ "dev": true, "license": "MIT" }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, "node_modules/proxy-addr": { "version": "2.0.7", "dev": true, @@ -17549,6 +20833,12 @@ "node": ">= 0.10" } }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "node_modules/pump": { "version": "3.0.0", "dev": true, @@ -17606,6 +20896,14 @@ "node": ">=6.0.0" } }, + "node_modules/qr-code-styling": { + "version": "1.5.1", + "resolved": "git+ssh://git@github.com/troman29/qr-code-styling.git#c00d009f37768205582a87d4b0673ef38c225a53", + "license": "MIT", + "dependencies": { + "qrcode-generator": "^1.4.3" + } + }, "node_modules/qrcode-generator": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", @@ -17625,6 +20923,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "dev": true, @@ -17644,6 +20951,12 @@ ], "license": "MIT" }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "dev": true + }, "node_modules/quick-lru": { "version": "4.0.1", "dev": true, @@ -17957,6 +21270,15 @@ "node": ">=8.10.0" } }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/rechoir": { "version": "0.8.0", "dev": true, @@ -17969,6 +21291,18 @@ "node": ">= 10.13.0" } }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/redent": { "version": "3.0.0", "dev": true, @@ -18095,6 +21429,28 @@ "node": ">= 0.10" } }, + "node_modules/relaxed-json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.3.tgz", + "integrity": "sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "commander": "^2.6.0" + }, + "bin": { + "rjson": "bin/rjson.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/relaxed-json/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -18193,6 +21549,71 @@ "node": ">=8" } }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, "node_modules/require-directory": { "version": "2.1.1", "dev": true, @@ -18395,6 +21816,13 @@ ], "license": "MIT" }, + "node_modules/safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, + "optional": true + }, "node_modules/safe-regex-test": { "version": "1.0.0", "dev": true, @@ -18408,6 +21836,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "devOptional": true, @@ -18576,6 +22013,54 @@ "dev": true, "optional": true }, + "node_modules/semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-diff/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/send": { "version": "0.18.0", "dev": true, @@ -18832,11 +22317,30 @@ "dev": true, "license": "ISC" }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, "node_modules/setprototypeof": { "version": "1.2.0", "dev": true, "license": "ISC" }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, "node_modules/shallow-clone": { "version": "3.0.1", "dev": true, @@ -18875,6 +22379,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, "node_modules/side-channel": { "version": "1.0.4", "dev": true, @@ -18888,6 +22398,34 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sign-addon": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-5.3.0.tgz", + "integrity": "sha512-7nHlCzhQgVMLBNiXVEgbG/raq48awOW0lYMN5uo1BaB3mp0+k8M8pvDwbfTlr3apcxZJsk9HQsAW1POwoJugpQ==", + "dev": true, + "dependencies": { + "common-tags": "1.8.2", + "core-js": "3.29.0", + "deepcopy": "2.1.0", + "es6-error": "4.1.1", + "es6-promisify": "7.0.0", + "jsonwebtoken": "9.0.0", + "mz": "2.7.0", + "request": "2.88.2", + "source-map-support": "0.5.21", + "stream-to-promise": "3.0.0" + } + }, + "node_modules/sign-addon/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "dev": true, @@ -19002,14 +22540,6 @@ "websocket-driver": "^0.7.4" } }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/socks": { "version": "2.7.1", "dev": true, @@ -19041,6 +22571,15 @@ "dev": true, "license": "MIT" }, + "node_modules/sonic-boom": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", + "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==", + "dev": true, + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, "node_modules/sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -19096,6 +22635,17 @@ "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", "dev": true }, + "node_modules/spawn-sync": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", + "integrity": "sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "concat-stream": "^1.4.7", + "os-shim": "^0.1.2" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "dev": true, @@ -19152,11 +22702,63 @@ "wbuf": "^1.7.3" } }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "dev": true, "license": "BSD-3-Clause" }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, "node_modules/stable": { "version": "0.1.8", "dev": true, @@ -19198,6 +22800,32 @@ "node": ">= 0.6" } }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dev": true, + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stdin-discarder/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", "dev": true, @@ -19209,6 +22837,29 @@ "node": ">= 0.4" } }, + "node_modules/stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", + "dev": true, + "dependencies": { + "any-promise": "^1.1.0" + } + }, + "node_modules/stream-to-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-3.0.0.tgz", + "integrity": "sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==", + "dev": true, + "dependencies": { + "any-promise": "~1.3.0", + "end-of-stream": "~1.4.1", + "stream-to-array": "~2.3.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "dev": true, @@ -19367,6 +23018,31 @@ "node": ">=8" } }, + "node_modules/strip-bom-buf": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz", + "integrity": "sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-4.0.0.tgz", + "integrity": "sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==", + "dev": true, + "dependencies": { + "first-chunk-stream": "^3.0.0", + "strip-bom-buf": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "dev": true, @@ -20084,6 +23760,36 @@ "dev": true, "license": "MIT" }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.0.tgz", + "integrity": "sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw==", + "dev": true, + "dependencies": { + "real-require": "^0.2.0" + } + }, "node_modules/through": { "version": "2.3.8", "dev": true, @@ -20304,6 +24010,15 @@ "version": "4.0.0", "license": "ISC" }, + "node_modules/tosource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", + "integrity": "sha512-N6g8eQ1eerw6Y1pBhdgkubWIiPFwXa2POSUrlL8jth5CyyEWNWzoGKRkO3CaO7Jx27hlJP54muB3btIAbx4MPg==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/totalist": { "version": "1.1.0", "dev": true, @@ -20312,6 +24027,28 @@ "node": ">=6" } }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -20452,6 +24189,18 @@ "node": ">=12" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/tweetnacl": { "version": "1.0.3", "license": "Unlicense" @@ -20530,6 +24279,21 @@ "rxjs": "*" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, "node_modules/typescript": { "version": "5.0.4", "dev": true, @@ -20604,6 +24368,21 @@ "node": ">=4" } }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dev": true, + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/universalify": { "version": "0.1.2", "dev": true, @@ -20657,6 +24436,16 @@ "node": ">=8" } }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.11", "dev": true, @@ -20679,22 +24468,122 @@ "escalade": "^3.1.1", "picocolors": "^1.0.0" }, - "bin": { - "update-browserslist-db": "cli.js" + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-check": { + "version": "1.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" + } + }, + "node_modules/update-notifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", + "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", + "dev": true, + "dependencies": { + "boxen": "^7.0.0", + "chalk": "^5.0.1", + "configstore": "^6.0.0", + "has-yarn": "^3.0.0", + "import-lazy": "^4.0.0", + "is-ci": "^3.0.1", + "is-installed-globally": "^0.4.0", + "is-npm": "^6.0.0", + "is-yarn-global": "^0.4.0", + "latest-version": "^7.0.0", + "pupa": "^3.1.0", + "semver": "^7.3.7", + "semver-diff": "^4.0.0", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/update-notifier/node_modules/pupa": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "dev": true, + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/update-check": { - "version": "1.5.4", + "node_modules/update-notifier/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "license": "MIT", "dependencies": { - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/update-notifier/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/upper-case": { "version": "2.0.2", "dev": true, @@ -20751,6 +24640,15 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/v8-compile-cache": { "version": "2.3.0", "license": "MIT" @@ -20893,6 +24791,296 @@ "defaults": "^1.0.3" } }, + "node_modules/web-ext": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-7.6.2.tgz", + "integrity": "sha512-xlxbzgFBIS/UWWlvWxyR1PIqRRzDj1cutoHh+VZu4ZTcJTfv35KVdKkLRZv4PQwHu4dg8VfTg7WEcNP4QLaaFQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "7.21.0", + "@devicefarmer/adbkit": "3.2.3", + "addons-linter": "5.32.0", + "bunyan": "1.8.15", + "camelcase": "7.0.1", + "chrome-launcher": "0.15.1", + "debounce": "1.2.1", + "decamelize": "6.0.0", + "es6-error": "4.1.1", + "firefox-profile": "4.3.2", + "fs-extra": "11.1.0", + "fx-runner": "1.3.0", + "import-fresh": "3.3.0", + "jose": "4.13.1", + "mkdirp": "1.0.4", + "multimatch": "6.0.0", + "mz": "2.7.0", + "node-fetch": "3.3.1", + "node-notifier": "10.0.1", + "open": "8.4.2", + "parse-json": "6.0.2", + "promise-toolbox": "0.21.0", + "sign-addon": "5.3.0", + "source-map-support": "0.5.21", + "strip-bom": "5.0.0", + "strip-json-comments": "5.0.0", + "tmp": "0.2.1", + "update-notifier": "6.0.2", + "watchpack": "2.4.0", + "ws": "8.13.0", + "yargs": "17.7.1", + "zip-dir": "2.0.0" + }, + "bin": { + "web-ext": "bin/web-ext.js" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.9.0" + } + }, + "node_modules/web-ext-submit": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/web-ext-submit/-/web-ext-submit-7.6.2.tgz", + "integrity": "sha512-WjIezZg3ebLNBPlHR16BDiz2UHoobUUJdQyQBfLyVnL9xAaPVPGE5+xD8jlDsrWMGvMYUiJJwnF9Sj8JpXpBAA==", + "dev": true, + "dependencies": { + "web-ext": "^7.6.2" + }, + "bin": { + "web-ext-submit": "extender.sh" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.9.0" + } + }, + "node_modules/web-ext/node_modules/@babel/runtime": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/web-ext/node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/web-ext/node_modules/decamelize": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", + "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/web-ext/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/web-ext/node_modules/fs-extra": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/web-ext/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/web-ext/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/web-ext/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/web-ext/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/web-ext/node_modules/node-fetch": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", + "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/web-ext/node_modules/parse-json": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz", + "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^2.3.1", + "lines-and-columns": "^2.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/web-ext/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/web-ext/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/web-ext/node_modules/strip-bom": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-5.0.0.tgz", + "integrity": "sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/web-ext/node_modules/strip-json-comments": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", + "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/web-ext/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/web-ext/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/web-ext/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/webcrypto-core": { "version": "1.7.7", "dev": true, @@ -20905,6 +25093,11 @@ "tslib": "^2.4.0" } }, + "node_modules/webextension-polyfill": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz", + "integrity": "sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==" + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -21321,6 +25514,12 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/when": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", + "integrity": "sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==", + "dev": true + }, "node_modules/which": { "version": "2.0.2", "dev": true, @@ -21437,6 +25636,12 @@ "license": "MIT", "peer": true }, + "node_modules/winreg": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz", + "integrity": "sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==", + "dev": true + }, "node_modules/wordwrap": { "version": "1.0.0", "dev": true, @@ -21551,6 +25756,40 @@ } } }, + "node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/xmlbuilder": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", @@ -21650,6 +25889,15 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "dev": true, @@ -21661,6 +25909,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zip-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-2.0.0.tgz", + "integrity": "sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==", + "dev": true, + "dependencies": { + "async": "^3.2.0", + "jszip": "^3.2.2" + } + }, "node_modules/zod": { "version": "3.21.4", "license": "MIT", diff --git a/package.json b/package.json index c8914d71..2b39e659 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mytonwallet", - "version": "1.15.1", + "version": "1.15.2", "description": "The most feature-rich web wallet and browser extension for TON – with support of multi-accounts, tokens (jettons), NFT, TON DNS, TON Sites, TON Proxy, and TON Magic.", "main": "index.js", "scripts": { @@ -12,12 +12,12 @@ "build:staging": "cross-env APP_ENV=staging webpack && bash ./deploy/copy_to_dist.sh", "build:production": "webpack && bash ./deploy/copy_to_dist.sh", "build:extension:dev": "cross-env ENV_EXTENSION=1 APP_ENV=development webpack --mode development && bash ./deploy/copy_to_dist.sh", - "build:extension:production": "npm i && cross-env ENV_EXTENSION=1 webpack && bash ./deploy/copy_to_dist.sh && rm -f MyTonWallet.zip && zip -r -X MyTonWallet.zip dist/*", - "build:extension:dev:firefox": "cross-env IS_FIREFOX_EXTENSION=1 npm run build:extension:dev", - "build:extension:production:firefox": "npm i && cross-env IS_FIREFOX_EXTENSION=1 ENV_EXTENSION=1 webpack && bash ./deploy/copy_to_dist.sh && rm -f MyTonWallet-firefox.zip && cd dist && rm -f reference.json && zip -r -X ../MyTonWallet-firefox.zip ./*", + "build:extension:staging": "cross-env ENV_EXTENSION=1 APP_ENV=staging webpack && bash ./deploy/copy_to_dist.sh && rm -f MyTonWallet.zip && zip -r -X MyTonWallet.zip dist/*", + "build:extension:production": "cross-env ENV_EXTENSION=1 webpack && bash ./deploy/copy_to_dist.sh && rm -f MyTonWallet.zip && zip -r -X MyTonWallet.zip dist/*", + "build:extension:dev:firefox": "cross-env IS_FIREFOX_EXTENSION=1 npm run build:extension:dev && bash ./deploy/copy_to_dist.sh && rm -f MyTonWallet-firefox.zip && cd dist && rm -f reference.json && zip -r -X ../MyTonWallet-firefox.zip ./*", + "build:extension:staging:firefox": "cross-env IS_FIREFOX_EXTENSION=1 ENV_EXTENSION=1 APP_ENV=staging webpack && bash ./deploy/copy_to_dist.sh && rm -f MyTonWallet-firefox.zip && cd dist && rm -f reference.json && zip -r -X ../MyTonWallet-firefox.zip ./*", + "build:extension:production:firefox": "cross-env IS_FIREFOX_EXTENSION=1 ENV_EXTENSION=1 webpack && bash ./deploy/copy_to_dist.sh && rm -f MyTonWallet-firefox.zip && cd dist && rm -f reference.json && zip -r -X ../MyTonWallet-firefox.zip ./*", "deploy:electron": "npm run electron:production -- -p always", - "start:extension:dev:arch": "npm run build:extension:dev && google-chrome-stable --load-extension=\"`pwd`/dist\"", - "start:extension:dev:mac": "npm run build:extension:dev && open -a \"Google Chrome\" --load-extension=\"`pwd`/dist\"", "build:icons": "fantasticon", "check": "tsc && stylelint \"**/*.{css,scss}\" && eslint . --ext .ts,.tsx", "check:fix": "npm run check -- --fix", @@ -98,6 +98,7 @@ "babel-loader": "^9.1.2", "before-build-webpack": "^0.2.13", "browserlist": "^1.0.1", + "chrome-webstore-upload-cli": "^2.2.2", "concurrently": "^7.6.0", "copy-webpack-plugin": "^11.0.0", "cross-env": "^7.0.3", @@ -153,6 +154,7 @@ "stylelint-high-performance-animation": "^1.8.0", "stylelint-order": "^5.0.0", "typescript": "^5.0.2", + "web-ext-submit": "^7.6.2", "webpack": "^5.76.2", "webpack-bundle-analyzer": "^4.8.0", "webpack-dev-server": "^4.13.1" @@ -163,6 +165,7 @@ "buffer": "^6.0.3", "idb-keyval": "^6.2.0", "pako": "^2.1.0", + "qr-code-styling": "github:troman29/qr-code-styling#c00d0", "qrcode-generator": "^1.4.4", "ton": "^13.4.1", "ton-core": "^0.49.0", @@ -170,6 +173,7 @@ "tonweb": "github:troman29/tonweb#3d5e2f3", "tonweb-mnemonic": "^1.0.1", "tweetnacl": "^1.0.3", - "v8-compile-cache": "^2.3.0" + "v8-compile-cache": "^2.3.0", + "webextension-polyfill": "^0.10.0" } } diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index f95ca781..52c8a4c4 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -42,6 +42,9 @@ type AnyAsyncFunction = (...args: any[]) => Promise; type AnyToVoidFunction = (...args: any[]) => void; type NoneToVoidFunction = () => void; +type ValueOf = T[keyof T]; +type Entries = [keyof T, ValueOf][]; + type EmojiCategory = { id: string; name: string; diff --git a/src/api/blockchains/ton/address.ts b/src/api/blockchains/ton/address.ts index 969c3da1..6d684ce1 100644 --- a/src/api/blockchains/ton/address.ts +++ b/src/api/blockchains/ton/address.ts @@ -1,15 +1,18 @@ import type { ApiNetwork } from '../../types'; import dns from '../../../util/dns'; -import { getTonWeb } from './util/tonweb'; +import { getTonWeb, toBase64Address } from './util/tonweb'; const { DnsCollection } = require('tonweb/src/contract/dns/DnsCollection'); const VIP_DNS_COLLECTION = 'EQBWG4EBbPDv4Xj7xlPwzxd7hSyHMzwwLB5O6rY-0BBeaixS'; -export async function resolveAddress(network: ApiNetwork, address: string) { +export async function resolveAddress(network: ApiNetwork, address: string): Promise<{ + address: string; + domain?: string; +} | undefined> { if (!dns.isDnsDomain(address)) { - return address; + return { address }; } const domain = address; @@ -24,7 +27,12 @@ export async function resolveAddress(network: ApiNetwork, address: string) { }).resolve(base, 'wallet'))?.toString(true, true, true); } - return (await tonweb.dns.getWalletAddress(domain))?.toString(true, true, true); + const addressObj = await tonweb.dns.getWalletAddress(domain); + if (!addressObj) { + return undefined; + } + + return { address: toBase64Address(addressObj), domain }; } catch (err: any) { if (err.message !== 'http provider parse response error') { throw err; diff --git a/src/api/blockchains/ton/transactions.ts b/src/api/blockchains/ton/transactions.ts index eda487b3..77c24adb 100644 --- a/src/api/blockchains/ton/transactions.ts +++ b/src/api/blockchains/ton/transactions.ts @@ -25,6 +25,7 @@ import { fetchNewestTxId, fetchTransactions, getWalletPublicKey, + parseBase64, resolveTokenWalletAddress, toBase64Address, } from './util/tonweb'; @@ -44,7 +45,7 @@ import { } from './wallet'; type SubmitTransferResult = { - resolvedAddress: string; + normalizedAddress: string; amount: string; seqno: number; encryptedComment?: string; @@ -84,51 +85,72 @@ export async function checkTransactionDraft( tokenSlug: string, toAddress: string, amount: string, - data?: string | Uint8Array | Cell, + data?: AnyPayload, stateInit?: Cell, shouldEncrypt?: boolean, + isBase64Data?: boolean, ) { const { network } = parseAccountId(accountId); const result: { - error?: ApiTransactionDraftError; fee?: string; addressName?: string; isScam?: boolean; + resolvedAddress?: string; + normalizedAddress?: string; } = {}; - const resolvedAddress = await resolveAddress(network, toAddress); - if (!resolvedAddress) { - result.error = ApiTransactionDraftError.DomainNotResolved; - return result; + const resolved = await resolveAddress(network, toAddress); + if (resolved) { + result.addressName = resolved.domain; + toAddress = resolved.address; + } else { + return { ...result, error: ApiTransactionDraftError.DomainNotResolved }; } - toAddress = resolvedAddress; if (!Address.isValid(toAddress)) { - result.error = ApiTransactionDraftError.InvalidToAddress; - return result; + return { ...result, error: ApiTransactionDraftError.InvalidToAddress }; + } + + const { + isUserFriendly, isTestOnly, isBounceable, + } = new Address(toAddress); + + const regex = /[+=/]/; // Temp check for `isUrlSafe`. Remove after TonWeb fixes the issue + const isUrlSafe = !regex.test(toAddress); + + if (!isUserFriendly || !isUrlSafe || (network === 'mainnet' && isTestOnly)) { + return { ...result, error: ApiTransactionDraftError.InvalidAddressFormat }; } + if (tokenSlug === TON_TOKEN_SLUG && isBounceable && !(await isWalletInitialized(network, toAddress))) { + toAddress = toBase64Address(toAddress, false); + } + + result.resolvedAddress = toAddress; + result.normalizedAddress = toBase64Address(toAddress); + const addressInfo = await getAddressInfo(toAddress); - result.addressName = addressInfo?.name; - result.isScam = addressInfo?.isScam; + if (addressInfo?.name) result.addressName = addressInfo.name; + if (addressInfo?.isScam) result.isScam = addressInfo.isScam; if (BigInt(amount) < BigInt(0)) { - result.error = ApiTransactionDraftError.InvalidAmount; - return result; + return { ...result, error: ApiTransactionDraftError.InvalidAmount }; } const wallet = await pickAccountWallet(accountId); if (!wallet) { - result.error = ApiTransactionDraftError.Unexpected; - return result; + return { ...result, error: ApiTransactionDraftError.Unexpected }; + } + + if (typeof data === 'string' && isBase64Data) { + data = parseBase64(data); } if (data && typeof data === 'string' && shouldEncrypt) { const toPublicKey = await getWalletPublicKey(network, toAddress); if (!toPublicKey) { - result.error = ApiTransactionDraftError.WalletNotInitialized; - return result; + return { ...result, error: ApiTransactionDraftError.WalletNotInitialized }; } } @@ -136,8 +158,7 @@ export async function checkTransactionDraft( const account = await fetchStoredAccount(accountId); if (data && account?.ledger) { if (typeof data !== 'string' || shouldEncrypt || !isValidLedgerComment(data)) { - result.error = ApiTransactionDraftError.UnsupportedHardwarePayload; - return result; + return { ...result, error: ApiTransactionDraftError.UnsupportedHardwarePayload }; } } } else { @@ -153,23 +174,27 @@ export async function checkTransactionDraft( const tokenBalance = await getTokenWalletBalance(tokenWallet!); if (BigInt(tokenBalance) < BigInt(tokenAmount!)) { - result.error = ApiTransactionDraftError.InsufficientBalance; - return result; + return { ...result, error: ApiTransactionDraftError.InsufficientBalance }; } } - const isInitialized = await isWalletInitialized(network, wallet); - result.fee = await calculateFee(isInitialized, async () => (await signTransaction( + const isOurWalletInitialized = await isWalletInitialized(network, wallet); + result.fee = await calculateFee(isOurWalletInitialized, async () => (await signTransaction( network, wallet, toAddress, amount, data, stateInit, )).query); const balance = await getWalletBalance(network, wallet); if (BigInt(balance) < BigInt(amount) + BigInt(result.fee)) { - result.error = ApiTransactionDraftError.InsufficientBalance; - return result; + return { ...result, error: ApiTransactionDraftError.InsufficientBalance }; } - return result; + return result as { + fee: string; + resolvedAddress: string; + normalizedAddress: string; + addressName?: string; + isScam?: boolean; + }; } export async function submitTransfer( @@ -181,6 +206,7 @@ export async function submitTransfer( data?: AnyPayload, stateInit?: Cell, shouldEncrypt?: boolean, + isBase64Data?: boolean, ): Promise { const { network } = parseAccountId(accountId); @@ -193,7 +219,12 @@ export async function submitTransfer( const { publicKey, secretKey } = keyPair!; let encryptedComment: string | undefined; - let resolvedAddress = await resolveAddress(network, toAddress); + // Force default bounceable address for `waitTxComplete` to work properly + const normalizedAddress = toBase64Address(toAddress); + + if (typeof data === 'string' && isBase64Data) { + data = parseBase64(data); + } if (data && typeof data === 'string' && shouldEncrypt) { const toPublicKey = (await getWalletPublicKey(network, toAddress))!; @@ -204,25 +235,14 @@ export async function submitTransfer( if (tokenSlug !== TON_TOKEN_SLUG) { ({ amount, - toAddress: resolvedAddress, + toAddress, payload: data, - } = await buildTokenTransfer(network, tokenSlug, fromAddress, resolvedAddress, amount, data)); + } = await buildTokenTransfer(network, tokenSlug, fromAddress, toAddress, amount, data)); } - // Force default bounceable address for `waitTxComplete` to work properly - resolvedAddress = toBase64Address(resolvedAddress); - await waitLastTransfer(network, fromAddress); - const [{ isInitialized, balance }, toWalletInfo] = await Promise.all([ - getWalletInfo(network, wallet!), - getWalletInfo(network, resolvedAddress), - ]); - - // Force non-bounceable for non-initialized recipients - toAddress = toWalletInfo.isInitialized - ? resolvedAddress - : toBase64Address(resolvedAddress, false); + const { isInitialized, balance } = await getWalletInfo(network, wallet!); const { seqno, query } = await signTransaction(network, wallet!, toAddress, amount, data, stateInit, secretKey); @@ -236,7 +256,7 @@ export async function submitTransfer( updateLastTransfer(network, fromAddress, seqno); return { - resolvedAddress, amount, seqno, encryptedComment, + normalizedAddress, amount, seqno, encryptedComment, }; } catch (err: any) { logDebugError('submitTransfer', err); @@ -393,7 +413,6 @@ export async function checkMultiTransactionDraft(accountId: string, messages: To const { network } = parseAccountId(accountId); const result: { - error?: ApiTransactionDraftError; fee?: string; totalAmount?: string; } = {}; @@ -402,12 +421,10 @@ export async function checkMultiTransactionDraft(accountId: string, messages: To for (const { toAddress, amount } of messages) { if (BigInt(amount) < BigInt(0)) { - result.error = ApiTransactionDraftError.InvalidAmount; - return result; + return { ...result, error: ApiTransactionDraftError.InvalidAmount }; } if (!Address.isValid(toAddress)) { - result.error = ApiTransactionDraftError.InvalidToAddress; - return result; + return { ...result, error: ApiTransactionDraftError.InvalidToAddress }; } totalAmount += BigInt(amount); } @@ -415,8 +432,7 @@ export async function checkMultiTransactionDraft(accountId: string, messages: To const wallet = await pickAccountWallet(accountId); if (!wallet) { - result.error = ApiTransactionDraftError.Unexpected; - return result; + return { ...result, error: ApiTransactionDraftError.Unexpected }; } const { isInitialized, balance } = await getWalletInfo(network, wallet); @@ -427,11 +443,10 @@ export async function checkMultiTransactionDraft(accountId: string, messages: To result.totalAmount = totalAmount.toString(); if (BigInt(balance) < totalAmount + BigInt(result.fee)) { - result.error = ApiTransactionDraftError.InsufficientBalance; - return result; + return { ...result, error: ApiTransactionDraftError.InsufficientBalance }; } - return result; + return result as { fee: string; totalAmount: string }; } export async function submitMultiTransfer( @@ -506,6 +521,12 @@ async function signMultiTransaction( expireAt = Math.round(Date.now() / 1000) + DEFAULT_EXPIRE_AT_TIMEOUT_SEC; } + for (const message of messages) { + if (message.payload && typeof message.payload === 'string' && message.isBase64Payload) { + message.payload = parseBase64(message.payload); + } + } + // TODO Uncomment after fixing types in tonweb // @ts-ignore const query = wallet.methods.transfers({ diff --git a/src/api/blockchains/ton/types.ts b/src/api/blockchains/ton/types.ts index 4f211970..ef9a370d 100644 --- a/src/api/blockchains/ton/types.ts +++ b/src/api/blockchains/ton/types.ts @@ -37,6 +37,7 @@ export interface TonTransferParams { amount: string; payload?: AnyPayload; stateInit?: Cell; + isBase64Payload?: boolean; } export interface JettonMetadata { diff --git a/src/api/blockchains/ton/util/tonweb.ts b/src/api/blockchains/ton/util/tonweb.ts index 45a01a25..fe978417 100644 --- a/src/api/blockchains/ton/util/tonweb.ts +++ b/src/api/blockchains/ton/util/tonweb.ts @@ -14,8 +14,9 @@ import { TONHTTPAPI_TESTNET_API_KEY, TONHTTPAPI_TESTNET_URL, } from '../../../../config'; +import { logDebugError } from '../../../../util/logs'; import withCacheAsync from '../../../../util/withCacheAsync'; -import { hexToBytes } from '../../../common/utils'; +import { base64ToBytes, hexToBytes } from '../../../common/utils'; import { JettonOpCode } from '../constants'; import { parseTxId, stringifyTxId } from './index'; @@ -235,3 +236,12 @@ export function buildTokenTransferBody(params: TokenTransferBodyParams) { export function bnToAddress(value: BN) { return new Address(`0:${value.toString('hex', 64)}`).toString(true, true, true); } + +export function parseBase64(base64: string) { + try { + return Cell.oneFromBoc(base64ToBytes(base64)); + } catch (err) { + logDebugError('parseBase64', err); + return Uint8Array.from(Buffer.from(base64, 'base64')); + } +} diff --git a/src/api/common/accounts.ts b/src/api/common/accounts.ts index d690dda1..e0c2e17e 100644 --- a/src/api/common/accounts.ts +++ b/src/api/common/accounts.ts @@ -4,7 +4,6 @@ import type { ApiAccountInfo, ApiNetwork } from '../types'; import { buildAccountId, parseAccountId } from '../../util/account'; import { buildCollectionByKey } from '../../util/iteratees'; import { storage } from '../storages'; -import { toInternalAccountId } from './helpers'; const MIN_ACCOUNT_NUMBER = 0; @@ -76,23 +75,47 @@ export function fetchStoredAddress(accountId: string): Promise { } export async function getAccountValue(accountId: string, key: StorageKey) { - const internalId = toInternalAccountId(accountId); - return (await storage.getItem(key))?.[internalId]; + return (await storage.getItem(key))?.[accountId]; } export async function removeAccountValue(accountId: string, key: StorageKey) { - const internalId = toInternalAccountId(accountId); const data = await storage.getItem(key); if (!data) return; - const { [internalId]: removedValue, ...restData } = data; + const { [accountId]: removedValue, ...restData } = data; await storage.setItem(key, restData); } export async function setAccountValue(accountId: string, key: StorageKey, value: any) { - const internalId = toInternalAccountId(accountId); const data = await storage.getItem(key); - await storage.setItem(key, { ...data, [internalId]: value }); + await storage.setItem(key, { ...data, [accountId]: value }); +} + +export async function removeNetworkAccountsValue(network: string, key: StorageKey) { + const data = await storage.getItem(key); + if (!data) return; + + for (const accountId of Object.keys(data)) { + if (parseAccountId(accountId).network === network) { + delete data[accountId]; + } + } + + await storage.setItem(key, data); +} + +export async function getCurrentNetwork() { + const accountId = await getCurrentAccountId(); + if (!accountId) return undefined; + return parseAccountId(accountId).network; +} + +export async function getCurrentAccountIdOrFail() { + const accountId = await getCurrentAccountId(); + if (!accountId) { + throw new Error('The user is not authorized in the wallet'); + } + return accountId; } export function getCurrentAccountId(): Promise { diff --git a/src/api/common/helpers.ts b/src/api/common/helpers.ts index 7ba28f35..752b3ef7 100644 --- a/src/api/common/helpers.ts +++ b/src/api/common/helpers.ts @@ -5,7 +5,7 @@ import type { } from '../types'; import { MAIN_ACCOUNT_ID } from '../../config'; -import { parseAccountId } from '../../util/account'; +import { buildAccountId, parseAccountId } from '../../util/account'; import { IS_EXTENSION } from '../environment'; import { storage } from '../storages'; import idbStorage from '../storages/idb'; @@ -15,7 +15,7 @@ import { whenTxComplete } from './txCallbacks'; let localCounter = 0; const getNextLocalId = () => `${Date.now()}|${localCounter++}`; -const actualStateVersion = 6; +const actualStateVersion = 7; let migrationEnsurePromise: Promise; export function resolveBlockchainKey(accountId: string) { @@ -214,4 +214,27 @@ export async function migrateStorage() { version = 6; await storage.setItem('stateVersion', version); } + + if (version === 6) { + for (const key of ['addresses', 'mnemonicsEncrypted', 'publicKeys', 'accounts', 'dapps'] as StorageKey[]) { + let data = await storage.getItem(key) as AnyLiteral; + if (!data) continue; + + data = Object.entries(data).reduce((byAccountId, [internalAccountId, accountData]) => { + const parsed = parseAccountId(internalAccountId); + const mainnetAccountId = buildAccountId({ ...parsed, network: 'mainnet' }); + const testnetAccountId = buildAccountId({ ...parsed, network: 'testnet' }); + return { + ...byAccountId, + [mainnetAccountId]: accountData, + [testnetAccountId]: accountData, + }; + }, {} as AnyLiteral); + + await storage.setItem(key, data); + } + + version = 7; + await storage.setItem('stateVersion', version); + } } diff --git a/src/api/common/utils.ts b/src/api/common/utils.ts index 6bebdb50..91f4bcc9 100644 --- a/src/api/common/utils.ts +++ b/src/api/common/utils.ts @@ -14,8 +14,8 @@ export function bytesToBase64(bytes: Uint8Array) { return TonWeb.utils.bytesToBase64(bytes); } -export function base64ToBytes(hex: string) { - return TonWeb.utils.base64ToBytes(hex); +export function base64ToBytes(base64: string) { + return TonWeb.utils.base64ToBytes(base64); } export function hexToBase64(hex: string) { diff --git a/src/api/dappMethods/types.ts b/src/api/dappMethods/types.ts deleted file mode 100644 index a99e9d48..00000000 --- a/src/api/dappMethods/types.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type * as dappMethods from './index'; -import type * as legacyDappMethods from './legacy'; - -export type DappMethods = typeof dappMethods; -export type DappMethodArgs = Parameters; -export type DappMethodResponse = ReturnType; - -export type LegacyDappMethods = typeof legacyDappMethods; -export type LegacyDappMethodArgs = Parameters; -export type LegacyDappMethodResponse = ReturnType; diff --git a/src/api/methods/extension.ts b/src/api/extensionMethods/extension.ts similarity index 94% rename from src/api/methods/extension.ts rename to src/api/extensionMethods/extension.ts index 9ffeeaa8..8b38cca0 100644 --- a/src/api/methods/extension.ts +++ b/src/api/extensionMethods/extension.ts @@ -1,12 +1,12 @@ -import extension from '../../lib/webextension-polyfill'; +import extension from 'webextension-polyfill'; import type { OnApiUpdate } from '../types'; import { PROXY_HOSTS } from '../../config'; import { sample } from '../../util/random'; -import { updateDapps } from '../dappMethods'; import { IS_FIREFOX_EXTENSION } from '../environment'; import { storage } from '../storages'; +import { updateSites } from './sites'; type ProxyType = 'http' | 'https' | 'socks' | 'socks5'; @@ -45,7 +45,7 @@ export async function initExtension(_onUpdate: OnApiUpdate) { onUpdate = _onUpdate; const isTonProxyEnabled = await storage.getItem('isTonProxyEnabled'); - doProxy(isTonProxyEnabled); + void doProxy(isTonProxyEnabled); const isDeeplinkHookEnabled = await storage.getItem('isDeeplinkHookEnabled'); doDeeplinkHook(isDeeplinkHookEnabled); @@ -60,7 +60,7 @@ export function setupDefaultExtensionFeatures() { } export async function clearExtensionFeatures() { - doProxy(false); + void doProxy(false); doMagic(false); doDeeplinkHook(false); @@ -116,7 +116,7 @@ function firefoxOnRequest(): FirefoxProxyInfo | FirefoxProxyInfo[] { export function doMagic(isEnabled: boolean) { void storage.setItem('isTonMagicEnabled', isEnabled); - updateDapps({ + updateSites({ type: 'updateTonMagic', isEnabled, }); @@ -125,7 +125,7 @@ export function doMagic(isEnabled: boolean) { export function doDeeplinkHook(isEnabled: boolean) { void storage.setItem('isDeeplinkHookEnabled', isEnabled); - updateDapps({ + updateSites({ type: 'updateDeeplinkHook', isEnabled, }); diff --git a/src/api/extensionMethods/index.ts b/src/api/extensionMethods/index.ts new file mode 100644 index 00000000..f86dc29d --- /dev/null +++ b/src/api/extensionMethods/index.ts @@ -0,0 +1 @@ +export * from './extension'; diff --git a/src/api/extensionMethods/init.ts b/src/api/extensionMethods/init.ts new file mode 100644 index 00000000..8f8aa42c --- /dev/null +++ b/src/api/extensionMethods/init.ts @@ -0,0 +1,26 @@ +import type { OnApiUpdate } from '../types'; + +import * as legacyDappMethods from './legacy'; +import * as siteMethods from './sites'; +import { openPopupWindow } from './window'; +import * as extensionMethods from '.'; + +import { addHooks } from '../hooks'; + +addHooks({ + onWindowNeeded: openPopupWindow, + onFirstLogin: extensionMethods.setupDefaultExtensionFeatures, + onFullLogout: extensionMethods.clearExtensionFeatures, + onDappDisconnected: () => { + siteMethods.updateSites({ + type: 'disconnectSite', + origin, + }); + }, +}); + +export default function init(onUpdate: OnApiUpdate) { + void extensionMethods.initExtension(onUpdate); + legacyDappMethods.initLegacyDappMethods(onUpdate); + siteMethods.initSiteMethods(onUpdate); +} diff --git a/src/api/dappMethods/legacy.ts b/src/api/extensionMethods/legacy.ts similarity index 95% rename from src/api/dappMethods/legacy.ts rename to src/api/extensionMethods/legacy.ts index 9f6ee8a3..d06798e7 100644 --- a/src/api/dappMethods/legacy.ts +++ b/src/api/extensionMethods/legacy.ts @@ -1,4 +1,4 @@ -import type { OnApiDappUpdate } from '../types/dappUpdates'; +import type { OnApiSiteUpdate } from '../types/dappUpdates'; import type { ApiSignedTransfer, OnApiUpdate } from '../types'; import { TON_TOKEN_SLUG } from '../../config'; @@ -6,12 +6,12 @@ import { parseAccountId } from '../../util/account'; import { logDebugError } from '../../util/logs'; import blockchains from '../blockchains'; import { - fetchStoredAccount, fetchStoredAddress, fetchStoredPublicKey, getCurrentAccountId, waitLogin, + fetchStoredAccount, fetchStoredAddress, fetchStoredPublicKey, getCurrentAccountId, getCurrentAccountIdOrFail, + waitLogin, } from '../common/accounts'; import { createDappPromise } from '../common/dappPromises'; import { createLocalTransaction } from '../common/helpers'; import { base64ToBytes, hexToBytes } from '../common/utils'; -import { getCurrentAccountIdOrFail } from './index'; import { openPopupWindow } from './window'; const ton = blockchains.ton; @@ -21,7 +21,7 @@ export function initLegacyDappMethods(_onPopupUpdate: OnApiUpdate) { onPopupUpdate = _onPopupUpdate; } -export async function onDappSendUpdates(onDappUpdate: OnApiDappUpdate) { +export async function onDappSendUpdates(onDappUpdate: OnApiSiteUpdate) { const accounts = await requestAccounts(); onDappUpdate({ @@ -104,10 +104,10 @@ export async function sendTransaction(params: { accountId, TON_TOKEN_SLUG, toAddress, amount, processedData, processedStateInit, ); - if (!checkResult || checkResult?.error) { + if ('error' in checkResult) { onPopupUpdate({ type: 'showError', - error: checkResult?.error, + error: checkResult.error, }); return false; diff --git a/src/api/dappMethods/index.ts b/src/api/extensionMethods/sites.ts similarity index 61% rename from src/api/dappMethods/index.ts rename to src/api/extensionMethods/sites.ts index 13a50981..2983ba0a 100644 --- a/src/api/dappMethods/index.ts +++ b/src/api/extensionMethods/sites.ts @@ -1,7 +1,7 @@ -import type { ApiDappUpdate, OnApiDappUpdate } from '../types/dappUpdates'; +import type { ApiSiteUpdate, OnApiSiteUpdate } from '../types/dappUpdates'; import type { OnApiUpdate } from '../types'; -import { getCurrentAccountId, waitLogin } from '../common/accounts'; +import { getCurrentAccountIdOrFail, waitLogin } from '../common/accounts'; import { resolveDappPromise } from '../common/dappPromises'; import storage from '../storages/extension'; import { clearCache, openPopupWindow } from './window'; @@ -11,49 +11,49 @@ let onPopupUpdate: OnApiUpdate; // Sometimes (e.g. when Dev Tools is open) dapp needs more time to subscribe to provider const INIT_UPDATE_DELAY = 50; -const dappUpdaters: OnApiDappUpdate[] = []; +const siteUpdaters: OnApiSiteUpdate[] = []; // This method is called from `initApi` which in turn is called when popup is open -export function initDappMethods(_onPopupUpdate: OnApiUpdate) { +export function initSiteMethods(_onPopupUpdate: OnApiUpdate) { onPopupUpdate = _onPopupUpdate; resolveDappPromise('whenPopupReady'); } -export async function connectDapp( - onDappUpdate: OnApiDappUpdate, - onDappSendUpdates: (x: OnApiDappUpdate) => Promise, // TODO Remove this when deleting the legacy provider +export async function connectSite( + onSiteUpdate: OnApiSiteUpdate, + onSiteSendUpdates: (x: OnApiSiteUpdate) => Promise, // TODO Remove this when deleting the legacy provider ) { - dappUpdaters.push(onDappUpdate); + siteUpdaters.push(onSiteUpdate); const isTonMagicEnabled = await storage.getItem('isTonMagicEnabled'); const isDeeplinkHookEnabled = await storage.getItem('isDeeplinkHookEnabled'); function sendUpdates() { - onDappUpdate({ + onSiteUpdate({ type: 'updateTonMagic', isEnabled: Boolean(isTonMagicEnabled), }); - onDappUpdate({ + onSiteUpdate({ type: 'updateDeeplinkHook', isEnabled: Boolean(isDeeplinkHookEnabled), }); - onDappSendUpdates(onDappUpdate); + onSiteSendUpdates(onSiteUpdate); } sendUpdates(); setTimeout(sendUpdates, INIT_UPDATE_DELAY); } -export function deactivateDapp(onDappUpdate: OnApiDappUpdate) { - const index = dappUpdaters.findIndex((updater) => updater === onDappUpdate); +export function deactivateSite(onDappUpdate: OnApiSiteUpdate) { + const index = siteUpdaters.findIndex((updater) => updater === onDappUpdate); if (index !== -1) { - dappUpdaters.splice(index, 1); + siteUpdaters.splice(index, 1); } } -export function updateDapps(update: ApiDappUpdate) { - dappUpdaters.forEach((onDappUpdate) => { +export function updateSites(update: ApiSiteUpdate) { + siteUpdaters.forEach((onDappUpdate) => { onDappUpdate(update); }); } @@ -81,11 +81,3 @@ export async function prepareTransaction(params: { export async function flushMemoryCache() { await clearCache(); } - -export async function getCurrentAccountIdOrFail() { - const accountId = await getCurrentAccountId(); - if (!accountId) { - throw new Error('The user is not authorized in the wallet'); - } - return accountId; -} diff --git a/src/api/extensionMethods/types.ts b/src/api/extensionMethods/types.ts new file mode 100644 index 00000000..65f489c2 --- /dev/null +++ b/src/api/extensionMethods/types.ts @@ -0,0 +1,15 @@ +import type * as extensionMethods from './extension'; +import type * as legacyDappMethods from './legacy'; +import type * as siteMethods from './sites'; + +export type ExtensionMethods = typeof extensionMethods; +export type ExtensionMethodArgs = Parameters; +export type ExtensionMethodResponse = ReturnType; + +export type SiteMethods = typeof siteMethods; +export type SiteMethodArgs = Parameters; +export type SiteMethodResponse = ReturnType; + +export type LegacyDappMethods = typeof legacyDappMethods; +export type LegacyDappMethodArgs = Parameters; +export type LegacyDappMethodResponse = ReturnType; diff --git a/src/api/dappMethods/window.ts b/src/api/extensionMethods/window.ts similarity index 85% rename from src/api/dappMethods/window.ts rename to src/api/extensionMethods/window.ts index e64b1f77..f665747d 100644 --- a/src/api/dappMethods/window.ts +++ b/src/api/extensionMethods/window.ts @@ -1,4 +1,4 @@ -import extension from '../../lib/webextension-polyfill'; +import extension from 'webextension-polyfill'; import { createDappPromise, rejectAllDappPromises } from '../common/dappPromises'; import storage from '../storages/extension'; @@ -17,6 +17,7 @@ const WINDOW_DEFAULTS = { }; const MARGIN_RIGHT = 20; const WINDOW_STATE_MONITOR_INTERVAL = 3000; +const MINIMAL_WINDOW = 100; (function init() { if (!chrome) { @@ -50,12 +51,23 @@ const WINDOW_STATE_MONITOR_INTERVAL = 3000; return; } + const { height = 0, width = 0 } = currentWindow; + const correctHeight = Math.max(height, MINIMAL_WINDOW); + const correctWidth = Math.max(width, MINIMAL_WINDOW); + void storage.setItem('windowState', { top: currentWindow.top, left: currentWindow.left, - height: currentWindow.height, - width: currentWindow.width, + height: correctHeight, + width: correctWidth, }); + + if (height < MINIMAL_WINDOW || width < MINIMAL_WINDOW) { + await extension.windows.update(currentWindowId!, { + height: MINIMAL_WINDOW, + width: MINIMAL_WINDOW, + }); + } }, WINDOW_STATE_MONITOR_INTERVAL); }()); diff --git a/src/api/hooks.ts b/src/api/hooks.ts new file mode 100644 index 00000000..d5161a8f --- /dev/null +++ b/src/api/hooks.ts @@ -0,0 +1,30 @@ +import { logDebugError } from '../util/logs'; + +interface Hooks { + onFirstLogin: AnyFunction; + onFullLogout: AnyFunction; + onWindowNeeded: AnyFunction; + onDappDisconnected: (accountId: string, origin: string) => any; + onDappsChanged: AnyFunction; +} + +const hooks: Partial<{ + [K in keyof Hooks]: Hooks[K][]; +}> = {}; + +export function addHooks(partial: Partial) { + for (const [name, hook] of Object.entries(partial) as Entries) { + hooks[name] = (hooks[name] ?? []).concat([hook]); + } +} + +export async function callHook(name: T, ...args: Parameters) { + for (const hook of hooks[name] ?? []) { + try { + // @ts-ignore + await hook(...args); + } catch (err) { + logDebugError(`callHooks:${name}`, err); + } + } +} diff --git a/src/api/methods/accounts.ts b/src/api/methods/accounts.ts index 3d35efe6..56047f43 100644 --- a/src/api/methods/accounts.ts +++ b/src/api/methods/accounts.ts @@ -6,13 +6,14 @@ import { waitStorageMigration } from '../common/helpers'; import { IS_EXTENSION } from '../environment'; import { storage } from '../storages'; import { deactivateAccountDapp, deactivateAllDapps, onActiveDappAccountUpdated } from './dapps'; -import { clearExtensionFeatures, setupDefaultExtensionFeatures } from './extension'; import { sendUpdateTokens, setupBackendStakingStatePolling, setupBalanceBasedPolling, } from './polling'; +import { callHook } from '../hooks'; + let activeAccountId: string | undefined; export async function activateAccount(accountId: string, newestTxIds?: ApiTxIdBySlug) { @@ -30,9 +31,7 @@ export async function activateAccount(accountId: string, newestTxIds?: ApiTxIdBy deactivateAllDapps(); } - if (isFirstLogin) { - setupDefaultExtensionFeatures(); - } + callHook('onFirstLogin'); onActiveDappAccountUpdated(accountId); } @@ -51,7 +50,7 @@ export function deactivateAllAccounts() { if (IS_EXTENSION) { deactivateAllDapps(); - void clearExtensionFeatures(); + callHook('onFullLogout'); } } diff --git a/src/api/methods/auth.ts b/src/api/methods/auth.ts index f8709b56..8c1656f8 100644 --- a/src/api/methods/auth.ts +++ b/src/api/methods/auth.ts @@ -2,12 +2,14 @@ import type { LedgerWalletInfo } from '../../util/ledger/types'; import type { ApiAccountInfo, ApiNetwork, ApiTxIdBySlug } from '../types'; import blockchains from '../blockchains'; -import { getNewAccountId, removeAccountValue, setAccountValue } from '../common/accounts'; +import { + getNewAccountId, removeAccountValue, removeNetworkAccountsValue, setAccountValue, +} from '../common/accounts'; import { bytesToHex } from '../common/utils'; import { IS_DAPP_SUPPORTED } from '../environment'; import { storage } from '../storages'; import { activateAccount, deactivateAllAccounts, deactivateCurrentAccount } from './accounts'; -import { removeAccountDapps, removeAllDapps } from './dapps'; +import { removeAccountDapps, removeAllDapps, removeNetworkDapps } from './dapps'; export function generateMnemonic() { return blockchains.ton.generateMnemonic(); @@ -122,6 +124,18 @@ async function storeAccount( ]); } +export async function removeNetworkAccounts(network: ApiNetwork) { + deactivateAllAccounts(); + + await Promise.all([ + removeNetworkAccountsValue(network, 'addresses'), + removeNetworkAccountsValue(network, 'publicKeys'), + removeNetworkAccountsValue(network, 'mnemonicsEncrypted'), + removeNetworkAccountsValue(network, 'accounts'), + IS_DAPP_SUPPORTED && removeNetworkDapps(network), + ]); +} + export async function resetAccounts() { deactivateAllAccounts(); diff --git a/src/api/methods/dapps.ts b/src/api/methods/dapps.ts index 2aa75fe3..1546f755 100644 --- a/src/api/methods/dapps.ts +++ b/src/api/methods/dapps.ts @@ -3,30 +3,20 @@ import type { } from '../types'; import { buildAccountId, parseAccountId } from '../../util/account'; -import { getAccountValue, removeAccountValue, setAccountValue } from '../common/accounts'; -import { isUpdaterAlive, toInternalAccountId } from '../common/helpers'; -import { updateDapps } from '../dappMethods'; +import { + getAccountValue, removeAccountValue, removeNetworkAccountsValue, setAccountValue, +} from '../common/accounts'; +import { isUpdaterAlive } from '../common/helpers'; import { storage } from '../storages'; -type OnDappDisconnected = (accountId: string, origin: string) => Promise | void; +import { callHook } from '../hooks'; const activeDappByAccountId: Record = {}; let onUpdate: OnApiUpdate; -let onDappsChanged: AnyToVoidFunction = () => {}; -let onDappDisconnected: OnDappDisconnected = () => {}; - -export function initDapps( - _onUpdate: OnApiUpdate, - _onDappsChanged?: AnyToVoidFunction, - _onDappDisconnected?: OnDappDisconnected, -) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars + +export function initDapps(_onUpdate: OnApiUpdate) { onUpdate = _onUpdate; - if (_onDappsChanged && _onDappDisconnected) { - onDappsChanged = _onDappsChanged; - onDappDisconnected = _onDappDisconnected; - } } export function onActiveDappAccountUpdated(accountId: string) { @@ -133,19 +123,6 @@ export async function addDapp(accountId: string, dapp: ApiDapp) { await setAccountValue(accountId, 'dapps', dapps); } -export async function addDappToAccounts(dapp: ApiDapp, accountIds: string[]) { - const dappsByAccount = await storage.getItem('dapps') || {}; - - accountIds.forEach((accountId) => { - const internalId = toInternalAccountId(accountId); - const dapps = dappsByAccount[internalId] || {}; - dapps[dapp.origin] = dapp; - - dappsByAccount[internalId] = dapps; - }); - await storage.setItem('dapps', dappsByAccount); -} - export async function deleteDapp(accountId: string, origin: string, dontNotifyDapp?: boolean) { const dapps = await getDappsByOrigin(accountId); if (!(origin in dapps)) { @@ -168,14 +145,10 @@ export async function deleteDapp(accountId: string, origin: string, dontNotifyDa } if (!dontNotifyDapp) { - updateDapps({ - type: 'disconnectDapp', - origin, - }); - await onDappDisconnected(accountId, origin); + callHook('onDappDisconnected', accountId, origin); } - onDappsChanged(); + callHook('onDappsChanged'); return true; } @@ -186,16 +159,16 @@ export async function deleteAllDapps(accountId: string) { const origins = Object.keys(await getDappsByOrigin(accountId)); await setAccountValue(accountId, 'dapps', {}); - await Promise.all(origins.map(async (origin) => { + origins.forEach((origin) => { onUpdate({ type: 'dappDisconnect', accountId, origin, }); - await onDappDisconnected(accountId, origin); - })); + callHook('onDappDisconnected', accountId, origin); + }); - onDappsChanged(); + callHook('onDappsChanged'); } export async function getDapps(accountId: string): Promise { @@ -240,12 +213,18 @@ export function getDappsState(): Promise { export async function removeAccountDapps(accountId: string) { await removeAccountValue(accountId, 'dapps'); - onDappsChanged(); + + callHook('onDappsChanged'); } export async function removeAllDapps() { await storage.removeItem('dapps'); - onDappsChanged(); + + callHook('onDappsChanged'); +} + +export function removeNetworkDapps(network: ApiNetwork) { + return removeNetworkAccountsValue(network, 'dapps'); } export function getSseLastEventId(): Promise { diff --git a/src/api/methods/index.ts b/src/api/methods/index.ts index 2202f03f..64d5cadf 100644 --- a/src/api/methods/index.ts +++ b/src/api/methods/index.ts @@ -2,7 +2,6 @@ export * from './auth'; export * from './wallet'; export * from './transactions'; export * from './nfts'; -export * from './extension'; export * from './polling'; export * from './accounts'; export * from './staking'; @@ -20,4 +19,3 @@ export { export { startSseConnection, } from '../tonConnect/sse'; -export * from './swap'; diff --git a/src/api/methods/init.ts b/src/api/methods/init.ts index a97a561e..00fd16c1 100644 --- a/src/api/methods/init.ts +++ b/src/api/methods/init.ts @@ -1,17 +1,20 @@ -import type { ApiInitArgs, ApiUpdate, OnApiUpdate } from '../types'; +import type { ApiInitArgs, OnApiUpdate } from '../types'; import { IS_SSE_SUPPORTED } from '../../config'; import { connectUpdater, startStorageMigration } from '../common/helpers'; -import * as dappMethods from '../dappMethods'; -import * as legacyDappMethods from '../dappMethods/legacy'; -import { IS_DAPP_SUPPORTED, IS_EXTENSION } from '../environment'; +import { IS_DAPP_SUPPORTED } from '../environment'; import * as tonConnect from '../tonConnect'; import { resetupSseConnection, sendSseDisconnect } from '../tonConnect/sse'; import * as methods from '.'; -export default async function init(_onUpdate: OnApiUpdate, args: ApiInitArgs) { - const onUpdate: OnApiUpdate = (update: ApiUpdate) => _onUpdate(update); +import { addHooks } from '../hooks'; +addHooks({ + onDappDisconnected: sendSseDisconnect, + onDappsChanged: resetupSseConnection, +}); + +export default async function init(onUpdate: OnApiUpdate, args: ApiInitArgs) { connectUpdater(onUpdate); methods.initPolling(onUpdate, methods.isAccountActive, args); @@ -20,16 +23,9 @@ export default async function init(_onUpdate: OnApiUpdate, args: ApiInitArgs) { methods.initStaking(onUpdate); if (IS_DAPP_SUPPORTED) { - const onDappChanged = IS_SSE_SUPPORTED ? resetupSseConnection : undefined; - const onDappDisconnected = IS_SSE_SUPPORTED ? sendSseDisconnect : undefined; - methods.initDapps(onUpdate, onDappChanged, onDappDisconnected); + methods.initDapps(onUpdate); tonConnect.initTonConnect(onUpdate); } - if (IS_EXTENSION) { - void methods.initExtension(onUpdate); - legacyDappMethods.initLegacyDappMethods(onUpdate); - dappMethods.initDappMethods(onUpdate); - } await startStorageMigration(); diff --git a/src/api/methods/polling.ts b/src/api/methods/polling.ts index fea6a70e..354a38fa 100644 --- a/src/api/methods/polling.ts +++ b/src/api/methods/polling.ts @@ -1,3 +1,5 @@ +import { randomBytes } from 'tweetnacl'; + import type { ApiBaseToken, ApiInitArgs, @@ -9,7 +11,7 @@ import type { OnApiUpdate, } from '../types'; -import { APP_VERSION, TON_TOKEN_SLUG } from '../../config'; +import { APP_ENV, APP_VERSION, TON_TOKEN_SLUG } from '../../config'; import { compareTransactions } from '../../util/compareTransactions'; import { logDebugError } from '../../util/logs'; import { pause } from '../../util/schedulers'; @@ -20,6 +22,7 @@ import { tryUpdateKnownAddresses } from '../common/addresses'; import { callBackendGet } from '../common/backend'; import { isUpdaterAlive, resolveBlockchainKey } from '../common/helpers'; import { txCallbacks } from '../common/txCallbacks'; +import { storage } from '../storages'; import { getBackendStakingState } from './staking'; type IsAccountActiveFn = (accountId: string) => boolean; @@ -28,7 +31,7 @@ const POLLING_INTERVAL = 1100; // 1.1 sec const BACKEND_POLLING_INTERVAL = 30000; // 30 sec const LONG_BACKEND_POLLING_INTERVAL = 60000; // 1 min -const TRANSACTIONS_WAITING_PAUSE = 2000; // 2 sec +const PAUSE_AFTER_BALANCE_CHANGE = 1000; // 1 sec const FIRST_TRANSACTIONS_LIMIT = 20; const NFT_FULL_POLLING_INTERVAL = 30000; // 30 sec @@ -37,6 +40,7 @@ const NFT_FULL_UPDATE_FREQUNCY = Math.round(NFT_FULL_POLLING_INTERVAL / POLLING_ let onUpdate: OnApiUpdate; let isAccountActive: IsAccountActiveFn; let origin: string; +let clientId: string | undefined; let preloadEnsurePromise: Promise; let pricesBySlug: Record; @@ -90,7 +94,6 @@ export async function setupBalanceBasedPolling(accountId: string, newestTxIds: A delete lastBalanceCache[accountId]; - let isFirstRun = true; let nftFromSec = Math.round(Date.now() / 1000); let nftUpdates: ApiNftUpdate[]; let i = 0; @@ -148,6 +151,8 @@ export async function setupBalanceBasedPolling(accountId: string, newestTxIds: A balance, }; + await pause(PAUSE_AFTER_BALANCE_CHANGE); + // Fetch and process token balances const tokenBalances = await blockchain.getAccountTokenBalances(accountId).catch(logAndRescue); if (!isUpdaterAlive(localOnUpdate) || !isAccountActive(accountId)) return; @@ -179,9 +184,6 @@ export async function setupBalanceBasedPolling(accountId: string, newestTxIds: A // Fetch transactions for tokens with a changed balance if (changedTokenSlugs.length) { - if (!isFirstRun) { - await pause(TRANSACTIONS_WAITING_PAUSE); - } const newTxIds = await processNewTokenTransactions(accountId, newestTxIds, changedTokenSlugs); newestTxIds = { ...newestTxIds, ...newTxIds }; } @@ -191,7 +193,6 @@ export async function setupBalanceBasedPolling(accountId: string, newestTxIds: A if (!isUpdaterAlive(localOnUpdate) || !isAccountActive(accountId)) return; nftUpdates.forEach(onUpdate); - isFirstRun = false; i++; } catch (err) { logDebugError('setupBalancePolling', err); @@ -276,6 +277,8 @@ export async function tryUpdateTokens(localOnUpdate: OnApiUpdate) { callBackendGet('/prices', undefined, { 'X-App-Origin': origin, 'X-App-Version': APP_VERSION, + 'X-App-ClientID': clientId ?? await getClientId(), + 'X-App-Env': APP_ENV, }) as Promise>, callBackendGet('/known-tokens') as Promise, ]); @@ -297,6 +300,15 @@ export async function tryUpdateTokens(localOnUpdate: OnApiUpdate) { } } +async function getClientId() { + clientId = await storage.getItem('clientId'); + if (!clientId) { + clientId = Buffer.from(randomBytes(10)).toString('hex'); + await storage.setItem('clientId', clientId); + } + return clientId; +} + export function sendUpdateTokens() { const tokens = getKnownTokens(); Object.values(tokens).forEach((token) => { diff --git a/src/api/methods/staking.ts b/src/api/methods/staking.ts index 8dd46a2e..8a88fcca 100644 --- a/src/api/methods/staking.ts +++ b/src/api/methods/staking.ts @@ -36,7 +36,7 @@ export async function submitStake(accountId: string, password: string, amount: s const localTransaction = createLocalTransaction(onUpdate, accountId, { amount: result.amount, fromAddress, - toAddress: result.resolvedAddress, + toAddress: result.normalizedAddress, comment: STAKE_COMMENT, fee: fee || '0', type: 'stake', @@ -51,7 +51,7 @@ export async function submitStake(accountId: string, password: string, amount: s export async function submitUnstake(accountId: string, password: string, fee?: string) { const blockchain = blockchains[resolveBlockchainKey(accountId)!]; - const toAddress = await fetchStoredAddress(accountId); + const fromAddress = await fetchStoredAddress(accountId); const result = await blockchain.submitUnstake(accountId, password); if ('error' in result) { @@ -60,8 +60,8 @@ export async function submitUnstake(accountId: string, password: string, fee?: s const localTransaction = createLocalTransaction(onUpdate, accountId, { amount: result.amount, - fromAddress: result.resolvedAddress, - toAddress, + fromAddress, + toAddress: result.normalizedAddress, comment: UNSTAKE_COMMENT, fee: fee || '0', type: 'unstakeRequest', diff --git a/src/api/methods/swap.ts b/src/api/methods/swap.ts deleted file mode 100644 index 148f7d05..00000000 --- a/src/api/methods/swap.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { - ApiSwapBuildRequest, - ApiSwapBuildResponse, - ApiSwapCurrency, - ApiSwapEstimateRequest, - ApiSwapEstimateResponse, - ApiSwapShortCurrency, - ApiSwapTonCurrency, -} from '../types'; - -import { callBackendGet, callBackendPost } from '../common/backend'; - -export function swapEstimate(params: ApiSwapEstimateRequest): Promise { - return callBackendPost('/swap/ton/estimate', params); -} - -export function swapBuild(params: ApiSwapBuildRequest): Promise { - return callBackendPost('/swap/ton/build', params); -} - -export function swapGetCurrencies(): Promise { - return callBackendGet('/swap/currencies'); -} - -export function swapGetTonCurrencies(): Promise { - return callBackendGet('/swap/ton/tokens'); -} - -export function swapGetTonPairs(): Promise { - return callBackendGet('/swap/ton/pairs'); -} diff --git a/src/api/methods/transactions.ts b/src/api/methods/transactions.ts index 47ab9a56..282a723a 100644 --- a/src/api/methods/transactions.ts +++ b/src/api/methods/transactions.ts @@ -60,7 +60,7 @@ export async function submitTransfer(options: ApiSubmitTransferOptions) { const localTransaction = createLocalTransaction(onUpdate, accountId, { amount, fromAddress, - toAddress, + toAddress: result.normalizedAddress, comment: shouldEncrypt ? undefined : comment, encryptedComment, fee: fee || '0', diff --git a/src/api/methods/wallet.ts b/src/api/methods/wallet.ts index 24c5ac32..a9989c67 100644 --- a/src/api/methods/wallet.ts +++ b/src/api/methods/wallet.ts @@ -60,7 +60,7 @@ export function confirmDappRequest(promiseId: string, data: any) { export function confirmDappRequestConnect(promiseId: string, data: { password?: string; - additionalAccountIds?: string[]; + accountId?: string; signature?: string; }) { dappPromises.resolveDappPromise(promiseId, data); diff --git a/src/api/providers/direct/connector.ts b/src/api/providers/direct/connector.ts index 6dc4266c..23396b23 100644 --- a/src/api/providers/direct/connector.ts +++ b/src/api/providers/direct/connector.ts @@ -1,4 +1,4 @@ -import type { MethodArgs, MethodResponse, Methods } from '../../methods/types'; +import type { AllMethodArgs, AllMethodResponse, AllMethods } from '../../types/methods'; import type { ApiInitArgs, OnApiUpdate } from '../../types'; import * as methods from '../../methods'; @@ -10,7 +10,7 @@ export function initApi(onUpdate: OnApiUpdate, initArgs: ApiInitArgs | (() => Ap init(onUpdate, args); } -export function callApi(fnName: T, ...args: MethodArgs): MethodResponse { +export function callApi(fnName: T, ...args: AllMethodArgs): AllMethodResponse { // @ts-ignore - return methods[fnName](...args) as MethodResponse; + return methods[fnName](...args) as AllMethodResponse; } diff --git a/src/api/providers/extension/connectorForPageScript.ts b/src/api/providers/extension/connectorForPageScript.ts index f0d00018..dc7087f4 100644 --- a/src/api/providers/extension/connectorForPageScript.ts +++ b/src/api/providers/extension/connectorForPageScript.ts @@ -1,8 +1,10 @@ -import type { OnApiDappUpdate } from '../../types/dappUpdates'; +import type { OnApiSiteUpdate } from '../../types/dappUpdates'; import type { - DappMethodResponse, DappMethods, LegacyDappMethodResponse, + LegacyDappMethodResponse, LegacyDappMethods, -} from '../../dappMethods/types'; + SiteMethodResponse, + SiteMethods, +} from '../../extensionMethods/types'; import { PAGE_CONNECTOR_CHANNEL } from './config'; import { logDebugError } from '../../../util/logs'; @@ -11,16 +13,16 @@ import { createConnector } from '../../../util/PostMessageConnector'; let connector: Connector; -type Methods = DappMethods & LegacyDappMethods; +type Methods = SiteMethods & LegacyDappMethods; type MethodResponse = ( - T extends keyof DappMethods - ? DappMethodResponse + T extends keyof SiteMethods + ? SiteMethodResponse : T extends keyof LegacyDappMethods ? LegacyDappMethodResponse : never ); -export function initApi(onUpdate: OnApiDappUpdate) { +export function initApi(onUpdate: OnApiSiteUpdate) { connector = createConnector(window, onUpdate, PAGE_CONNECTOR_CHANNEL, window.location.href); return connector; } diff --git a/src/api/providers/extension/pageContentProxy.ts b/src/api/providers/extension/pageContentProxy.ts index 3a675e2c..4f36c0e3 100644 --- a/src/api/providers/extension/pageContentProxy.ts +++ b/src/api/providers/extension/pageContentProxy.ts @@ -1,11 +1,8 @@ -import type { Runtime } from 'webextension-polyfill'; -import extension from '../../../lib/webextension-polyfill'; - import { CONTENT_SCRIPT_PORT, PAGE_CONNECTOR_CHANNEL } from './config'; const PAGE_ORIGIN = window.location.href; -let port: Runtime.Port; +let port: chrome.runtime.Port; window.addEventListener('message', handlePageMessage); @@ -18,7 +15,7 @@ function handlePageMessage(e: MessageEvent) { } function connectPort() { - port = extension.runtime.connect({ name: CONTENT_SCRIPT_PORT }); + port = chrome.runtime.connect({ name: CONTENT_SCRIPT_PORT }); port.onMessage.addListener(sendToPage); } diff --git a/src/api/providers/extension/providerForContentScript.ts b/src/api/providers/extension/providerForContentScript.ts index 44bdbd2c..b9aed2e6 100644 --- a/src/api/providers/extension/providerForContentScript.ts +++ b/src/api/providers/extension/providerForContentScript.ts @@ -1,16 +1,16 @@ import type { TonConnectMethodArgs, TonConnectMethods } from '../../tonConnect/types/misc'; -import type { OnApiDappUpdate } from '../../types/dappUpdates'; +import type { OnApiSiteUpdate } from '../../types/dappUpdates'; import type { - DappMethodArgs, - DappMethods, LegacyDappMethodArgs, LegacyDappMethods, -} from '../../dappMethods/types'; + SiteMethodArgs, + SiteMethods, +} from '../../extensionMethods/types'; import { CONTENT_SCRIPT_PORT, PAGE_CONNECTOR_CHANNEL } from './config'; import { createExtensionInterface } from '../../../util/createPostMessageInterface'; -import * as dappApi from '../../dappMethods'; -import * as legacyDappApi from '../../dappMethods/legacy'; +import * as legacyDappApi from '../../extensionMethods/legacy'; +import * as siteApi from '../../extensionMethods/sites'; import * as tonConnectApi from '../../tonConnect'; const ALLOWED_METHODS = new Set([ @@ -32,7 +32,7 @@ createExtensionInterface(CONTENT_SCRIPT_PORT, ( name: string, origin?: string, ...args: any[] ) => { if (name === 'init') { - return dappApi.connectDapp(args[0] as OnApiDappUpdate, legacyDappApi.onDappSendUpdates); + return siteApi.connectSite(args[0] as OnApiSiteUpdate, legacyDappApi.onDappSendUpdates); } if (!ALLOWED_METHODS.has(name)) { @@ -54,9 +54,9 @@ createExtensionInterface(CONTENT_SCRIPT_PORT, ( return method(...[request].concat(args) as TonConnectMethodArgs); } - const method = dappApi[name as keyof DappMethods]; + const method = siteApi[name as keyof SiteMethods]; // @ts-ignore - return method(...args as DappMethodArgs); -}, PAGE_CONNECTOR_CHANNEL, (onUpdate: OnApiDappUpdate) => { - dappApi.deactivateDapp(onUpdate); + return method(...args as SiteMethodArgs); +}, PAGE_CONNECTOR_CHANNEL, (onUpdate: OnApiSiteUpdate) => { + siteApi.deactivateSite(onUpdate); }, true); diff --git a/src/api/providers/extension/providerForPopup.ts b/src/api/providers/extension/providerForPopup.ts index 575fa05c..ba0fcbd8 100644 --- a/src/api/providers/extension/providerForPopup.ts +++ b/src/api/providers/extension/providerForPopup.ts @@ -1,16 +1,25 @@ +import type { ExtensionMethodArgs, ExtensionMethods } from '../../extensionMethods/types'; import type { MethodArgs, Methods } from '../../methods/types'; import type { ApiInitArgs, OnApiUpdate } from '../../types'; import { POPUP_PORT } from './config'; import { createExtensionInterface } from '../../../util/createPostMessageInterface'; import { disconnectUpdater } from '../../common/helpers'; +import * as extensionMethods from '../../extensionMethods'; +import initExtensionMethods from '../../extensionMethods/init'; import * as methods from '../../methods'; -import init from '../../methods/init'; +import initMethods from '../../methods/init'; -createExtensionInterface(POPUP_PORT, (name: string, origin?: string, ...args: any[]) => { +void createExtensionInterface(POPUP_PORT, (name: string, origin?: string, ...args: any[]) => { if (name === 'init') { - return init(args[0] as OnApiUpdate, args[1] as ApiInitArgs); + void initMethods(args[0] as OnApiUpdate, args[1] as ApiInitArgs); + return initExtensionMethods(args[0] as OnApiUpdate); } else { + if (name in extensionMethods) { + // @ts-ignore + return extensionMethods[name](...args as ExtensionMethodArgs); + } + const method = methods[name as keyof Methods]; // @ts-ignore return method(...args as MethodArgs); diff --git a/src/api/providers/worker/connector.ts b/src/api/providers/worker/connector.ts index b35b13c7..8cd976c4 100644 --- a/src/api/providers/worker/connector.ts +++ b/src/api/providers/worker/connector.ts @@ -1,4 +1,4 @@ -import type { MethodArgs, MethodResponse, Methods } from '../../methods/types'; +import type { AllMethodArgs, AllMethodResponse, AllMethods } from '../../types/methods'; import type { ApiInitArgs, OnApiUpdate } from '../../types'; import { logDebugError } from '../../../util/logs'; @@ -16,7 +16,7 @@ export function initApi(onUpdate: OnApiUpdate, initArgs: ApiInitArgs | (() => Ap return connector.init(args); } -export async function callApi(fnName: T, ...args: MethodArgs) { +export async function callApi(fnName: T, ...args: AllMethodArgs) { if (!connector) { logDebugError('API is not initialized'); return undefined; @@ -26,7 +26,7 @@ export async function callApi(fnName: T, ...args: Metho return await (connector.request({ name: fnName, args, - }) as MethodResponse); + }) as AllMethodResponse); } catch (err) { logDebugError('callApi', err); return undefined; diff --git a/src/api/storages/extension.ts b/src/api/storages/extension.ts index 51ce819b..b79285d8 100644 --- a/src/api/storages/extension.ts +++ b/src/api/storages/extension.ts @@ -1,11 +1,9 @@ -import extension from '../../lib/webextension-polyfill'; - import type { Storage } from './types'; import { IS_EXTENSION } from '../environment'; // eslint-disable-next-line no-restricted-globals -const storage = IS_EXTENSION ? extension.storage.local : undefined; +const storage = IS_EXTENSION ? self.chrome.storage.local : undefined; export default ((storage && { getItem: async (key) => (await storage.get(key))?.[key], diff --git a/src/api/storages/types.ts b/src/api/storages/types.ts index 8866d00f..cb3c1955 100644 --- a/src/api/storages/types.ts +++ b/src/api/storages/types.ts @@ -26,6 +26,7 @@ export type StorageKey = 'addresses' | 'accounts' | 'stateVersion' | 'currentAccountId' +| 'clientId' // For extension | 'dapps' | 'dappMethods:lastAccountId' diff --git a/src/api/tonConnect/index.ts b/src/api/tonConnect/index.ts index 11d59f4e..982c45ea 100644 --- a/src/api/tonConnect/index.ts +++ b/src/api/tonConnect/index.ts @@ -40,21 +40,18 @@ import { fetchKeyPair } from '../blockchains/ton/auth'; import { LEDGER_SUPPORTED_PAYLOADS } from '../blockchains/ton/constants'; import { toBase64Address, toRawAddress } from '../blockchains/ton/util/tonweb'; import { - fetchStoredAccount, fetchStoredAddress, fetchStoredPublicKey, getCurrentAccountId, + fetchStoredAccount, fetchStoredAddress, fetchStoredPublicKey, getCurrentAccountId, getCurrentAccountIdOrFail, } from '../common/accounts'; import { createDappPromise } from '../common/dappPromises'; import { createLocalTransaction, isUpdaterAlive } from '../common/helpers'; import { base64ToBytes, bytesToBase64, handleFetchErrors, sha256, } from '../common/utils'; -import { getCurrentAccountIdOrFail } from '../dappMethods'; -import { openPopupWindow } from '../dappMethods/window'; import { IS_EXTENSION } from '../environment'; import * as apiErrors from '../errors'; import { activateDapp, addDapp, - addDappToAccounts, deactivateAccountDapp, deactivateDapp, deleteDapp, @@ -66,6 +63,8 @@ import * as errors from './errors'; import { BadRequestError } from './errors'; import { isValidString, isValidUrl } from './utils'; +import { callHook } from '../hooks'; + const { Address } = TonWeb.utils; const ton = blockchains.ton; @@ -92,6 +91,7 @@ export async function connect( const dapp = { ...await fetchDappMetadata(origin, message.manifestUrl), connectedAt: Date.now(), + ...('sseOptions' in request && { sse: request.sseOptions }), }; const addressItem = message.items.find(({ name }) => name === 'ton_addr'); @@ -106,18 +106,20 @@ export async function connect( throw new errors.BadRequestError("Missing 'ton_addr'"); } - await openExtensionPopup(); - const accountId = await getCurrentAccountOrFail(); + const isOpened = await openExtensionPopup(); + let accountId = await getCurrentAccountOrFail(); const isConnected = await isDappConnected(accountId, origin); let promiseResult: { - additionalAccountIds?: string[]; + accountId?: string; password?: string; signature?: string; } | undefined; if (!isConnected || proof) { - await openExtensionPopup(true); + if (!isOpened) { + await openExtensionPopup(true); + } const { promiseId, promise } = createDappPromise(); @@ -135,12 +137,8 @@ export async function connect( promiseResult = await promise; - const { additionalAccountIds } = promiseResult!; - if (additionalAccountIds) { - await addDappToAccounts(dapp, [accountId].concat(additionalAccountIds)); - } else { - await addDapp(accountId, dapp); - } + accountId = promiseResult!.accountId!; + await addDapp(accountId, dapp); } const result = await reconnect(request, id); @@ -358,7 +356,9 @@ async function checkTransactionMessages(accountId: string, messages: Transaction }); const checkResult = await ton.checkMultiTransactionDraft(accountId, preparedMessages); - handleDraftError(checkResult); + if ('error' in checkResult) { + handleDraftError(checkResult.error); + } return { preparedMessages, @@ -561,23 +561,23 @@ async function validateRequest(request: ApiDappRequest, skipConnection = false) return { origin, accountId }; } -function handleDraftError({ error }: { error?: ApiTransactionDraftError }) { - if (error) { - onPopupUpdate({ - type: 'showError', - error, - }); - throw new errors.BadRequestError(error); - } +function handleDraftError(error: ApiTransactionDraftError) { + onPopupUpdate({ + type: 'showError', + error, + }); + throw new errors.BadRequestError(error); } async function openExtensionPopup(force?: boolean) { if (!IS_EXTENSION || (!force && onPopupUpdate && isUpdaterAlive(onPopupUpdate))) { - return; + return false; } - await openPopupWindow(); + await callHook('onWindowNeeded'); await initPromise; + + return true; } async function getCurrentAccountOrFail() { diff --git a/src/api/tonConnect/sse.ts b/src/api/tonConnect/sse.ts index df4eb60a..f88f7d6f 100644 --- a/src/api/tonConnect/sse.ts +++ b/src/api/tonConnect/sse.ts @@ -7,19 +7,17 @@ import type { } from '@tonconnect/protocol'; import nacl, { randomBytes } from 'tweetnacl'; -import type { ApiSseOptions } from '../types'; +import type { ApiDappRequest, ApiSseOptions } from '../types'; -import { buildAccountId, parseAccountId } from '../../util/account'; +import { parseAccountId } from '../../util/account'; import { extractKey } from '../../util/iteratees'; import { logDebug } from '../../util/logs'; -import { waitLogin } from '../common/accounts'; +import { getCurrentNetwork, waitLogin } from '../common/accounts'; import { bytesToHex, handleFetchErrors } from '../common/utils'; -import { getActiveAccountId } from '../methods/accounts'; import { getDappsState, getSseLastEventId, setSseLastEventId, - updateDapp, } from '../methods/dapps'; import * as tonConnect from './index'; @@ -42,60 +40,61 @@ export async function startSseConnection(url: string, deviceInfo: DeviceInfo) { const version = Number(params.get('v') as string); const appClientId = params.get('id') as string; - const request = JSON.parse(params.get('r') as string) as ConnectRequest; + const connectRequest = JSON.parse(params.get('r') as string) as ConnectRequest; const ret = params.get('ret') as 'back' | 'none' | string | null; - const origin = new URL(request.manifestUrl).origin; + const origin = new URL(connectRequest.manifestUrl).origin; logDebug('SSE Start connection:', { - version, appClientId, request, ret, origin, + version, appClientId, connectRequest, ret, origin, }); + const { secretKey: secretKeyArray, publicKey: publicKeyArray } = nacl.box.keyPair(); + const secretKey = bytesToHex(secretKeyArray); + const clientId = bytesToHex(publicKeyArray); + const lastOutputId = 0; - const accountId = getActiveAccountId()!; - const result = await tonConnect.connect({ origin }, request, lastOutputId) as ConnectEvent; + const request: ApiDappRequest = { + origin, + sseOptions: { + clientId, + appClientId, + secretKey, + lastOutputId, + }, + }; + + const result = await tonConnect.connect(request, connectRequest, lastOutputId) as ConnectEvent; if (result.event === 'connect') { result.payload.device = deviceInfo; } - const { secretKey: secretKeyArray, publicKey: publicKeyArray } = nacl.box.keyPair(); - const secretKey = bytesToHex(secretKeyArray); - const clientId = bytesToHex(publicKeyArray); - await sendMessage(result, secretKey, clientId, appClientId); if (result.event === 'connect_error') { return; } - await updateDapp(accountId, origin, (dapp) => ({ - ...dapp, - sse: { - clientId, - appClientId, - secretKey, - lastOutputId, - }, - })); - void resetupSseConnection(); } export async function resetupSseConnection() { closeEventSource(); - const [lastEventId, dappsState] = await Promise.all([ + const [lastEventId, dappsState, network] = await Promise.all([ getSseLastEventId(), getDappsState(), + getCurrentNetwork(), ]); - if (!dappsState) { + if (!dappsState || !network) { return; } - sseDapps = Object.entries(dappsState).reduce((result, [internalAccountId, dapps]) => { - const accountId = buildAccountId(parseAccountId(internalAccountId)); // TODO Issue #471 - for (const dapp of Object.values(dapps)) { - result.push({ ...dapp.sse!, accountId, origin: dapp.origin }); + sseDapps = Object.entries(dappsState).reduce((result, [accountId, dapps]) => { + if (parseAccountId(accountId).network === network) { + for (const dapp of Object.values(dapps)) { + result.push({ ...dapp.sse!, accountId, origin: dapp.origin }); + } } return result; }, [] as SseDapp[]); diff --git a/src/api/types/backend.ts b/src/api/types/backend.ts deleted file mode 100644 index 333103d9..00000000 --- a/src/api/types/backend.ts +++ /dev/null @@ -1,51 +0,0 @@ -export type ApiSwapEstimateRequest = { - from: string; - fromAmount: string; - to: string; - slippage: number; -}; - -export type ApiSwapEstimateResponse = ApiSwapEstimateRequest & { - toAmount: string; - toMinAmount: string; - networkFee: number; - swapFee: number; - impact: number; -}; - -export type ApiSwapBuildRequest = ApiSwapEstimateRequest & { - toAmount: string; - toMinAmount: string; - slippage: number; - fromAddress: string; - dexLabel: string; -}; - -export type ApiSwapBuildResponse = ApiSwapBuildRequest & { - transfer: { - toAddress: string; - amount: string; - payload: string; - }; -}; - -export type ApiSwapCurrency = { - name: string; - symbol: string; - image: string; - blockchain: string; - slug: string; - contract?: string; - decimals?: number; -}; - -export type ApiSwapTonCurrency = ApiSwapCurrency & { - blockchain: 'ton'; - decimals: number; -}; - -export type ApiSwapShortCurrency = { - name: string; - symbol: string; - slug: string; -}; diff --git a/src/api/types/dappUpdates.ts b/src/api/types/dappUpdates.ts index 5384cdb6..50aa6436 100644 --- a/src/api/types/dappUpdates.ts +++ b/src/api/types/dappUpdates.ts @@ -8,26 +8,26 @@ export type ApiDappUpdateAccounts = { accounts: string[]; }; -export type ApiDappUpdateTonMagic = { +export type ApiSiteUpdateTonMagic = { type: 'updateTonMagic'; isEnabled: boolean; }; -export type ApiDappUpdateDeeplinkHook = { +export type ApiSiteUpdateDeeplinkHook = { type: 'updateDeeplinkHook'; isEnabled: boolean; }; -export type ApiDappDisconnect = { - type: 'disconnectDapp'; +export type ApiSiteDisconnect = { + type: 'disconnectSite'; origin: string; }; -export type ApiDappUpdate = ApiLegacyDappUpdate -| ApiDappUpdateTonMagic -| ApiDappUpdateDeeplinkHook -| ApiDappDisconnect; +export type ApiSiteUpdate = ApiLegacyDappUpdate +| ApiSiteUpdateTonMagic +| ApiSiteUpdateDeeplinkHook +| ApiSiteDisconnect; export type ApiLegacyDappUpdate = ApiDappUpdateBalance | ApiDappUpdateAccounts; -export type OnApiDappUpdate = (update: ApiDappUpdate) => void; +export type OnApiSiteUpdate = (update: ApiSiteUpdate) => void; diff --git a/src/api/types/errors.ts b/src/api/types/errors.ts index 58a89d25..2affec70 100644 --- a/src/api/types/errors.ts +++ b/src/api/types/errors.ts @@ -6,6 +6,7 @@ export enum ApiTransactionDraftError { DomainNotResolved = 'DomainNotResolved', WalletNotInitialized = 'WalletNotInitialized', UnsupportedHardwarePayload = 'UnsupportedHardwarePayload', + InvalidAddressFormat = 'InvalidAddressFormat', } export enum ApiTransactionError { diff --git a/src/api/types/index.ts b/src/api/types/index.ts index 2fca2e58..805b540f 100644 --- a/src/api/types/index.ts +++ b/src/api/types/index.ts @@ -2,5 +2,4 @@ export * from './updates'; export * from './misc'; export * from './payload'; export * from './errors'; -export * from './backend'; export * from './storage'; diff --git a/src/api/types/methods.ts b/src/api/types/methods.ts new file mode 100644 index 00000000..c6a90835 --- /dev/null +++ b/src/api/types/methods.ts @@ -0,0 +1,6 @@ +import type { ExtensionMethods } from '../extensionMethods/types'; +import type { Methods } from '../methods/types'; + +export type AllMethods = Methods & ExtensionMethods; +export type AllMethodArgs = Parameters; +export type AllMethodResponse = ReturnType; diff --git a/src/api/types/misc.ts b/src/api/types/misc.ts index 5f25fcc1..6151d173 100644 --- a/src/api/types/misc.ts +++ b/src/api/types/misc.ts @@ -1,6 +1,7 @@ import type TonWeb from 'tonweb'; import type { ApiParsedPayload } from './payload'; +import type { ApiSseOptions } from './storage'; export type ApiWalletVersion = keyof typeof TonWeb.Wallets['all']; @@ -119,6 +120,7 @@ export interface ApiDappPermissions { export type ApiDappRequest = { origin?: string; accountId?: string; + sseOptions?: ApiSseOptions; } | { origin: string; accountId: string; diff --git a/src/assets/font-icons/accept.svg b/src/assets/font-icons/accept.svg index f657783b..1d551a69 100644 --- a/src/assets/font-icons/accept.svg +++ b/src/assets/font-icons/accept.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/assets/font-icons/dot.svg b/src/assets/font-icons/dot.svg index 58eda085..974982d4 100644 --- a/src/assets/font-icons/dot.svg +++ b/src/assets/font-icons/dot.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/assets/font-icons/params.svg b/src/assets/font-icons/params.svg new file mode 100644 index 00000000..3bf98138 --- /dev/null +++ b/src/assets/font-icons/params.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/font-icons/replace.svg b/src/assets/font-icons/replace.svg new file mode 100644 index 00000000..0cbb4857 --- /dev/null +++ b/src/assets/font-icons/replace.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/font-icons/search.svg b/src/assets/font-icons/search.svg index 65437dfc..66e33b2c 100644 --- a/src/assets/font-icons/search.svg +++ b/src/assets/font-icons/search.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/assets/font-icons/swap.svg b/src/assets/font-icons/swap.svg new file mode 100644 index 00000000..0981ff6d --- /dev/null +++ b/src/assets/font-icons/swap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/lottie/duck_run.tgs b/src/assets/lottie/duck_run.tgs new file mode 100644 index 00000000..0fc5098b Binary files /dev/null and b/src/assets/lottie/duck_run.tgs differ diff --git a/src/assets/lottiePreview/duck_run.png b/src/assets/lottiePreview/duck_run.png new file mode 100644 index 00000000..f3c64d5d Binary files /dev/null and b/src/assets/lottiePreview/duck_run.png differ diff --git a/src/components/App.tsx b/src/components/App.tsx index 89f0c775..2e0aaa97 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -1,5 +1,4 @@ import React, { memo, useEffect } from '../lib/teact/teact'; -import extension from '../lib/webextension-polyfill'; import { AppState } from '../global/types'; @@ -171,6 +170,6 @@ export default memo(withGlobal((global): StateProps => { })(App)); async function handleCloseBrowserTab() { - const tab = await extension.tabs.getCurrent(); - await extension.tabs.remove(tab.id!); + const tab = await chrome.tabs.getCurrent(); + await chrome.tabs.remove(tab.id!); } diff --git a/src/components/auth/Auth.module.scss b/src/components/auth/Auth.module.scss index a0956d6a..0f97f6ab 100644 --- a/src/components/auth/Auth.module.scss +++ b/src/components/auth/Auth.module.scss @@ -106,6 +106,42 @@ color: var(--color-black); } +.infoBlock { + padding: 1rem; + + font-size: 0.9375rem; + color: var(--color-gray-1); + + background: var(--color-background-first); + border-radius: var(--border-radius-default); +} + +.text { + margin-bottom: 0; + + line-height: 1.1875rem; + + & + & { + margin-top: 1.1875rem; + } +} + +.informationCheckbox { + align-self: flex-start; + + margin-top: 1.5rem; + margin-bottom: auto !important; + margin-inline-start: 0.25rem; + padding-bottom: 2rem; + + font-weight: 600; +} + +.informationCheckboxContent::before, +.informationCheckboxContent::after { + top: -0.0625rem !important; +} + .info { width: 100%; @@ -223,6 +259,42 @@ } } +.stickerAndTitle { + display: flex; + column-gap: 1rem; + align-items: center; + + margin-top: 3.375rem; + margin-bottom: 1.5rem; + + :global(html.is-electron) & { + margin-top: 0; + } + + > .sticker { + margin-top: 0; + } + + > .title { + margin: 0; + + text-align: left; + } +} + +.backupNotice { + margin: 2rem 1.5rem 0; + + font-size: 0.9375rem; +} + +.backupNoticeButtons { + display: flex; + column-gap: 1rem; + + margin: 1.5rem 1rem 1rem; +} + .modalSticker { margin: -0.375rem auto 1.25rem; } @@ -320,6 +392,10 @@ } } + &_wide { + width: 100%; + } + &_mini { min-width: unset !important; } diff --git a/src/components/auth/Auth.tsx b/src/components/auth/Auth.tsx index 9f9bd7d0..45d7c3a2 100644 --- a/src/components/auth/Auth.tsx +++ b/src/components/auth/Auth.tsx @@ -12,9 +12,9 @@ import { useDeviceScreen } from '../../hooks/useDeviceScreen'; import SettingsAbout from '../settings/SettingsAbout'; import Transition from '../ui/Transition'; -import AuthCreateBackup from './AuthCreateBackup'; import AuthCreatePassword from './AuthCreatePassword'; import AuthCreatingWallet from './AuthCreatingWallet'; +import AuthDisclaimer from './AuthDisclaimer'; import AuthImportMnemonic from './AuthImportMnemonic'; import AuthStart from './AuthStart'; @@ -59,10 +59,27 @@ const Auth = ({ return ; case AuthState.createPassword: return ; - case AuthState.createBackup: - return ; + case AuthState.disclaimerAndBackup: + return ( + + ); case AuthState.importWallet: return ; + case AuthState.disclaimer: + return ( + + ); case AuthState.importWalletCreatePassword: return ; case AuthState.about: diff --git a/src/components/auth/AuthCreateBackup.tsx b/src/components/auth/AuthDisclaimer.tsx similarity index 52% rename from src/components/auth/AuthCreateBackup.tsx rename to src/components/auth/AuthDisclaimer.tsx index 3cff9c6e..afe0c181 100644 --- a/src/components/auth/AuthCreateBackup.tsx +++ b/src/components/auth/AuthDisclaimer.tsx @@ -1,5 +1,6 @@ import React, { memo, useCallback, useState } from '../../lib/teact/teact'; +import { ANIMATED_STICKER_MIDDLE_SIZE_PX } from '../../config'; import { getActions } from '../../global'; import renderText from '../../global/helpers/renderText'; import buildClassName from '../../util/buildClassName'; @@ -7,9 +8,12 @@ import { ANIMATED_STICKERS_PATHS } from '../ui/helpers/animatedAssets'; import useFlag from '../../hooks/useFlag'; import useLang from '../../hooks/useLang'; +import useLastCallback from '../../hooks/useLastCallback'; +import useShowTransition from '../../hooks/useShowTransition'; import AnimatedIconWithPreview from '../ui/AnimatedIconWithPreview'; import Button from '../ui/Button'; +import Checkbox from '../ui/Checkbox'; import Modal from '../ui/Modal'; import Transition from '../ui/Transition'; import MnemonicCheck from './MnemonicCheck'; @@ -21,6 +25,7 @@ import styles from './Auth.module.scss'; interface OwnProps { isActive?: boolean; + isImport?: boolean; mnemonic?: string[]; checkIndexes?: number[]; } @@ -33,24 +38,40 @@ enum BackupState { const SLIDE_ANIMATION_DURATION_MS = 250; -const AuthCreateBackup = ({ isActive, mnemonic, checkIndexes }: OwnProps) => { - const { afterCheckMnemonic, skipCheckMnemonic, restartCheckMnemonicIndexes } = getActions(); +const AuthDisclaimer = ({ + isActive, isImport, mnemonic, checkIndexes, +}: OwnProps) => { + const { + afterCheckMnemonic, + skipCheckMnemonic, + restartCheckMnemonicIndexes, + confirmDisclaimer, + } = getActions(); const lang = useLang(); const [isModalOpen, openModal, closeModal] = useFlag(); + const [isInformationConfirmed, setIsInformationConfirmed] = useState(false); + const { + shouldRender: shouldRenderStartButton, + transitionClassNames: startButtonTransitionClassNames, + } = useShowTransition(isInformationConfirmed && isImport); const [renderingKey, setRenderingKey] = useState(BackupState.Accept); const [nextKey, setNextKey] = useState(BackupState.View); - const handleModalClose = useCallback(() => { + const handleCloseBackupWarningModal = useLastCallback(() => { + setIsInformationConfirmed(false); + }); + + const handleModalClose = useLastCallback(() => { setRenderingKey(BackupState.Accept); setNextKey(BackupState.View); - }, []); + }); - const handleMnemonicView = useCallback(() => { + const handleMnemonicView = useLastCallback(() => { setRenderingKey(BackupState.View); setNextKey(BackupState.Confirm); - }, []); + }); const handleRestartCheckMnemonic = useCallback(() => { handleMnemonicView(); @@ -60,10 +81,10 @@ const AuthCreateBackup = ({ isActive, mnemonic, checkIndexes }: OwnProps) => { }, SLIDE_ANIMATION_DURATION_MS); }, [handleMnemonicView, restartCheckMnemonicIndexes]); - const handleShowMnemonicCheck = useCallback(() => { + const handleShowMnemonicCheck = useLastCallback(() => { setRenderingKey(BackupState.Confirm); setNextKey(undefined); - }, []); + }); const handleMnemonicCheckSubmit = useCallback(() => { closeModal(); @@ -103,34 +124,63 @@ const AuthCreateBackup = ({ isActive, mnemonic, checkIndexes }: OwnProps) => { return (
- -
{lang('Create Backup')}
-
-

{renderText(lang('$auth_backup_description1'))}

-

{renderText(lang('$auth_backup_description2'))}

-

{renderText(lang('$auth_backup_description3'))}

+
+ +
{lang('Use Responsibly')}
+
+
+

{renderText(lang('$auth_responsibly_description1'))}

+

{renderText(lang('$auth_responsibly_description2'))}

+

{renderText(lang('$auth_responsibly_description3'))}

+

{renderText(lang('$auth_responsibly_description4'))}

-
- +
+ )} +
+ + +

{renderText(lang('$auth_backup_warning_notice'))}

+
+
-
+ { ); }; -export default memo(AuthCreateBackup); +export default memo(AuthDisclaimer); diff --git a/src/components/auth/AuthStart.tsx b/src/components/auth/AuthStart.tsx index fc813379..282c16f6 100644 --- a/src/components/auth/AuthStart.tsx +++ b/src/components/auth/AuthStart.tsx @@ -50,7 +50,7 @@ const AuthStart = () => { onClick={openAbout} > {lang('More about MyTonWallet')} - +
@@ -189,7 +189,7 @@ function AccountSelector({ )}
diff --git a/src/components/main/sections/Content/Activity.tsx b/src/components/main/sections/Content/Activity.tsx index bca22ac0..0f885d91 100644 --- a/src/components/main/sections/Content/Activity.tsx +++ b/src/components/main/sections/Content/Activity.tsx @@ -1,12 +1,12 @@ import React, { - memo, useEffect, useMemo, + memo, useEffect, useMemo, useRef, useState, } from '../../../../lib/teact/teact'; import type { ApiToken, ApiTransaction } from '../../../../api/types'; import { ANIMATED_STICKER_BIG_SIZE_PX, TON_TOKEN_SLUG } from '../../../../config'; import { getActions, withGlobal } from '../../../../global'; -import { getIsTxIdLocal, getIsTynyTransaction } from '../../../../global/helpers'; +import { getIsTinyTransaction, getIsTxIdLocal } from '../../../../global/helpers'; import { selectCurrentAccountState, selectIsNewWallet } from '../../../../global/selectors'; import buildClassName from '../../../../util/buildClassName'; import { compareTransactions } from '../../../../util/compareTransactions'; @@ -41,6 +41,7 @@ type StateProps = { tokensBySlug?: Record; apyValue: number; savedAddresses?: Record; + isHistoryEndReached?: boolean; }; interface TransactionDateGroup { @@ -49,6 +50,7 @@ interface TransactionDateGroup { } const FURTHER_SLICE = 50; +const LOAD_MORE_REQUEST_TIMEOUT = 3_000; function Activity({ isActive, @@ -62,11 +64,16 @@ function Activity({ areTinyTransfersHidden, apyValue, savedAddresses, + isHistoryEndReached, }: OwnProps & StateProps) { - const { fetchTokenTransactions, fetchAllTransactions, showTransactionInfo } = getActions(); + const { + fetchTokenTransactions, fetchAllTransactions, showTransactionInfo, resetIsHistoryEndReached, + } = getActions(); const lang = useLang(); const { isLandscape } = useDeviceScreen(); + const [isFetching, setIsFetching] = useState(!isNewWallet); + const loadMoreTimeout = useRef(); const txIds = useMemo(() => { let idList: string[] | undefined; @@ -96,7 +103,7 @@ function Activity({ const transactions = useMemo(() => { if (!txIds) { - return undefined; + return []; } const allTransactions = txIds @@ -105,7 +112,7 @@ function Activity({ return Boolean( transaction?.slug && (!slug || transaction.slug === slug) - && (!areTinyTransfersHidden || !getIsTynyTransaction(transaction, tokensBySlug![transaction.slug])), + && (!areTinyTransfersHidden || !getIsTinyTransaction(transaction, tokensBySlug![transaction.slug])), ); }) as ApiTransaction[]; @@ -147,13 +154,30 @@ function Activity({ } }); - const { handleIntersection } = useInfiniteLoader({ isLoading, loadMore }); + const isLoadingDisabled = isHistoryEndReached || isLoading; + const { handleIntersection } = useInfiniteLoader({ isDisabled: isLoadingDisabled, isLoading, loadMore }); + + const handleFetchingState = useLastCallback(() => { + clearTimeout(loadMoreTimeout.current); + loadMoreTimeout.current = setTimeout(() => { + setIsFetching(false); + }, LOAD_MORE_REQUEST_TIMEOUT); + }); + + useEffect(() => { + if (isActive) { + setIsFetching(!isNewWallet); + resetIsHistoryEndReached(); + handleFetchingState(); + } + }, [handleFetchingState, isActive, isNewWallet, loadMore, slug]); useEffect(() => { - if (!transactions?.length && txIds?.length) { + if (!transactions.length) { loadMore(); + handleFetchingState(); } - }, [loadMore, txIds, transactions]); + }, [handleFetchingState, loadMore, transactions, txIds]); const handleTransactionClick = useLastCallback((txId: string) => { showTransactionInfo({ txId }); @@ -187,8 +211,7 @@ function Activity({ )); } - - if (transactions === undefined || (!transactions?.length && txIds?.length)) { + if (!transactions.length && isFetching) { return (
@@ -232,7 +255,9 @@ export default memo( const accountState = selectCurrentAccountState(global); const isNewWallet = selectIsNewWallet(global); const slug = accountState?.currentTokenSlug; - const { txIdsBySlug, byTxId, isLoading } = accountState?.transactions || {}; + const { + txIdsBySlug, byTxId, isLoading, isHistoryEndReached, + } = accountState?.transactions || {}; return { currentAccountId: currentAccountId!, slug, @@ -244,6 +269,7 @@ export default memo( areTinyTransfersHidden: global.settings.areTinyTransfersHidden, apyValue: accountState?.poolState?.lastApy || 0, savedAddresses: accountState?.savedAddresses, + isHistoryEndReached, }; })(Activity), ); diff --git a/src/components/main/sections/Content/Content.tsx b/src/components/main/sections/Content/Content.tsx index 8e5d6b73..02c42f16 100644 --- a/src/components/main/sections/Content/Content.tsx +++ b/src/components/main/sections/Content/Content.tsx @@ -1,7 +1,7 @@ import React, { memo, useCallback, useMemo } from '../../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../../global'; -import { selectCurrentAccountTokens } from '../../../../global/selectors'; +import { selectCurrentAccountTokens, selectIsHardwareAccount } from '../../../../global/selectors'; import buildClassName from '../../../../util/buildClassName'; import { useDeviceScreen } from '../../../../hooks/useDeviceScreen'; @@ -23,12 +23,13 @@ interface OwnProps { interface StateProps { tokenCount: number; + isNftSupported: boolean; } const MIN_ASSETS_FOR_DESKTOP_TAB_VIEW = 5; function Content({ - activeTabIndex, tokenCount, setActiveTabIndex, onStakedTokenClick, + activeTabIndex, tokenCount, setActiveTabIndex, onStakedTokenClick, isNftSupported, }: OwnProps & StateProps) { const { selectToken } = getActions(); const { isLandscape } = useDeviceScreen(); @@ -42,9 +43,9 @@ function Content({ ? [{ id: 'assets', title: lang('Assets') as string, className: styles.tab }] : []), { id: 'activity', title: lang('Activity') as string, className: styles.tab }, - { id: 'nft', title: lang('NFT') as string, className: styles.tab }, + ...(isNftSupported ? [{ id: 'nft', title: lang('NFT') as string, className: styles.tab }] : []), ], - [lang, shouldShowSeparateAssetsPanel], + [lang, shouldShowSeparateAssetsPanel, isNftSupported], ); activeTabIndex = Math.min(activeTabIndex, TABS.length - 1); @@ -116,9 +117,11 @@ export default memo( detachWhenChanged(global.currentAccountId); const tokens = selectCurrentAccountTokens(global); + const isLedger = selectIsHardwareAccount(global); return { tokenCount: tokens?.length ?? 0, + isNftSupported: !isLedger, }; })(Content), ); diff --git a/src/components/main/sections/Content/Token.tsx b/src/components/main/sections/Content/Token.tsx index 6a94f0dc..b1784c30 100644 --- a/src/components/main/sections/Content/Token.tsx +++ b/src/components/main/sections/Content/Token.tsx @@ -75,7 +75,12 @@ function Token({ return undefined; } - return 0 ? 'icon-arrow-up' : 'icon-arrow-down')} />; + return ( + 0 ? 'icon-arrow-up' : 'icon-arrow-down')} + aria-hidden + /> + ); } function renderInvestorView() { @@ -83,7 +88,10 @@ function Token({
{renderChangeIcon()}% - +
@@ -122,7 +130,10 @@ function Token({ )} @@ -487,15 +490,17 @@ function TransferInitial({ - + {isCommentSupported && ( + + )}
{withMenu && ( = ({ + message, + iconClassName, + tooltipClassName, +}) => { + const [isOpen, open, close] = useFlag(); + const { transitionClassNames, shouldRender } = useShowTransition(isOpen); + + // eslint-disable-next-line no-null/no-null + const iconRef = useRef(null); + // eslint-disable-next-line no-null/no-null + const tooltipRef = useRef(null); + + const tooltipStyle = useRef(); + const arrowStyle = useRef(); + + useEffect(() => { + if (!iconRef.current || !tooltipRef.current) return; + + const { top, left, width } = iconRef.current.getBoundingClientRect(); + const { + width: tooltipWidth, + height: tooltipHeight, + } = tooltipRef.current.getBoundingClientRect(); + + const tooltipCenter = (window.innerWidth - tooltipWidth) / 2; + const tooltipVerticalStyle = `top: ${top - tooltipHeight - ARROW_WIDTH}px;`; + const tooltipHorizontalStyle = `left: ${tooltipCenter}px;`; + const arrowHorizontalStyle = `left: ${left - tooltipCenter + width / 2 - ARROW_WIDTH / 2}px;`; + const arrowVerticalStyle = `top: ${tooltipHeight - ARROW_WIDTH / 2 - 1}px;`; + + tooltipStyle.current = `${tooltipVerticalStyle} ${tooltipHorizontalStyle}`; + arrowStyle.current = `${arrowVerticalStyle} ${arrowHorizontalStyle}`; + }, [shouldRender]); + + return ( +
+ {shouldRender && ( + +
+
+ {message} +
+
+
+ + )} + +
+ ); +}; + +export default memo(IconWithTooltip); diff --git a/src/components/ui/Input.module.scss b/src/components/ui/Input.module.scss index 2761a1c3..71bb2816 100644 --- a/src/components/ui/Input.module.scss +++ b/src/components/ui/Input.module.scss @@ -286,3 +286,15 @@ textarea.input { white-space: normal; } } + +.swapCorner { + &::after { + box-shadow: inset 0 0 0 0.125rem var(--color-blue); + } + + &_error { + &::after { + box-shadow: inset 0 0 0 0.125rem var(--color-red); + } + } +} \ No newline at end of file diff --git a/src/components/ui/Input.tsx b/src/components/ui/Input.tsx index 1adcc46e..623a9955 100644 --- a/src/components/ui/Input.tsx +++ b/src/components/ui/Input.tsx @@ -139,7 +139,7 @@ function Input({ aria-label={lang('Change password visibility')} tabIndex={-1} > - + )} {error && !label && ( diff --git a/src/components/ui/RichNumberInput.tsx b/src/components/ui/RichNumberInput.tsx index aa9845ac..968e3b29 100644 --- a/src/components/ui/RichNumberInput.tsx +++ b/src/components/ui/RichNumberInput.tsx @@ -1,7 +1,7 @@ +import { Big } from '../../lib/big.js'; import type { TeactNode } from '../../lib/teact/teact'; import React, { - memo, - useCallback, useEffect, useRef, + memo, useEffect, useRef, } from '../../lib/teact/teact'; import { FRACTION_DIGITS } from '../../config'; @@ -11,12 +11,13 @@ import { saveCaretPosition } from '../../util/saveCaretPosition'; import useFlag from '../../hooks/useFlag'; import useLang from '../../hooks/useLang'; +import useLastCallback from '../../hooks/useLastCallback'; import styles from './Input.module.scss'; type OwnProps = { id?: string; - labelText?: string; + labelText?: React.ReactNode; value?: number; hasError?: boolean; suffix?: string; @@ -24,11 +25,14 @@ type OwnProps = { inputClassName?: string; labelClassName?: string; valueClassName?: string; + cornerClassName?: string; children?: TeactNode; onChange?: (value?: number) => void; onBlur?: NoneToVoidFunction; + onFocus?: NoneToVoidFunction; onPressEnter?: (e: React.KeyboardEvent) => void; decimals?: number; + disabled?: boolean; }; function RichNumberInput({ @@ -42,17 +46,20 @@ function RichNumberInput({ inputClassName, labelClassName, valueClassName, + cornerClassName, onChange, onBlur, + onFocus, onPressEnter, decimals = FRACTION_DIGITS, + disabled, }: OwnProps) { // eslint-disable-next-line no-null/no-null const inputRef = useRef(null); const lang = useLang(); const [hasFocus, markHasFocus, unmarkHasFocus] = useFlag(false); - const updateHtml = useCallback((parts?: RegExpMatchArray) => { + const updateHtml = useLastCallback((parts?: RegExpMatchArray) => { const input = inputRef.current!; const newHtml = parts ? buildContentHtml(parts, suffix, decimals) : ''; @@ -64,7 +71,7 @@ function RichNumberInput({ // Trick to remove pseudo-element with placeholder in this tick input.classList.toggle(styles.isEmpty, !newHtml.length); - }, [decimals, suffix]); + }); useEffect(() => { const newValue = castValue(value, decimals); @@ -75,7 +82,7 @@ function RichNumberInput({ if (value !== newValue) { onChange?.(newValue); } - }, [decimals, onChange, updateHtml, value]); + }, [decimals, onChange, updateHtml, value, suffix]); function handleChange(e: React.FormEvent) { const inputValue = e.currentTarget.innerText.trim(); @@ -94,10 +101,19 @@ function RichNumberInput({ } } - const handleBlur = useCallback(() => { + const handleFocus = useLastCallback(() => { + if (disabled) return; + + markHasFocus(); + onFocus?.(); + }); + + const handleBlur = useLastCallback(() => { + if (disabled) return; + unmarkHasFocus(); onBlur?.(); - }, [onBlur, unmarkHasFocus]); + }); const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && onPressEnter) { @@ -122,10 +138,15 @@ function RichNumberInput({ hasError && styles.error, labelClassName, ); + const cornerFullClass = buildClassName( + cornerClassName, + hasFocus && styles.swapCorner, + hasError && styles.swapCorner_error, + ); return (
- {labelText && ( + {Boolean(labelText) && (
); } function getParts(value: string, decimals: number) { - return value.match(new RegExp(`^(\\d+)([.,])?(\\d{1,${decimals}})?$`)) || undefined; + const regex = new RegExp(`^(\\d+)([.,])?(\\d{1,${decimals}})?$`); + // Correct problem with numbers like 1e-8 + if (value.includes('e-')) { + Big.NE = -decimals - 1; + return new Big(value).toString().match(regex) || undefined; + } + return value.match(regex) || undefined; } function castValue(value?: number, decimals?: number) { diff --git a/src/components/ui/Tab.tsx b/src/components/ui/Tab.tsx index 1ae688bb..ec2dcce0 100644 --- a/src/components/ui/Tab.tsx +++ b/src/components/ui/Tab.tsx @@ -84,7 +84,7 @@ function Tab({ > {title} - +
); diff --git a/src/components/ui/Tooltip.tsx b/src/components/ui/Tooltip.tsx deleted file mode 100644 index f0780b80..00000000 --- a/src/components/ui/Tooltip.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import type { FC } from '../../lib/teact/teact'; -import React, { memo } from '../../lib/teact/teact'; - -import buildClassName from '../../util/buildClassName'; -import stopEvent from '../../util/stopEvent'; - -import useShowTransition from '../../hooks/useShowTransition'; - -import styles from './Tooltip.module.scss'; - -type OwnProps = { - isOpen?: boolean; - message: string; - className?: string; -}; - -const Tooltip: FC = ({ - isOpen, - message, - className, -}) => { - const { transitionClassNames, shouldRender } = useShowTransition(isOpen); - - if (!shouldRender) { - return undefined; - } - - return ( -
-
- {message} -
-
- ); -}; - -export default memo(Tooltip); diff --git a/src/components/ui/helpers/animatedAssets.ts b/src/components/ui/helpers/animatedAssets.ts index 144e2581..b1125900 100644 --- a/src/components/ui/helpers/animatedAssets.ts +++ b/src/components/ui/helpers/animatedAssets.ts @@ -3,6 +3,7 @@ import forge from '../../../assets/lottie/duck_forges.tgs'; import happy from '../../../assets/lottie/duck_happy.tgs'; import hello from '../../../assets/lottie/duck_hello.tgs'; import noData from '../../../assets/lottie/duck_no-data.tgs'; +import run from '../../../assets/lottie/duck_run.tgs'; import snitch from '../../../assets/lottie/duck_snitch.tgs'; import thumbUp from '../../../assets/lottie/duck_thumb.tgs'; import holdTon from '../../../assets/lottie/duck_ton.tgs'; @@ -12,6 +13,7 @@ import forgePreview from '../../../assets/lottiePreview/duck_forges.png'; import happyPreview from '../../../assets/lottiePreview/duck_happy.png'; import helloPreview from '../../../assets/lottiePreview/duck_hello.png'; import noDataPreview from '../../../assets/lottiePreview/duck_no-data.png'; +import runPreview from '../../../assets/lottiePreview/duck_run.png'; import snitchPreview from '../../../assets/lottiePreview/duck_snitch.png'; import thumbUpPreview from '../../../assets/lottiePreview/duck_thumb.png'; import holdTonPreview from '../../../assets/lottiePreview/duck_ton.png'; @@ -27,6 +29,7 @@ export const ANIMATED_STICKERS_PATHS = { noData, forge, wait, + run, helloPreview, snitchPreview, billPreview, @@ -36,4 +39,5 @@ export const ANIMATED_STICKERS_PATHS = { noDataPreview, forgePreview, waitPreview, + runPreview, }; diff --git a/src/config.ts b/src/config.ts index f7121088..b1d380e2 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,16 +1,16 @@ import type { LangItem } from './global/types'; +export const APP_ENV = process.env.APP_ENV; + export const APP_NAME = process.env.APP_NAME || 'MyTonWallet'; export const APP_VERSION = process.env.APP_VERSION!; -export const DEBUG = ( - process.env.APP_ENV !== 'production' && process.env.APP_ENV !== 'perf' && process.env.APP_ENV !== 'test' -); +export const DEBUG = APP_ENV !== 'production' && APP_ENV !== 'perf' && APP_ENV !== 'test'; export const DEBUG_MORE = false; export const IS_MOCKED_CLIENT = process.env.APP_MOCKED_CLIENT === '1'; -export const IS_TEST = process.env.APP_ENV === 'test'; -export const IS_PERF = process.env.APP_ENV === 'perf'; +export const IS_TEST = APP_ENV === 'test'; +export const IS_PERF = APP_ENV === 'perf'; export const IS_ELECTRON = process.env.IS_ELECTRON; export const IS_SSE_SUPPORTED = IS_ELECTRON; @@ -26,6 +26,7 @@ export const MOBILE_SCREEN_MAX_WIDTH = 700; // px export const ANIMATION_END_DELAY = 50; +export const ANIMATED_STICKER_TINY_SIZE_PX = 70; export const ANIMATED_STICKER_SMALL_SIZE_PX = 110; export const ANIMATED_STICKER_MIDDLE_SIZE_PX = 120; export const ANIMATED_STICKER_DEFAULT_PX = 150; @@ -38,6 +39,8 @@ export const DEFAULT_LANDSCAPE_ACTION_TAB_ID = 1; export const DEFAULT_DECIMAL_PLACES = 9; +export const DEFAULT_SLIPPAGE_VALUE = 0.5; + export const TOKEN_INFO = { toncoin: { name: 'Toncoin', @@ -85,12 +88,13 @@ export const GETGEMS_BASE_MAINNET_URL = 'https://getgems.io/'; export const GETGEMS_BASE_TESTNET_URL = 'https://testnet.getgems.io/'; export const TON_TOKEN_SLUG = 'toncoin'; +export const JWBTC_TOKEN_SLUG = 'ton-eqdcbkghmc'; export const PROXY_HOSTS = process.env.PROXY_HOSTS; export const TINY_TRANSFER_MAX_COST = 0.01; -export const LANG_CACHE_NAME = 'mtw-lang-15'; +export const LANG_CACHE_NAME = 'mtw-lang-23'; export const LANG_LIST: LangItem[] = [{ langCode: 'en', diff --git a/src/electron/config.yml b/src/electron/config.yml index d9b17a3b..169796d7 100644 --- a/src/electron/config.yml +++ b/src/electron/config.yml @@ -7,6 +7,7 @@ extraMetadata: files: - "dist" - "package.json" + - "!dist/get" - "!node_modules" directories: buildResources: "./public" @@ -20,7 +21,7 @@ publish: provider: "github" owner: "mytonwalletorg" repo: "mytonwallet" - releaseType: "release" + releaseType: "draft" win: target: "nsis" icon: "public/icon-electron-windows.ico" diff --git a/src/extension/contentScript.ts b/src/extension/contentScript.ts index c1ed5165..87a9da50 100644 --- a/src/extension/contentScript.ts +++ b/src/extension/contentScript.ts @@ -1,11 +1,9 @@ -import extension from '../lib/webextension-polyfill'; - import '../api/providers/extension/pageContentProxy'; (function injectScript() { const scriptTag = document.createElement('script'); scriptTag.async = true; - scriptTag.src = extension.runtime.getURL('/extensionPageScript.js'); + scriptTag.src = chrome.runtime.getURL('/extensionPageScript.js'); const container = document.head || document.documentElement; container.appendChild(scriptTag); diff --git a/src/extension/manifest.json b/src/extension/manifest.json index 3c7aeeb5..be0167da 100644 --- a/src/extension/manifest.json +++ b/src/extension/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "MyTonWallet · My TON Wallet", "description": "The most feature-rich TON extension – with support of multi-accounts, tokens, NFT, TON DNS, TON Sites, TON Proxy, and TON Magic.", - "version": "%%VERSION%%", + "version": "%%SET BY WEBPACK%%", "icons": { "192": "icon-192x192.png", "384": "icon-384x384.png", @@ -47,7 +47,5 @@ ] } ], - "content_security_policy": { - "extension_pages": "default-src 'none'; script-src 'self' 'wasm-unsafe-eval'; font-src https://fonts.gstatic.com/; style-src 'self' https://fonts.googleapis.com/; img-src 'self' data: https:; connect-src https: http://localhost:8081" - } + "content_security_policy": "%%SET BY WEBPACK%%" } diff --git a/src/extension/pageScript/index.ts b/src/extension/pageScript/index.ts index 4bc3e2d0..170ea023 100644 --- a/src/extension/pageScript/index.ts +++ b/src/extension/pageScript/index.ts @@ -1,4 +1,4 @@ -import type { ApiDappUpdate } from '../../api/types/dappUpdates'; +import type { ApiSiteUpdate } from '../../api/types/dappUpdates'; import { callApi, initApi } from '../../api/providers/extension/connectorForPageScript'; import { doDeeplinkHook } from './deeplinkHook'; @@ -12,7 +12,7 @@ const apiConnector = initApi(onUpdate); const tonProvider = initTonProvider(apiConnector); const tonConnect = initTonConnect(apiConnector); -function onUpdate(update: ApiDappUpdate) { +function onUpdate(update: ApiSiteUpdate) { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { type, ...args } = update; @@ -31,7 +31,7 @@ function onUpdate(update: ApiDappUpdate) { return; } - if (type === 'disconnectDapp') { + if (type === 'disconnectSite') { const { origin } = update; if (origin === siteOrigin) { tonConnect.onDisconnect(); diff --git a/src/global/actions/api/auth.ts b/src/global/actions/api/auth.ts index 2abc900f..1185b268 100644 --- a/src/global/actions/api/auth.ts +++ b/src/global/actions/api/auth.ts @@ -1,25 +1,37 @@ import { AppState, AuthState, HardwareConnectState } from '../../types'; import { MNEMONIC_CHECK_COUNT, MNEMONIC_COUNT } from '../../../config'; -import { buildAccountId, parseAccountId } from '../../../util/account'; +import { parseAccountId } from '../../../util/account'; import { cloneDeep } from '../../../util/iteratees'; -import { - connectLedger, getFirstLedgerWallets, importLedgerWallet, waitLedgerTonApp, -} from '../../../util/ledger'; import { pause } from '../../../util/schedulers'; import { callApi } from '../../../api'; import { addActionHandler, getGlobal, setGlobal } from '../..'; import { INITIAL_STATE } from '../../initialState'; import { - createAccount, updateAuth, updateCurrentAccountsState, updateHardware, + clearCurrentTransfer, + createAccount, + updateAuth, + updateCurrentAccountState, + updateHardware, + updateSettings, } from '../../reducers'; -import { selectCurrentNetwork, selectFirstNonHardwareAccount, selectNewestTxIds } from '../../selectors'; +import { + selectCurrentNetwork, + selectFirstNonHardwareAccount, + selectNetworkAccountsMemoized, + selectNewestTxIds, +} from '../../selectors'; const CREATING_DURATION = 3300; addActionHandler('restartAuth', (global) => { if (global.currentAccountId) { global = { ...global, appState: AppState.Main }; + + // Restore the network when refreshing the page during the switching networks + global = updateSettings(global, { + isTestnet: parseAccountId(global.currentAccountId!).network === 'testnet', + }); } global = { ...global, auth: cloneDeep(INITIAL_STATE.auth) }; @@ -107,7 +119,7 @@ addActionHandler('createAccount', async (global, actions, { password, isImportin actions.afterSignIn(); } else { global = updateAuth(global, { - state: AuthState.createBackup, + state: AuthState.disclaimerAndBackup, accountId, address, }); @@ -123,7 +135,12 @@ addActionHandler('createHardwareAccounts', async (global, actions) => { const { hardwareSelectedIndices = [] } = getGlobal().hardware; const network = selectCurrentNetwork(getGlobal()); - const wallets = await Promise.all(hardwareSelectedIndices.map((wallet) => importLedgerWallet(network, wallet))); + const ledgerApi = await import('../../../util/ledger'); + const wallets = await Promise.all( + hardwareSelectedIndices.map( + (wallet) => ledgerApi.importLedgerWallet(network, wallet), + ), + ); const updatedGlobal = wallets.reduce((currentGlobal, wallet) => { if (!wallet) { @@ -158,7 +175,7 @@ addActionHandler('createHardwareAccounts', async (global, actions) => { addActionHandler('afterCheckMnemonic', (global, actions) => { global = { ...global, currentAccountId: global.auth.accountId! }; - global = updateCurrentAccountsState(global, {}); + global = updateCurrentAccountState(global, {}); global = createAccount(global, global.auth.accountId!, global.auth.address!); setGlobal(global); @@ -175,7 +192,7 @@ addActionHandler('restartCheckMnemonicIndexes', (global) => { addActionHandler('skipCheckMnemonic', (global, actions) => { global = { ...global, currentAccountId: global.auth.accountId! }; - global = updateCurrentAccountsState(global, { + global = updateCurrentAccountState(global, { isBackupRequired: true, }); global = createAccount(global, global.auth.accountId!, global.auth.address!); @@ -217,8 +234,12 @@ addActionHandler('afterImportMnemonic', async (global, actions, { mnemonic }) => global = updateAuth(getGlobal(), { mnemonic, error: undefined, + state: AuthState.disclaimer, }); + setGlobal(global); +}); +addActionHandler('confirmDisclaimer', (global, actions) => { const firstNonHardwareAccount = selectFirstNonHardwareAccount(global); if (firstNonHardwareAccount) { @@ -246,22 +267,33 @@ export function selectMnemonicForCheck() { } addActionHandler('startChangingNetwork', (global, actions, { network }) => { - const accountId = buildAccountId({ - ...parseAccountId(global.currentAccountId!), - network, - }); + const accountIds = Object.keys(selectNetworkAccountsMemoized(network, global.accounts!.byId)!); - actions.switchAccount({ accountId, newNetwork: network }); + if (accountIds.length) { + const accountId = accountIds[0]; + actions.switchAccount({ accountId, newNetwork: network }); + } else { + setGlobal({ + ...global, + areSettingsOpen: false, + appState: AppState.Auth, + }); + actions.changeNetwork({ network }); + } }); addActionHandler('switchAccount', async (global, actions, { accountId, newNetwork }) => { const newestTxIds = selectNewestTxIds(global, accountId); await callApi('activateAccount', accountId, newestTxIds); - setGlobal({ + global = { ...getGlobal(), currentAccountId: accountId, - }); + }; + + global = clearCurrentTransfer(global); + + setGlobal(global); if (newNetwork) { actions.changeNetwork({ network: newNetwork }); @@ -279,7 +311,9 @@ addActionHandler('connectHardwareWallet', async (global) => { }), ); - const isLedgerConnected = await connectLedger(); + const ledgerApi = await import('../../../util/ledger'); + + const isLedgerConnected = await ledgerApi.connectLedger(); if (!isLedgerConnected) { setGlobal( updateHardware(getGlobal(), { @@ -296,7 +330,7 @@ addActionHandler('connectHardwareWallet', async (global) => { }), ); - const isTonAppConnected = await waitLedgerTonApp(); + const isTonAppConnected = await ledgerApi.waitLedgerTonApp(); if (!isTonAppConnected) { setGlobal( @@ -316,7 +350,7 @@ addActionHandler('connectHardwareWallet', async (global) => { try { const network = selectCurrentNetwork(getGlobal()); - const hardwareWallets = await getFirstLedgerWallets(network); + const hardwareWallets = await ledgerApi.getFirstLedgerWallets(network); setGlobal( updateHardware(getGlobal(), { diff --git a/src/global/actions/api/dapps.ts b/src/global/actions/api/dapps.ts index c7f535b4..e91c329f 100644 --- a/src/global/actions/api/dapps.ts +++ b/src/global/actions/api/dapps.ts @@ -1,6 +1,5 @@ import { DappConnectState, TransferState } from '../../types'; -import { signLedgerProof, signLedgerTransactions } from '../../../util/ledger'; import { callApi } from '../../../api'; import { ApiUserRejectsError } from '../../../api/errors'; import { addActionHandler, getGlobal, setGlobal } from '../../index'; @@ -14,7 +13,7 @@ import { updateDappConnectRequest, } from '../../reducers'; -addActionHandler('submitDappConnectRequestConfirm', async (global, actions, { password, additionalAccountIds }) => { +addActionHandler('submitDappConnectRequestConfirm', async (global, actions, { password, accountId }) => { const { promiseId, permissions, } = global.dappConnectRequest!; @@ -26,9 +25,10 @@ addActionHandler('submitDappConnectRequestConfirm', async (global, actions, { pa return; } + actions.switchAccount({ accountId }); await callApi('confirmDappRequestConnect', promiseId!, { + accountId, password, - additionalAccountIds, }); global = getGlobal(); @@ -48,47 +48,53 @@ addActionHandler('submitDappConnectRequestConfirm', async (global, actions, { pa setGlobal(global); }); -addActionHandler('submitDappConnectRequestConfirmHardware', async (global, actions, { additionalAccountIds }) => { - const { - accountId, promiseId, proof, - } = global.dappConnectRequest!; +addActionHandler( + 'submitDappConnectRequestConfirmHardware', + async (global, actions, { accountId: connectAccountId }) => { + const { + accountId, promiseId, proof, + } = global.dappConnectRequest!; - global = getGlobal(); - global = updateDappConnectRequest(global, { - error: undefined, - state: DappConnectState.ConfirmHardware, - }); - setGlobal(global); - - try { - const signature = await signLedgerProof(accountId!, proof!); - await callApi('confirmDappRequestConnect', promiseId!, { - signature, - additionalAccountIds, + global = getGlobal(); + global = updateDappConnectRequest(global, { + error: undefined, + state: DappConnectState.ConfirmHardware, }); - } catch (err) { - setGlobal(updateDappConnectRequest(getGlobal(), { - error: 'Canceled by the user', - })); - return; - } + setGlobal(global); - global = getGlobal(); - global = clearDappConnectRequest(global); - setGlobal(global); + const ledgerApi = await import('../../../util/ledger'); + + try { + const signature = await ledgerApi.signLedgerProof(accountId!, proof!); + actions.switchAccount({ accountId: connectAccountId }); + await callApi('confirmDappRequestConnect', promiseId!, { + accountId: connectAccountId, + signature, + }); + } catch (err) { + setGlobal(updateDappConnectRequest(getGlobal(), { + error: 'Canceled by the user', + })); + return; + } - const { currentAccountId } = global; + global = getGlobal(); + global = clearDappConnectRequest(global); + setGlobal(global); - const result = await callApi('getDapps', currentAccountId!); + const { currentAccountId } = global; - if (!result) { - return; - } + const result = await callApi('getDapps', currentAccountId!); - global = getGlobal(); - global = updateConnectedDapps(global, { dapps: result }); - setGlobal(global); -}); + if (!result) { + return; + } + + global = getGlobal(); + global = updateConnectedDapps(global, { dapps: result }); + setGlobal(global); + }, +); addActionHandler('cancelDappConnectRequestConfirm', (global) => { const { promiseId } = global.dappConnectRequest || {}; @@ -165,9 +171,10 @@ addActionHandler('submitDappTransferHardware', async (global) => { setGlobal(global); const accountId = global.currentAccountId!; + const ledgerApi = await import('../../../util/ledger'); try { - const signedMessages = await signLedgerTransactions(accountId, transactions!); + const signedMessages = await ledgerApi.signLedgerTransactions(accountId, transactions!); void callApi('confirmDappRequest', promiseId, signedMessages); } catch (err) { if (err instanceof ApiUserRejectsError) { diff --git a/src/global/actions/api/staking.ts b/src/global/actions/api/staking.ts index 798383a1..6f937eaa 100644 --- a/src/global/actions/api/staking.ts +++ b/src/global/actions/api/staking.ts @@ -74,7 +74,7 @@ addActionHandler('submitStakingInitial', async (global, actions, payload) => { global = updateStaking(global, { isLoading: false }); if (result) { - if (result.error) { + if ('error' in result) { global = updateStaking(global, { error: result.error }); } else { global = updateStaking(global, { @@ -95,7 +95,7 @@ addActionHandler('submitStakingInitial', async (global, actions, payload) => { global = updateStaking(global, { isLoading: false }); if (result) { - if (result.error) { + if ('error' in result) { global = updateStaking(global, { error: result.error }); } else { global = updateStaking(global, { diff --git a/src/global/actions/api/wallet.ts b/src/global/actions/api/wallet.ts index f716bb03..446e0479 100644 --- a/src/global/actions/api/wallet.ts +++ b/src/global/actions/api/wallet.ts @@ -6,21 +6,22 @@ import type { UserToken } from '../../types'; import { buildCollectionByKey, findLast, mapValues, unique, } from '../../../util/iteratees'; -import { signLedgerTransactions, submitLedgerTransfer } from '../../../util/ledger'; import { pause } from '../../../util/schedulers'; import { callApi } from '../../../api'; import { ApiUserRejectsError } from '../../../api/errors'; import { bigStrToHuman, getIsTxIdLocal, humanToBigStr } from '../../helpers'; -import { addActionHandler, getGlobal, setGlobal } from '../../index'; +import { + addActionHandler, getActions, getGlobal, setGlobal, +} from '../../index'; import { clearCurrentTransfer, updateAccountState, - updateCurrentAccountsState, updateCurrentAccountState, updateCurrentSignature, updateCurrentTransfer, updateSendingLoading, updateSettings, + updateTransactionsIsHistoryEndReached, updateTransactionsIsLoading, } from '../../reducers'; import { @@ -54,6 +55,38 @@ addActionHandler('setTransferScreen', (global, actions, payload) => { setGlobal(updateCurrentTransfer(global, { state })); }); +addActionHandler('setTransferAmount', (global, actions, { amount }) => { + setGlobal( + updateCurrentTransfer(global, { + amount, + }), + ); +}); + +addActionHandler('setTransferToAddress', (global, actions, { toAddress }) => { + setGlobal( + updateCurrentTransfer(global, { + toAddress, + }), + ); +}); + +addActionHandler('setTransferComment', (global, actions, { comment }) => { + setGlobal( + updateCurrentTransfer(global, { + comment, + }), + ); +}); + +addActionHandler('setTransferShouldEncrypt', (global, actions, { shouldEncrypt }) => { + setGlobal( + updateCurrentTransfer(global, { + shouldEncrypt, + }), + ); +}); + addActionHandler('submitTransferInitial', async (global, actions, payload) => { const { tokenSlug, toAddress, amount, comment, shouldEncrypt, @@ -75,7 +108,7 @@ addActionHandler('submitTransferInitial', async (global, actions, payload) => { global = getGlobal(); global = updateSendingLoading(global, false); - if (!result || result.error) { + if (!result || 'error' in result) { if (result?.addressName) { global = updateCurrentTransfer(global, { toAddressName: result.addressName }); } @@ -98,6 +131,8 @@ addActionHandler('submitTransferInitial', async (global, actions, payload) => { state: TransferState.Confirm, error: undefined, toAddress, + resolvedAddress: result.resolvedAddress, + normalizedAddress: result.normalizedAddress, amount, comment, shouldEncrypt, @@ -145,7 +180,7 @@ addActionHandler('submitTransferConfirm', (global, actions) => { addActionHandler('submitTransferPassword', async (global, actions, payload) => { const { password } = payload; const { - toAddress, + resolvedAddress, comment, amount, promiseId, @@ -175,7 +210,7 @@ addActionHandler('submitTransferPassword', async (global, actions, payload) => { accountId: global.currentAccountId!, password, slug: tokenSlug!, - toAddress: toAddress!, + toAddress: resolvedAddress!, amount: humanToBigStr(amount!, decimals), comment, fee, @@ -196,6 +231,7 @@ addActionHandler('submitTransferPassword', async (global, actions, payload) => { addActionHandler('submitTransferHardware', async (global) => { const { toAddress, + resolvedAddress, comment, amount, promiseId, @@ -215,6 +251,8 @@ addActionHandler('submitTransferHardware', async (global) => { state: TransferState.ConfirmHardware, })); + const ledgerApi = await import('../../../util/ledger'); + if (promiseId) { const message: ApiDappTransaction = { toAddress: toAddress!, @@ -225,7 +263,7 @@ addActionHandler('submitTransferHardware', async (global) => { }; try { - const signedMessage = await signLedgerTransactions(accountId, [message]); + const signedMessage = await ledgerApi.signLedgerTransactions(accountId, [message]); void callApi('confirmDappRequest', promiseId, signedMessage); } catch (err) { if (err instanceof ApiUserRejectsError) { @@ -244,13 +282,13 @@ addActionHandler('submitTransferHardware', async (global) => { accountId: global.currentAccountId!, password: '', slug: tokenSlug!, - toAddress: toAddress!, + toAddress: resolvedAddress!, amount: humanToBigStr(amount!, decimals), comment, fee, }; - const result = await submitLedgerTransfer(options); + const result = await ledgerApi.submitLedgerTransfer(options); const error = result === undefined ? 'Transfer error' : undefined; @@ -265,13 +303,16 @@ addActionHandler('clearTransferError', (global) => { }); addActionHandler('cancelTransfer', (global) => { - const { promiseId } = global.currentTransfer; + const { promiseId, tokenSlug } = global.currentTransfer; if (promiseId) { void callApi('cancelDappRequest', promiseId, 'Canceled by the user'); } - setGlobal(clearCurrentTransfer(global)); + global = clearCurrentTransfer(global); + global = updateCurrentTransfer(global, { tokenSlug }); + + setGlobal(global); }); addActionHandler('fetchTokenTransactions', async (global, actions, payload) => { @@ -290,7 +331,8 @@ addActionHandler('fetchTokenTransactions', async (global, actions, payload) => { global = getGlobal(); global = updateTransactionsIsLoading(global, false); - if (!result) { + if (!result || !result.length) { + global = updateTransactionsIsHistoryEndReached(global, true); setGlobal(global); return; } @@ -327,6 +369,7 @@ addActionHandler('fetchAllTransactions', async (global, actions, payload) => { global = updateTransactionsIsLoading(global, false); if (!result || !result.length) { + global = updateTransactionsIsHistoryEndReached(global, true); setGlobal(global); return; } @@ -353,10 +396,15 @@ addActionHandler('fetchAllTransactions', async (global, actions, payload) => { setGlobal(global); }); +addActionHandler('resetIsHistoryEndReached', (global) => { + global = updateTransactionsIsHistoryEndReached(global, false); + setGlobal(global); +}); + addActionHandler('setIsBackupRequired', (global, actions, { isMnemonicChecked }) => { const { isBackupRequired } = selectCurrentAccountState(global); - setGlobal(updateCurrentAccountsState(global, { + setGlobal(updateCurrentAccountState(global, { isBackupRequired: isMnemonicChecked ? undefined : isBackupRequired, })); }); @@ -500,7 +548,6 @@ addActionHandler('importToken', async (global, actions, { address }) => { change24h: 0, change7d: 0, change30d: 0, - isDisabled: false, keywords, }; @@ -525,3 +572,20 @@ addActionHandler('resetImportToken', (global) => { }), ); }); + +addActionHandler('verifyHardwareAddress', async (global) => { + const accountId = global.currentAccountId!; + + const ledgerApi = await import('../../../util/ledger'); + + if (!(await ledgerApi.reconnectLedger())) { + getActions().showError({ error: '$ledger_not_ready' }); + return; + } + + try { + await ledgerApi.verifyAddress(accountId); + } catch (err) { + getActions().showError({ error: err as string }); + } +}); diff --git a/src/global/actions/apiUpdates/transactions.ts b/src/global/actions/apiUpdates/transactions.ts index 716aada4..7e53ece3 100644 --- a/src/global/actions/apiUpdates/transactions.ts +++ b/src/global/actions/apiUpdates/transactions.ts @@ -1,7 +1,7 @@ import { TransferState } from '../../types'; import { playIncomingTransactionSound } from '../../../util/appSounds'; -import { bigStrToHuman, getIsTynyTransaction } from '../../helpers'; +import { bigStrToHuman, getIsTinyTransaction } from '../../helpers'; import { addActionHandler, setGlobal } from '../../index'; import { removeTransaction, @@ -28,7 +28,7 @@ addActionHandler('apiUpdate', (global, actions, update) => { if ( -bigStrToHuman(amount, decimals) === global.currentTransfer.amount - && toAddress === global.currentTransfer.toAddress + && toAddress === global.currentTransfer.normalizedAddress ) { global = updateCurrentTransfer(global, { txId, @@ -62,7 +62,7 @@ addActionHandler('apiUpdate', (global, actions, update) => { && (Date.now() - transaction.timestamp < TX_AGE_TO_PLAY_SOUND) && ( !global.settings.areTinyTransfersHidden - || getIsTynyTransaction(transaction, global.tokenInfo?.bySlug[transaction.slug!]) + || getIsTinyTransaction(transaction, global.tokenInfo?.bySlug[transaction.slug!]) ) ) { shouldPlaySound = true; diff --git a/src/global/actions/ui/initial.ts b/src/global/actions/ui/initial.ts index b20414ae..67124c96 100644 --- a/src/global/actions/ui/initial.ts +++ b/src/global/actions/ui/initial.ts @@ -1,8 +1,8 @@ import { ApiTransactionDraftError, ApiTransactionError } from '../../../api/types'; -import type { NotificationType } from '../../types'; +import type { Account, AccountState, NotificationType } from '../../types'; import { IS_ELECTRON } from '../../../config'; -import { genRelatedAccountIds } from '../../../util/account'; +import { parseAccountId } from '../../../util/account'; import { initializeSoundsForSafari } from '../../../util/appSounds'; import { omit } from '../../../util/iteratees'; import { clearPreviousLangpacks, setLanguage } from '../../../util/langProvider'; @@ -18,7 +18,12 @@ import { addActionHandler, getActions, getGlobal, setGlobal, } from '../../index'; import { updateCurrentAccountState } from '../../reducers'; -import { selectNetworkAccounts, selectNewestTxIds } from '../../selectors'; +import { + selectCurrentNetwork, + selectNetworkAccounts, + selectNetworkAccountsMemoized, + selectNewestTxIds, +} from '../../selectors'; addActionHandler('init', (_, actions) => { const { documentElement } = document; @@ -119,6 +124,12 @@ addActionHandler('showError', (global, actions, { error } = {}) => { }); break; + case ApiTransactionDraftError.InvalidAddressFormat: + actions.showDialog({ + message: 'Invalid address format. Only URL Safe Base64 format is allowed.', + }); + break; + case ApiTransactionError.PartialTransactionFailure: actions.showDialog({ message: 'Not all transactions were sent successfully' }); break; @@ -212,13 +223,53 @@ addActionHandler('toggleDeeplinkHook', (global, actions, { isEnabled }) => { addActionHandler('signOut', async (global, actions, payload) => { const { isFromAllAccounts } = payload || {}; + + const network = selectCurrentNetwork(global); const accountIds = Object.keys(selectNetworkAccounts(global)!); - if (isFromAllAccounts || accountIds.length === 1) { - await callApi('resetAccounts'); + const otherNetwork = network === 'mainnet' ? 'testnet' : 'mainnet'; + const otherNetworkAccountIds = Object.keys(selectNetworkAccountsMemoized(otherNetwork, global.accounts?.byId)!); - getActions().afterSignOut({ isFromAllAccounts: true }); - getActions().init(); + if (isFromAllAccounts || accountIds.length === 1) { + if (otherNetworkAccountIds.length) { + await callApi('removeNetworkAccounts', network); + + global = getGlobal(); + + const nextAccountId = otherNetworkAccountIds[0]; + const accountsById = Object.entries(global.accounts!.byId).reduce((byId, [accountId, account]) => { + if (parseAccountId(accountId).network !== network) { + byId[accountId] = account; + } + return byId; + }, {} as Record); + const byAccountId = Object.entries(global.byAccountId).reduce((byId, [accountId, state]) => { + if (parseAccountId(accountId).network !== network) { + byId[accountId] = state; + } + return byId; + }, {} as Record); + + global = { + ...global, + currentAccountId: nextAccountId, + accounts: { + ...global.accounts!, + byId: accountsById, + }, + byAccountId, + }; + + setGlobal(global); + + getActions().switchAccount({ accountId: nextAccountId, newNetwork: otherNetwork }); + getActions().afterSignOut(); + } else { + await callApi('resetAccounts'); + + getActions().afterSignOut({ isFromAllAccounts: true }); + getActions().init(); + } } else { const prevAccountId = global.currentAccountId!; const nextAccountId = accountIds.find((id) => id !== prevAccountId)!; @@ -228,9 +279,8 @@ addActionHandler('signOut', async (global, actions, payload) => { global = getGlobal(); - const prevAccountIds = genRelatedAccountIds(prevAccountId!); - const accountsById = omit(global.accounts!.byId, prevAccountIds); - const byAccountId = omit(global.byAccountId, prevAccountIds); + const accountsById = omit(global.accounts!.byId, [prevAccountId]); + const byAccountId = omit(global.byAccountId, [prevAccountId]); global = { ...global, diff --git a/src/global/actions/ui/misc.ts b/src/global/actions/ui/misc.ts index 703972de..c104b8c1 100644 --- a/src/global/actions/ui/misc.ts +++ b/src/global/actions/ui/misc.ts @@ -1,10 +1,7 @@ -import extension from '../../../lib/webextension-polyfill'; - import { AppState, HardwareConnectState } from '../../types'; import type { UserToken } from '../../types'; import { unique } from '../../../util/iteratees'; -import { connectLedger } from '../../../util/ledger'; import { onLedgerTabClose, openLedgerTab } from '../../../util/ledger/tab'; import { pause } from '../../../util/schedulers'; import { callApi } from '../../../api'; @@ -170,7 +167,9 @@ addActionHandler('openHardwareWalletModal', async (global, actions) => { actions.connectHardwareWallet(); }; - if (await connectLedger()) { + const ledgerApi = await import('../../../util/ledger'); + + if (await ledgerApi.connectLedger()) { startConnection(); return; } @@ -183,12 +182,12 @@ addActionHandler('openHardwareWalletModal', async (global, actions) => { await pause(OPEN_LEDGER_TAB_DELAY); const id = await openLedgerTab(); - const popup = await extension.windows.getCurrent(); + const popup = await chrome.windows.getCurrent(); onLedgerTabClose(id, async () => { - await extension.windows.update(popup.id!, { focused: true }); + await chrome.windows.update(popup.id!, { focused: true }); - if (!await connectLedger()) { + if (!await ledgerApi.connectLedger()) { actions.closeHardwareWalletModal(); return; } diff --git a/src/global/helpers/index.ts b/src/global/helpers/index.ts index a0a99d68..1906df4c 100644 --- a/src/global/helpers/index.ts +++ b/src/global/helpers/index.ts @@ -2,7 +2,7 @@ import type { ApiToken, ApiTransaction } from '../../api/types'; import { DEFAULT_DECIMAL_PLACES, TINY_TRANSFER_MAX_COST } from '../../config'; -export function getIsTynyTransaction(transaction: ApiTransaction, token?: ApiToken) { +export function getIsTinyTransaction(transaction: ApiTransaction, token?: ApiToken) { if (!token) return false; const decimals = token.decimals; const cost = Math.abs(bigStrToHuman(transaction.amount, decimals)) * token.quote.price; diff --git a/src/global/reducers/misc.ts b/src/global/reducers/misc.ts index 1a341cf2..ad4c5258 100644 --- a/src/global/reducers/misc.ts +++ b/src/global/reducers/misc.ts @@ -2,12 +2,11 @@ import type { ApiToken } from '../../api/types'; import type { Account, AccountState, GlobalState } from '../types'; import { TON_TOKEN_SLUG } from '../../config'; -import { genRelatedAccountIds } from '../../util/account'; import isPartialDeepEqual from '../../util/isPartialDeepEqual'; -import { fromKeyValueArrays } from '../../util/iteratees'; import { selectAccount, selectAccountState, + selectCurrentNetwork, selectNetworkAccounts, } from '../selectors'; @@ -36,8 +35,10 @@ export function updateAccounts( export function createAccount(global: GlobalState, accountId: string, address: string, partial?: Partial) { if (!partial?.title) { + const network = selectCurrentNetwork(global); const accounts = selectNetworkAccounts(global) || {}; - partial = { ...partial, title: `Wallet ${Object.keys(accounts).length + 1}` }; + const titlePrefix = network === 'mainnet' ? 'Wallet' : 'Testnet Wallet'; + partial = { ...partial, title: `${titlePrefix} ${Object.keys(accounts).length + 1}` }; } return updateAccount(global, accountId, { ...partial, address }); @@ -48,17 +49,16 @@ export function updateAccount( accountId: string, partial: Partial, ) { - let account = selectAccount(global, accountId); - account = { ...account, ...partial } as Account; - - const newAccountsById = fromKeyValueArrays(genRelatedAccountIds(accountId), account); return { ...global, accounts: { ...global.accounts, byId: { ...global.accounts?.byId, - ...newAccountsById, + [accountId]: { + ...selectAccount(global, accountId), + ...partial, + } as Account, }, }, }; @@ -128,13 +128,6 @@ export function updateCurrentAccountState(global: GlobalState, partial: Partial< return updateAccountState(global, global.currentAccountId!, partial); } -export function updateCurrentAccountsState(global: GlobalState, partial: Partial): GlobalState { - for (const accountId of genRelatedAccountIds(global.currentAccountId!)) { - global = updateAccountState(global, accountId, partial); - } - return global; -} - export function updateAccountState( global: GlobalState, accountId: string, partial: Partial, withDeepCompare = false, ): GlobalState { diff --git a/src/global/reducers/staking.ts b/src/global/reducers/staking.ts index 2c64541d..9c67b18a 100644 --- a/src/global/reducers/staking.ts +++ b/src/global/reducers/staking.ts @@ -4,7 +4,7 @@ import type { GlobalState } from '../types'; import isPartialDeepEqual from '../../util/isPartialDeepEqual'; import { selectCurrentAccountState } from '../selectors'; -import { updateCurrentAccountsState } from './misc'; +import { updateCurrentAccountState } from './misc'; export function updateStaking(global: GlobalState, update: Partial): GlobalState { return { @@ -35,7 +35,7 @@ export function updatePoolState(global: GlobalState, partial: ApiPoolState, with return global; } - return updateCurrentAccountsState(global, { + return updateCurrentAccountState(global, { poolState: { ...currentPoolState, ...partial, diff --git a/src/global/reducers/wallet.ts b/src/global/reducers/wallet.ts index 229174e7..08006810 100644 --- a/src/global/reducers/wallet.ts +++ b/src/global/reducers/wallet.ts @@ -51,6 +51,17 @@ export function updateTransactionsIsLoading(global: GlobalState, isLoading: bool }); } +export function updateTransactionsIsHistoryEndReached(global: GlobalState, isReached: boolean) { + const { transactions } = selectCurrentAccountState(global) || {}; + + return updateCurrentAccountState(global, { + transactions: { + ...transactions || { byTxId: {} }, + isHistoryEndReached: isReached, + }, + }); +} + export function updateTransactionsIsLoadingByAccount(global: GlobalState, accountId: string, isLoading: boolean) { const { transactions } = selectAccountState(global, accountId) || {}; diff --git a/src/global/selectors/index.ts b/src/global/selectors/index.ts index 04a6f7f7..7567326f 100644 --- a/src/global/selectors/index.ts +++ b/src/global/selectors/index.ts @@ -98,7 +98,6 @@ export const selectPopularTokensMemoized = memoized(( history24h, history7d, history30d, - isDisabled: false, keywords, } as UserToken; }); @@ -141,6 +140,10 @@ export function selectCurrentNetwork(global: GlobalState) { return global.settings.isTestnet ? 'testnet' : 'mainnet'; } +export function selectCurrentAccount(global: GlobalState) { + return selectAccount(global, global.currentAccountId!); +} + export function selectAccount(global: GlobalState, accountId: string) { return selectAccounts(global)?.[accountId]; } diff --git a/src/global/types.ts b/src/global/types.ts index 1bf9a0a2..40d386c6 100644 --- a/src/global/types.ts +++ b/src/global/types.ts @@ -53,8 +53,9 @@ export enum AuthState { none, creatingWallet, createPassword, - createBackup, + disclaimerAndBackup, importWallet, + disclaimer, importWalletCreatePassword, ready, about, @@ -98,6 +99,12 @@ export enum StakingState { UnstakeComplete, } +export enum ActiveTab { + Receive, + Transfer, + Stake, +} + export type UserToken = { amount: number; name: string; @@ -112,7 +119,7 @@ export type UserToken = { history24h?: ApiHistoryList; history7d?: ApiHistoryList; history30d?: ApiHistoryList; - isDisabled: boolean; + isDisabled?: boolean; keywords?: string[]; }; @@ -137,6 +144,7 @@ export interface AccountState { byTxId: Record; txIdsBySlug?: Record; newestTransactionsBySlug?: Record; + isHistoryEndReached?: boolean; }; nfts?: { byAddress: Record; @@ -190,6 +198,8 @@ export type GlobalState = { tokenSlug?: string; toAddress?: string; toAddressName?: string; + resolvedAddress?: string; + normalizedAddress?: string; error?: string; amount?: number; fee?: string; @@ -279,7 +289,7 @@ export type GlobalState = { currentAccountId?: string; isAddAccountModalOpen?: boolean; isBackupWalletModalOpen?: boolean; - landscapeActionsActiveTabIndex?: 0 | 1 | 2; + landscapeActionsActiveTabIndex?: ActiveTab; isHardwareModalOpen?: boolean; areSettingsOpen?: boolean; @@ -301,6 +311,7 @@ export interface ActionPayloads { startImportingWallet: undefined; afterImportMnemonic: { mnemonic: string[] }; startImportingHardwareWallet: { driver: ApiLedgerDriver }; + confirmDisclaimer: undefined; cleanAuthError: undefined; openAbout: undefined; closeAbout: undefined; @@ -317,6 +328,10 @@ export interface ActionPayloads { closeHardwareWalletModal: undefined; resetHardwareWalletConnect: undefined; setTransferScreen: { state: TransferState }; + setTransferAmount: { amount?: number }; + setTransferToAddress: { toAddress?: string }; + setTransferComment: { comment?: string }; + setTransferShouldEncrypt: { shouldEncrypt?: boolean }; startTransfer: { tokenSlug?: string; amount?: number; toAddress?: string; comment?: string } | undefined; changeTransferToken: { tokenSlug: string }; fetchFee: { @@ -353,9 +368,11 @@ export interface ActionPayloads { renameAccount: { accountId: string; title: string }; clearAccountError: undefined; validatePassword: { password: string }; + verifyHardwareAddress: undefined; fetchTokenTransactions: { limit: number; slug: string; offsetId?: string }; fetchAllTransactions: { limit: number }; + resetIsHistoryEndReached: undefined; fetchNfts: undefined; showTransactionInfo: { txId?: string } | undefined; closeTransactionInfo: undefined; @@ -371,7 +388,7 @@ export interface ActionPayloads { openAddAccountModal: undefined; closeAddAccountModal: undefined; - setLandscapeActionsActiveTabIndex: { index: 0 | 1 | 2 }; + setLandscapeActionsActiveTabIndex: { index: ActiveTab }; // Staking startStaking: { isUnstaking?: boolean } | undefined; @@ -412,8 +429,8 @@ export interface ActionPayloads { resetImportToken: undefined; // TON Connect - submitDappConnectRequestConfirm: { additionalAccountIds: string[]; password?: string }; - submitDappConnectRequestConfirmHardware: { additionalAccountIds: string[] }; + submitDappConnectRequestConfirm: { accountId: string; password?: string }; + submitDappConnectRequestConfirmHardware: { accountId: string }; clearDappConnectRequestError: undefined; cancelDappConnectRequestConfirm: undefined; setDappConnectRequestState: { state: DappConnectState }; diff --git a/src/i18n/en.yaml b/src/i18n/en.yaml index 2cc36a5b..da58c983 100644 --- a/src/i18n/en.yaml +++ b/src/i18n/en.yaml @@ -7,14 +7,7 @@ Import From %1$d Secret Words: Import From %1$d Secret Words More about MyTonWallet: More about MyTonWallet Creating Wallet...: Creating Wallet... On the count of three...: On the count of three... -$auth_backup_description1: | - This is a **secure wallet** - and is only **controlled by you**. -$auth_backup_description2: "And with great power comes **great responsibility**." -$auth_backup_description3: | - You need to manually **back up secret keys** in case you forget your password or lose access to this device. Back Up: Back Up -Skip For Now: Skip For Now Passwords must be equal.: Passwords must be equal. To protect your wallet as much as possible, use a password with: To protect your wallet as much as possible, use a password with $auth_password_rule_8chars: at least 8 characters @@ -181,7 +174,7 @@ Insufficient balance: Insufficient balance InsufficientBalance: Insufficient balance Optional: Optional $send_token_symbol: Send %1$s -$your_balance_is: "Your balance: %balance%" +$balance_is: "Balance: %balance%" Is it all ok?: Is it all ok? Receiving Address: Receiving Address Fee: Fee @@ -217,7 +210,6 @@ Appearance: Appearance Light: Light Dark: Dark System: System -Create Backup: Create Backup Stake TON: Stake TON Earn from your tokens while holding them: Earn from your tokens while holding them $est_apy_val: Est. APY %1$d% @@ -348,3 +340,22 @@ $dapp_ledger_warning1: You are about to send a multi-way transaction using your $dapp_ledger_warning2: Please take your time and do not interrupt the process. Agree: Agree The hardware wallet does not support this data format: The hardware wallet does not support this data format +Use Responsibly: Use Responsibly +$auth_responsibly_description1: | + MyTonWallet is a **self-custodial** wallet, which means that **only you** have full control and, most importantly, **full responsibility** for your funds. +$auth_responsibly_description2: | + Your private keys are stored on your device and are subject to **hacker attacks**. If your computer is infected with **malware**, your funds are likely to be stolen. +$auth_responsibly_description3: | + The MyTonWallet team is **not responsible** for the safety of your funds, just as your computer manufacturer or internet provider is not responsible. +$auth_responsibly_description4: | + **Never** store all your funds in one place. **Diversify** and use various software and hardware. Always **do your own research** and learn more about crypto security. +Start Wallet: Start Wallet +$auth_backup_warning_notice: | + Now you need to manually **back up secret keys** in a case you forget your password or lose access to this device. +Later: Later +Back Up Now: Back Up Now +I have read and accept this information: I have read and accept this information +$ledger_verify_address: Always verify pasted address using your Ledger device. +$ledger_not_ready: Ledger is not connected or TON app is not open. +Verify now: Verify now +Invalid address format. Only URL Safe Base64 format is allowed.: Invalid address format. Only URL Safe Base64 format is allowed. diff --git a/src/i18n/es.yaml b/src/i18n/es.yaml index 66a19cbb..9312dad4 100644 --- a/src/i18n/es.yaml +++ b/src/i18n/es.yaml @@ -7,14 +7,7 @@ Import From %1$d Secret Words: Importar usando la frase semilla About MyTonWallet: Acerca de MyTonWallet Creating Wallet...: Creando monedero... On the count of three...: A la cuenta de tres... -$auth_backup_description1: | - Este es un **monedero seguro** - y **totalmente bajo su control**. -$auth_backup_description2: "Y un gran poder conlleva una **gran responsabilidad**." -$auth_backup_description3: | - Debe hacer manualmente una **copia de seguridad de la frase semilla** que le permitirá recuperar su monedero en caso de que olvide su contraseña o pierda el acceso a este dispositivo. Back Up: Hacer copia de seguridad -Skip For Now: Omitir por ahora Passwords must be equal.: Las contraseñas deben coincidir. To protect your wallet as much as possible, use a password with: Para la máxima protección de su monedero, use una contraseña con $auth_password_rule_8chars: al menos 8 caracteres @@ -180,7 +173,7 @@ Insufficient balance: Saldo insuficiente InsufficientBalance: Saldo insuficiente Optional: Opcional $send_token_symbol: Enviar %1$s -$your_balance_is: "Su saldo: %balance%" +$balance_is: "Saldo: %balance%" Is it all ok?: ¿Está todo bien? Receiving Address: Dirección del receptor Fee: Comisión @@ -207,9 +200,7 @@ $tiny_transfers_help: Desactive esta opción para mostrar transacciones de menos Today: Hoy Yesterday: Ayer Now: Ahora -$receive_ton_description: | - Puede compartir esta dirección, mostrar el código QR - o crear una factura para recibir TON +$receive_ton_description: Puede compartir esta dirección, mostrar el código QR o crear una factura para recibir TON Your address: Tu dirección Wrong password, please try again: Contraseña incorrecta, inténtalo de nuevo Appearance: Apariencia @@ -217,7 +208,6 @@ Assets and Activity: Activos y Actividad Light: Claro Dark: Oscuro System: Sistema -Create Backup: Crear copia de seguridad Stake TON: Apostar TON Earn from your tokens while holding them: Gana con tus tokens mientras los mantienes $est_apy_val: Est. APY %1$d% @@ -349,3 +339,22 @@ $dapp_ledger_warning1: Estás a punto de enviar una transacción multi-direccion $dapp_ledger_warning2: Por favor, tómate tu tiempo y no interrumpas el proceso. Agree: Aceptar The hardware wallet does not support this data format: La billetera de hardware no admite este formato de datos +Use Responsibly: Usar responsablemente +$auth_responsibly_description1: | + MyTonWallet es una billetera con **autocustodia**, lo que significa que **solo usted** tiene el control total y, lo que es más importante, la **total responsabilidad** de sus fondos. +$auth_responsibly_description2: | + Sus claves privadas se almacenan en su dispositivo y están sujetas a **ataques de piratas informáticos**. Si su computadora está infectada con **malware**, es probable que le roben sus fondos. +$auth_responsibly_description3: | + El equipo de MyTonWallet **no es responsable** de la seguridad de sus fondos, al igual que el fabricante de su computadora o su proveedor de Internet no es responsable. +$auth_responsibly_description4: | + **Nunca** almacene todos sus fondos en un solo lugar. **Diversificar** y usar varios software y hardware. Siempre **haga su propia investigación** y obtenga más información sobre la criptoseguridad. +Start Wallet: Iniciar billetera +$auth_backup_warning_notice: | + Ahora debe realizar manualmente una **copia de seguridad de las claves secretas** en caso de que olvide su contraseña o pierda el acceso a este dispositivo. +Later: Más tarde +Back Up Now: Copia ahora +I have read and accept this information: He leído y acepto esta información +$ledger_verify_address: Siempre verifique la dirección pegada usando su dispositivo Ledger. +$ledger_not_ready: El libro mayor no está conectado o la aplicación TON no está abierta. +Verify now: Comprobar ahora +Invalid address format. Only URL Safe Base64 format is allowed.: Formato de dirección no válido. Solo se permite el formato urlsafe base64. diff --git a/src/i18n/ru.yaml b/src/i18n/ru.yaml index 667901a1..0797e279 100644 --- a/src/i18n/ru.yaml +++ b/src/i18n/ru.yaml @@ -7,20 +7,7 @@ Import From %1$d Secret Words: Восстановить из %1$d секретн More about MyTonWallet: Подробнее о MyTonWallet Creating Wallet...: Создаём кошелёк... On the count of three...: Сосчитайте до трёх... -$auth_backup_description1: | - Вы создали новый **безопасный кошелёк**, - доступ к которому **есть только у вас**. -$auth_backup_description2: | - Однако важно помнить: - **особые возможности** - требуют **особой ответственности**! -$auth_backup_description3: | - Сейчас необходимо сделать - **резервную копию** секретных слов. - Это поможет, если вы потеряете доступ - к этому устройству или забудете пароль. Back Up: Показать слова -Skip For Now: Сделаю позже Passwords must be equal.: Пароли не совпадают. To protect your wallet as much as possible, use a password with: Для обеспечения максимальной безопасности кошелька пароль должен содержать $auth_password_rule_8chars: не менее 8 символов @@ -187,7 +174,7 @@ Insufficient balance: Недостаточный баланс InsufficientBalance: Недостаточный баланс Optional: Необязательно $send_token_symbol: Отправить %1$s -$your_balance_is: "Ваш баланс: %balance%" +$balance_is: "Баланс: %balance%" Is it all ok?: Всё верно? Receiving Address: Адрес получателя Fee: Комиссия @@ -212,17 +199,13 @@ $tiny_transfers_help: Выключите этот параметр, чтобы Today: Сегодня Yesterday: Вчера Now: Сейчас -$receive_ton_description: | - Вы можете поделиться этим адресом, - отсканировать QR-код или создать инвойс - для получения TON +$receive_ton_description: Вы можете поделиться этим адресом, отсканировать QR-код или создать инвойс для получения TON Your address: Ваш адрес Wrong password, please try again: Неправильный пароль, попробуйте ещё раз Appearance: Внешний вид Light: Светлая Dark: Тёмная System: Системная -Create Backup: Резервная копия Stake TON: Продолжить Earn from your tokens while holding them: Получайте пассивный доход от хранения TON на надёжном официальном смарт-контракте $est_apy_val: Доходность ~%1$d% @@ -351,3 +334,22 @@ $dapp_ledger_warning1: Вы собираетесь отправить много $dapp_ledger_warning2: Пожалуйста, не торопитесь и не прерывайте процесс. Agree: Согласен The hardware wallet does not support this data format: Аппаратный кошелек не поддерживает данный формат данных +Use Responsibly: Используйте ответственно +$auth_responsibly_description1: | + MyTonWallet — это кошелек **самообслуживания**, что означает, что **только вы** имеете полный контроль и, самое главное, **полную ответственность** за свои средства. +$auth_responsibly_description2: | + Ваши закрытые ключи хранятся на вашем устройстве и могут быть подвержены **хакерским атакам**. Если ваш компьютер заражен **вредоносной программой**, ваши средства могут быть украдены. +$auth_responsibly_description3: | + Команда MyTonWallet **не несет ответственности** за сохранность ваших средств, как и производитель вашего компьютера или интернет-провайдер. +$auth_responsibly_description4: | + **Никогда** не храните все свои средства в одном месте. **Разнообразьте** и используйте различное программное и аппаратное обеспечение. Всегда **проводите собственные исследования** и узнавайте больше о криптобезопасности. +Start Wallet: Начать использование +$auth_backup_warning_notice: | + Теперь вам нужно вручную **сделать резервную копию** секретных слов на случай, если вы забудете пароль или потеряете доступ к этому устройству. +Later: Позже +Back Up Now: Показать слова сейчас +I have read and accept this information: Я прочитал и принимаю эту информацию +$ledger_verify_address: Всегда проверяйте вставленный адрес используя Ledger. +$ledger_not_ready: Ledger не подключен или приложение TON не открыто. +Verify now: Проверить сейчас +Invalid address format. Only URL Safe Base64 format is allowed.: Некорректный формат адреса. Разрешен только URL Safe Base64 формат. diff --git a/src/i18n/zh-Hans.yaml b/src/i18n/zh-Hans.yaml index dbbb28d3..75c67657 100644 --- a/src/i18n/zh-Hans.yaml +++ b/src/i18n/zh-Hans.yaml @@ -6,13 +6,7 @@ Import From %1$d Secret Words: 输入助记词 More about MyTonWallet: 更多关于 MyTonWallet Creating Wallet...: 正在创建钱包... On the count of three...: 倒数三个数··· -$auth_backup_description1: | - 这是一个**仅由您控制的**且**安全**的钱包。 -$auth_backup_description2: “能力越大,责任越大。” -$auth_backup_description3: | - 您需要手动**备份助记词**,以免忘记助记词以永远失去您的钱包。 Back Up: 备份 -Skip For Now: 跳过此步骤 Passwords must be equal.: 密码必须相同。 To protect your wallet as much as possible, use a password with: 为了尽可能的保障您钱包的安全,密码请遵循下列规则 $auth_password_rule_8chars: 至少8位字符 @@ -170,7 +164,7 @@ Insufficient balance: 余额不足 InsufficientBalance: 余额不足 Optional: 选项 $send_token_symbol: 发送 %1$s -$your_balance_is: "您的余额: %balance%" +$balance_is: "余额:%balance%" Is it all ok?: 确认全部正确? Receiving Address: 接收地址 Fee: 手续费 @@ -207,7 +201,6 @@ Appearance: 外观 Light: 白天模式 Dark: 黑夜模式 System: 系统 -Create Backup: 创建备份 Stake TON: 质押 TON Earn from your tokens while holding them: 从你持有的代币身上赚一笔。 $est_apy_val: 期望年回报率 %1$d% @@ -331,4 +324,23 @@ Message is encrypted.: 消息已加密。 $dapp_ledger_warning1: 您即将使用您的**Ledger**钱包发送多方交易。您需要手动**逐个**签署每笔底层交易。 $dapp_ledger_warning2: 请慢慢来,不要中断过程。 Agree: 同意 -The hardware wallet does not support this data format: 硬件钱包不支持该数据格式 +The hardware wallet does not support this data format: 硬件钱包不支持该数据格 +Use Responsibly: 负责任地使用 +$auth_responsibly_description1: | + MyTonWallet 是一个**自我托管**钱包,这意味着**只有您**拥有完全控制权,最重要的是,对您的资金**承担全部责任**。 +$auth_responsibly_description2: | + 您的私钥存储在您的设备上,并且容易受到**黑客攻击**。 如果您的计算机感染了**恶意软件**,您的资金可能会被盗。 +$auth_responsibly_description3: | + MyTonWallet 团队对您的资金安全**不负责**,就像您的计算机制造商或互联网提供商不负责一样。 +$auth_responsibly_description4: | + **永远不要**将您的所有资金存储在一个地方。 **多样化**并使用各种软件和硬件。 始终**进行自己的研究**并了解有关加密安全的更多信息。 +Start Wallet: 启动钱包 +$auth_backup_warning_notice: | + 现在,您需要手动**备份密钥**,以防忘记密码或无法访问该设备。 +Later: 之后 +Back Up Now: 立即备份 +I have read and accept this information: 我已阅读并接受此信息 +$ledger_verify_address: 请务必使用您的 Ledger 设备验证粘贴的地址。 +$ledger_not_ready: Ledger 未连接或 TON 应用程序未打开。 +Verify now: 现在检查 +Invalid address format. Only URL Safe Base64 format is allowed.: 地址格式无效。 仅允许使用 URL Safe Base64 格式。 diff --git a/src/i18n/zh-Hant.yaml b/src/i18n/zh-Hant.yaml index a851445c..ff1728fb 100644 --- a/src/i18n/zh-Hant.yaml +++ b/src/i18n/zh-Hant.yaml @@ -6,13 +6,7 @@ Import From %1$d Secret Words: 輸入註記詞 More about MyTonWallet: 更多關於 MyTonWallet Creating Wallet...: 錢包創建中... On the count of three...: 數到三... -$auth_backup_description1: | - 這是一個**僅由您控制**且**安全**的錢包。 -$auth_backup_description2: 「能力越強,責任越大。」 -$auth_backup_description3: | - 你需要手動**備份註記詞**,免得你忘記助記詞而無法登入此裝置。 Back Up: 備份 -Skip For Now: 跳過此步驟 Passwords must be equal.: 密碼必須相同。 To protect your wallet as much as possible, use a password with: 為了盡可能保護您的錢包,密碼請遵循下列規則 $auth_password_rule_8chars: 至少 8 個字元 @@ -171,7 +165,7 @@ Insufficient balance: 餘額不足 InsufficientBalance: 餘額不足 Optional: 選項 $send_token_symbol: 發送 %1$s -$your_balance_is: "你的餘額: %balance%" +$balance_is: "餘額:%balance%" Is it all ok?: 全部確認都 OK? Receiving Address: 接收地址 Fee: 手續費 @@ -207,7 +201,6 @@ Appearance: 外觀 Light: 亮色模式 Dark: 暗色模式 System: 系統 -Create Backup: 創建備份 Stake TON: 質押 TON Earn from your tokens while holding them: 從你持有中的代幣獲利 $est_apy_val: Est. APY %1$d% @@ -332,3 +325,22 @@ $dapp_ledger_warning1: 您即將使用您的**Ledger**錢包發送多方交易 $dapp_ledger_warning2: 請慢慢來,不要中斷過程。 Agree: 同意 The hardware wallet does not support this data format: 硬件錢包不支持該數據格式 +Use Responsibly: 負責任地使用 +$auth_responsibly_description1: | + MyTonWallet 是一個**自我託管**錢包,這意味著**只有您**擁有完全控制權,最重要的是,對您的資金**承擔全部責任**。 +$auth_responsibly_description2: | + 您的私鑰存儲在您的設備上,並且容易受到**黑客攻擊**。 如果您的計算機感染了**惡意軟件**,您的資金可能會被盜。 +$auth_responsibly_description3: | + MyTonWallet 團隊對您的資金安全**不負責**,就像您的計算機製造商或互聯網提供商不負責一樣。 +$auth_responsibly_description4: | + **永遠不要**將您的所有資金存儲在一個地方。 **多樣化**並使用各種軟件和硬件。 始終**進行自己的研究**並了解有關加密安全的更多信息。 +Start Wallet: 啟動錢包 +$auth_backup_warning_notice: | + 現在,您需要手動**備份密鑰**,以防忘記密碼或無法訪問該設備。 +Later: 之後 +Back Up Now: 立即備份 +I have read and accept this information: 我已閱讀並接受此信息 +$ledger_verify_address: 請務必使用您的 Ledger 設備驗證粘貼的地址。 +$ledger_not_ready: Ledger 未連接或 TON 應用程序未打開。 +Verify now: 現在檢查 +Invalid address format. Only URL Safe Base64 format is allowed.: 地址格式無效。 僅允許使用 URL Safe Base64 格式。 diff --git a/src/index.html b/src/index.html index 261d53c3..61bb1bd7 100644 --- a/src/index.html +++ b/src/index.html @@ -17,6 +17,7 @@ + diff --git a/src/lib/qr-code-styling/LICENSE b/src/lib/qr-code-styling/LICENSE deleted file mode 100644 index c2689e7c..00000000 --- a/src/lib/qr-code-styling/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Denys Kozak - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/lib/qr-code-styling/README.md b/src/lib/qr-code-styling/README.md deleted file mode 100644 index 6127ee67..00000000 --- a/src/lib/qr-code-styling/README.md +++ /dev/null @@ -1 +0,0 @@ -The original package can be found at https://github.com/signalive/qr-code-styling diff --git a/src/lib/qr-code-styling/constants/cornerDotTypes.ts b/src/lib/qr-code-styling/constants/cornerDotTypes.ts deleted file mode 100644 index fccfafcb..00000000 --- a/src/lib/qr-code-styling/constants/cornerDotTypes.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { CornerDotTypes } from '../types'; - -export default { - dot: 'dot', - square: 'square', -} as CornerDotTypes; diff --git a/src/lib/qr-code-styling/constants/cornerSquareTypes.ts b/src/lib/qr-code-styling/constants/cornerSquareTypes.ts deleted file mode 100644 index 7469ad0e..00000000 --- a/src/lib/qr-code-styling/constants/cornerSquareTypes.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { CornerSquareTypes } from '../types'; - -export default { - dot: 'dot', - square: 'square', - extraRounded: 'extra-rounded', -} as CornerSquareTypes; diff --git a/src/lib/qr-code-styling/constants/dotTypes.ts b/src/lib/qr-code-styling/constants/dotTypes.ts deleted file mode 100644 index f1f4c6f4..00000000 --- a/src/lib/qr-code-styling/constants/dotTypes.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { DotTypes } from '../types'; - -export default { - dots: 'dots', - rounded: 'rounded', - classy: 'classy', - classyRounded: 'classy-rounded', - square: 'square', - extraRounded: 'extra-rounded', -} as DotTypes; diff --git a/src/lib/qr-code-styling/constants/drawTypes.ts b/src/lib/qr-code-styling/constants/drawTypes.ts deleted file mode 100644 index ea22009f..00000000 --- a/src/lib/qr-code-styling/constants/drawTypes.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { DrawTypes } from '../types'; - -export default { - canvas: 'canvas', - svg: 'svg', -} as DrawTypes; diff --git a/src/lib/qr-code-styling/constants/errorCorrectionLevels.ts b/src/lib/qr-code-styling/constants/errorCorrectionLevels.ts deleted file mode 100644 index 442ab82c..00000000 --- a/src/lib/qr-code-styling/constants/errorCorrectionLevels.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { ErrorCorrectionLevel } from '../types'; - -interface ErrorCorrectionLevels { - [key: string]: ErrorCorrectionLevel; -} - -export default { - L: 'L', - M: 'M', - Q: 'Q', - H: 'H', -} as ErrorCorrectionLevels; diff --git a/src/lib/qr-code-styling/constants/errorCorrectionPercents.ts b/src/lib/qr-code-styling/constants/errorCorrectionPercents.ts deleted file mode 100644 index ec4da61c..00000000 --- a/src/lib/qr-code-styling/constants/errorCorrectionPercents.ts +++ /dev/null @@ -1,10 +0,0 @@ -interface ErrorCorrectionPercents { - [key: string]: number; -} - -export default { - L: 0.07, - M: 0.15, - Q: 0.25, - H: 0.3, -} as ErrorCorrectionPercents; diff --git a/src/lib/qr-code-styling/constants/gradientTypes.ts b/src/lib/qr-code-styling/constants/gradientTypes.ts deleted file mode 100644 index 64181646..00000000 --- a/src/lib/qr-code-styling/constants/gradientTypes.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { GradientTypes } from '../types'; - -export default { - radial: 'radial', - linear: 'linear', -} as GradientTypes; diff --git a/src/lib/qr-code-styling/constants/modes.ts b/src/lib/qr-code-styling/constants/modes.ts deleted file mode 100644 index acfba153..00000000 --- a/src/lib/qr-code-styling/constants/modes.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { Mode } from '../types'; - -interface Modes { - [key: string]: Mode; -} - -export default { - numeric: 'Numeric', - alphanumeric: 'Alphanumeric', - byte: 'Byte', - kanji: 'Kanji', -} as Modes; diff --git a/src/lib/qr-code-styling/constants/qrTypes.ts b/src/lib/qr-code-styling/constants/qrTypes.ts deleted file mode 100644 index d659bcb6..00000000 --- a/src/lib/qr-code-styling/constants/qrTypes.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { TypeNumber } from '../types'; - -interface TypesMap { - [key: number]: TypeNumber; -} - -const qrTypes: TypesMap = {}; - -for (let type = 0; type <= 40; type++) { - qrTypes[type] = type as TypeNumber; -} - -// 0 types is autodetect - -// types = { -// 0: 0, -// 1: 1, -// ... -// 40: 40 -// } - -export default qrTypes; diff --git a/src/lib/qr-code-styling/core/QRCanvas.ts b/src/lib/qr-code-styling/core/QRCanvas.ts deleted file mode 100644 index f9295ae7..00000000 --- a/src/lib/qr-code-styling/core/QRCanvas.ts +++ /dev/null @@ -1,475 +0,0 @@ -/* eslint-disable */ -import type { FilterFunction, Gradient, QRCode } from '../types'; - -import errorCorrectionPercents from '../constants/errorCorrectionPercents'; -import gradientTypes from '../constants/gradientTypes'; -import QRCornerDot from '../figures/cornerDot/canvas/QRCornerDot'; -import QRCornerSquare from '../figures/cornerSquare/canvas/QRCornerSquare'; -import QRDot from '../figures/dot/canvas/QRDot'; -import calculateImageSize from '../tools/calculateImageSize'; - -import type { RequiredOptions } from './QROptions'; - -const squareMask = [ - [1, 1, 1, 1, 1, 1, 1], - [1, 0, 0, 0, 0, 0, 1], - [1, 0, 0, 0, 0, 0, 1], - [1, 0, 0, 0, 0, 0, 1], - [1, 0, 0, 0, 0, 0, 1], - [1, 0, 0, 0, 0, 0, 1], - [1, 1, 1, 1, 1, 1, 1], -]; - -const dotMask = [ - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 1, 1, 1, 0, 0], - [0, 0, 1, 1, 1, 0, 0], - [0, 0, 1, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0], -]; - -export default class QRCanvas { - _canvas: HTMLCanvasElement; - - _options: RequiredOptions; - - _qr?: QRCode; - - _image?: HTMLImageElement; - - // TODO don't pass all options to this class - constructor(options: RequiredOptions) { - this._canvas = document.createElement('canvas'); - this._canvas.width = options.width; - this._canvas.height = options.height; - this._options = options; - } - - get context(): CanvasRenderingContext2D | null { - return this._canvas.getContext('2d'); - } - - get width(): number { - return this._canvas.width; - } - - get height(): number { - return this._canvas.height; - } - - getCanvas(): HTMLCanvasElement { - return this._canvas; - } - - clear(): void { - const canvasContext = this.context; - - if (canvasContext) { - canvasContext.clearRect(0, 0, this._canvas.width, this._canvas.height); - } - } - - async drawQR(qr: QRCode): Promise { - const count = qr.getModuleCount(); - const minSize = Math.min(this._options.width, this._options.height) - this._options.margin * 2; - const dotSize = Math.floor(minSize / count); - let drawImageSize = { - hideXDots: 0, - hideYDots: 0, - width: 0, - height: 0, - }; - - this._qr = qr; - - if (this._options.image) { - await this.loadImage(); - if (!this._image) return; - const { imageOptions, qrOptions } = this._options; - const coverLevel = imageOptions.imageSize * errorCorrectionPercents[qrOptions.errorCorrectionLevel]; - const maxHiddenDots = Math.floor(coverLevel * count * count); - - drawImageSize = calculateImageSize({ - originalWidth: this._image.width, - originalHeight: this._image.height, - maxHiddenDots, - maxHiddenAxisDots: count - 14, - dotSize, - }); - } - - this.clear(); - this.drawBackground(); - this.drawDots((i: number, j: number): boolean => { - if (this._options.imageOptions.hideBackgroundDots) { - if ( - i >= (count - drawImageSize.hideXDots) / 2 - && i < (count + drawImageSize.hideXDots) / 2 - && j >= (count - drawImageSize.hideYDots) / 2 - && j < (count + drawImageSize.hideYDots) / 2 - ) { - return false; - } - } - - if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) { - return false; - } - - if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) { - return false; - } - - return true; - }); - this.drawCorners(); - - if (this._options.image) { - this.drawImage({ - width: drawImageSize.width, height: drawImageSize.height, count, dotSize, - }); - } - } - - drawBackground(): void { - const canvasContext = this.context; - const options = this._options; - - if (canvasContext) { - if (options.backgroundOptions.gradient) { - const gradientOptions = options.backgroundOptions.gradient; - const gradient = this._createGradient({ - context: canvasContext, - options: gradientOptions, - additionalRotation: 0, - x: 0, - y: 0, - size: this._canvas.width > this._canvas.height ? this._canvas.width : this._canvas.height, - }); - - gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => { - gradient.addColorStop(offset, color); - }); - - canvasContext.fillStyle = gradient; - } else if (options.backgroundOptions.color) { - canvasContext.fillStyle = options.backgroundOptions.color; - } - canvasContext.fillRect(0, 0, this._canvas.width, this._canvas.height); - } - } - - drawDots(filter?: FilterFunction): void { - if (!this._qr) { - throw new Error('QR code is not defined'); - } - - const canvasContext = this.context; - - if (!canvasContext) { - throw new Error('QR code is not defined'); - } - - const options = this._options; - const count = this._qr.getModuleCount(); - - if (count > options.width || count > options.height) { - throw new Error('The canvas is too small'); - } - - const minSize = Math.min(options.width, options.height) - options.margin * 2; - const dotSize = Math.floor(minSize / count); - const xBeginning = Math.floor((options.width - count * dotSize) / 2); - const yBeginning = Math.floor((options.height - count * dotSize) / 2); - const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type }); - - canvasContext.beginPath(); - - for (let i = 0; i < count; i++) { - for (let j = 0; j < count; j++) { - if (filter && !filter(i, j)) { - continue; - } - if (!this._qr.isDark(i, j)) { - continue; - } - dot.draw( - xBeginning + i * dotSize, - yBeginning + j * dotSize, - dotSize, - (xOffset: number, yOffset: number): boolean => { - if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false; - if (filter && !filter(i + xOffset, j + yOffset)) return false; - return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset); - }, - ); - } - } - - if (options.dotsOptions.gradient) { - const gradientOptions = options.dotsOptions.gradient; - const gradient = this._createGradient({ - context: canvasContext, - options: gradientOptions, - additionalRotation: 0, - x: xBeginning, - y: yBeginning, - size: count * dotSize, - }); - - gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => { - gradient.addColorStop(offset, color); - }); - - canvasContext.fillStyle = canvasContext.strokeStyle = gradient; - } else if (options.dotsOptions.color) { - canvasContext.fillStyle = canvasContext.strokeStyle = options.dotsOptions.color; - } - - canvasContext.fill('evenodd'); - } - - drawCorners(filter?: FilterFunction): void { - if (!this._qr) { - throw new Error('QR code is not defined'); - } - - const canvasContext = this.context; - - if (!canvasContext) { - throw new Error('QR code is not defined'); - } - - const options = this._options; - - const count = this._qr.getModuleCount(); - const minSize = Math.min(options.width, options.height) - options.margin * 2; - const dotSize = Math.floor(minSize / count); - const cornersSquareSize = dotSize * 7; - const cornersDotSize = dotSize * 3; - const xBeginning = Math.floor((options.width - count * dotSize) / 2); - const yBeginning = Math.floor((options.height - count * dotSize) / 2); - - [ - [0, 0, 0], - [1, 0, Math.PI / 2], - [0, 1, -Math.PI / 2], - ].forEach(([column, row, rotation]) => { - if (filter && !filter(column, row)) { - return; - } - - const x = xBeginning + column * dotSize * (count - 7); - const y = yBeginning + row * dotSize * (count - 7); - - if (options.cornersSquareOptions?.type) { - const cornersSquare = new QRCornerSquare({ context: canvasContext, type: options.cornersSquareOptions?.type }); - - canvasContext.beginPath(); - cornersSquare.draw(x, y, cornersSquareSize, rotation); - } else { - const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type }); - - canvasContext.beginPath(); - - for (let i = 0; i < squareMask.length; i++) { - for (let j = 0; j < squareMask[i].length; j++) { - if (!squareMask[i]?.[j]) { - continue; - } - - dot.draw( - x + i * dotSize, - y + j * dotSize, - dotSize, - (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset], - ); - } - } - } - - if (options.cornersSquareOptions?.gradient) { - const gradientOptions = options.cornersSquareOptions.gradient; - const gradient = this._createGradient({ - context: canvasContext, - options: gradientOptions, - additionalRotation: rotation, - x, - y, - size: cornersSquareSize, - }); - - gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => { - gradient.addColorStop(offset, color); - }); - - canvasContext.fillStyle = canvasContext.strokeStyle = gradient; - } else if (options.cornersSquareOptions?.color) { - canvasContext.fillStyle = canvasContext.strokeStyle = options.cornersSquareOptions.color; - } - - canvasContext.fill('evenodd'); - - if (options.cornersDotOptions?.type) { - const cornersDot = new QRCornerDot({ context: canvasContext, type: options.cornersDotOptions?.type }); - - canvasContext.beginPath(); - cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation); - } else { - const dot = new QRDot({ context: canvasContext, type: options.dotsOptions.type }); - - canvasContext.beginPath(); - - for (let i = 0; i < dotMask.length; i++) { - for (let j = 0; j < dotMask[i].length; j++) { - if (!dotMask[i]?.[j]) { - continue; - } - - dot.draw( - x + i * dotSize, - y + j * dotSize, - dotSize, - (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset], - ); - } - } - } - - if (options.cornersDotOptions?.gradient) { - const gradientOptions = options.cornersDotOptions.gradient; - const gradient = this._createGradient({ - context: canvasContext, - options: gradientOptions, - additionalRotation: rotation, - x: x + dotSize * 2, - y: y + dotSize * 2, - size: cornersDotSize, - }); - - gradientOptions.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => { - gradient.addColorStop(offset, color); - }); - - canvasContext.fillStyle = canvasContext.strokeStyle = gradient; - } else if (options.cornersDotOptions?.color) { - canvasContext.fillStyle = canvasContext.strokeStyle = options.cornersDotOptions.color; - } - - canvasContext.fill('evenodd'); - }); - } - - loadImage(): Promise { - return new Promise((resolve, reject) => { - const options = this._options; - const image = new Image(); - - if (!options.image) { - return reject('Image is not defined'); - } - - if (typeof options.imageOptions.crossOrigin === 'string') { - image.crossOrigin = options.imageOptions.crossOrigin; - } - - this._image = image; - image.onload = (): void => { - resolve(); - }; - image.src = options.image; - }); - } - - drawImage({ - width, - height, - count, - dotSize, - }: { - width: number; - height: number; - count: number; - dotSize: number; - }): void { - const canvasContext = this.context; - - if (!canvasContext) { - throw 'canvasContext is not defined'; - } - - if (!this._image) { - throw 'image is not defined'; - } - - const options = this._options; - const xBeginning = Math.floor((options.width - count * dotSize) / 2); - const yBeginning = Math.floor((options.height - count * dotSize) / 2); - const dx = xBeginning + options.imageOptions.margin + (count * dotSize - width) / 2; - const dy = yBeginning + options.imageOptions.margin + (count * dotSize - height) / 2; - const dw = width - options.imageOptions.margin * 2; - const dh = height - options.imageOptions.margin * 2; - - canvasContext.drawImage(this._image, dx, dy, dw < 0 ? 0 : dw, dh < 0 ? 0 : dh); - } - - _createGradient({ - context, - options, - additionalRotation, - x, - y, - size, - }: { - context: CanvasRenderingContext2D; - options: Gradient; - additionalRotation: number; - x: number; - y: number; - size: number; - }): CanvasGradient { - let gradient; - - if (options.type === gradientTypes.radial) { - gradient = context.createRadialGradient(x + size / 2, y + size / 2, 0, x + size / 2, y + size / 2, size / 2); - } else { - const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI); - const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI); - let x0 = x + size / 2; - let y0 = y + size / 2; - let x1 = x + size / 2; - let y1 = y + size / 2; - - if ( - (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) - || (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI) - ) { - x0 -= size / 2; - y0 -= (size / 2) * Math.tan(rotation); - x1 += size / 2; - y1 += (size / 2) * Math.tan(rotation); - } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) { - y0 -= size / 2; - x0 -= size / 2 / Math.tan(rotation); - y1 += size / 2; - x1 += size / 2 / Math.tan(rotation); - } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) { - x0 += size / 2; - y0 += (size / 2) * Math.tan(rotation); - x1 -= size / 2; - y1 -= (size / 2) * Math.tan(rotation); - } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) { - y0 += size / 2; - x0 += size / 2 / Math.tan(rotation); - y1 -= size / 2; - x1 -= size / 2 / Math.tan(rotation); - } - - gradient = context.createLinearGradient(Math.round(x0), Math.round(y0), Math.round(x1), Math.round(y1)); - } - - return gradient; - } -} diff --git a/src/lib/qr-code-styling/core/QRCodeStyling.ts b/src/lib/qr-code-styling/core/QRCodeStyling.ts deleted file mode 100644 index f44beb16..00000000 --- a/src/lib/qr-code-styling/core/QRCodeStyling.ts +++ /dev/null @@ -1,180 +0,0 @@ -/* eslint-disable no-underscore-dangle,no-promise-executor-return */ -import qrcode from 'qrcode-generator'; - -import type { - DownloadOptions, Extension, Options, QRCode, -} from '../types'; - -import drawTypes from '../constants/drawTypes'; -import downloadURI from '../tools/downloadURI'; -import getMode from '../tools/getMode'; -import mergeDeep from '../tools/merge'; -import sanitizeOptions from '../tools/sanitizeOptions'; - -import QRCanvas from './QRCanvas'; -import type { RequiredOptions } from './QROptions'; -import defaultOptions from './QROptions'; -import QRSVG from './QRSVG'; - -export default class QRCodeStyling { - _options: RequiredOptions; - - _container?: HTMLElement; - - _canvas?: QRCanvas; - - _svg?: QRSVG; - - _qr?: QRCode; - - _canvasDrawingPromise?: Promise; - - _svgDrawingPromise?: Promise; - - constructor(options?: Partial) { - this._options = options ? sanitizeOptions(mergeDeep(defaultOptions, options) as RequiredOptions) : defaultOptions; - this.update(); - } - - static _clearContainer(container?: HTMLElement): void { - if (container) { - container.innerHTML = ''; - } - } - - async _getQRStylingElement(extension: Extension = 'png'): Promise { - if (!this._qr) throw new Error('QR code is empty'); - - if (extension.toLowerCase() === 'svg') { - let promise; let - svg: QRSVG; - - if (this._svg && this._svgDrawingPromise) { - svg = this._svg; - promise = this._svgDrawingPromise; - } else { - svg = new QRSVG(this._options); - promise = svg.drawQR(this._qr); - } - - await promise; - - return svg; - } else { - let promise; let - canvas: QRCanvas; - - if (this._canvas && this._canvasDrawingPromise) { - canvas = this._canvas; - promise = this._canvasDrawingPromise; - } else { - canvas = new QRCanvas(this._options); - promise = canvas.drawQR(this._qr); - } - - await promise; - - return canvas; - } - } - - update(options?: Partial): void { - QRCodeStyling._clearContainer(this._container); - this._options = options ? sanitizeOptions(mergeDeep(this._options, options) as RequiredOptions) : this._options; - - if (!this._options.data) { - return; - } - - this._qr = qrcode(this._options.qrOptions.typeNumber, this._options.qrOptions.errorCorrectionLevel); - this._qr.addData(this._options.data, this._options.qrOptions.mode || getMode(this._options.data)); - this._qr.make(); - - if (this._options.type === drawTypes.canvas) { - this._canvas = new QRCanvas(this._options); - this._canvasDrawingPromise = this._canvas.drawQR(this._qr); - this._svgDrawingPromise = undefined; - this._svg = undefined; - } else { - this._svg = new QRSVG(this._options); - this._svgDrawingPromise = this._svg.drawQR(this._qr); - this._canvasDrawingPromise = undefined; - this._canvas = undefined; - } - - this.append(this._container); - } - - append(container?: HTMLElement): void { - if (!container) { - return; - } - - if (typeof container.appendChild !== 'function') { - throw new Error('Container should be a single DOM node'); - } - - if (this._options.type === drawTypes.canvas) { - if (this._canvas) { - container.appendChild(this._canvas.getCanvas()); - } - } else if (this._svg) { - container.appendChild(this._svg.getElement()); - } - - this._container = container; - } - - async getRawData(extension: Extension = 'png'): Promise { - if (!this._qr) throw new Error('QR code is empty'); - const element = await this._getQRStylingElement(extension); - - if (extension.toLowerCase() === 'svg') { - const serializer = new XMLSerializer(); - const source = serializer.serializeToString(((element as unknown) as QRSVG).getElement()); - - return new Blob([`\r\n${source}`], { type: 'image/svg+xml' }); - } else { - // eslint-disable-next-line max-len - return new Promise((resolve) => ((element as unknown) as QRCanvas).getCanvas().toBlob(resolve, `image/${extension}`, 1)); - } - } - - async download(downloadOptions?: Partial | string): Promise { - if (!this._qr) throw new Error('QR code is empty'); - let extension = 'png' as Extension; - let name = 'qr'; - - // TODO remove deprecated code in the v2 - if (typeof downloadOptions === 'string') { - extension = downloadOptions as Extension; - // eslint-disable-next-line no-console - console.warn( - // eslint-disable-next-line max-len - "Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument", - ); - // eslint-disable-next-line no-null/no-null - } else if (typeof downloadOptions === 'object' && downloadOptions !== null) { - if (downloadOptions.name) { - name = downloadOptions.name; - } - if (downloadOptions.extension) { - extension = downloadOptions.extension; - } - } - - const element = await this._getQRStylingElement(extension); - - if (extension.toLowerCase() === 'svg') { - const serializer = new XMLSerializer(); - let source = serializer.serializeToString(((element as unknown) as QRSVG).getElement()); - - source = `\r\n${source}`; - const url = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(source)}`; - downloadURI(url, `${name}.svg`); - } else { - const url = ((element as unknown) as QRCanvas).getCanvas().toDataURL(`image/${extension}`); - downloadURI(url, `${name}.${extension}`); - } - } -} diff --git a/src/lib/qr-code-styling/core/QROptions.ts b/src/lib/qr-code-styling/core/QROptions.ts deleted file mode 100644 index 73ec8743..00000000 --- a/src/lib/qr-code-styling/core/QROptions.ts +++ /dev/null @@ -1,63 +0,0 @@ -import type { - DotType, DrawType, ErrorCorrectionLevel, Gradient, Mode, Options, TypeNumber, -} from '../types'; - -import drawTypes from '../constants/drawTypes'; -import errorCorrectionLevels from '../constants/errorCorrectionLevels'; -import qrTypes from '../constants/qrTypes'; - -export interface RequiredOptions extends Options { - type: DrawType; - width: number; - height: number; - margin: number; - data: string; - qrOptions: { - typeNumber: TypeNumber; - mode?: Mode; - errorCorrectionLevel: ErrorCorrectionLevel; - }; - imageOptions: { - hideBackgroundDots: boolean; - imageSize: number; - crossOrigin?: string; - margin: number; - }; - dotsOptions: { - type: DotType; - color: string; - gradient?: Gradient; - }; - backgroundOptions: { - color: string; - gradient?: Gradient; - }; -} - -const defaultOptions: RequiredOptions = { - type: drawTypes.canvas, - width: 300, - height: 300, - data: '', - margin: 0, - qrOptions: { - typeNumber: qrTypes[0], - mode: undefined, - errorCorrectionLevel: errorCorrectionLevels.Q, - }, - imageOptions: { - hideBackgroundDots: true, - imageSize: 0.4, - crossOrigin: undefined, - margin: 0, - }, - dotsOptions: { - type: 'square', - color: '#000', - }, - backgroundOptions: { - color: '#fff', - }, -}; - -export default defaultOptions; diff --git a/src/lib/qr-code-styling/core/QRSVG.ts b/src/lib/qr-code-styling/core/QRSVG.ts deleted file mode 100644 index 5bf92bdc..00000000 --- a/src/lib/qr-code-styling/core/QRSVG.ts +++ /dev/null @@ -1,504 +0,0 @@ -/* eslint-disable no-underscore-dangle,no-multi-assign,consistent-return */ -import type { FilterFunction, Gradient, QRCode } from '../types'; - -import errorCorrectionPercents from '../constants/errorCorrectionPercents'; -import gradientTypes from '../constants/gradientTypes'; -import QRCornerDot from '../figures/cornerDot/svg/QRCornerDot'; -import QRCornerSquare from '../figures/cornerSquare/svg/QRCornerSquare'; -import QRDot from '../figures/dot/svg/QRDot'; -import calculateImageSize from '../tools/calculateImageSize'; - -import type { RequiredOptions } from './QROptions'; - -const squareMask = [ - [1, 1, 1, 1, 1, 1, 1], - [1, 0, 0, 0, 0, 0, 1], - [1, 0, 0, 0, 0, 0, 1], - [1, 0, 0, 0, 0, 0, 1], - [1, 0, 0, 0, 0, 0, 1], - [1, 0, 0, 0, 0, 0, 1], - [1, 1, 1, 1, 1, 1, 1], -]; - -const dotMask = [ - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 1, 1, 1, 0, 0], - [0, 0, 1, 1, 1, 0, 0], - [0, 0, 1, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0], -]; - -export default class QRSVG { - _element: SVGElement; - - _defs: SVGElement; - - _dotsClipPath?: SVGElement; - - _cornersSquareClipPath?: SVGElement; - - _cornersDotClipPath?: SVGElement; - - _options: RequiredOptions; - - _qr?: QRCode; - - _image?: HTMLImageElement; - - // TODO don't pass all options to this class - constructor(options: RequiredOptions) { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - this._element.setAttribute('width', String(options.width)); - this._element.setAttribute('height', String(options.height)); - this._defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs'); - this._element.appendChild(this._defs); - - this._options = options; - } - - get width(): number { - return this._options.width; - } - - get height(): number { - return this._options.height; - } - - getElement(): SVGElement { - return this._element; - } - - clear(): void { - const oldElement = this._element; - this._element = oldElement.cloneNode(false) as SVGElement; - oldElement?.parentNode?.replaceChild(this._element, oldElement); - this._defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs'); - this._element.appendChild(this._defs); - } - - async drawQR(qr: QRCode): Promise { - const count = qr.getModuleCount(); - const minSize = Math.min(this._options.width, this._options.height) - this._options.margin * 2; - const dotSize = Math.floor(minSize / count); - let drawImageSize = { - hideXDots: 0, - hideYDots: 0, - width: 0, - height: 0, - }; - - this._qr = qr; - - if (this._options.image) { - // We need it to get image size - await this.loadImage(); - if (!this._image) return; - const { imageOptions, qrOptions } = this._options; - const coverLevel = imageOptions.imageSize * errorCorrectionPercents[qrOptions.errorCorrectionLevel]; - const maxHiddenDots = Math.floor(coverLevel * count * count); - - drawImageSize = calculateImageSize({ - originalWidth: this._image.width, - originalHeight: this._image.height, - maxHiddenDots, - maxHiddenAxisDots: count - 14, - dotSize, - }); - } - - this.clear(); - this.drawBackground(); - this.drawDots((i: number, j: number): boolean => { - if (this._options.imageOptions.hideBackgroundDots) { - if ( - i >= (count - drawImageSize.hideXDots) / 2 - && i < (count + drawImageSize.hideXDots) / 2 - && j >= (count - drawImageSize.hideYDots) / 2 - && j < (count + drawImageSize.hideYDots) / 2 - ) { - return false; - } - } - - if (squareMask[i]?.[j] || squareMask[i - count + 7]?.[j] || squareMask[i]?.[j - count + 7]) { - return false; - } - - if (dotMask[i]?.[j] || dotMask[i - count + 7]?.[j] || dotMask[i]?.[j - count + 7]) { - return false; - } - - return true; - }); - this.drawCorners(); - - if (this._options.image) { - this.drawImage({ - width: drawImageSize.width, height: drawImageSize.height, count, dotSize, - }); - } - } - - drawBackground(): void { - const element = this._element; - const options = this._options; - - if (element) { - const gradientOptions = options.backgroundOptions?.gradient; - const color = options.backgroundOptions?.color; - - if (gradientOptions || color) { - this._createColor({ - options: gradientOptions, - color, - additionalRotation: 0, - x: 0, - y: 0, - height: options.height, - width: options.width, - name: 'background-color', - }); - } - } - } - - drawDots(filter?: FilterFunction): void { - if (!this._qr) { - throw new Error('QR code is not defined'); - } - - const options = this._options; - const count = this._qr.getModuleCount(); - - if (count > options.width || count > options.height) { - throw new Error('The canvas is too small'); - } - - const minSize = Math.min(options.width, options.height) - options.margin * 2; - const dotSize = Math.floor(minSize / count); - const xBeginning = Math.floor((options.width - count * dotSize) / 2); - const yBeginning = Math.floor((options.height - count * dotSize) / 2); - const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type }); - - this._dotsClipPath = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath'); - this._dotsClipPath.setAttribute('id', 'clip-path-dot-color'); - this._defs.appendChild(this._dotsClipPath); - - this._createColor({ - options: options.dotsOptions?.gradient, - color: options.dotsOptions.color, - additionalRotation: 0, - x: xBeginning, - y: yBeginning, - height: count * dotSize, - width: count * dotSize, - name: 'dot-color', - }); - - for (let i = 0; i < count; i++) { - for (let j = 0; j < count; j++) { - if (filter && !filter(i, j)) { - continue; - } - if (!this._qr?.isDark(i, j)) { - continue; - } - - dot.draw( - xBeginning + i * dotSize, - yBeginning + j * dotSize, - dotSize, - (xOffset: number, yOffset: number): boolean => { - if (i + xOffset < 0 || j + yOffset < 0 || i + xOffset >= count || j + yOffset >= count) return false; - if (filter && !filter(i + xOffset, j + yOffset)) return false; - return !!this._qr && this._qr.isDark(i + xOffset, j + yOffset); - }, - ); - - if (dot._element && this._dotsClipPath) { - this._dotsClipPath.appendChild(dot._element); - } - } - } - } - - drawCorners(): void { - if (!this._qr) { - throw new Error('QR code is not defined'); - } - - const element = this._element; - const options = this._options; - - if (!element) { - throw new Error('Element code is not defined'); - } - - const count = this._qr.getModuleCount(); - const minSize = Math.min(options.width, options.height) - options.margin * 2; - const dotSize = Math.floor(minSize / count); - const cornersSquareSize = dotSize * 7; - const cornersDotSize = dotSize * 3; - const xBeginning = Math.floor((options.width - count * dotSize) / 2); - const yBeginning = Math.floor((options.height - count * dotSize) / 2); - - [ - [0, 0, 0], - [1, 0, Math.PI / 2], - [0, 1, -Math.PI / 2], - ].forEach(([column, row, rotation]) => { - const x = xBeginning + column * dotSize * (count - 7); - const y = yBeginning + row * dotSize * (count - 7); - let cornersSquareClipPath = this._dotsClipPath; - let cornersDotClipPath = this._dotsClipPath; - - if (options.cornersSquareOptions?.gradient || options.cornersSquareOptions?.color) { - cornersSquareClipPath = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath'); - cornersSquareClipPath.setAttribute('id', `clip-path-corners-square-color-${column}-${row}`); - this._defs.appendChild(cornersSquareClipPath); - this._cornersSquareClipPath = this._cornersDotClipPath = cornersDotClipPath = cornersSquareClipPath; - - this._createColor({ - options: options.cornersSquareOptions?.gradient, - color: options.cornersSquareOptions?.color, - additionalRotation: rotation, - x, - y, - height: cornersSquareSize, - width: cornersSquareSize, - name: `corners-square-color-${column}-${row}`, - }); - } - - if (options.cornersSquareOptions?.type) { - const cornersSquare = new QRCornerSquare({ svg: this._element, type: options.cornersSquareOptions.type }); - - cornersSquare.draw(x, y, cornersSquareSize, rotation); - - if (cornersSquare._element && cornersSquareClipPath) { - cornersSquareClipPath.appendChild(cornersSquare._element); - } - } else { - const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type }); - - for (let i = 0; i < squareMask.length; i++) { - for (let j = 0; j < squareMask[i].length; j++) { - if (!squareMask[i]?.[j]) { - continue; - } - - dot.draw( - x + i * dotSize, - y + j * dotSize, - dotSize, - (xOffset: number, yOffset: number): boolean => !!squareMask[i + xOffset]?.[j + yOffset], - ); - - if (dot._element && cornersSquareClipPath) { - cornersSquareClipPath.appendChild(dot._element); - } - } - } - } - - if (options.cornersDotOptions?.gradient || options.cornersDotOptions?.color) { - cornersDotClipPath = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath'); - cornersDotClipPath.setAttribute('id', `clip-path-corners-dot-color-${column}-${row}`); - this._defs.appendChild(cornersDotClipPath); - this._cornersDotClipPath = cornersDotClipPath; - - this._createColor({ - options: options.cornersDotOptions?.gradient, - color: options.cornersDotOptions?.color, - additionalRotation: rotation, - x: x + dotSize * 2, - y: y + dotSize * 2, - height: cornersDotSize, - width: cornersDotSize, - name: `corners-dot-color-${column}-${row}`, - }); - } - - if (options.cornersDotOptions?.type) { - const cornersDot = new QRCornerDot({ svg: this._element, type: options.cornersDotOptions.type }); - - cornersDot.draw(x + dotSize * 2, y + dotSize * 2, cornersDotSize, rotation); - - if (cornersDot._element && cornersDotClipPath) { - cornersDotClipPath.appendChild(cornersDot._element); - } - } else { - const dot = new QRDot({ svg: this._element, type: options.dotsOptions.type }); - - for (let i = 0; i < dotMask.length; i++) { - for (let j = 0; j < dotMask[i].length; j++) { - if (!dotMask[i]?.[j]) { - continue; - } - - dot.draw( - x + i * dotSize, - y + j * dotSize, - dotSize, - (xOffset: number, yOffset: number): boolean => !!dotMask[i + xOffset]?.[j + yOffset], - ); - - if (dot._element && cornersDotClipPath) { - cornersDotClipPath.appendChild(dot._element); - } - } - } - } - }); - } - - loadImage(): Promise { - return new Promise((resolve, reject) => { - const options = this._options; - const image = new Image(); - - if (!options.image) { - // eslint-disable-next-line prefer-promise-reject-errors,no-promise-executor-return - return reject('Image is not defined'); - } - - if (typeof options.imageOptions.crossOrigin === 'string') { - image.crossOrigin = options.imageOptions.crossOrigin; - } - - this._image = image; - image.onload = (): void => { - resolve(); - }; - image.src = options.image; - }); - } - - drawImage({ - width, - height, - count, - dotSize, - }: { - width: number; - height: number; - count: number; - dotSize: number; - }): void { - const options = this._options; - const xBeginning = Math.floor((options.width - count * dotSize) / 2); - const yBeginning = Math.floor((options.height - count * dotSize) / 2); - const dx = xBeginning + options.imageOptions.margin + (count * dotSize - width) / 2; - const dy = yBeginning + options.imageOptions.margin + (count * dotSize - height) / 2; - const dw = width - options.imageOptions.margin * 2; - const dh = height - options.imageOptions.margin * 2; - - const image = document.createElementNS('http://www.w3.org/2000/svg', 'image'); - image.setAttribute('href', options.image || ''); - image.setAttribute('x', String(dx)); - image.setAttribute('y', String(dy)); - image.setAttribute('width', `${dw}px`); - image.setAttribute('height', `${dh}px`); - - this._element.appendChild(image); - } - - _createColor({ - options, - color, - additionalRotation, - x, - y, - height, - width, - name, - }: { - options?: Gradient; - color?: string; - additionalRotation: number; - x: number; - y: number; - height: number; - width: number; - name: string; - }): void { - const size = width > height ? width : height; - const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); - rect.setAttribute('x', String(x)); - rect.setAttribute('y', String(y)); - rect.setAttribute('height', String(height)); - rect.setAttribute('width', String(width)); - rect.setAttribute('clip-path', `url('#clip-path-${name}')`); - - if (options) { - let gradient: SVGElement; - if (options.type === gradientTypes.radial) { - gradient = document.createElementNS('http://www.w3.org/2000/svg', 'radialGradient'); - gradient.setAttribute('id', name); - gradient.setAttribute('gradientUnits', 'userSpaceOnUse'); - gradient.setAttribute('fx', String(x + width / 2)); - gradient.setAttribute('fy', String(y + height / 2)); - gradient.setAttribute('cx', String(x + width / 2)); - gradient.setAttribute('cy', String(y + height / 2)); - gradient.setAttribute('r', String(size / 2)); - } else { - const rotation = ((options.rotation || 0) + additionalRotation) % (2 * Math.PI); - const positiveRotation = (rotation + 2 * Math.PI) % (2 * Math.PI); - let x0 = x + width / 2; - let y0 = y + height / 2; - let x1 = x + width / 2; - let y1 = y + height / 2; - - if ( - (positiveRotation >= 0 && positiveRotation <= 0.25 * Math.PI) - || (positiveRotation > 1.75 * Math.PI && positiveRotation <= 2 * Math.PI) - ) { - x0 -= width / 2; - y0 -= (height / 2) * Math.tan(rotation); - x1 += width / 2; - y1 += (height / 2) * Math.tan(rotation); - } else if (positiveRotation > 0.25 * Math.PI && positiveRotation <= 0.75 * Math.PI) { - y0 -= height / 2; - x0 -= width / 2 / Math.tan(rotation); - y1 += height / 2; - x1 += width / 2 / Math.tan(rotation); - } else if (positiveRotation > 0.75 * Math.PI && positiveRotation <= 1.25 * Math.PI) { - x0 += width / 2; - y0 += (height / 2) * Math.tan(rotation); - x1 -= width / 2; - y1 -= (height / 2) * Math.tan(rotation); - } else if (positiveRotation > 1.25 * Math.PI && positiveRotation <= 1.75 * Math.PI) { - y0 += height / 2; - x0 += width / 2 / Math.tan(rotation); - y1 -= height / 2; - x1 -= width / 2 / Math.tan(rotation); - } - - gradient = document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient'); - gradient.setAttribute('id', name); - gradient.setAttribute('gradientUnits', 'userSpaceOnUse'); - gradient.setAttribute('x1', String(Math.round(x0))); - gradient.setAttribute('y1', String(Math.round(y0))); - gradient.setAttribute('x2', String(Math.round(x1))); - gradient.setAttribute('y2', String(Math.round(y1))); - } - - // eslint-disable-next-line @typescript-eslint/no-shadow - options.colorStops.forEach(({ offset, color }: { offset: number; color: string }) => { - const stop = document.createElementNS('http://www.w3.org/2000/svg', 'stop'); - stop.setAttribute('offset', `${100 * offset}%`); - stop.setAttribute('stop-color', color); - gradient.appendChild(stop); - }); - - rect.setAttribute('fill', `url('#${name}')`); - this._defs.appendChild(gradient); - } else if (color) { - rect.setAttribute('fill', color); - } - - this._element.appendChild(rect); - } -} diff --git a/src/lib/qr-code-styling/figures/cornerDot/canvas/QRCornerDot.ts b/src/lib/qr-code-styling/figures/cornerDot/canvas/QRCornerDot.ts deleted file mode 100644 index 6c47fb04..00000000 --- a/src/lib/qr-code-styling/figures/cornerDot/canvas/QRCornerDot.ts +++ /dev/null @@ -1,88 +0,0 @@ -/* eslint-disable no-underscore-dangle,class-methods-use-this,@typescript-eslint/no-unused-expressions */ -import type { - BasicFigureDrawArgsCanvas, CornerDotType, DrawArgsCanvas, RotateFigureArgsCanvas, -} from '../../../types'; - -import cornerDotTypes from '../../../constants/cornerDotTypes'; - -export default class QRCornerDot { - _context: CanvasRenderingContext2D; - - _type: CornerDotType; - - constructor({ context, type }: { context: CanvasRenderingContext2D; type: CornerDotType }) { - this._context = context; - this._type = type; - } - - draw(x: number, y: number, size: number, rotation: number): void { - const context = this._context; - const type = this._type; - let drawFunction; - - switch (type) { - case cornerDotTypes.square: - drawFunction = this._drawSquare; - break; - case cornerDotTypes.dot: - default: - drawFunction = this._drawDot; - } - - drawFunction.call(this, { - x, y, size, context, rotation, - }); - } - - _rotateFigure({ - x, y, size, context, rotation = 0, draw, - }: RotateFigureArgsCanvas): void { - const cx = x + size / 2; - const cy = y + size / 2; - - context.translate(cx, cy); - rotation && context.rotate(rotation); - draw(); - context.closePath(); - rotation && context.rotate(-rotation); - context.translate(-cx, -cy); - } - - _basicDot(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - - this._rotateFigure({ - ...args, - draw: () => { - context.arc(0, 0, size / 2, 0, Math.PI * 2); - }, - }); - } - - _basicSquare(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - - this._rotateFigure({ - ...args, - draw: () => { - context.rect(-size / 2, -size / 2, size, size); - }, - }); - } - - _drawDot({ - x, y, size, context, rotation, - }: DrawArgsCanvas): void { - this._basicDot({ - x, y, size, context, rotation, - }); - } - - _drawSquare({ - x, y, size, context, rotation, - }: DrawArgsCanvas): void { - this._basicSquare({ - x, y, size, context, rotation, - }); - } -} diff --git a/src/lib/qr-code-styling/figures/cornerDot/svg/QRCornerDot.ts b/src/lib/qr-code-styling/figures/cornerDot/svg/QRCornerDot.ts deleted file mode 100644 index 66c7b896..00000000 --- a/src/lib/qr-code-styling/figures/cornerDot/svg/QRCornerDot.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* eslint-disable no-underscore-dangle */ -import type { - BasicFigureDrawArgs, CornerDotType, DrawArgs, RotateFigureArgs, -} from '../../../types'; - -import cornerDotTypes from '../../../constants/cornerDotTypes'; - -export default class QRCornerDot { - _element?: SVGElement; - - _svg: SVGElement; - - _type: CornerDotType; - - constructor({ svg, type }: { svg: SVGElement; type: CornerDotType }) { - this._svg = svg; - this._type = type; - } - - draw(x: number, y: number, size: number, rotation: number): void { - const type = this._type; - let drawFunction; - - switch (type) { - case cornerDotTypes.square: - drawFunction = this._drawSquare; - break; - case cornerDotTypes.dot: - default: - drawFunction = this._drawDot; - } - - drawFunction.call(this, { - x, y, size, rotation, - }); - } - - _rotateFigure({ - x, y, size, rotation = 0, draw, - }: RotateFigureArgs): void { - const cx = x + size / 2; - const cy = y + size / 2; - - draw(); - this._element?.setAttribute('transform', `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`); - } - - _basicDot(args: BasicFigureDrawArgs): void { - const { size, x, y } = args; - - this._rotateFigure({ - ...args, - draw: () => { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); - this._element.setAttribute('cx', String(x + size / 2)); - this._element.setAttribute('cy', String(y + size / 2)); - this._element.setAttribute('r', String(size / 2)); - }, - }); - } - - _basicSquare(args: BasicFigureDrawArgs): void { - const { size, x, y } = args; - - this._rotateFigure({ - ...args, - draw: () => { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); - this._element.setAttribute('x', String(x)); - this._element.setAttribute('y', String(y)); - this._element.setAttribute('width', String(size)); - this._element.setAttribute('height', String(size)); - }, - }); - } - - _drawDot({ - x, y, size, rotation, - }: DrawArgs): void { - this._basicDot({ - x, y, size, rotation, - }); - } - - _drawSquare({ - x, y, size, rotation, - }: DrawArgs): void { - this._basicSquare({ - x, y, size, rotation, - }); - } -} diff --git a/src/lib/qr-code-styling/figures/cornerSquare/canvas/QRCornerSquare.ts b/src/lib/qr-code-styling/figures/cornerSquare/canvas/QRCornerSquare.ts deleted file mode 100644 index cd917899..00000000 --- a/src/lib/qr-code-styling/figures/cornerSquare/canvas/QRCornerSquare.ts +++ /dev/null @@ -1,131 +0,0 @@ -/* eslint-disable no-underscore-dangle,class-methods-use-this,@typescript-eslint/no-unused-expressions */ -import type { - BasicFigureDrawArgsCanvas, CornerSquareType, DrawArgsCanvas, RotateFigureArgsCanvas, -} from '../../../types'; - -import cornerSquareTypes from '../../../constants/cornerSquareTypes'; - -export default class QRCornerSquare { - _context: CanvasRenderingContext2D; - - _type: CornerSquareType; - - constructor({ context, type }: { context: CanvasRenderingContext2D; type: CornerSquareType }) { - this._context = context; - this._type = type; - } - - draw(x: number, y: number, size: number, rotation: number): void { - const context = this._context; - const type = this._type; - let drawFunction; - - switch (type) { - case cornerSquareTypes.square: - drawFunction = this._drawSquare; - break; - case cornerSquareTypes.extraRounded: - drawFunction = this._drawExtraRounded; - break; - case cornerSquareTypes.dot: - default: - drawFunction = this._drawDot; - } - - drawFunction.call(this, { - x, y, size, context, rotation, - }); - } - - _rotateFigure({ - x, y, size, context, rotation = 0, draw, - }: RotateFigureArgsCanvas): void { - const cx = x + size / 2; - const cy = y + size / 2; - - context.translate(cx, cy); - rotation && context.rotate(rotation); - draw(); - context.closePath(); - rotation && context.rotate(-rotation); - context.translate(-cx, -cy); - } - - _basicDot(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - const dotSize = size / 7; - - this._rotateFigure({ - ...args, - draw: () => { - context.arc(0, 0, size / 2, 0, Math.PI * 2); - context.arc(0, 0, size / 2 - dotSize, 0, Math.PI * 2); - }, - }); - } - - _basicSquare(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - const dotSize = size / 7; - - this._rotateFigure({ - ...args, - draw: () => { - context.rect(-size / 2, -size / 2, size, size); - context.rect(-size / 2 + dotSize, -size / 2 + dotSize, size - 2 * dotSize, size - 2 * dotSize); - }, - }); - } - - _basicExtraRounded(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - const dotSize = size / 7; - - this._rotateFigure({ - ...args, - draw: () => { - context.arc(-dotSize, -dotSize, 2.5 * dotSize, Math.PI, -Math.PI / 2); - context.lineTo(dotSize, -3.5 * dotSize); - context.arc(dotSize, -dotSize, 2.5 * dotSize, -Math.PI / 2, 0); - context.lineTo(3.5 * dotSize, -dotSize); - context.arc(dotSize, dotSize, 2.5 * dotSize, 0, Math.PI / 2); - context.lineTo(-dotSize, 3.5 * dotSize); - context.arc(-dotSize, dotSize, 2.5 * dotSize, Math.PI / 2, Math.PI); - context.lineTo(-3.5 * dotSize, -dotSize); - - context.arc(-dotSize, -dotSize, 1.5 * dotSize, Math.PI, -Math.PI / 2); - context.lineTo(dotSize, -2.5 * dotSize); - context.arc(dotSize, -dotSize, 1.5 * dotSize, -Math.PI / 2, 0); - context.lineTo(2.5 * dotSize, -dotSize); - context.arc(dotSize, dotSize, 1.5 * dotSize, 0, Math.PI / 2); - context.lineTo(-dotSize, 2.5 * dotSize); - context.arc(-dotSize, dotSize, 1.5 * dotSize, Math.PI / 2, Math.PI); - context.lineTo(-2.5 * dotSize, -dotSize); - }, - }); - } - - _drawDot({ - x, y, size, context, rotation, - }: DrawArgsCanvas): void { - this._basicDot({ - x, y, size, context, rotation, - }); - } - - _drawSquare({ - x, y, size, context, rotation, - }: DrawArgsCanvas): void { - this._basicSquare({ - x, y, size, context, rotation, - }); - } - - _drawExtraRounded({ - x, y, size, context, rotation, - }: DrawArgsCanvas): void { - this._basicExtraRounded({ - x, y, size, context, rotation, - }); - } -} diff --git a/src/lib/qr-code-styling/figures/cornerSquare/svg/QRCornerSquare.ts b/src/lib/qr-code-styling/figures/cornerSquare/svg/QRCornerSquare.ts deleted file mode 100644 index 6bf1f2ea..00000000 --- a/src/lib/qr-code-styling/figures/cornerSquare/svg/QRCornerSquare.ts +++ /dev/null @@ -1,156 +0,0 @@ -/* eslint-disable no-underscore-dangle */ -import type { - BasicFigureDrawArgs, CornerSquareType, DrawArgs, RotateFigureArgs, -} from '../../../types'; - -import cornerSquareTypes from '../../../constants/cornerSquareTypes'; - -export default class QRCornerSquare { - _element?: SVGElement; - - _svg: SVGElement; - - _type: CornerSquareType; - - constructor({ svg, type }: { svg: SVGElement; type: CornerSquareType }) { - this._svg = svg; - this._type = type; - } - - draw(x: number, y: number, size: number, rotation: number): void { - const type = this._type; - let drawFunction; - - switch (type) { - case cornerSquareTypes.square: - drawFunction = this._drawSquare; - break; - case cornerSquareTypes.extraRounded: - drawFunction = this._drawExtraRounded; - break; - case cornerSquareTypes.dot: - default: - drawFunction = this._drawDot; - } - - drawFunction.call(this, { - x, y, size, rotation, - }); - } - - _rotateFigure({ - x, y, size, rotation = 0, draw, - }: RotateFigureArgs): void { - const cx = x + size / 2; - const cy = y + size / 2; - - draw(); - this._element?.setAttribute('transform', `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`); - } - - _basicDot(args: BasicFigureDrawArgs): void { - const { size, x, y } = args; - const dotSize = size / 7; - - this._rotateFigure({ - ...args, - draw: () => { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - this._element.setAttribute('clip-rule', 'evenodd'); - this._element.setAttribute( - 'd', - `M ${x + size / 2} ${y}` // M cx, y // Move to top of ring - + `a ${size / 2} ${size / 2} 0 1 0 0.1 0` // a outerRadius, outerRadius, 0, 1, 0, 1, 0 // Draw outer arc, but don't close it - + 'z' // Z // Close the outer shape - + `m 0 ${dotSize}` // m -1 outerRadius-innerRadius // Move to top point of inner radius - + `a ${size / 2 - dotSize} ${size / 2 - dotSize} 0 1 1 -0.1 0` // a innerRadius, innerRadius, 0, 1, 1, -1, 0 // Draw inner arc, but don't close it - + 'Z', // Z // Close the inner ring. Actually will still work without, but inner ring will have one unit missing in stroke - ); - }, - }); - } - - _basicSquare(args: BasicFigureDrawArgs): void { - const { size, x, y } = args; - const dotSize = size / 7; - - this._rotateFigure({ - ...args, - draw: () => { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - this._element.setAttribute('clip-rule', 'evenodd'); - this._element.setAttribute( - 'd', - `M ${x} ${y}` - + `v ${size}` - + `h ${size}` - + `v ${-size}` - + 'z' - + `M ${x + dotSize} ${y + dotSize}` - + `h ${size - 2 * dotSize}` - + `v ${size - 2 * dotSize}` - + `h ${-size + 2 * dotSize}` - + 'z', - ); - }, - }); - } - - _basicExtraRounded(args: BasicFigureDrawArgs): void { - const { size, x, y } = args; - const dotSize = size / 7; - - this._rotateFigure({ - ...args, - draw: () => { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - this._element.setAttribute('clip-rule', 'evenodd'); - this._element.setAttribute( - 'd', - `M ${x} ${y + 2.5 * dotSize}` - + `v ${2 * dotSize}` - + `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${dotSize * 2.5}` - + `h ${2 * dotSize}` - + `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${dotSize * 2.5} ${-dotSize * 2.5}` - + `v ${-2 * dotSize}` - + `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${-dotSize * 2.5}` - + `h ${-2 * dotSize}` - + `a ${2.5 * dotSize} ${2.5 * dotSize}, 0, 0, 0, ${-dotSize * 2.5} ${dotSize * 2.5}` - + `M ${x + 2.5 * dotSize} ${y + dotSize}` - + `h ${2 * dotSize}` - + `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${dotSize * 1.5}` - + `v ${2 * dotSize}` - + `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${dotSize * 1.5}` - + `h ${-2 * dotSize}` - + `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${-dotSize * 1.5} ${-dotSize * 1.5}` - + `v ${-2 * dotSize}` - + `a ${1.5 * dotSize} ${1.5 * dotSize}, 0, 0, 1, ${dotSize * 1.5} ${-dotSize * 1.5}`, - ); - }, - }); - } - - _drawDot({ - x, y, size, rotation, - }: DrawArgs): void { - this._basicDot({ - x, y, size, rotation, - }); - } - - _drawSquare({ - x, y, size, rotation, - }: DrawArgs): void { - this._basicSquare({ - x, y, size, rotation, - }); - } - - _drawExtraRounded({ - x, y, size, rotation, - }: DrawArgs): void { - this._basicExtraRounded({ - x, y, size, rotation, - }); - } -} diff --git a/src/lib/qr-code-styling/figures/dot/canvas/QRDot.ts b/src/lib/qr-code-styling/figures/dot/canvas/QRDot.ts deleted file mode 100644 index 81035a6d..00000000 --- a/src/lib/qr-code-styling/figures/dot/canvas/QRDot.ts +++ /dev/null @@ -1,365 +0,0 @@ -/* eslint-disable no-underscore-dangle,class-methods-use-this,@typescript-eslint/no-unused-expressions */ -import type { - BasicFigureDrawArgsCanvas, - DotType, - DrawArgsCanvas, - GetNeighbor, - RotateFigureArgsCanvas, -} from '../../../types'; - -import dotTypes from '../../../constants/dotTypes'; - -export default class QRDot { - _context: CanvasRenderingContext2D; - - _type: DotType; - - constructor({ context, type }: { context: CanvasRenderingContext2D; type: DotType }) { - this._context = context; - this._type = type; - } - - draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void { - const context = this._context; - const type = this._type; - let drawFunction; - - switch (type) { - case dotTypes.dots: - drawFunction = this._drawDot; - break; - case dotTypes.classy: - drawFunction = this._drawClassy; - break; - case dotTypes.classyRounded: - drawFunction = this._drawClassyRounded; - break; - case dotTypes.rounded: - drawFunction = this._drawRounded; - break; - case dotTypes.extraRounded: - drawFunction = this._drawExtraRounded; - break; - case dotTypes.square: - default: - drawFunction = this._drawSquare; - } - - drawFunction.call(this, { - x, y, size, context, getNeighbor, - }); - } - - _rotateFigure({ - x, y, size, context, rotation = 0, draw, - }: RotateFigureArgsCanvas): void { - const cx = x + size / 2; - const cy = y + size / 2; - - context.translate(cx, cy); - rotation && context.rotate(rotation); - draw(); - context.closePath(); - rotation && context.rotate(-rotation); - context.translate(-cx, -cy); - } - - _basicDot(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - - this._rotateFigure({ - ...args, - draw: () => { - context.arc(0, 0, size / 2, 0, Math.PI * 2); - }, - }); - } - - _basicSquare(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - - this._rotateFigure({ - ...args, - draw: () => { - context.rect(-size / 2, -size / 2, size, size); - }, - }); - } - - // if rotation === 0 - right side is rounded - _basicSideRounded(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - - this._rotateFigure({ - ...args, - draw: () => { - context.arc(0, 0, size / 2, -Math.PI / 2, Math.PI / 2); - context.lineTo(-size / 2, size / 2); - context.lineTo(-size / 2, -size / 2); - context.lineTo(0, -size / 2); - }, - }); - } - - // if rotation === 0 - top right corner is rounded - _basicCornerRounded(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - - this._rotateFigure({ - ...args, - draw: () => { - context.arc(0, 0, size / 2, -Math.PI / 2, 0); - context.lineTo(size / 2, size / 2); - context.lineTo(-size / 2, size / 2); - context.lineTo(-size / 2, -size / 2); - context.lineTo(0, -size / 2); - }, - }); - } - - // if rotation === 0 - top right corner is rounded - _basicCornerExtraRounded(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - - this._rotateFigure({ - ...args, - draw: () => { - context.arc(-size / 2, size / 2, size, -Math.PI / 2, 0); - context.lineTo(-size / 2, size / 2); - context.lineTo(-size / 2, -size / 2); - }, - }); - } - - _basicCornersRounded(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - - this._rotateFigure({ - ...args, - draw: () => { - context.arc(0, 0, size / 2, -Math.PI / 2, 0); - context.lineTo(size / 2, size / 2); - context.lineTo(0, size / 2); - context.arc(0, 0, size / 2, Math.PI / 2, Math.PI); - context.lineTo(-size / 2, -size / 2); - context.lineTo(0, -size / 2); - }, - }); - } - - _basicCornersExtraRounded(args: BasicFigureDrawArgsCanvas): void { - const { size, context } = args; - - this._rotateFigure({ - ...args, - draw: () => { - context.arc(-size / 2, size / 2, size, -Math.PI / 2, 0); - context.arc(size / 2, -size / 2, size, Math.PI / 2, Math.PI); - }, - }); - } - - _drawDot({ - x, y, size, context, - }: DrawArgsCanvas): void { - this._basicDot({ - x, y, size, context, rotation: 0, - }); - } - - _drawSquare({ - x, y, size, context, - }: DrawArgsCanvas): void { - this._basicSquare({ - x, y, size, context, rotation: 0, - }); - } - - _drawRounded({ - x, y, size, context, getNeighbor, - }: DrawArgsCanvas): void { - const leftNeighbor = getNeighbor ? Number(getNeighbor(-1, 0)) : 0; - const rightNeighbor = getNeighbor ? Number(getNeighbor(1, 0)) : 0; - const topNeighbor = getNeighbor ? Number(getNeighbor(0, -1)) : 0; - const bottomNeighbor = getNeighbor ? Number(getNeighbor(0, 1)) : 0; - - const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor; - - if (neighborsCount === 0) { - this._basicDot({ - x, y, size, context, rotation: 0, - }); - return; - } - - if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) { - this._basicSquare({ - x, y, size, context, rotation: 0, - }); - return; - } - - if (neighborsCount === 2) { - let rotation = 0; - - if (leftNeighbor && topNeighbor) { - rotation = Math.PI / 2; - } else if (topNeighbor && rightNeighbor) { - rotation = Math.PI; - } else if (rightNeighbor && bottomNeighbor) { - rotation = -Math.PI / 2; - } - - this._basicCornerRounded({ - x, y, size, context, rotation, - }); - return; - } - - if (neighborsCount === 1) { - let rotation = 0; - - if (topNeighbor) { - rotation = Math.PI / 2; - } else if (rightNeighbor) { - rotation = Math.PI; - } else if (bottomNeighbor) { - rotation = -Math.PI / 2; - } - - this._basicSideRounded({ - x, y, size, context, rotation, - }); - } - } - - _drawExtraRounded({ - x, y, size, context, getNeighbor, - }: DrawArgsCanvas): void { - const leftNeighbor = getNeighbor ? Number(getNeighbor(-1, 0)) : 0; - const rightNeighbor = getNeighbor ? Number(getNeighbor(1, 0)) : 0; - const topNeighbor = getNeighbor ? Number(getNeighbor(0, -1)) : 0; - const bottomNeighbor = getNeighbor ? Number(getNeighbor(0, 1)) : 0; - - const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor; - - if (neighborsCount === 0) { - this._basicDot({ - x, y, size, context, rotation: 0, - }); - return; - } - - if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) { - this._basicSquare({ - x, y, size, context, rotation: 0, - }); - return; - } - - if (neighborsCount === 2) { - let rotation = 0; - - if (leftNeighbor && topNeighbor) { - rotation = Math.PI / 2; - } else if (topNeighbor && rightNeighbor) { - rotation = Math.PI; - } else if (rightNeighbor && bottomNeighbor) { - rotation = -Math.PI / 2; - } - - this._basicCornerExtraRounded({ - x, y, size, context, rotation, - }); - return; - } - - if (neighborsCount === 1) { - let rotation = 0; - - if (topNeighbor) { - rotation = Math.PI / 2; - } else if (rightNeighbor) { - rotation = Math.PI; - } else if (bottomNeighbor) { - rotation = -Math.PI / 2; - } - - this._basicSideRounded({ - x, y, size, context, rotation, - }); - } - } - - _drawClassy({ - x, y, size, context, getNeighbor, - }: DrawArgsCanvas): void { - const leftNeighbor = getNeighbor ? Number(getNeighbor(-1, 0)) : 0; - const rightNeighbor = getNeighbor ? Number(getNeighbor(1, 0)) : 0; - const topNeighbor = getNeighbor ? Number(getNeighbor(0, -1)) : 0; - const bottomNeighbor = getNeighbor ? Number(getNeighbor(0, 1)) : 0; - - const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor; - - if (neighborsCount === 0) { - this._basicCornersRounded({ - x, y, size, context, rotation: Math.PI / 2, - }); - return; - } - - if (!leftNeighbor && !topNeighbor) { - this._basicCornerRounded({ - x, y, size, context, rotation: -Math.PI / 2, - }); - return; - } - - if (!rightNeighbor && !bottomNeighbor) { - this._basicCornerRounded({ - x, y, size, context, rotation: Math.PI / 2, - }); - return; - } - - this._basicSquare({ - x, y, size, context, rotation: 0, - }); - } - - _drawClassyRounded({ - x, y, size, context, getNeighbor, - }: DrawArgsCanvas): void { - const leftNeighbor = getNeighbor ? Number(getNeighbor(-1, 0)) : 0; - const rightNeighbor = getNeighbor ? Number(getNeighbor(1, 0)) : 0; - const topNeighbor = getNeighbor ? Number(getNeighbor(0, -1)) : 0; - const bottomNeighbor = getNeighbor ? Number(getNeighbor(0, 1)) : 0; - - const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor; - - if (neighborsCount === 0) { - this._basicCornersRounded({ - x, y, size, context, rotation: Math.PI / 2, - }); - return; - } - - if (!leftNeighbor && !topNeighbor) { - this._basicCornerExtraRounded({ - x, y, size, context, rotation: -Math.PI / 2, - }); - return; - } - - if (!rightNeighbor && !bottomNeighbor) { - this._basicCornerExtraRounded({ - x, y, size, context, rotation: Math.PI / 2, - }); - return; - } - - this._basicSquare({ - x, y, size, context, rotation: 0, - }); - } -} diff --git a/src/lib/qr-code-styling/figures/dot/svg/QRDot.ts b/src/lib/qr-code-styling/figures/dot/svg/QRDot.ts deleted file mode 100644 index 14fa51cf..00000000 --- a/src/lib/qr-code-styling/figures/dot/svg/QRDot.ts +++ /dev/null @@ -1,367 +0,0 @@ -/* eslint-disable no-underscore-dangle */ -import type { - BasicFigureDrawArgs, DotType, DrawArgs, GetNeighbor, RotateFigureArgs, -} from '../../../types'; - -import dotTypes from '../../../constants/dotTypes'; - -export default class QRDot { - _element?: SVGElement; - - _svg: SVGElement; - - _type: DotType; - - constructor({ svg, type }: { svg: SVGElement; type: DotType }) { - this._svg = svg; - this._type = type; - } - - draw(x: number, y: number, size: number, getNeighbor: GetNeighbor): void { - const type = this._type; - let drawFunction; - - switch (type) { - case dotTypes.dots: - drawFunction = this._drawDot; - break; - case dotTypes.classy: - drawFunction = this._drawClassy; - break; - case dotTypes.classyRounded: - drawFunction = this._drawClassyRounded; - break; - case dotTypes.rounded: - drawFunction = this._drawRounded; - break; - case dotTypes.extraRounded: - drawFunction = this._drawExtraRounded; - break; - case dotTypes.square: - default: - drawFunction = this._drawSquare; - } - - drawFunction.call(this, { - x, y, size, getNeighbor, - }); - } - - _rotateFigure({ - x, y, size, rotation = 0, draw, - }: RotateFigureArgs): void { - const cx = x + size / 2; - const cy = y + size / 2; - - draw(); - this._element?.setAttribute('transform', `rotate(${(180 * rotation) / Math.PI},${cx},${cy})`); - } - - _basicDot(args: BasicFigureDrawArgs): void { - const { size, x, y } = args; - - this._rotateFigure({ - ...args, - draw: () => { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); - this._element.setAttribute('cx', String(x + size / 2)); - this._element.setAttribute('cy', String(y + size / 2)); - this._element.setAttribute('r', String(size / 2)); - }, - }); - } - - _basicSquare(args: BasicFigureDrawArgs): void { - const { size, x, y } = args; - - this._rotateFigure({ - ...args, - draw: () => { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); - this._element.setAttribute('x', String(x)); - this._element.setAttribute('y', String(y)); - this._element.setAttribute('width', String(size)); - this._element.setAttribute('height', String(size)); - }, - }); - } - - // if rotation === 0 - right side is rounded - _basicSideRounded(args: BasicFigureDrawArgs): void { - const { size, x, y } = args; - - this._rotateFigure({ - ...args, - draw: () => { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - this._element.setAttribute( - 'd', - `M ${x} ${y}` // go to top left position - + `v ${size}` // draw line to left bottom corner - + `h ${size / 2}` // draw line to left bottom corner + half of size right - + `a ${size / 2} ${size / 2}, 0, 0, 0, 0 ${-size}`, // draw rounded corner - ); - }, - }); - } - - // if rotation === 0 - top right corner is rounded - _basicCornerRounded(args: BasicFigureDrawArgs): void { - const { size, x, y } = args; - - this._rotateFigure({ - ...args, - draw: () => { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - this._element.setAttribute( - 'd', - `M ${x} ${y}` // go to top left position - + `v ${size}` // draw line to left bottom corner - + `h ${size}` // draw line to right bottom corner - + `v ${-size / 2}` // draw line to right bottom corner + half of size top - + `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}`, // draw rounded corner - ); - }, - }); - } - - // if rotation === 0 - top right corner is rounded - _basicCornerExtraRounded(args: BasicFigureDrawArgs): void { - const { size, x, y } = args; - - this._rotateFigure({ - ...args, - draw: () => { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - this._element.setAttribute( - 'd', - `M ${x} ${y}` // go to top left position - + `v ${size}` // draw line to left bottom corner - + `h ${size}` // draw line to right bottom corner - + `a ${size} ${size}, 0, 0, 0, ${-size} ${-size}`, // draw rounded top right corner - ); - }, - }); - } - - // if rotation === 0 - left bottom and right top corners are rounded - _basicCornersRounded(args: BasicFigureDrawArgs): void { - const { size, x, y } = args; - - this._rotateFigure({ - ...args, - draw: () => { - this._element = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - this._element.setAttribute( - 'd', - `M ${x} ${y}` // go to left top position - + `v ${size / 2}` // draw line to left top corner + half of size bottom - + `a ${size / 2} ${size / 2}, 0, 0, 0, ${size / 2} ${size / 2}` // draw rounded left bottom corner - + `h ${size / 2}` // draw line to right bottom corner - + `v ${-size / 2}` // draw line to right bottom corner + half of size top - + `a ${size / 2} ${size / 2}, 0, 0, 0, ${-size / 2} ${-size / 2}`, // draw rounded right top corner - ); - }, - }); - } - - _drawDot({ x, y, size }: DrawArgs): void { - this._basicDot({ - x, y, size, rotation: 0, - }); - } - - _drawSquare({ x, y, size }: DrawArgs): void { - this._basicSquare({ - x, y, size, rotation: 0, - }); - } - - _drawRounded({ - x, y, size, getNeighbor, - }: DrawArgs): void { - const leftNeighbor = getNeighbor ? Number(getNeighbor(-1, 0)) : 0; - const rightNeighbor = getNeighbor ? Number(getNeighbor(1, 0)) : 0; - const topNeighbor = getNeighbor ? Number(getNeighbor(0, -1)) : 0; - const bottomNeighbor = getNeighbor ? Number(getNeighbor(0, 1)) : 0; - - const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor; - - if (neighborsCount === 0) { - this._basicDot({ - x, y, size, rotation: 0, - }); - return; - } - - if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) { - this._basicSquare({ - x, y, size, rotation: 0, - }); - return; - } - - if (neighborsCount === 2) { - let rotation = 0; - - if (leftNeighbor && topNeighbor) { - rotation = Math.PI / 2; - } else if (topNeighbor && rightNeighbor) { - rotation = Math.PI; - } else if (rightNeighbor && bottomNeighbor) { - rotation = -Math.PI / 2; - } - - this._basicCornerRounded({ - x, y, size, rotation, - }); - return; - } - - if (neighborsCount === 1) { - let rotation = 0; - - if (topNeighbor) { - rotation = Math.PI / 2; - } else if (rightNeighbor) { - rotation = Math.PI; - } else if (bottomNeighbor) { - rotation = -Math.PI / 2; - } - - this._basicSideRounded({ - x, y, size, rotation, - }); - } - } - - _drawExtraRounded({ - x, y, size, getNeighbor, - }: DrawArgs): void { - const leftNeighbor = getNeighbor ? Number(getNeighbor(-1, 0)) : 0; - const rightNeighbor = getNeighbor ? Number(getNeighbor(1, 0)) : 0; - const topNeighbor = getNeighbor ? Number(getNeighbor(0, -1)) : 0; - const bottomNeighbor = getNeighbor ? Number(getNeighbor(0, 1)) : 0; - - const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor; - - if (neighborsCount === 0) { - this._basicDot({ - x, y, size, rotation: 0, - }); - return; - } - - if (neighborsCount > 2 || (leftNeighbor && rightNeighbor) || (topNeighbor && bottomNeighbor)) { - this._basicSquare({ - x, y, size, rotation: 0, - }); - return; - } - - if (neighborsCount === 2) { - let rotation = 0; - - if (leftNeighbor && topNeighbor) { - rotation = Math.PI / 2; - } else if (topNeighbor && rightNeighbor) { - rotation = Math.PI; - } else if (rightNeighbor && bottomNeighbor) { - rotation = -Math.PI / 2; - } - - this._basicCornerExtraRounded({ - x, y, size, rotation, - }); - return; - } - - if (neighborsCount === 1) { - let rotation = 0; - - if (topNeighbor) { - rotation = Math.PI / 2; - } else if (rightNeighbor) { - rotation = Math.PI; - } else if (bottomNeighbor) { - rotation = -Math.PI / 2; - } - - this._basicSideRounded({ - x, y, size, rotation, - }); - } - } - - _drawClassy({ - x, y, size, getNeighbor, - }: DrawArgs): void { - const leftNeighbor = getNeighbor ? Number(getNeighbor(-1, 0)) : 0; - const rightNeighbor = getNeighbor ? Number(getNeighbor(1, 0)) : 0; - const topNeighbor = getNeighbor ? Number(getNeighbor(0, -1)) : 0; - const bottomNeighbor = getNeighbor ? Number(getNeighbor(0, 1)) : 0; - - const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor; - - if (neighborsCount === 0) { - this._basicCornersRounded({ - x, y, size, rotation: Math.PI / 2, - }); - return; - } - - if (!leftNeighbor && !topNeighbor) { - this._basicCornerRounded({ - x, y, size, rotation: -Math.PI / 2, - }); - return; - } - - if (!rightNeighbor && !bottomNeighbor) { - this._basicCornerRounded({ - x, y, size, rotation: Math.PI / 2, - }); - return; - } - - this._basicSquare({ - x, y, size, rotation: 0, - }); - } - - _drawClassyRounded({ - x, y, size, getNeighbor, - }: DrawArgs): void { - const leftNeighbor = getNeighbor ? Number(getNeighbor(-1, 0)) : 0; - const rightNeighbor = getNeighbor ? Number(getNeighbor(1, 0)) : 0; - const topNeighbor = getNeighbor ? Number(getNeighbor(0, -1)) : 0; - const bottomNeighbor = getNeighbor ? Number(getNeighbor(0, 1)) : 0; - - const neighborsCount = leftNeighbor + rightNeighbor + topNeighbor + bottomNeighbor; - - if (neighborsCount === 0) { - this._basicCornersRounded({ - x, y, size, rotation: Math.PI / 2, - }); - return; - } - - if (!leftNeighbor && !topNeighbor) { - this._basicCornerExtraRounded({ - x, y, size, rotation: -Math.PI / 2, - }); - return; - } - - if (!rightNeighbor && !bottomNeighbor) { - this._basicCornerExtraRounded({ - x, y, size, rotation: Math.PI / 2, - }); - return; - } - - this._basicSquare({ - x, y, size, rotation: 0, - }); - } -} diff --git a/src/lib/qr-code-styling/index.ts b/src/lib/qr-code-styling/index.ts deleted file mode 100644 index d56b04ef..00000000 --- a/src/lib/qr-code-styling/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import cornerDotTypes from './constants/cornerDotTypes'; -import cornerSquareTypes from './constants/cornerSquareTypes'; -import dotTypes from './constants/dotTypes'; -import drawTypes from './constants/drawTypes'; -import errorCorrectionLevels from './constants/errorCorrectionLevels'; -import errorCorrectionPercents from './constants/errorCorrectionPercents'; -import modes from './constants/modes'; -import qrTypes from './constants/qrTypes'; -import QRCodeStyling from './core/QRCodeStyling'; - -export * from './types'; - -export { - dotTypes, - cornerDotTypes, - cornerSquareTypes, - errorCorrectionLevels, - errorCorrectionPercents, - modes, - qrTypes, - drawTypes, -}; - -export default QRCodeStyling; diff --git a/src/lib/qr-code-styling/tools/calculateImageSize.ts b/src/lib/qr-code-styling/tools/calculateImageSize.ts deleted file mode 100644 index b8f29b50..00000000 --- a/src/lib/qr-code-styling/tools/calculateImageSize.ts +++ /dev/null @@ -1,70 +0,0 @@ -interface ImageSizeOptions { - originalHeight: number; - originalWidth: number; - maxHiddenDots: number; - maxHiddenAxisDots?: number; - dotSize: number; -} - -interface ImageSizeResult { - height: number; - width: number; - hideYDots: number; - hideXDots: number; -} - -export default function calculateImageSize({ - originalHeight, - originalWidth, - maxHiddenDots, - maxHiddenAxisDots, - dotSize, -}: ImageSizeOptions): ImageSizeResult { - const hideDots = { x: 0, y: 0 }; - const imageSize = { x: 0, y: 0 }; - - if (originalHeight <= 0 || originalWidth <= 0 || maxHiddenDots <= 0 || dotSize <= 0) { - return { - height: 0, - width: 0, - hideYDots: 0, - hideXDots: 0, - }; - } - - const k = originalHeight / originalWidth; - - // Getting the maximum possible axis hidden dots - hideDots.x = Math.floor(Math.sqrt(maxHiddenDots / k)); - // The count of hidden dot's can't be less than 1 - if (hideDots.x <= 0) hideDots.x = 1; - // Check the limit of the maximum allowed axis hidden dots - if (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.x) hideDots.x = maxHiddenAxisDots; - // The count of dots should be odd - if (hideDots.x % 2 === 0) hideDots.x--; - imageSize.x = hideDots.x * dotSize; - // Calculate opposite axis hidden dots based on axis value. - // The value will be odd. - // We use ceil to prevent dots covering by the image. - hideDots.y = 1 + 2 * Math.ceil((hideDots.x * k - 1) / 2); - imageSize.y = Math.round(imageSize.x * k); - // If the result dots count is bigger than max - then decrease size and calculate again - if (hideDots.y * hideDots.x > maxHiddenDots || (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.y)) { - if (maxHiddenAxisDots && maxHiddenAxisDots < hideDots.y) { - hideDots.y = maxHiddenAxisDots; - if (hideDots.y % 2 === 0) hideDots.x--; - } else { - hideDots.y -= 2; - } - imageSize.y = hideDots.y * dotSize; - hideDots.x = 1 + 2 * Math.ceil((hideDots.y / k - 1) / 2); - imageSize.x = Math.round(imageSize.y / k); - } - - return { - height: imageSize.y, - width: imageSize.x, - hideYDots: hideDots.y, - hideXDots: hideDots.x, - }; -} diff --git a/src/lib/qr-code-styling/tools/downloadURI.ts b/src/lib/qr-code-styling/tools/downloadURI.ts deleted file mode 100644 index 1a65bbc2..00000000 --- a/src/lib/qr-code-styling/tools/downloadURI.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default function downloadURI(uri: string, name: string): void { - const link = document.createElement('a'); - link.download = name; - link.href = uri; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); -} diff --git a/src/lib/qr-code-styling/tools/getMode.ts b/src/lib/qr-code-styling/tools/getMode.ts deleted file mode 100644 index db4ffa5d..00000000 --- a/src/lib/qr-code-styling/tools/getMode.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { Mode } from '../types'; - -import modes from '../constants/modes'; - -export default function getMode(data: string): Mode { - switch (true) { - case /^[0-9]*$/.test(data): - return modes.numeric; - case /^[0-9A-Z $%*+\-./:]*$/.test(data): - return modes.alphanumeric; - default: - return modes.byte; - } -} diff --git a/src/lib/qr-code-styling/tools/merge.ts b/src/lib/qr-code-styling/tools/merge.ts deleted file mode 100644 index 8c3170b4..00000000 --- a/src/lib/qr-code-styling/tools/merge.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { UnknownObject } from '../types'; - -const isObject = (obj: Record): boolean => !!obj && typeof obj === 'object' && !Array.isArray(obj); - -export default function mergeDeep(target: UnknownObject, ...sources: UnknownObject[]): UnknownObject { - if (!sources.length) return target; - const source = sources.shift(); - if (source === undefined || !isObject(target) || !isObject(source)) return target; - target = { ...target }; - Object.keys(source).forEach((key: string): void => { - const targetValue = target[key]; - const sourceValue = source[key]; - - if (Array.isArray(targetValue) && Array.isArray(sourceValue)) { - target[key] = sourceValue; - } else if (isObject(targetValue) && isObject(sourceValue)) { - target[key] = mergeDeep({ ...targetValue }, sourceValue); - } else { - target[key] = sourceValue; - } - }); - - return mergeDeep(target, ...sources); -} diff --git a/src/lib/qr-code-styling/tools/sanitizeOptions.ts b/src/lib/qr-code-styling/tools/sanitizeOptions.ts deleted file mode 100644 index c5dcec25..00000000 --- a/src/lib/qr-code-styling/tools/sanitizeOptions.ts +++ /dev/null @@ -1,78 +0,0 @@ -import type { Gradient } from '../types'; - -import type { RequiredOptions } from '../core/QROptions'; - -function sanitizeGradient(gradient: Gradient): Gradient { - const newGradient = { ...gradient }; - - if (!newGradient.colorStops || !newGradient.colorStops.length) { - throw new Error("Field 'colorStops' is required in gradient"); - } - - if (newGradient.rotation) { - newGradient.rotation = Number(newGradient.rotation); - } else { - newGradient.rotation = 0; - } - - newGradient.colorStops = newGradient.colorStops.map((colorStop: { offset: number; color: string }) => ({ - ...colorStop, - offset: Number(colorStop.offset), - })); - - return newGradient; -} - -export default function sanitizeOptions(options: RequiredOptions): RequiredOptions { - const newOptions = { ...options }; - - newOptions.width = Number(newOptions.width); - newOptions.height = Number(newOptions.height); - newOptions.margin = Number(newOptions.margin); - newOptions.imageOptions = { - ...newOptions.imageOptions, - hideBackgroundDots: Boolean(newOptions.imageOptions.hideBackgroundDots), - imageSize: Number(newOptions.imageOptions.imageSize), - margin: Number(newOptions.imageOptions.margin), - }; - - if (newOptions.margin > Math.min(newOptions.width, newOptions.height)) { - newOptions.margin = Math.min(newOptions.width, newOptions.height); - } - - newOptions.dotsOptions = { - ...newOptions.dotsOptions, - }; - if (newOptions.dotsOptions.gradient) { - newOptions.dotsOptions.gradient = sanitizeGradient(newOptions.dotsOptions.gradient); - } - - if (newOptions.cornersSquareOptions) { - newOptions.cornersSquareOptions = { - ...newOptions.cornersSquareOptions, - }; - if (newOptions.cornersSquareOptions.gradient) { - newOptions.cornersSquareOptions.gradient = sanitizeGradient(newOptions.cornersSquareOptions.gradient); - } - } - - if (newOptions.cornersDotOptions) { - newOptions.cornersDotOptions = { - ...newOptions.cornersDotOptions, - }; - if (newOptions.cornersDotOptions.gradient) { - newOptions.cornersDotOptions.gradient = sanitizeGradient(newOptions.cornersDotOptions.gradient); - } - } - - if (newOptions.backgroundOptions) { - newOptions.backgroundOptions = { - ...newOptions.backgroundOptions, - }; - if (newOptions.backgroundOptions.gradient) { - newOptions.backgroundOptions.gradient = sanitizeGradient(newOptions.backgroundOptions.gradient); - } - } - - return newOptions; -} diff --git a/src/lib/qr-code-styling/types/index.ts b/src/lib/qr-code-styling/types/index.ts deleted file mode 100644 index f4437578..00000000 --- a/src/lib/qr-code-styling/types/index.ts +++ /dev/null @@ -1,182 +0,0 @@ -export interface UnknownObject { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - [key: string]: any; -} - -export type DotType = 'dots' | 'rounded' | 'classy' | 'classy-rounded' | 'square' | 'extra-rounded'; -export type CornerDotType = 'dot' | 'square'; -export type CornerSquareType = 'dot' | 'square' | 'extra-rounded'; -export type Extension = 'svg' | 'png' | 'jpeg' | 'webp'; -export type GradientType = 'radial' | 'linear'; -export type DrawType = 'canvas' | 'svg'; - -export type Gradient = { - type: GradientType; - rotation?: number; - colorStops: { - offset: number; - color: string; - }[]; -}; - -export interface DotTypes { - [key: string]: DotType; -} - -export interface GradientTypes { - [key: string]: GradientType; -} - -export interface CornerDotTypes { - [key: string]: CornerDotType; -} - -export interface CornerSquareTypes { - [key: string]: CornerSquareType; -} - -export interface DrawTypes { - [key: string]: DrawType; -} - -export type TypeNumber = - | 0 - | 1 - | 2 - | 3 - | 4 - | 5 - | 6 - | 7 - | 8 - | 9 - | 10 - | 11 - | 12 - | 13 - | 14 - | 15 - | 16 - | 17 - | 18 - | 19 - | 20 - | 21 - | 22 - | 23 - | 24 - | 25 - | 26 - | 27 - | 28 - | 29 - | 30 - | 31 - | 32 - | 33 - | 34 - | 35 - | 36 - | 37 - | 38 - | 39 - | 40; - -export type ErrorCorrectionLevel = 'L' | 'M' | 'Q' | 'H'; -export type Mode = 'Numeric' | 'Alphanumeric' | 'Byte' | 'Kanji'; -export interface QRCode { - addData(data: string, mode?: Mode): void; - make(): void; - getModuleCount(): number; - isDark(row: number, col: number): boolean; - createImgTag(cellSize?: number, margin?: number): string; - createSvgTag(cellSize?: number, margin?: number): string; - createSvgTag(opts?: { cellSize?: number; margin?: number; scalable?: boolean }): string; - createDataURL(cellSize?: number, margin?: number): string; - createTableTag(cellSize?: number, margin?: number): string; - createASCII(cellSize?: number, margin?: number): string; - renderTo2dContext(context: CanvasRenderingContext2D, cellSize?: number): void; -} - -export type Options = { - type?: DrawType; - width?: number; - height?: number; - margin?: number; - data?: string; - image?: string; - qrOptions?: { - typeNumber?: TypeNumber; - mode?: Mode; - errorCorrectionLevel?: ErrorCorrectionLevel; - }; - imageOptions?: { - hideBackgroundDots?: boolean; - imageSize?: number; - crossOrigin?: string; - margin?: number; - }; - dotsOptions?: { - type?: DotType; - color?: string; - gradient?: Gradient; - }; - cornersSquareOptions?: { - type?: CornerSquareType; - color?: string; - gradient?: Gradient; - }; - cornersDotOptions?: { - type?: CornerDotType; - color?: string; - gradient?: Gradient; - }; - backgroundOptions?: { - color?: string; - gradient?: Gradient; - }; -}; - -export type FilterFunction = (i: number, j: number) => boolean; - -export type DownloadOptions = { - name?: string; - extension?: Extension; -}; - -export type DrawArgs = { - x: number; - y: number; - size: number; - rotation?: number; - getNeighbor?: GetNeighbor; -}; - -export type BasicFigureDrawArgs = { - x: number; - y: number; - size: number; - rotation?: number; -}; - -export type RotateFigureArgs = { - x: number; - y: number; - size: number; - rotation?: number; - draw: () => void; -}; - -export type DrawArgsCanvas = DrawArgs & { - context: CanvasRenderingContext2D; -}; - -export type BasicFigureDrawArgsCanvas = BasicFigureDrawArgs & { - context: CanvasRenderingContext2D; -}; - -export type RotateFigureArgsCanvas = RotateFigureArgs & { - context: CanvasRenderingContext2D; -}; - -export type GetNeighbor = (x: number, y: number) => boolean; diff --git a/src/lib/webextension-polyfill/browser.js b/src/lib/webextension-polyfill/browser.js deleted file mode 100644 index 33cec0b8..00000000 --- a/src/lib/webextension-polyfill/browser.js +++ /dev/null @@ -1,1269 +0,0 @@ -(function (global, factory) { - if (typeof define === "function" && define.amd) { - define("webextension-polyfill", ["module"], factory); - } else if (typeof exports !== "undefined") { - factory(module); - } else { - var mod = { - exports: {} - }; - factory(mod); - global.browser = mod.exports; - } -})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (module) { - /* webextension-polyfill - v0.10.0 - Fri Aug 12 2022 19:42:44 */ - - /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ - - /* vim: set sts=2 sw=2 et tw=80: */ - - /* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - "use strict"; - - if (!globalThis.chrome?.runtime?.id) { - console.error("This script should only be loaded in a browser extension."); - // throw new Error("This script should only be loaded in a browser extension."); - } - - else if (typeof globalThis.browser === "undefined" || Object.getPrototypeOf(globalThis.browser) !== Object.prototype) { - const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = "The message port closed before a response was received."; // Wrapping the bulk of this polyfill in a one-time-use function is a minor - // optimization for Firefox. Since Spidermonkey does not fully parse the - // contents of a function until the first time it's called, and since it will - // never actually need to be called, this allows the polyfill to be included - // in Firefox nearly for free. - - const wrapAPIs = extensionAPIs => { - // NOTE: apiMetadata is associated to the content of the api-metadata.json file - // at build time by replacing the following "include" with the content of the - // JSON file. - const apiMetadata = { - "alarms": { - "clear": { - "minArgs": 0, - "maxArgs": 1 - }, - "clearAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "get": { - "minArgs": 0, - "maxArgs": 1 - }, - "getAll": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "bookmarks": { - "create": { - "minArgs": 1, - "maxArgs": 1 - }, - "get": { - "minArgs": 1, - "maxArgs": 1 - }, - "getChildren": { - "minArgs": 1, - "maxArgs": 1 - }, - "getRecent": { - "minArgs": 1, - "maxArgs": 1 - }, - "getSubTree": { - "minArgs": 1, - "maxArgs": 1 - }, - "getTree": { - "minArgs": 0, - "maxArgs": 0 - }, - "move": { - "minArgs": 2, - "maxArgs": 2 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeTree": { - "minArgs": 1, - "maxArgs": 1 - }, - "search": { - "minArgs": 1, - "maxArgs": 1 - }, - "update": { - "minArgs": 2, - "maxArgs": 2 - } - }, - "browserAction": { - "disable": { - "minArgs": 0, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "enable": { - "minArgs": 0, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "getBadgeBackgroundColor": { - "minArgs": 1, - "maxArgs": 1 - }, - "getBadgeText": { - "minArgs": 1, - "maxArgs": 1 - }, - "getPopup": { - "minArgs": 1, - "maxArgs": 1 - }, - "getTitle": { - "minArgs": 1, - "maxArgs": 1 - }, - "openPopup": { - "minArgs": 0, - "maxArgs": 0 - }, - "setBadgeBackgroundColor": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "setBadgeText": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "setIcon": { - "minArgs": 1, - "maxArgs": 1 - }, - "setPopup": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "setTitle": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - } - }, - "browsingData": { - "remove": { - "minArgs": 2, - "maxArgs": 2 - }, - "removeCache": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeCookies": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeDownloads": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeFormData": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeHistory": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeLocalStorage": { - "minArgs": 1, - "maxArgs": 1 - }, - "removePasswords": { - "minArgs": 1, - "maxArgs": 1 - }, - "removePluginData": { - "minArgs": 1, - "maxArgs": 1 - }, - "settings": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "commands": { - "getAll": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "contextMenus": { - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "update": { - "minArgs": 2, - "maxArgs": 2 - } - }, - "cookies": { - "get": { - "minArgs": 1, - "maxArgs": 1 - }, - "getAll": { - "minArgs": 1, - "maxArgs": 1 - }, - "getAllCookieStores": { - "minArgs": 0, - "maxArgs": 0 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "set": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "devtools": { - "inspectedWindow": { - "eval": { - "minArgs": 1, - "maxArgs": 2, - "singleCallbackArg": false - } - }, - "panels": { - "create": { - "minArgs": 3, - "maxArgs": 3, - "singleCallbackArg": true - }, - "elements": { - "createSidebarPane": { - "minArgs": 1, - "maxArgs": 1 - } - } - } - }, - "downloads": { - "cancel": { - "minArgs": 1, - "maxArgs": 1 - }, - "download": { - "minArgs": 1, - "maxArgs": 1 - }, - "erase": { - "minArgs": 1, - "maxArgs": 1 - }, - "getFileIcon": { - "minArgs": 1, - "maxArgs": 2 - }, - "open": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "pause": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeFile": { - "minArgs": 1, - "maxArgs": 1 - }, - "resume": { - "minArgs": 1, - "maxArgs": 1 - }, - "search": { - "minArgs": 1, - "maxArgs": 1 - }, - "show": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - } - }, - "extension": { - "isAllowedFileSchemeAccess": { - "minArgs": 0, - "maxArgs": 0 - }, - "isAllowedIncognitoAccess": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "history": { - "addUrl": { - "minArgs": 1, - "maxArgs": 1 - }, - "deleteAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "deleteRange": { - "minArgs": 1, - "maxArgs": 1 - }, - "deleteUrl": { - "minArgs": 1, - "maxArgs": 1 - }, - "getVisits": { - "minArgs": 1, - "maxArgs": 1 - }, - "search": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "i18n": { - "detectLanguage": { - "minArgs": 1, - "maxArgs": 1 - }, - "getAcceptLanguages": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "identity": { - "launchWebAuthFlow": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "idle": { - "queryState": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "management": { - "get": { - "minArgs": 1, - "maxArgs": 1 - }, - "getAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "getSelf": { - "minArgs": 0, - "maxArgs": 0 - }, - "setEnabled": { - "minArgs": 2, - "maxArgs": 2 - }, - "uninstallSelf": { - "minArgs": 0, - "maxArgs": 1 - } - }, - "notifications": { - "clear": { - "minArgs": 1, - "maxArgs": 1 - }, - "create": { - "minArgs": 1, - "maxArgs": 2 - }, - "getAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "getPermissionLevel": { - "minArgs": 0, - "maxArgs": 0 - }, - "update": { - "minArgs": 2, - "maxArgs": 2 - } - }, - "pageAction": { - "getPopup": { - "minArgs": 1, - "maxArgs": 1 - }, - "getTitle": { - "minArgs": 1, - "maxArgs": 1 - }, - "hide": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "setIcon": { - "minArgs": 1, - "maxArgs": 1 - }, - "setPopup": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "setTitle": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "show": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - } - }, - "permissions": { - "contains": { - "minArgs": 1, - "maxArgs": 1 - }, - "getAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "request": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "runtime": { - "getBackgroundPage": { - "minArgs": 0, - "maxArgs": 0 - }, - "getPlatformInfo": { - "minArgs": 0, - "maxArgs": 0 - }, - "openOptionsPage": { - "minArgs": 0, - "maxArgs": 0 - }, - "requestUpdateCheck": { - "minArgs": 0, - "maxArgs": 0 - }, - "sendMessage": { - "minArgs": 1, - "maxArgs": 3 - }, - "sendNativeMessage": { - "minArgs": 2, - "maxArgs": 2 - }, - "setUninstallURL": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "sessions": { - "getDevices": { - "minArgs": 0, - "maxArgs": 1 - }, - "getRecentlyClosed": { - "minArgs": 0, - "maxArgs": 1 - }, - "restore": { - "minArgs": 0, - "maxArgs": 1 - } - }, - "storage": { - "local": { - "clear": { - "minArgs": 0, - "maxArgs": 0 - }, - "get": { - "minArgs": 0, - "maxArgs": 1 - }, - "getBytesInUse": { - "minArgs": 0, - "maxArgs": 1 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "set": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "managed": { - "get": { - "minArgs": 0, - "maxArgs": 1 - }, - "getBytesInUse": { - "minArgs": 0, - "maxArgs": 1 - } - }, - "sync": { - "clear": { - "minArgs": 0, - "maxArgs": 0 - }, - "get": { - "minArgs": 0, - "maxArgs": 1 - }, - "getBytesInUse": { - "minArgs": 0, - "maxArgs": 1 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "set": { - "minArgs": 1, - "maxArgs": 1 - } - } - }, - "tabs": { - "captureVisibleTab": { - "minArgs": 0, - "maxArgs": 2 - }, - "create": { - "minArgs": 1, - "maxArgs": 1 - }, - "detectLanguage": { - "minArgs": 0, - "maxArgs": 1 - }, - "discard": { - "minArgs": 0, - "maxArgs": 1 - }, - "duplicate": { - "minArgs": 1, - "maxArgs": 1 - }, - "executeScript": { - "minArgs": 1, - "maxArgs": 2 - }, - "get": { - "minArgs": 1, - "maxArgs": 1 - }, - "getCurrent": { - "minArgs": 0, - "maxArgs": 0 - }, - "getZoom": { - "minArgs": 0, - "maxArgs": 1 - }, - "getZoomSettings": { - "minArgs": 0, - "maxArgs": 1 - }, - "goBack": { - "minArgs": 0, - "maxArgs": 1 - }, - "goForward": { - "minArgs": 0, - "maxArgs": 1 - }, - "highlight": { - "minArgs": 1, - "maxArgs": 1 - }, - "insertCSS": { - "minArgs": 1, - "maxArgs": 2 - }, - "move": { - "minArgs": 2, - "maxArgs": 2 - }, - "query": { - "minArgs": 1, - "maxArgs": 1 - }, - "reload": { - "minArgs": 0, - "maxArgs": 2 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeCSS": { - "minArgs": 1, - "maxArgs": 2 - }, - "sendMessage": { - "minArgs": 2, - "maxArgs": 3 - }, - "setZoom": { - "minArgs": 1, - "maxArgs": 2 - }, - "setZoomSettings": { - "minArgs": 1, - "maxArgs": 2 - }, - "update": { - "minArgs": 1, - "maxArgs": 2 - } - }, - "topSites": { - "get": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "webNavigation": { - "getAllFrames": { - "minArgs": 1, - "maxArgs": 1 - }, - "getFrame": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "webRequest": { - "handlerBehaviorChanged": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "windows": { - "create": { - "minArgs": 0, - "maxArgs": 1 - }, - "get": { - "minArgs": 1, - "maxArgs": 2 - }, - "getAll": { - "minArgs": 0, - "maxArgs": 1 - }, - "getCurrent": { - "minArgs": 0, - "maxArgs": 1 - }, - "getLastFocused": { - "minArgs": 0, - "maxArgs": 1 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "update": { - "minArgs": 2, - "maxArgs": 2 - } - } - }; - - if (Object.keys(apiMetadata).length === 0) { - throw new Error("api-metadata.json has not been included in browser-polyfill"); - } - /** - * A WeakMap subclass which creates and stores a value for any key which does - * not exist when accessed, but behaves exactly as an ordinary WeakMap - * otherwise. - * - * @param {function} createItem - * A function which will be called in order to create the value for any - * key which does not exist, the first time it is accessed. The - * function receives, as its only argument, the key being created. - */ - - - class DefaultWeakMap extends WeakMap { - constructor(createItem, items = undefined) { - super(items); - this.createItem = createItem; - } - - get(key) { - if (!this.has(key)) { - this.set(key, this.createItem(key)); - } - - return super.get(key); - } - - } - /** - * Returns true if the given object is an object with a `then` method, and can - * therefore be assumed to behave as a Promise. - * - * @param {*} value The value to test. - * @returns {boolean} True if the value is thenable. - */ - - - const isThenable = value => { - return value && typeof value === "object" && typeof value.then === "function"; - }; - /** - * Creates and returns a function which, when called, will resolve or reject - * the given promise based on how it is called: - * - * - If, when called, `chrome.runtime.lastError` contains a non-null object, - * the promise is rejected with that value. - * - If the function is called with exactly one argument, the promise is - * resolved to that value. - * - Otherwise, the promise is resolved to an array containing all of the - * function's arguments. - * - * @param {object} promise - * An object containing the resolution and rejection functions of a - * promise. - * @param {function} promise.resolve - * The promise's resolution function. - * @param {function} promise.reject - * The promise's rejection function. - * @param {object} metadata - * Metadata about the wrapped method which has created the callback. - * @param {boolean} metadata.singleCallbackArg - * Whether or not the promise is resolved with only the first - * argument of the callback, alternatively an array of all the - * callback arguments is resolved. By default, if the callback - * function is invoked with only a single argument, that will be - * resolved to the promise, while all arguments will be resolved as - * an array if multiple are given. - * - * @returns {function} - * The generated callback function. - */ - - - const makeCallback = (promise, metadata) => { - return (...callbackArgs) => { - if (extensionAPIs.runtime.lastError) { - promise.reject(new Error(extensionAPIs.runtime.lastError.message)); - } else if (metadata.singleCallbackArg || callbackArgs.length <= 1 && metadata.singleCallbackArg !== false) { - promise.resolve(callbackArgs[0]); - } else { - promise.resolve(callbackArgs); - } - }; - }; - - const pluralizeArguments = numArgs => numArgs == 1 ? "argument" : "arguments"; - /** - * Creates a wrapper function for a method with the given name and metadata. - * - * @param {string} name - * The name of the method which is being wrapped. - * @param {object} metadata - * Metadata about the method being wrapped. - * @param {integer} metadata.minArgs - * The minimum number of arguments which must be passed to the - * function. If called with fewer than this number of arguments, the - * wrapper will raise an exception. - * @param {integer} metadata.maxArgs - * The maximum number of arguments which may be passed to the - * function. If called with more than this number of arguments, the - * wrapper will raise an exception. - * @param {boolean} metadata.singleCallbackArg - * Whether or not the promise is resolved with only the first - * argument of the callback, alternatively an array of all the - * callback arguments is resolved. By default, if the callback - * function is invoked with only a single argument, that will be - * resolved to the promise, while all arguments will be resolved as - * an array if multiple are given. - * - * @returns {function(object, ...*)} - * The generated wrapper function. - */ - - - const wrapAsyncFunction = (name, metadata) => { - return function asyncFunctionWrapper(target, ...args) { - if (args.length < metadata.minArgs) { - throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`); - } - - if (args.length > metadata.maxArgs) { - throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`); - } - - return new Promise((resolve, reject) => { - if (metadata.fallbackToNoCallback) { - // This API method has currently no callback on Chrome, but it return a promise on Firefox, - // and so the polyfill will try to call it with a callback first, and it will fallback - // to not passing the callback if the first call fails. - try { - target[name](...args, makeCallback({ - resolve, - reject - }, metadata)); - } catch (cbError) { - console.warn(`${name} API method doesn't seem to support the callback parameter, ` + "falling back to call it without a callback: ", cbError); - target[name](...args); // Update the API method metadata, so that the next API calls will not try to - // use the unsupported callback anymore. - - metadata.fallbackToNoCallback = false; - metadata.noCallback = true; - resolve(); - } - } else if (metadata.noCallback) { - target[name](...args); - resolve(); - } else { - target[name](...args, makeCallback({ - resolve, - reject - }, metadata)); - } - }); - }; - }; - /** - * Wraps an existing method of the target object, so that calls to it are - * intercepted by the given wrapper function. The wrapper function receives, - * as its first argument, the original `target` object, followed by each of - * the arguments passed to the original method. - * - * @param {object} target - * The original target object that the wrapped method belongs to. - * @param {function} method - * The method being wrapped. This is used as the target of the Proxy - * object which is created to wrap the method. - * @param {function} wrapper - * The wrapper function which is called in place of a direct invocation - * of the wrapped method. - * - * @returns {Proxy} - * A Proxy object for the given method, which invokes the given wrapper - * method in its place. - */ - - - const wrapMethod = (target, method, wrapper) => { - return new Proxy(method, { - apply(targetMethod, thisObj, args) { - return wrapper.call(thisObj, target, ...args); - } - - }); - }; - - let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty); - /** - * Wraps an object in a Proxy which intercepts and wraps certain methods - * based on the given `wrappers` and `metadata` objects. - * - * @param {object} target - * The target object to wrap. - * - * @param {object} [wrappers = {}] - * An object tree containing wrapper functions for special cases. Any - * function present in this object tree is called in place of the - * method in the same location in the `target` object tree. These - * wrapper methods are invoked as described in {@see wrapMethod}. - * - * @param {object} [metadata = {}] - * An object tree containing metadata used to automatically generate - * Promise-based wrapper functions for asynchronous. Any function in - * the `target` object tree which has a corresponding metadata object - * in the same location in the `metadata` tree is replaced with an - * automatically-generated wrapper function, as described in - * {@see wrapAsyncFunction} - * - * @returns {Proxy} - */ - - const wrapObject = (target, wrappers = {}, metadata = {}) => { - let cache = Object.create(null); - let handlers = { - has(proxyTarget, prop) { - return prop in target || prop in cache; - }, - - get(proxyTarget, prop, receiver) { - if (prop in cache) { - return cache[prop]; - } - - if (!(prop in target)) { - return undefined; - } - - let value = target[prop]; - - if (typeof value === "function") { - // This is a method on the underlying object. Check if we need to do - // any wrapping. - if (typeof wrappers[prop] === "function") { - // We have a special-case wrapper for this method. - value = wrapMethod(target, target[prop], wrappers[prop]); - } else if (hasOwnProperty(metadata, prop)) { - // This is an async method that we have metadata for. Create a - // Promise wrapper for it. - let wrapper = wrapAsyncFunction(prop, metadata[prop]); - value = wrapMethod(target, target[prop], wrapper); - } else { - // This is a method that we don't know or care about. Return the - // original method, bound to the underlying object. - value = value.bind(target); - } - } else if (typeof value === "object" && value !== null && (hasOwnProperty(wrappers, prop) || hasOwnProperty(metadata, prop))) { - // This is an object that we need to do some wrapping for the children - // of. Create a sub-object wrapper for it with the appropriate child - // metadata. - value = wrapObject(value, wrappers[prop], metadata[prop]); - } else if (hasOwnProperty(metadata, "*")) { - // Wrap all properties in * namespace. - value = wrapObject(value, wrappers[prop], metadata["*"]); - } else { - // We don't need to do any wrapping for this property, - // so just forward all access to the underlying object. - Object.defineProperty(cache, prop, { - configurable: true, - enumerable: true, - - get() { - return target[prop]; - }, - - set(value) { - target[prop] = value; - } - - }); - return value; - } - - cache[prop] = value; - return value; - }, - - set(proxyTarget, prop, value, receiver) { - if (prop in cache) { - cache[prop] = value; - } else { - target[prop] = value; - } - - return true; - }, - - defineProperty(proxyTarget, prop, desc) { - return Reflect.defineProperty(cache, prop, desc); - }, - - deleteProperty(proxyTarget, prop) { - return Reflect.deleteProperty(cache, prop); - } - - }; // Per contract of the Proxy API, the "get" proxy handler must return the - // original value of the target if that value is declared read-only and - // non-configurable. For this reason, we create an object with the - // prototype set to `target` instead of using `target` directly. - // Otherwise we cannot return a custom object for APIs that - // are declared read-only and non-configurable, such as `chrome.devtools`. - // - // The proxy handlers themselves will still use the original `target` - // instead of the `proxyTarget`, so that the methods and properties are - // dereferenced via the original targets. - - let proxyTarget = Object.create(target); - return new Proxy(proxyTarget, handlers); - }; - /** - * Creates a set of wrapper functions for an event object, which handles - * wrapping of listener functions that those messages are passed. - * - * A single wrapper is created for each listener function, and stored in a - * map. Subsequent calls to `addListener`, `hasListener`, or `removeListener` - * retrieve the original wrapper, so that attempts to remove a - * previously-added listener work as expected. - * - * @param {DefaultWeakMap} wrapperMap - * A DefaultWeakMap object which will create the appropriate wrapper - * for a given listener function when one does not exist, and retrieve - * an existing one when it does. - * - * @returns {object} - */ - - - const wrapEvent = wrapperMap => ({ - addListener(target, listener, ...args) { - target.addListener(wrapperMap.get(listener), ...args); - }, - - hasListener(target, listener) { - return target.hasListener(wrapperMap.get(listener)); - }, - - removeListener(target, listener) { - target.removeListener(wrapperMap.get(listener)); - } - - }); - - const onRequestFinishedWrappers = new DefaultWeakMap(listener => { - if (typeof listener !== "function") { - return listener; - } - /** - * Wraps an onRequestFinished listener function so that it will return a - * `getContent()` property which returns a `Promise` rather than using a - * callback API. - * - * @param {object} req - * The HAR entry object representing the network request. - */ - - - return function onRequestFinished(req) { - const wrappedReq = wrapObject(req, {} - /* wrappers */ - , { - getContent: { - minArgs: 0, - maxArgs: 0 - } - }); - listener(wrappedReq); - }; - }); - const onMessageWrappers = new DefaultWeakMap(listener => { - if (typeof listener !== "function") { - return listener; - } - /** - * Wraps a message listener function so that it may send responses based on - * its return value, rather than by returning a sentinel value and calling a - * callback. If the listener function returns a Promise, the response is - * sent when the promise either resolves or rejects. - * - * @param {*} message - * The message sent by the other end of the channel. - * @param {object} sender - * Details about the sender of the message. - * @param {function(*)} sendResponse - * A callback which, when called with an arbitrary argument, sends - * that value as a response. - * @returns {boolean} - * True if the wrapped listener returned a Promise, which will later - * yield a response. False otherwise. - */ - - - return function onMessage(message, sender, sendResponse) { - let didCallSendResponse = false; - let wrappedSendResponse; - let sendResponsePromise = new Promise(resolve => { - wrappedSendResponse = function (response) { - didCallSendResponse = true; - resolve(response); - }; - }); - let result; - - try { - result = listener(message, sender, wrappedSendResponse); - } catch (err) { - result = Promise.reject(err); - } - - const isResultThenable = result !== true && isThenable(result); // If the listener didn't returned true or a Promise, or called - // wrappedSendResponse synchronously, we can exit earlier - // because there will be no response sent from this listener. - - if (result !== true && !isResultThenable && !didCallSendResponse) { - return false; - } // A small helper to send the message if the promise resolves - // and an error if the promise rejects (a wrapped sendMessage has - // to translate the message into a resolved promise or a rejected - // promise). - - - const sendPromisedResult = promise => { - promise.then(msg => { - // send the message value. - sendResponse(msg); - }, error => { - // Send a JSON representation of the error if the rejected value - // is an instance of error, or the object itself otherwise. - let message; - - if (error && (error instanceof Error || typeof error.message === "string")) { - message = error.message; - } else { - message = "An unexpected error occurred"; - } - - sendResponse({ - __mozWebExtensionPolyfillReject__: true, - message - }); - }).catch(err => { - // Print an error on the console if unable to send the response. - console.error("Failed to send onMessage rejected reply", err); - }); - }; // If the listener returned a Promise, send the resolved value as a - // result, otherwise wait the promise related to the wrappedSendResponse - // callback to resolve and send it as a response. - - - if (isResultThenable) { - sendPromisedResult(result); - } else { - sendPromisedResult(sendResponsePromise); - } // Let Chrome know that the listener is replying. - - - return true; - }; - }); - - const wrappedSendMessageCallback = ({ - reject, - resolve - }, reply) => { - if (extensionAPIs.runtime.lastError) { - // Detect when none of the listeners replied to the sendMessage call and resolve - // the promise to undefined as in Firefox. - // See https://github.com/mozilla/webextension-polyfill/issues/130 - if (extensionAPIs.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) { - resolve(); - } else { - reject(new Error(extensionAPIs.runtime.lastError.message)); - } - } else if (reply && reply.__mozWebExtensionPolyfillReject__) { - // Convert back the JSON representation of the error into - // an Error instance. - reject(new Error(reply.message)); - } else { - resolve(reply); - } - }; - - const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => { - if (args.length < metadata.minArgs) { - throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`); - } - - if (args.length > metadata.maxArgs) { - throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`); - } - - return new Promise((resolve, reject) => { - const wrappedCb = wrappedSendMessageCallback.bind(null, { - resolve, - reject - }); - args.push(wrappedCb); - apiNamespaceObj.sendMessage(...args); - }); - }; - - const staticWrappers = { - devtools: { - network: { - onRequestFinished: wrapEvent(onRequestFinishedWrappers) - } - }, - runtime: { - onMessage: wrapEvent(onMessageWrappers), - onMessageExternal: wrapEvent(onMessageWrappers), - sendMessage: wrappedSendMessage.bind(null, "sendMessage", { - minArgs: 1, - maxArgs: 3 - }) - }, - tabs: { - sendMessage: wrappedSendMessage.bind(null, "sendMessage", { - minArgs: 2, - maxArgs: 3 - }) - } - }; - const settingMetadata = { - clear: { - minArgs: 1, - maxArgs: 1 - }, - get: { - minArgs: 1, - maxArgs: 1 - }, - set: { - minArgs: 1, - maxArgs: 1 - } - }; - apiMetadata.privacy = { - network: { - "*": settingMetadata - }, - services: { - "*": settingMetadata - }, - websites: { - "*": settingMetadata - } - }; - return wrapObject(extensionAPIs, staticWrappers, apiMetadata); - }; // The build process adds a UMD wrapper around this file, which makes the - // `module` variable available. - - - module.exports = wrapAPIs(chrome); - } else { - module.exports = globalThis.browser; - } -}); diff --git a/src/lib/webextension-polyfill/index.ts b/src/lib/webextension-polyfill/index.ts deleted file mode 100644 index b224a942..00000000 --- a/src/lib/webextension-polyfill/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { Browser } from 'webextension-polyfill'; - -// eslint-disable-next-line global-require -const browser = require('./browser') as Browser; - -export default browser; diff --git a/src/styles/_variables.scss b/src/styles/_variables.scss index 5c905000..988d6c39 100644 --- a/src/styles/_variables.scss +++ b/src/styles/_variables.scss @@ -162,6 +162,7 @@ --z-menu-backdrop: 199; --z-menu-bubble: 200; --z-notification: 250; + --z-tooltip: 300; html.is-ios { --layer-transition: 450ms cubic-bezier(0.33, 1, 0.68, 1); diff --git a/src/styles/brilliant-icons.css b/src/styles/brilliant-icons.css index 7654b69b..b6ad0bf2 100644 --- a/src/styles/brilliant-icons.css +++ b/src/styles/brilliant-icons.css @@ -1,7 +1,7 @@ @font-face { font-family: "brilliant-icons"; - src: url("./brilliant-icons.woff?1ba3fca65beb9674413d8a7bf95c7abd") format("woff"), -url("./brilliant-icons.woff2?1ba3fca65beb9674413d8a7bf95c7abd") format("woff2"); + src: url("./brilliant-icons.woff?85fd4716da9a2d25c4c708e31f43c267") format("woff"), +url("./brilliant-icons.woff2?85fd4716da9a2d25c4c708e31f43c267") format("woff2"); font-weight: normal; font-style: normal; } @@ -77,72 +77,81 @@ url("./brilliant-icons.woff2?1ba3fca65beb9674413d8a7bf95c7abd") format("woff2"); .icon-lock::before { content: "\f115"; } -.icon-paste::before { +.icon-params::before { content: "\f116"; } -.icon-pen::before { +.icon-paste::before { content: "\f117"; } -.icon-percent::before { +.icon-pen::before { content: "\f118"; } -.icon-plus::before { +.icon-percent::before { content: "\f119"; } -.icon-qrcode::before { +.icon-plus::before { content: "\f11a"; } -.icon-question::before { +.icon-qrcode::before { content: "\f11b"; } -.icon-receive-alt::before { +.icon-question::before { content: "\f11c"; } -.icon-receive::before { +.icon-receive-alt::before { content: "\f11d"; } -.icon-search::before { +.icon-receive::before { content: "\f11e"; } -.icon-send-alt::before { +.icon-replace::before { content: "\f11f"; } -.icon-send::before { +.icon-search::before { content: "\f120"; } -.icon-share::before { +.icon-send-alt::before { content: "\f121"; } -.icon-sort::before { +.icon-send::before { content: "\f122"; } -.icon-star-filled::before { +.icon-share::before { content: "\f123"; } -.icon-star::before { +.icon-sort::before { content: "\f124"; } -.icon-telegram::before { +.icon-star-filled::before { content: "\f125"; } -.icon-ton::before { +.icon-star::before { content: "\f126"; } -.icon-tonscan::before { +.icon-swap::before { content: "\f127"; } -.icon-trash::before { +.icon-telegram::before { content: "\f128"; } -.icon-update::before { +.icon-ton::before { content: "\f129"; } -.icon-windows-close::before { +.icon-tonscan::before { content: "\f12a"; } -.icon-windows-maximize::before { +.icon-trash::before { content: "\f12b"; } -.icon-windows-minimize::before { +.icon-update::before { content: "\f12c"; } +.icon-windows-close::before { + content: "\f12d"; +} +.icon-windows-maximize::before { + content: "\f12e"; +} +.icon-windows-minimize::before { + content: "\f12f"; +} diff --git a/src/styles/brilliant-icons.woff b/src/styles/brilliant-icons.woff index ac558552..4c6ab38a 100644 Binary files a/src/styles/brilliant-icons.woff and b/src/styles/brilliant-icons.woff differ diff --git a/src/styles/brilliant-icons.woff2 b/src/styles/brilliant-icons.woff2 index 50491723..8bdb971a 100644 Binary files a/src/styles/brilliant-icons.woff2 and b/src/styles/brilliant-icons.woff2 differ diff --git a/src/util/PostMessageConnector.ts b/src/util/PostMessageConnector.ts index 5a1d8ec8..63ca91bb 100644 --- a/src/util/PostMessageConnector.ts +++ b/src/util/PostMessageConnector.ts @@ -1,6 +1,3 @@ -import type { Runtime } from 'webextension-polyfill'; -import extension from '../lib/webextension-polyfill'; - import generateUniqueId from './generateUniqueId'; export interface CancellableCallback { @@ -91,7 +88,7 @@ class ConnectorClass { private requestStatesByCallback = new Map(); constructor( - public target: Worker | Window | Runtime.Port, + public target: Worker | Window | chrome.runtime.Port, private onUpdate?: (update: ApiUpdate) => void, private channel?: string, private targetOrigin = '*', @@ -232,7 +229,7 @@ export function createExtensionConnector( function connect() { // eslint-disable-next-line no-restricted-globals - const port = extension.runtime.connect({ name }); + const port = self.chrome.runtime.connect({ name }); port.onMessage.addListener((data: WorkerMessageData) => { connector.onMessage(data); diff --git a/src/util/account.ts b/src/util/account.ts index c9831d81..bb114d1d 100644 --- a/src/util/account.ts +++ b/src/util/account.ts @@ -1,13 +1,5 @@ import type { AccountIdParsed, ApiBlockchainKey, ApiNetwork } from '../api/types'; -export function genRelatedAccountIds(accountId: string): string[] { - const account = parseAccountId(accountId); - return [ - buildAccountId({ ...account, network: 'mainnet' }), - buildAccountId({ ...account, network: 'testnet' }), - ]; -} - export function parseAccountId(accountId: string): AccountIdParsed { const [ id, diff --git a/src/util/createPostMessageInterface.ts b/src/util/createPostMessageInterface.ts index a743db20..33b66dc1 100644 --- a/src/util/createPostMessageInterface.ts +++ b/src/util/createPostMessageInterface.ts @@ -1,5 +1,3 @@ -import extension from '../lib/webextension-polyfill'; - import { DETACHED_TAB_URL } from './ledger/tab'; import { logDebugError } from './logs'; @@ -44,7 +42,7 @@ export function createExtensionInterface( cleanUpdater?: (onUpdate: (update: ApiUpdate) => void) => void, withAutoInit = false, ) { - extension.runtime.onConnect.addListener((port) => { + chrome.runtime.onConnect.addListener((port) => { if (port.name !== portName) { return; } diff --git a/src/util/handleError.ts b/src/util/handleError.ts index bcde4f00..8589cd7b 100644 --- a/src/util/handleError.ts +++ b/src/util/handleError.ts @@ -1,12 +1,9 @@ -import { DEBUG_ALERT_MSG } from '../config'; +import { APP_ENV, DEBUG_ALERT_MSG } from '../config'; import { throttle } from './schedulers'; window.addEventListener('error', handleErrorEvent); window.addEventListener('unhandledrejection', handleErrorEvent); -// eslint-disable-next-line prefer-destructuring -const APP_ENV = process.env.APP_ENV; - function handleErrorEvent(e: ErrorEvent | PromiseRejectionEvent) { // https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded if (e instanceof ErrorEvent && e.message === 'ResizeObserver loop limit exceeded') { diff --git a/src/util/ledger/index.ts b/src/util/ledger/index.ts index a6b28630..059b6c8f 100644 --- a/src/util/ledger/index.ts +++ b/src/util/ledger/index.ts @@ -24,6 +24,7 @@ import { TON_TOKEN_SLUG } from '../../config'; import { callApi } from '../../api'; import { getWalletBalance } from '../../api/blockchains/ton'; import { TOKEN_TRANSFER_TON_AMOUNT, TOKEN_TRANSFER_TON_FORWARD_AMOUNT } from '../../api/blockchains/ton/constants'; +import { toBase64Address } from '../../api/blockchains/ton/util/tonweb'; import { ApiUserRejectsError } from '../../api/errors'; import { parseAccountId } from '../account'; import { range } from '../iteratees'; @@ -46,6 +47,18 @@ export async function importLedgerWallet(network: ApiNetwork, accountIndex: numb return callApi('importLedgerWallet', network, walletInfo); } +export async function reconnectLedger() { + try { + if (tonTransport && await tonTransport?.isAppOpen()) { + return true; + } + } catch { + // do nothing + } + + return await connectLedger() && await waitLedgerTonApp(); +} + export async function connectLedger() { try { transport = await connectHID(); @@ -132,11 +145,15 @@ export async function submitLedgerTransfer(options: ApiSubmitTransferOptions) { ]); let payload: TonPayloadFormat | undefined; + let isBounceable = Address.parseFriendly(toAddress).isBounceable; + // Force default bounceable address for `waitTxComplete` to work properly + const normalizedAddress = toBase64Address(toAddress); if (slug !== TON_TOKEN_SLUG) { ({ toAddress, amount, payload } = await buildLedgerTokenTransfer( network, slug, fromAddress!, toAddress, amount, comment, )); + isBounceable = true; } else if (comment) { if (isValidLedgerComment(comment)) { payload = { type: 'comment', text: comment }; @@ -151,7 +168,7 @@ export async function submitLedgerTransfer(options: ApiSubmitTransferOptions) { sendMode: SendMode.PAY_GAS_SEPARATELY + SendMode.IGNORE_ERRORS, seqno: seqno!, timeout: getTransferExpirationTime(), - bounce: IS_BOUNCEABLE, + bounce: isBounceable, amount: BigInt(amount), payload, }); @@ -162,7 +179,7 @@ export async function submitLedgerTransfer(options: ApiSubmitTransferOptions) { params: { amount: options.amount, fromAddress: fromAddress!, - toAddress: options.toAddress, + toAddress: normalizedAddress, comment, fee: fee!, slug, @@ -238,6 +255,7 @@ export async function signLedgerTransactions( toAddress, amount, payload, } = message; + let isBounceable = IS_BOUNCEABLE; let ledgerPayload: TonPayloadFormat | undefined; switch (payload?.type) { @@ -264,6 +282,7 @@ export async function signLedgerTransactions( forwardPayload, } = payload; + isBounceable = true; ledgerPayload = { type: 'nft-transfer', queryId: BigInt(queryId), @@ -288,6 +307,7 @@ export async function signLedgerTransactions( forwardPayload, } = payload; + isBounceable = true; ledgerPayload = { type: 'jetton-transfer', queryId: BigInt(queryId), @@ -313,7 +333,7 @@ export async function signLedgerTransactions( sendMode: SendMode.PAY_GAS_SEPARATELY + SendMode.IGNORE_ERRORS, seqno: seqno! + index, timeout: getTransferExpirationTime(), - bounce: IS_BOUNCEABLE, + bounce: isBounceable, amount: BigInt(amount), payload: ledgerPayload, }; @@ -406,6 +426,12 @@ export function getLedgerWalletAddress(index: number, isBounceable: boolean, isT }); } +export async function verifyAddress(accountId: string) { + const path = await getLedgerAccountPath(accountId); + + await tonTransport!.validateAddress(path, { bounceable: IS_BOUNCEABLE }); +} + async function getLedgerAccountPath(accountId: string) { const accountInfo = await callApi('fetchAccount', accountId); const index = accountInfo!.ledger!.index; diff --git a/src/util/ledger/tab.ts b/src/util/ledger/tab.ts index 41dcb262..bb5d75bc 100644 --- a/src/util/ledger/tab.ts +++ b/src/util/ledger/tab.ts @@ -1,5 +1,3 @@ -import extension from '../../lib/webextension-polyfill'; - export const DETACHED_TAB_URL = '#detached'; export function openLedgerTab() { @@ -7,7 +5,7 @@ export function openLedgerTab() { } export function onLedgerTabClose(id: number, onClose: () => void) { - extension.tabs.onRemoved.addListener((closedTabId: number) => { + chrome.tabs.onRemoved.addListener((closedTabId: number) => { if (closedTabId !== id) { return; } @@ -17,7 +15,7 @@ export function onLedgerTabClose(id: number, onClose: () => void) { } async function createLedgerTab() { - const tab = await extension.tabs.create({ url: `index.html${DETACHED_TAB_URL}`, active: true }); - await extension.windows.update(tab.windowId!, { focused: true }); + const tab = await chrome.tabs.create({ url: `index.html${DETACHED_TAB_URL}`, active: true }); + await chrome.windows.update(tab.windowId!, { focused: true }); return tab.id!; } diff --git a/src/util/safeNumberToString.ts b/src/util/safeNumberToString.ts new file mode 100644 index 00000000..d4e06447 --- /dev/null +++ b/src/util/safeNumberToString.ts @@ -0,0 +1,10 @@ +import { Big } from '../lib/big.js/index.js'; + +export default function safeNumberToString(value: number, decimals: number) { + const result = String(value); + if (result.includes('e-')) { + Big.NE = -decimals - 1; + return new Big(result).toString(); + } + return result; +} diff --git a/src/util/windowEnvironment.ts b/src/util/windowEnvironment.ts index 9ab59f09..7688494f 100644 --- a/src/util/windowEnvironment.ts +++ b/src/util/windowEnvironment.ts @@ -82,3 +82,5 @@ export function setPageSafeAreaProperty() { } }, SAFE_AREA_INITIALIZATION_DELAY); } + +export const REM = parseInt(getComputedStyle(document.documentElement).fontSize, 10); diff --git a/webpack.config.ts b/webpack.config.ts index 72f47db6..99891914 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -33,6 +33,23 @@ const appRevision = !branch || branch === 'HEAD' ? gitRevisionPlugin.commithash( const STATOSCOPE_REFERENCE_URL = 'https://mytonwallet.app/build-stats.json'; let isReferenceFetched = false; +// The `connect-src` rule contains `https:` due to arbitrary requests are needed for jetton JSON configs. +// The `img-src` rule contains `https:` due to arbitrary image URLs being used as jetton logos. +// The `media-src` rule contains `data:` because of iOS sound initialization. +const CSP = ` + default-src 'none'; + manifest-src 'self'; + connect-src 'self' https:; + script-src 'self' 'wasm-unsafe-eval'; + style-src 'self' https://fonts.googleapis.com/; + img-src 'self' data: https:; + media-src 'self' data:; + object-src 'none'; + base-uri 'none'; + font-src 'self' https://fonts.gstatic.com/; + form-action 'none';` + .replace(/\s+/g, ' ').trim(); + const appVersion = require('./package.json').version; const defaultI18nFilename = path.resolve(__dirname, './src/i18n/en.json'); @@ -48,9 +65,23 @@ export default function createConfig( target: 'web', optimization: { + usedExports: true, splitChunks: { - chunks: 'initial', - maxSize: 4194304, // 4 Mb + chunks: 'all', + cacheGroups: { + extensionVendors: { + test: /[\\/]node_modules[\\/](webextension-polyfill)/, + name: 'extensionVendors', + chunks: 'all', + priority: 10, // For some reason priority is required here in order to bundle extensionVendors.js separately + }, + defaultVendors: { + test: /[\\/]node_modules[\\/]/, + name: 'vendors', + chunks: 'all', + priority: 0, + }, + }, }, }, @@ -77,6 +108,9 @@ export default function createConfig( devMiddleware: { stats: 'minimal', }, + headers: { + 'Content-Security-Policy': CSP, + }, }, watchOptions: { ignored: defaultI18nFilename }, @@ -184,6 +218,7 @@ export default function createConfig( new HtmlPlugin({ template: 'src/index.html', chunks: ['main'], + csp: CSP, }), new PreloadWebpackPlugin({ include: 'allAssets', @@ -244,6 +279,9 @@ export default function createConfig( transform: (content) => { const manifest = JSON.parse(content.toString()); manifest.version = appVersion; + manifest.content_security_policy = { + extension_pages: CSP, + }; if (IS_FIREFOX_EXTENSION) { manifest.background = {